高德地图画正六边形

本文介绍了一种基于经纬度坐标绘制3公里半径的正六边形的方法。通过将经纬度转换为平面坐标,计算六个顶点的位置,再转换回经纬度坐标,最终在地图上展示六边形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:已知圆点的经纬度坐标 [ 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,
y = cur.y / 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({
path: path,
strokeColor: 'red',
strokeOpacity: 1,
strokeWeight: 3,
fillColor: 'red',
fillOpacity: 0.45
});
polygon.setMap(map);
#创建编辑对象
var editor = new AMap.PolyEditor(map, polygon); 
editor.open();

转载于:https://www.cnblogs.com/nalixueblog/p/6291227.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值