php - 确定重叠地理区域的算法

标签 php map geospatial

我有一个点的纬度和经度,然后我使用半径计算圆以给出一个范围。我还有一个地理区域(在本例中是一个州)的纬度和经度范围。我试图找出圆的任何区域是否与任何区域相交。

基本上,我正在寻找的最终结果是,如果一个点(地理编码地址)在任何州的 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/

相关文章:

algorithm - 计算地理坐标的边界框

php - 使用 number_format 将发布的值转换为十进制

php - 为类似 eBay 的 Web 应用程序设计数据库

javascript - 在设定的时间向下滚动聊天,但在用户交互时停用

c++ - map 内存泄漏

c++访问映射中数组的元素

php - 使用 GD 在图像上写入文本不起作用

scala - 如何在 Scala 中打印 map

elasticsearch - 在geo_shape查询elasticsearch中查找多边形

mysql - 多边形中的点 : Invalid GIS data provided to function st_within