已知圆中心点经纬度和半径,求圆边360°经纬度?-灵析社区

ZZZ葡萄皮

在网上查询过,写出来一个示例,能计算出来,但是不够精细,半径越大倒是没问题,小了就不行了,不太懂这个坐标计算,请教各位[抱拳] **借鉴的代码** /** * 计算圆边坐标 * @param {Array} lnglat 经纬度坐标数组 * @param {number} radius 半径 */ function computedCircle(lnglat, radius) { let r = 6371000.79 let phase = 2 * Math.PI / 360 let point = [] for (let i = 0; i < 360; i++) { let dx = radius * Math.cos(i * phase) let dy = radius * Math.sin(i * phase) let lng = dx / (r * Math.cos(lnglat[1] * Math.PI / 180) * Math.PI / 180) let lat = dy / (r * Math.PI / 180) let newLng = lnglat[0] + lng point.push([newLng, lnglat[1] + lat]) } return point } **半径一百** ![](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250103/d4cba36f837bfa6a4a65ae9a6eb7c83a.png) **半径一千** ![](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250103/d5e78abc5e804c9652347bcfd18cd07c.png) 上面用的的高德的遮罩 Polygon ,然后在中间扣出一个圆

阅读量:297

点赞量:12

问AI
也参考了楼主的计算方法,的确小半径时有锯齿。同事给我提供了另一种算法,可行。 /** * 计算多边形内圈镂空圆坐标 * @param center 中心点坐标 * @param radius 半径,单位米 */ const computedCircle = (center: { latitude: number; longitude: number }, radius: number) => { const latRadian = (center.latitude * Math.PI) / 180 const lonRadian = (center.longitude * Math.PI) / 180 const distance = radius / 1000 / 6371 // 坐标点数 const accuracy = 40 let point = [] // 内圈坐标顺序自调 for (let i = 0; i < accuracy; i++) { const bearing = (360 / accuracy * i * Math.PI) / 180.0 let lat = Math.asin( Math.sin(latRadian) * Math.cos(distance) + Math.cos(latRadian) * Math.sin(distance) * Math.cos(bearing), ) let lon = lonRadian + Math.atan2( Math.sin(bearing) * Math.sin(distance) * Math.cos(latRadian), Math.cos(distance) - Math.sin(latRadian) * Math.sin(lat), ) lon = ((lon + 3 * Math.PI) % (2 * Math.PI)) - Math.PI lat = (lat * 180) / Math.PI lon = (lon * 180) / Math.PI point.push({ latitude: lat, longitude: lon, }) } // 加入第一个坐标点,形成闭环 point.push(point[0]) return point }