题目:已知圆点的经纬度坐标 [ longitude, latitude ] ,以3公里为半径画一个正六边形,画出六边形
思路:将经纬度坐标转化为平面坐标,在平面坐标上求六个点的坐标,最后将平面坐标转为经纬度坐标
实现:最后的计算单位都相应转化为米
1. 经纬度坐标转化为米
#获取当前的 “米/像素” 的转化比例
var per = map.getResolution(point); // 获取单位 米/像素
#将经纬度坐标转成“像素”var toPx = map.lnglatToPixel(point, zoom); //转换像素 #根据像素以及比例 转成“米”单位 var centerX = per * toPx.getX(); //将像素转化为米 var centerY = per * toPx.getY(); |
2. 根据圆心位置求出六个平面点的坐标(先不考虑浮点数计算的问题)
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. 将六个平面坐标转为经纬度坐标
#获取当前地图的缩放比例 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. 展示六边形
let polygon = new AMap.Polygon({ #创建编辑对象 var editor = new AMap.PolyEditor(map, polygon); editor.open();
|
原文:http://www.cnblogs.com/nalixueblog/p/6291227.html