sql - 查询地理编码位置(纬度/经度)周围的周长

标签 sql google-maps distance geocode

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

我想我必须做的是形成一些查询,例如:

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

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

最佳答案

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

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

但是,如果您的对象在全局范围内稀疏,您应该计算 great-circle distance反而。幸运的是,使用 haversine formula 相对容易.您可能想进一步阅读并查看 Calculate distance, bearing and more between Latitude/Longitude points 中的实现。作者:Chris Veness。

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

但是,如果您有很多地理对象,您应该考虑使用带有 spatial indexing 的数据库。能力。 MySQL , PostgreSQLSQL Server 2008所有这些都具有地理空间特征(本地或通过扩展),其中包括空间索引和 haversine 公式的实现。

关于sql - 查询地理编码位置(纬度/经度)周围的周长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2760466/

相关文章:

javascript - 谷歌地图API : can I get the best auto suggest and geocode it?

mysql - 计算距离时命令不同步错误

mysql - 使用连接和子查询优化简单查询

sql - 如何通过 order by 降低 sql select 的成本?

javascript - 加载谷歌地图控件元素时的回调

r - 计算 r 中点对之间的距离

python - NumPy 数组下三角区域中 n 个最大值的索引

sql - SSRS/SQL 选择性日期 MAX 问题

SQL 插入列名作为数据

google-maps - Google Maps Javascript API 未加载最接近的缩放级别?