我需要找到距离某个特定点约50公里的任何点。我该怎么做?
答案 0 :(得分:1)
这将使你非常接近,它基于方程和可用的示例代码here:
window.pointsAround = function(centerLat, centerLng, radius) {
var result = [];
//do annoying trig maths to work out the delta in latitude between our start and end points
var targetD = radius; //km
var R = 6371; //km
var c = (targetD / R) / 2;
var sqrtA = Math.sin(c);
var a = sqrtA * sqrtA;
var sinHalfDLat = Math.sqrt(a);
var dLat = Math.asin(sinHalfDLat) * 2;
var dLatDegrees = ((dLat / (2 * Math.PI)) * 360);
var minLat = centerLat - dLatDegrees; //furthest valid latitude above the origin
var maxLat = centerLat + dLatDegrees; //furthest valid latitude below the origin
//alert("minLat=" + minLat + ", maxLat=" + maxLat + ", dLat=" + dLat + ", dLatDegrees=" + dLatDegrees);
//topmost and bottommost points in the circle
result.push({lat: minLat, lng: centerLng});
result.push({lat: maxLat, lng: centerLng});
//step from minLat to maxLat, interpolating coordinates that lie upon the circle
var step = (maxLat - minLat) / 180.0;
for (var count = 0; count < 179; count++) {
minLat += step;
dLat = (centerLat - minLat) * Math.PI / 180;
//more annoying trig to work out the delta in longitude for our interpolated coordinate
var dLon = 2 * Math.asin(Math.sqrt((a - (Math.sin(dLat/2) * Math.sin(dLat/2))) / (Math.cos(minLat) * Math.cos(centerLat))));
var dLonDegrees = ((dLon / (2 * Math.PI)) * 360);
var newLng = centerLng + dLonDegrees;
var deltaLng = newLng - centerLng;
result.push({lat: minLat, lng: newLng});
result.push({lat: minLat, lng: centerLng - deltaLng});
}
return result;
};
对于可怕的变量名称感到抱歉,正如我所说,它们基于使用相同名称的示例实现。
以下是一个工作示例:http://jsfiddle.net/HmchC/8/
情节比我想要的更椭圆,但是。那就像我现在所能得到的那样近。
<强>更新强>
我用椭圆绘图解决了这个问题,它只是缺少从度数到弧度的转换。数学人什么时候才能知道只有学位才有意义?
无论如何,这里有一个工作示例:http://jsfiddle.net/HmchC/11/
答案 1 :(得分:0)
如果你有一个已知的点(已知纬度和长度)并且位于已知点周围50公里圆周上的点的纬度和经度之后?
无论如何我是怎么看的......我想你可以用一些数学来做这件事。恒定距离(如公里)将等同于纬度/经度的恒定变化,您可以计算和定义。它会变得棘手的是确定这个变化应用于纬度和长度多少,我想你可以使用指南针轴承,如果设备支持一个
编辑:假设我们对您的要求是正确的,那么Aroth评论中的链接可以帮助您
答案 2 :(得分:0)
您想要查找harvesine公式或空间填充曲线或空间索引。 harvesine公式计算2个圆的碰撞,空间填充曲线递归地将地图细分为图块。它看起来像四叉树,它将2d复杂度降低到1d复杂度。您希望查找唯一的键或象限来查找近点。你想看看尼克的希尔伯特曲线空间索引四叉树博客。