百度了很多文章作用不大,都是满足不了我的要求,我的要求时这样的:
多个marker要全部显示在地图上,所以地图会有一个合适的缩放。然后无论对地图缩放拖动,只要点击一个按钮就会回到原来的状态:就是适合的缩放显示所有marker。
一开始的思路:在第一次显示所有点的时候通过监听获取到中心坐标,结果每次都是中心点都是北京的,不合适。
然后就换思路,取得所有点中的最大最小经纬度,得到一个矩形的中心点就是要回到的点。
最后就是缩放级别,这个可以在所有点显示的时候获取到,然后就可以了。
关键代码:
private fun getCenterPoint() {
if (markers.size > 0) {//markers为LatLng集合,包含了所有点的经纬度
var minLatitude = 90.0
var maxLatitude = 0.0
var minLongitude = 180.0
var maxLongitude = 0.0
for (point in markers) {
if (point.latitude < minLatitude) {
minLatitude = point.latitude
}
if (point.longitude < minLongitude) {
minLongitude = point.longitude
}
if (point.latitude > maxLatitude) {
maxLatitude = point.latitude
}
if (point.longitude > maxLongitude) {
maxLongitude = point.longitude
}
}
centerPoint = LatLng(minLatitude+(maxLatitude-minLatitude)/2, minLongitude+(maxLongitude-minLongitude)/2)
}
}
zoomLevel = bmapView.map?.mapStatus?.zoom//在适当的时候获取它
private fun gotoCenterPoint() {
if (centerPoint != null) {
val builder = MapStatus.Builder()
builder.target(centerPoint).zoom(zoomLevel?: 0.0F)
bmapView.map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()))
}
}
//通过此方法,无论缩放多少,拖放到任何位置,只要调用这个方法就会回到原来的状态