PostGIS查找包含特定点的所有圆圈 - 如何定义索引

时间:2017-02-21 19:03:38

标签: postgresql gis postgis

我想找到距离给定点不远距离特定距离的所有点。像普通半径搜索一样,每个点只有半径可变(每个条目使用点+半径定义一个围绕自身的圆)。

我的问题是如何为这个问题定义一个索引(我现在使用的查询如下),如果可以使用非GIS和GIS字段创建索引(如下面的Enable字段)

我目前有这个有效的查询

SELECT "Locations"."Name",
FROM public."Locations"
WHERE
    "Locations"."Enabled" = TRUE
    AND ST_DWithin(
        "Locations"."MyCoord"::geography,
        ST_SetSRID(ST_MakePoint(<Given Long>, <Given Lat>),4326)::geography,
        "Locations"."Radius");

使用如下表格

Id: uuid
Name: text
Enabled: boolean
MyCoord: GEOGRAPHY(Point)
Radius: double precision

1 个答案:

答案 0 :(得分:1)

CREATE INDEX planet_osm_point_index
  ON planet_osm_point
  USING gist
  (way);

但是你有一个BUG - 没有这样的函数ST_DWithin(几何,地理,数字) - 如果你有半径米,在两种情况下都使用地理,所以你不需要转换(也在索引中)

编辑:

别担心 - 它会起作用,我检查了......作为证据,我有一个由osm2pgsql创建的表planet_osm_point索引:

explain select * 
from planet_osm_point 
where st_dwithin(way,ST_geomfromtext('POINT(2219360.7 6457010.96)'),300)

我正在运行像你这样的查询:

val res = insertFuture.transform(_ => Ok("Inserted"), _ => InternalServerError)

输出为here。 如你所见空间索引正在使用......