高德地圖設定可視區域邊界
阿新 • • 發佈:2019-01-21
剛好專案中涉及到地圖的可視區域,這裡做一下彙總
1、方法介紹
public LatLngBounds.Builder include(LatLng point)
返回一個新的矩形區域。新區域是根據傳入的經緯度對原有區域進行最小的擴充套件。
public LatLngBounds(LatLng southwest,LatLng northeast)
使用傳入的西南角座標和東北角座標建立一個矩形區域。
2、示例程式碼
2.1通過include來設定可視區域
LatLngBounds bounds = new LatLngBounds.Builder()
.include (latlng1).include(latlng2).include(latlng3)
.include(latlng4).include(latlng5).include(latlng6)
.include(latlng7).include(latlng8).include(latlng9)
.include(latlng10).build();
// 移動地圖,所有latlng自適應顯示。LatLngBounds與地圖邊緣10畫素的填充區域
aMap.moveCamera(CameraUpdateFactory.newLatLngBounds (bounds, 10));
2.2通過西南角座標和東北角座標來設定可視區域
/**
* 已知一點的經緯度和該點到另一點的距離、角度,求另一點的經緯度
* @param distance 千米
* @param latlngA
* @param angle 角度
* @return
*/
public static LatLng getLatlng(float distance, LatLng latlngA, double angle) {
return new LatLng(latlngA.latitude + (distance * Math.cos(angle * Math.PI / 180 )) / 111,
latlngA.longitude + (distance * Math.sin(angle * Math.PI / 180)) / (111 * Math.cos(latlngA.latitude * Math.PI / 180))
);
}
float dist = 60; //km
float dealDist = dist / Math.sin(45 * Math.PI / 180); //km
LatLng center = aMap.getCameraPosition().target;
LatLng northeast = getLatlng(dealDist, center, 45);
LatLng southwest = getLatlng(dealDist, center, 225);
LatLngBounds latLngBounds = new LatLngBounds(southwest, northeast);
aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 10));
理論上以center為中心、dist為半徑畫一個圓就能覆蓋我們的可視區域,但是LatLngBounds建立的是一個矩形區域。我們需要建立一個下圖所示的矩形區域。