我有一个Postgres表,其中包含一些使用shapefile创建的数据.我需要找到在给定纬度和经度的2英里半径内相交的所有记录.我使用了一些查询,包括下面的一个.

从ST_相交的us_census_zcta中 Select *(geom,

但没有一个有效.我做错了什么?我怎样才能得到我需要的结果?

SRID为4269(NAD 83).

EDIT:Mike Organek之后指出,我在上述查询中切换了lat long.然后我try 了一些事情,下面的查询给了我一条记录.

从ST_相交的us_census_zcta中 Select *(几何::几何,

但是,我如何使用圆并找到距离给定纬度2英里半径内相交的记录呢?

推荐答案

您要查找的是ST_DWithin,它将判断记录是否在给定缓冲区内相交.为了将其用于英里数,最好将geometry列强制转换为geography,因为它会在metres中计算距离:

对于地理:单位为米,距离测量默认为use_spheroid=真.为了更快地进行判断,请使用use_spheroid=false在球体上进行测量.

SELECT * FROM us_census_zcta 
WHERE 
  ST_DWithin(
    geom::geography, 
    ST_SetSRID(ST_MakePoint(-73.935242, 40.730610), 4269)::geography,
    3218.688); -- ~2 miles

请记住,如果索引设置不正确,此转换可能会影响查询性能.

另见:Getting all Buildings in range of 5 miles from specified coordinates

Sql相关问答推荐

在SQL中对字符串进行逻辑排序,将数字部分排序为数字值

为什么Postgrs Planner会在输出部分中显示我在查询中不使用的列?'""

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

如何使用WSO2将空值传递给我的SQL Server存储过程?

如何根据同一表中某一列中的值重新排列行(仅输出它们)(重新排序)?

用户购买平台及金额统计

将计算列设置为持久化的目的是什么?

按分类标准检索记录

使用多个嵌套数组查询JSON数据

WooCommerce产品的SQL查询:获取sku和产品标签

如何使用SQL生成数据的滚动3天总和

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

如何计算两个非周期性时间序列+分组的重叠持续时间

SQL 将 Varchar 转换为日期

Postgres存在限制问题「小值」

比使用NOT EXISTS更高效的SQL删除方法是什么?

强制 SQL 始终通过 R 从视图中返回至少一行

如何获得上个月和下个月之间的销售额差异

SQL - 使用子查询返回多行的 LIKE 命令

连续日期的SQL