查询地理编码位置周围的周边(Lat / Lon)

时间:2010-05-03 18:59:56

标签: sql google-maps distance geocode

如何搜索某个周边的地理对象?例如。我有几个Lat / Lon坐标存储在我的数据库中的对象。现在我想要检索位于给定点周围特定边界(10英里或20英里)的所有对象。

我想我要做的是形成一些查询,如:

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

这是对的吗?如何确定/设置x和y的值?

1 个答案:

答案 0 :(得分:1)

你必须记住经度之间的距离不是恒定的。纬度平行并且相距大约111公里(69英里),但经度在111公里的赤道处最宽,并且在极点处逐渐收敛到零。

在北纬或南纬40°处,经度之间的距离约为85公里(53英里),而纬度之间的距离在111公里(Source)处大致相同。如果您的地理对象仅限于某个区域,并且可以接受非常粗略的过滤器,则可以使用此信息来确定xy偏移量。

但是,如果您的对象在全球范围内稀疏,则应该计算great-circle distance。幸运的是haversine formula相对容易。您可能希望进一步阅读并查看Chris Veness在Calculate distance, bearing and more between Latitude/Longitude points的实施情况。

如果您只有少数地理对象,则可以简单地计算从您的点到每个地理对象的大圆距离。然后简单地按距离对结果列表进行排序,并按英里或公里的某个阈值进行过滤。

但是,如果您将拥有许多地理对象,则应考虑使用具有spatial indexing功能的数据库。 MySQLPostgreSQLSQL Server 2008都具有地理空间特征(本地或通过扩展),其中包括空间索引和半正式公式的实现。