2010-08-03 113 views
4

我正在使用看似太碎片化以便无法有效查询的无线电地图。当我询问单个点是否在多重多边形内(我已经测试过“内部”/“包含”/“重叠”)时,响应时间为20-40秒。我使用PostGIS和GeoDjango来抽象查询。如何使用PostGIS高效查询大型多边形

多面体列有一个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

您可以在专门的网站上找到GIS相关的问题更多专家解答http://gis.stackexchange.com/questions – amercader 2010-08-03 22:05:54

+0

请詹姆斯,你会介意分享在这里,你做了什么,我是个新手,我面临同样的问题,我不知道如何做到这一点非常感谢。 – 2012-02-06 07:09:41

回答

3

首先我会做的事情是分裂multipolygons成单一的多边形和创建新的索引。那么这个指数将会更有效。现在整个多面体有一个大边界框,索引只能告诉房子是否在边界框内。所以,与整个数据集相关的较小的多边形,更有效的索引使用。甚至有技术将单个多边形拆分为具有网格的较小的多边形,以使查询的索引部分更加有效。但是,首先要用ST_Dump()将多边形分割为单个多边形。如果在同一个表中有很多属性,将其放入另一个表中并且只保留一个ID,告诉它属于哪个电子地图是明智的。否则,你会得到很多重复的属性数据。

HTH 尼克拉斯

+0

谢谢!在将地图分割成网格之后,表现完成了(与之前相比)。我现在可以在每个处理器内核每秒处理超过100个房屋的情况下进行批量覆盖查询。 – 2010-08-11 19:14:45