Hal*_*yon 3 postgresql spatial postgis
我在 Postgres 中有这个表,如下所示:
create table locations
(
id serial not null
constraint games_pkey
primary key,
name varchar,
location point,
)
;
Run Code Online (Sandbox Code Playgroud)
我想根据另一个位置point( x, y )
作为纬度和经度进行查询;我只需要返回距离该位置 1 公里以内的记录。如何有效地选择符合该标准的记录?
我只需要在局部范围内精确的距离,因此地球曲率对我的应用程序来说不应该是一个问题,但是在这种情况下,POINT 或 GIS 是否有性能优势?
我在 stackoverflow 上发现了这个问题,它似乎做了类似的事情,但接受的答案只有代码,也没有说明它是如何工作的:https : //stackoverflow.com/questions/37827468/find-the-nearest-location-by -latitude-and-longitude-in-postgresql
我只需要在局部范围内精确的距离,因此地球曲率对我的应用程序来说不应该是一个问题,但是在这种情况下,POINT 或 GIS 是否有性能优势?
本机point
用于几何。如果您想要地球上的距离,那么这些“点”将被投影到地球(球体)的表示上,您需要 GIS。如果您使用的是 PostgreSQL,则意味着您需要PostGIS。对于返回表中特定点 1 公里(1000 米)距离内的所有点的 PostGIS 查询,您可以使用ST_DWithin
SELECT *
FROM tbl
WHERE ST_DWithin( tbl.geog, ST_MakePoint(x,y)::geography, 1000 );
Run Code Online (Sandbox Code Playgroud)
这也将使用 GIST 索引(如果有)tbl.geog
。