python - 如何从特定区域内的数据库中获取所有纬度和经度的列表?
问题描述
我在 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
子句来做到这一点,但它会是最优化的解决方案吗?表中会有大量的行,有没有办法可以优化这个查询来加快结果?
解决方案
这是你想要的吗?
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
推荐阅读
- java - 带有 Volley 的 Android JSON 请求
- python - 对包含 str 和元组的 Pandas MultiIndex 进行排序
- javascript - 使用 Ajax 数据更新 html 模板
- python - TypeError: find() 没有参数输入
- python - Jupyter Notebook - 运行单元格并保存为 .py 文件
- spring-boot - 在启动时阻止应用程序仅意味着阻止应用程序?
- r - 在R中更改行名返回“不允许重复的'row.names'”
- sql - SQL:从长格式转换为宽格式时选择最大值
- sql - 无论如何在使用 SQL 计数时添加约束
- go - 指针和 protobuf 的无法解释的行为