1. 程式人生 > >高德地圖設定可視區域邊界

高德地圖設定可視區域邊界

剛好專案中涉及到地圖的可視區域,這裡做一下彙總

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建立的是一個矩形區域。我們需要建立一個下圖所示的矩形區域。
這裡寫圖片描述

本人更加推薦用第二種方法來設定可視區域