如何从特定区域内的数据库中获取所有纬度和经度的列表?

zyfwsgd6  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(506)

我在postgres数据库中有一个表,其中包含位置及其相应的纬度和经度值。

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 子句,但它会是ost优化的解决方案吗?表中会有大量的行,有没有办法优化这个查询以加快结果的速度?

cunj1qz1

cunj1qz11#

这就是你想要的?

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 考虑包含两端边界的区间。您可以根据需要使用不等式条件对此进行更改,例如,这将使匹配在下限上包含,在上限上独占:

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

zzoitvuj2#

一个简单的sql查询在这里就不够了吗?

SELECT *
FROM Places
WHERE   (lat > lat_sw) 
    AND (long > long_sw)
    AND (lat < lat_ne)
    AND (long < long_ne)

相关问题