我正在使用看似太碎片的无线电地图,无法有效查询。当我询问单点是否在多边形内时(我已测试“在”内“/”包含“/”重叠“),响应时间为20-40秒。我使用PostGIS和GeoDjango来抽象查询。
多边形列有一个GiST索引,我尝试过VACUUM ANALYZE。我使用PostgreSQL 8.3.7。和Django 1.2。
这些地图遍布大片地理区域。它们最初是由地形感知无线电工具和the radio cells/polygons are therefore fragmented生成的。
我的目标是查询多边形内的点(即信号可能包含或未包含的房屋)。
所有无线电地图由100.000到300.000个顶点(总数)组成,其中多边形的数量差异很大。一些地图的多边形少于10个。从那里它跳到10.000到30.000多边形之间。多边形与顶点的比率似乎不会影响查询完成的时间。
我使用投影坐标系,并对房屋和无线电扇区使用相同的系统。 Qgis显示无线电扇区和地图正确放置在地形中。
我的测试查询在一个无线电地图中一次只有一个房子。我测试了诸如“内部”/“包含”/“重叠”之类的查询,结果是相同的:
如果房子“远离”无线电地图,则为亚秒级响应(我猜这是因为它位于查询中自动使用的边界框之外)。
如果房屋/点靠近或在无线电地图内,则响应时间为20-40秒。
我是否有其他方法来优化查询,还是必须以某种方式更改/简化源材料?任何建议都表示赞赏。
答案 0 :(得分:3)
喂
我要做的第一件事是将多边形分割成单个多边形并创建一个新索引。然后索引将更有效。现在整个多边形有一个大的边界框,索引只能告诉房子是否在边界框内。因此,与整个数据集相关的较小多边形,索引使用效率更高。甚至有一些技术可以将单个多边形分割成较小的多边形,并使用网格来使查询的索引部分更加有效。但是,首先要用ST_Dump()将多边形分割成单个多边形。如果你在同一个表中有很多属性,那么把它放到另一个表中是明智的,只保留一个ID来告诉它属于哪个radiomap。否则,您将获得大量重复的属性数据。
HTH 尼克拉斯