查询一个地理编码位置(纬度/经度)周围的范围

3

如何在特定范围内搜索地理对象?例如,我的数据库中存储有多个具有纬度/经度坐标的对象。现在我想检索所有位于给定点周围特定范围(10英里或20英里)内的对象。

我猜我需要构建一个类似于以下查询:

SELECT * FROM objects o where o.lat < (myPositionLat+x) AND o.lon < (myPositionLon+y)

这样对吗?我怎么确定/设置x和y的值呢?

1个回答

3
你需要记住经度之间的距离不是恒定的。纬度的度数是平行的,大约相隔111公里(69英里),但经度的度数在赤道最宽,大约为111公里,并逐渐收敛到极点为零。
在北纬或南纬40°时,经度之间的距离约为85公里(53英里),而纬度之间的距离仍大约为111公里。如果你的地理对象只限于某个特定区域,并且可以接受非常粗略的过滤器,则可以使用此信息来确定你的x和y偏移量。来源:{{link1}}。
然而,如果你的对象分布在全球各地较为稀疏,你应该计算大圆距离。幸运的是,使用哈弗赛公式相对容易。你可能需要阅读更多内容,并查看由Chris Veness提供的实现计算经纬度点之间的距离、方位角等
如果你只有少量的地理对象,可以简单地计算从你的点到每个地理对象的大圆距离。然后,只需按距离对结果列表进行排序,并以英里或千米为单位进行过滤。
然而,如果您将使用许多地理对象,您应该考虑使用具有空间索引功能的数据库。 MySQLPostgreSQLSQL Server 2008都具有地理空间特性(本地或通过扩展),包括空间索引和haversine公式的实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接