4

我正在使用似乎过于分散而无法有效查询的无线电地图。当我询问单个点是否在多面体中时,响应时间为 20-40 秒(我已经测试了“内部”/“包含”/“重叠”)。我使用 PostGIS 和 GeoDjango 来抽象查询。

多多边形列有一个 GiST 索引,我尝试过 VACUUM ANALYZE。我使用 PostgreSQL 8.3.7。和 Django 1.2。

这些地图覆盖了广阔的地理区域。它们最初是由地形感知无线电工具生成的,因此无线电单元/多边形是碎片化的

我的目标是查询多面体中的点(即信号可能覆盖也可能不覆盖的房屋)。

所有的无线电地图都由 100.000 到 300.000 个顶点(总计)组成,多边形的数量变化很大。有些地图的多边形少于 10 个。从那里它跳到 10.000 到 30.000 个多边形之间。多边形与顶点的比率似乎对完成查询所花费的时间影响不大。

我使用投影坐标系,并为房屋和无线电部门使用相同的系统。Qgis 显示无线电扇区和地图正确放置在地形中。

我的测试查询在一张无线电地图中一次只针对一所房子。我已经测试过像“within”/“contains”/“overlaps”这样的查询,结果是一样的:

  • 如果房子“远离”无线电地图,则亚秒级响应(我猜这是因为它位于查询中自动使用的边界框之外)。

  • 如果房屋/点靠近或在无线电地图内,则响应时间为 20-40 秒。

我是否有其他方法来优化查询,或者我必须以某种方式更改/简化源材料?任何建议表示赞赏。

4

1 回答 1

4

你好

我要做的第一件事是将多面体分割成单个面体并创建一个新索引。然后索引将更有效地工作。现在整个多面体有一个大的边界框,索引只能判断房子是否在边界框内。因此,相对于整个数据集的多边形越小,索引使用就越有效。甚至有一些技术可以使用网格将单个多边形分割成更小的多边形,以使查询的索引部分更加有效。但是,第一件事是使用 ST_Dump() 将多个多边形拆分为单个多边形。如果您在同一个表中有很多属性,最好将其放入另一个表中,并且只保留一个 ID 来说明它属于哪个 radiomap。否则你会得到很多重复的属性数据。

HTH 尼克拉斯

于 2010-08-04T08:17:56.933 回答