題目:已知圓點的經緯度座標 [ longitude, latitude ] ,以3千米爲半徑畫一個正六邊形,畫出六邊形git
思路:將經緯度座標轉化爲平面座標,在平面座標上求六個點的座標,最後將平面座標轉爲經緯度座標app
實現:最後的計算單位都相應轉化爲米code
1. 經緯度座標轉化爲米 對象
#獲取當前的 「米/像素」 的轉化比例
var per = map.getResolution(point); // 獲取單位 米/像素
#將經緯度座標轉成「像素」var toPx = map.lnglatToPixel(point, zoom); //轉換像素 #根據像素以及比例 轉成「米」單位 var centerX = per * toPx.getX(); //將像素轉化爲米 var centerY = per * toPx.getY(); |
2. 根據圓心位置求出六個平面點的座標(先不考慮浮點數計算的問題)ci
var pointNum = []; pointNum.push({x: centerX, y: centerY + radius}, {x: centerX + sin60, y: centerY + cos60}, {x: centerX + sin60, y: centerY - cos60}, {x: centerX, y: centerY - radius}, {x: centerX - sin60, y: centerY - cos60}, {x: centerX - sin60, y: centerY + cos60}); |
3. 將六個平面座標轉爲經緯度座標get
#獲取當前地圖的縮放比例 var zoom = map.getZoom(); var path = []; pointNum.map((cur, index) => { #將 「米」 轉化 「像素」單位 var x = cur.x / per, #將平面座標轉經緯度座標 pointNum[index] = map.pixelToLngLat(new AMap.Pixel(x, y), zoom); #獲取轉化後的經度、緯度,並保存 path.push([pointNum[index].getLng(), pointNum[index].getLat()]); |
4. 展現六邊形it
let polygon = new AMap.Polygon({ #建立編輯對象 var editor = new AMap.PolyEditor(map, polygon);
editor.open();
|