如何删除 google 地图 android 中的跳线

how to remove jumping lines in google maps android

我正在根据用户位置的纬度和经度绘制折线,但该线正在跳跃并连接我启动地图的位置。

获取位置更新

 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
         }


     }
 } }

在新定位方法中,我将 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 地图折线意味着我得到一条线。 why it is jumping from starting point to the current location at live location and how to fix this, 对画出像样的折线有什么帮助吗?

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

(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.setPoints(mLatLngCollection)

或者,第二个选择是删除折线并重新添加:

mAddedPolyline.remove()
// then add as above

(这会删除以前的多段线并在每次更新时添加一条新多段线。)

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

(2)

其次,你的线路布局不稳定是测量噪音的结果。要对其进行量化,请使用 location.getAccuracy()(以米为单位)- 它可能 > 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))
    }
  }
}