以下是我想要的结果
我想知道的是:
我使用中心点lat lang和它周围的半径创建了圆。现在我想知道,如果你可以在Javascript中给我代码示例,如何检查(计算)纬度和经度是否在该区域内部或外部我将不胜感激。我正在使用Google Maps API V3。
我找到了这个功能,但没有按预期工作:
function arePointsNear(checkPoint, centerPoint) {
var sw = new google.maps.LatLng(centerPoint.lat() - 0.005, centerPoint.lng() - 0.005);
var ne = new google.maps.LatLng(centerPoint.lat() + 0.005, centerPoint.lng() + 0.005);
var bounds = new google.maps.LatLngBounds(sw, ne);
if (bounds.contains (checkPoint)){
return true;
}
return false;
}
任何帮助都会很棒..提前感谢!!
答案 0 :(得分:18)
对于如此短的距离,并且当精度不必精确到厘米时,您可以将地球表面视为平坦的。计算中心点纬度从度数到千米的转换,然后Pythagoran theorem可用于获取实例:
function arePointsNear(checkPoint, centerPoint, km) {
var ky = 40000 / 360;
var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
return Math.sqrt(dx * dx + dy * dy) <= km;
}
演示:http://jsfiddle.net/Guffa/57gQa/
注意:如果您通过0/360经度,则代码不会考虑。如果是这种情况,你首先必须规范经度。
答案 1 :(得分:1)
您需要的只是一点点spherical trig
首先,您需要距离(L = 10 km)所对应的arc的中心角θ。
L = theta*r
其中r是地球的半径(6378.135 km)
现在,如果感兴趣点和您的中心点之间的中心角是<1。 theta,它在你的圈子里面。将此角度称为theta_p。
这是一个说明球形三角形的图表: spherical triangle image http://en.wikipedia.org/wiki/File:Spherical_trigonometry_basic_triangle.svg
编辑 - 抱歉,显然我不知道如何链接到图像?这是网址: http://en.wikipedia.org/wiki/File:Spherical_trigonometry_basic_triangle.svg
在这种情况下,球形三角形的两个边(称为 a,b )分别是经度的差异和纬度的差异。夹角 C 为90度(经度线与纬线之间的角度。
余弦的球面三角定律是:
cos(c) = cos(a)*cos(b) + sin(a)*sin(b)*cos(C)
c 是你的点之间的中心角,我们之前称之为theta_p
编辑 - 这个解决方案并不局限于地球半径的小距离WRT,正如其他建议一样。
答案 2 :(得分:0)
使用毕达哥拉斯定理进行验证。从中心到要验证的点的距离可以计算为三角形的斜边。