我有一个表,其中包含对象的经度和纬度。我想找到我附近的物体(大约50米的距离)。
我将发送我的位置(纬度和经度),此查询将为我提供靠近我的对象。还有我可以使用哪个索引来提高速度?
答案 0 :(得分:1)
答案并不简单,取决于您所需的准确性水平。 “简单”方法是使用勾股定理来计算“直线”距离。但这不考虑曲率,也不考虑海拔差异。
某些版本的SQL中有一些功能,但我不知道postgresql中有哪些功能。尝试查看此页面以获取许多良好的信息: https://kanoki.org/2019/02/14/how-to-find-distance-between-two-points-based-on-latitude-and-longitude-using-python-and-sql/
关于速度,您拥有哪些动态信息?纬度/经度变化?是时候从一个点到另一个了?您无法仅使用一个数据点来计算速度。
答案 1 :(得分:1)
Postgres有一个名为earthdistance
的可选模块,您可以使用此模块。其中一个模块已安装,您可以执行以下操作:
select lat, long
from mytable
where point(lon, lat) <@> point(:mylon, :mylat) < 50 / 1609.344
其中(:mylon, :mylat)
是代表您当前经度和纬度的参数。该查询为您提供了距离您不到50米的对象(1609.344
被用作代表每英里米数的粗略估计)。