首页 > 解决方案 > 如何从特定区域内的数据库中获取所有纬度和经度的列表?

问题描述

我在 Postgres DB 中有一个表格,其中包含地点及其相应的纬度和经度值。

Places (id, name, lat, lng)  # primary-key(id)

我将得到一对形成一个矩形的纬度和经度的输入。

{
  "long_ne": 12.34, 
  "lat_ne": 34.45, 
  "long_sw": 15.34, 
  "lat_sw": 35.56
}

我想获取落在矩形内的所有行。

无法根据它们的 lat-lng 值对行进行排序,因为这会在插入新值时造成麻烦。

解决此问题以优化查询以获得结果的最佳方法是什么?

我显然可以使用该WHERE子句来做到这一点,但它会是最优化的解决方案吗?表中会有大量的行,有没有办法可以优化这个查询来加快结果?

标签: pythonsqlpostgresqlquery-optimizationwhere-clause

解决方案


这是你想要的吗?

select *
from places
where 
    lat between :lat_no and :lat_sw
    and lng between :long_no and :long_sw

其中:lat_no和是查询的输入参数:lat_ws :long_no:long_sw

这将为您提供纬度和经度在正方形边界之间的所有行。请注意,between考虑 inteval 包括它们在两端的边界。您可以根据需要使用不等式条件更改它,例如,这使得匹配在下限上包含而在上限上排除:

where
    lat >= :lat_no and lat < :lat_sw
    and lng >= :long_no and lng < :long_sw

推荐阅读