gpt4 book ai didi

postgresql - PostGIS 中的 K 最近邻查询

转载 作者:行者123 更新时间:2023-11-29 11:13:37 26 4
gpt4 key购买 nike

我在 PostGIS 中使用以下最近邻查询:

SELECT g1.gid g2.gid FROM points as g1, polygons g2   
WHERE g1.gid <> g2.gid
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
LIMIT k;

现在,我已经在两个表的 the_geom 和 gid 列上创建了索引,这个查询比其他涉及空间连接 b/w 两个表的空间查询花费更多的时间。

有没有更好的方法来寻找 K 最近邻?我正在使用 PostGIS。

并且,尽管在几何列上创建了索引,但另一个查询花费了异常长的时间是:

select g1.gid , g2.gid from polygons as g1 , polygons as g2
where st_area(g1.the_geom) > st_area(g2.the_geom) ;

我相信,这些查询不会受益于 gist 索引,但为什么呢?

而这个查询:

select a.polyid , sum(length(b.the_geom)) from polygon as a , roads as b  
where st_intersects(a.the_geom , b.the_geom);

一段时间后返回结果,尽管涉及比多边形或点表大得多的“道路”表,并且还涉及更复杂的空间运算符。

最佳答案

late September 2011 ,PostGIS 通过 ORDER BY 子句中可用的特殊运算符支持索引最近邻查询:

SELECT name, gid
FROM geonames
ORDER BY geom <-> st_setsrid(st_makepoint(-90,40),4326)
LIMIT 10;

...将返回 geom 的 10 个对象最近-90,40以可扩展的方式。该公告中有更多详细信息(选项和注意事项)postuse of the <->the <#> operators现在也记录在官方 PostGIS 2.0 引用中。 (两者之间的主要区别是 <-> 比较形状质心,<#> 比较它们的边界——点没有区别,其他形状选择适合您的查询。)

关于postgresql - PostGIS 中的 K 最近邻查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10461179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com