如何删除 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))
}
}
}
我正在根据用户位置的纬度和经度绘制折线,但该线正在跳跃并连接我启动地图的位置。
获取位置更新
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))
}
}
}