如何删除谷歌地图android中的跳线

如何删除谷歌地图android中的跳线,android,google-maps,kotlin,polyline,Android,Google Maps,Kotlin,Polyline,我正在根据用户位置的纬度和经度绘制多段线,但该线正在跳跃并连接我开始绘制地图的位置 获取位置更新 private fun getLocationUpdates() { mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext()) mLocationRequest = LocationRequest() mLocationRequest.interval =

我正在根据用户位置的纬度和经度绘制多段线,但该线正在跳跃并连接我开始绘制地图的位置

获取位置更新

 private fun getLocationUpdates() {

 mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext())
 mLocationRequest = LocationRequest()
 mLocationRequest.interval = 5000
 mLocationRequest.fastestInterval = 1000
 //        mLocationRequest.smallestDisplacement = 170f // 170 m = 0.1 mile
 mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY //set according to your app function
 locationCallback = object: LocationCallback() {
     override fun onLocationResult(locationResult: LocationResult ? ) {
         locationResult ? : return

         if (locationResult.locations.isNotEmpty()) {
             // get latest location
             val location =
                 locationResult.lastLocation
             onNewLocation(location)
             // use your location object
             // get latitude , longitude and other info from this
         }


     }
 } }
在newlocation方法中,我将latlong添加到列表中

    private fun onNewLocation(location: Location) {
    Log.i(sarath, "New location: $location")
    mLastKnownLocation = location
    if (!mInitialZoom && location != null)
        initialZoom(location)
    if (isLocationUpdateStarted) {
        if (location != null) {
            mLatLngCollection.add(LatLng(location.latitude, location.longitude))
        }
        addPoly()
    }
}
向多段线或多边形添加LatLong

    private fun addPoly() {
    if (mLatLngCollection.size != 0) {
        if (mIsPolygon) {
            mPolygonOptions.addAll(mLatLngCollection)
            mPolygonOptions.strokeWidth(7 f)
            mPolygonOptions.strokeColor(Color.BLUE)
            mPolygonOptions.fillColor(Color.CYAN)
            mMap.addPolygon(mPolygonOptions)
        } else {
            mPolylineOptions.addAll(mLatLngCollection)
            mMap.addPolyline(mPolylineOptions)
        }
    }
}


但是,当我存储该lat long时,如果我检索到它并将其加载到google map polyline,则表示我得到的是一条直线
为什么从起始点跳到活动位置的当前位置
以及如何修复此问题,绘制合适的多段线有什么帮助吗?

有两点可以解释您的结果-我以多段线为例,但也适用于多边形:

(1) 实时:继续将点(当前报告的位置)添加到列表中,然后将整个列表添加为新的多段线。因此,假设报告的位置已编号(1,2,3…),则在10次位置更新后,将有10条多段线,包括:

PL1  = (1)
PL2  = (1,2)
PL3  = (1,2,3)
PL4  = (1,2,3,4)
PL5  = (1,2,3,4,5)
PL6  = (1,2,3,4,5,6)
PL7  = (1,2,3,4,5,6,7)
PL8  = (1,2,3,4,5,6,7,8)
PL9  = (1,2,3,4,5,6,7,8,9)
PL10 = (1,2,3,4,5,6,7,8,9,10)
要解决此问题,您有两个选择—但首先,在添加多段线(或多边形)时,请将结果保存在变量中:

mAddedPolyLine = mMap.addPolyline(mPolylineOptions)
因此,第一种选择是继续使用更新的位置替换多段线的点(这将覆盖(集),并且不是相加的)

或者,第二种选择是删除多段线并重新添加:

mAddedPolyline.remove()
// then add as above
(这将删除以前的多段线,并在每次更新时添加新的多段线。)

保存:假设您保存了最后一个latlng列表,并在重新启动时添加了它,那么它将是P10(从上面开始),这是一个列表(测量仍然不稳定-请参阅下一步)

(2) 其次,测线布局不规则是测量噪音的结果。要量化它,请使用location.getAccurance()(以米为单位)-它可能大于10


如何克服测量噪声?平滑是一种方法,或者再次使用精度值和一些视觉辅助(如地图上的模糊蓝点,它会随着噪音的增加而变大。)

此代码解决了我的跳跃问题。谢谢@Andy

private fun addPoly() {
  if (mLatLngCollection.size != 0) {
    if (mIsPolygon) {
      mMap.addPolygon(PolygonOptions().addAll(mLatLngCollection).strokeWidth(7f).strokeColor(Color.GREEN).fillColor(Color.YELLOW))
    } else {
      mPolylineOptions.addAll(mLatLngCollection)
      mMap.addPolyline(
      PolylineOptions().addAll(mLatLngCollection).width(7f).color(Color.GREEN))
    }
  }
}
private fun addPoly() {
  if (mLatLngCollection.size != 0) {
    if (mIsPolygon) {
      mMap.addPolygon(PolygonOptions().addAll(mLatLngCollection).strokeWidth(7f).strokeColor(Color.GREEN).fillColor(Color.YELLOW))
    } else {
      mPolylineOptions.addAll(mLatLngCollection)
      mMap.addPolyline(
      PolylineOptions().addAll(mLatLngCollection).width(7f).color(Color.GREEN))
    }
  }
}