我有一个点的纬度和经度,然后我使用半径计算圆以给出一个范围。我还有一个地理区域(在本例中是一个州)的纬度和经度范围。我试图找出圆的任何区域是否与任何区域相交。
基本上,我正在寻找的最终结果是,如果一个点(地理编码地址)在任何州的 x 英里范围内,它将返回该州。
我确定有某种算法可以找到它,但我不知道从哪里开始寻找。
最佳答案
使用 Haversine formula :
a = sin²(Δlat/2) + cos(lat1)*cos(lat2)*sin²(Δlong/2)
c = 2*atan2(√a, √(1−a))
d = R*c
JavaScript:
var R = 6371; // km
var dLat = (lat2-lat1)*Math.PI / 180;
var dLon = (lon2-lon1)*Math.PI / 180;
var lat1 = lat1*Math.PI / 180;
var lat2 = lat2*Math.PI / 180;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
这将为您提供任意两点之间的大圆距离。其余的取决于您如何代表各州。
关于php - 确定重叠地理区域的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030981/