Postgresql POSTGIS选择选项
我有一个可以使用的查询,但我想知道是否有一个更快、不那么迟钝的表单可以使用。我已经在几何体周围创建了一个边界框来缩小搜索范围,但是多次调用ST_Transforms似乎很尴尬。顺便说一句:这两条线(gg和gm)有相同的点 提前感谢,Postgresql POSTGIS选择选项,postgresql,postgis,postgresql-9.1,Postgresql,Postgis,Postgresql 9.1,我有一个可以使用的查询,但我想知道是否有一个更快、不那么迟钝的表单可以使用。我已经在几何体周围创建了一个边界框来缩小搜索范围,但是多次调用ST_Transforms似乎很尴尬。顺便说一句:这两条线(gg和gm)有相同的点 提前感谢, -马特 在中使用ST_Buffer非常昂贵,因为它需要在过滤之前缓冲所有几何图形。仅使用ST_DWithin即可获得相同效果 此外,行表模式是过分的。您只需要一个地理列,不需要将其转换为查询度量距离。从技术上讲,边界框应该存储在gist索引中,但如果出于某种目的需要
-马特
在
中使用ST_Buffer
非常昂贵,因为它需要在过滤之前缓冲所有几何图形。仅使用ST_DWithin
即可获得相同效果
此外,行
表模式是过分的。您只需要一个地理列,不需要将其转换为查询度量距离。从技术上讲,边界框应该存储在gist索引中,但如果出于某种目的需要,可以将其提取到。不过,大多数时候你不需要在意,只要有要点索引就行
将行
表重新定义为更简单的模式:
CREATE TABLE lines
(
gid bigserial primary key,
geog geography(LineString,4326)
);
CREATE INDEX ON lines USING gist (geog);
如果您试图查询兴趣点200米范围内的所有线,请将查询简化为:
SELECT l.*
FROM lines AS l
WHERE ST_DWithin(l.geog, ST_MakePoint(-71.44513306666667, 42.7368536), 200);
SELECT l.*
FROM lines AS l
WHERE ST_DWithin(l.geog, ST_MakePoint(-71.44513306666667, 42.7368536), 200);