如何删除谷歌地图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))
}
}
}