组合(联合)多边形在geodjango中的问题

时间:2013-03-20 13:25:58

标签: django postgis geodjango geos

我正在使用geodjango和postgis(1.x), 组合(联合)多面体列表的最佳方法是什么。

在我所假设的是相当低效的我像这样循环低谷

combined = multipolygon
for item in items:
    combined = combined.union(item.geom)  #geom is a multipolygon

通常这样可以正常工作,但通常我会收到错误错误在检查从GEOS C函数“GEOSUnion_r”返回的几何时遇到错误。

如果有帮助的话,这是错误被抛出的项目的地理json版本

{ "type": "MultiPolygon", "coordinates": 
[ [ [ [ -80.077576, 26.572225 ], 
      [ -80.037729, 26.571180 ], 
      [ -80.080279, 26.273744 ], 
      [ -80.147464, 26.310066 ], 
      [ -80.152851, 26.455851 ], 
      [ -80.138560, 26.538013 ], 
      [ -80.077576, 26.572225 ] 
] ] ] 
}

有没有人有任何想法?最终目标是找到属于n个多边形列表的所有位置(另一个表)(使用coordinates__within = combined_area)

此外,多边形在geodjango admin中的地图上显示正常。

1 个答案:

答案 0 :(得分:2)

您始终可以使用Union聚合方法。这应该更高效,因为所有内容都是在数据库级别计算的,这意味着您不必在Python中循环。

combined_area = FooModel.objects.filter(...).aggregate(area=Union('geom'))['area']
final = BarModel.objects.filter(coordinates__within=combined_area)