我有一个点的纬度和经度,使用半径计算出一个圆圈范围。我还有地理区域(在本例中是州)的纬度和经度边界。我想知道圆的任何区域是否与任何地区相交。
基本上我想要的结果是,如果一个点(地理编码地址)距离任何一个州的中心小于x英里,那么它将返回该州。
我相信有一种算法可以找到这个,但我不知道从哪里开始寻找。
基本上我想要的结果是,如果一个点(地理编码地址)距离任何一个州的中心小于x英里,那么它将返回该州。
我相信有一种算法可以找到这个,但我不知道从哪里开始寻找。
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;
public boolean intersects(Geometry g)
我对PHP不是很了解,所以无法告诉您是否有类似的PHP库。
这些几何图形来自哪里?如果您的几何图形存储在像PostGIS这样的数据库中,您也可以尝试调用一些底层函数,例如数据库调用。
http://en.wikipedia.org/wiki/Quad_tree
这是任何类型的二维空间关系相关问题的绝佳起点。
如果您想确定一个点是否在圆内,可以使用勾股定理。在下面的代码中,传递您的圆的centre_x、centre_y和半径,然后是您要评估的点的x、y坐标。
def in_circle(centre_x, centre_y, radius, x, y):
square_dist = (centre_x - x) ** 2 + (centre_y - y) ** 2
return square_dist <= radius ** 2