百度地圖 SDK 定位成功後,默認縮放級別對應 5 公里範圍,過大不適合精確展示。需在定位回調中強制設置縮放級別至 100 米左右。
利用 MapStatusUpdateFactory.newLatLngZoom(LatLng, zoom) 設置中心點與縮放級別。getMaxZoomLevel() 返回最大級別(19,約 20 米),減去 2 即約 100 米。
public void onReceiveLocation(BDLocation location) {
if (location == null || mMapView == null) return;
// 構建定位數據
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(100)
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.build();
mBaiduMap.setMyLocationData(locData);
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
float maxZoom = mBaiduMap.getMaxZoomLevel(); // 19.0
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, maxZoom - 2); // 目標級別 ~17
mBaiduMap.animateMapStatus(u); // 帶動畫平滑移動
}
getMaxZoomLevel():最大縮放級別(最細節),對應約 20 米。getMinZoomLevel():最小縮放級別(最廣域),對應約 1000 公里。newLatLngZoom:同時設置中心點與縮放級別。animateMapStatus:動畫過渡,體驗優於 setMapStatus。定位後地圖自動聚焦到約 100 米範圍,街道、建築物清晰可見,滿足精確展示需求。