我想找到距离给定点不远距离特定距离的所有点。像普通半径搜索一样,每个点只有半径可变(每个条目使用点+半径定义一个围绕自身的圆)。
我的问题是如何为这个问题定义一个索引(我现在使用的查询如下),如果可以使用非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
答案 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。 如你所见空间索引正在使用......