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

标签 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”返回的几何时遇到错误。

如果有帮助的话,这是引发错误的项目的 geo 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 个多边形列表中的所有位置(另一个表)(使用坐标__within=combined_area)

此外,多边形在 geodjango 管理中心的 map 上显示得很好。

最佳答案

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

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

关于django - geodjango中组合(联合)多边形的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524885/

相关文章:

django - 在 graphene-django 中通过主键查找(带中继)

python - 如何使子类化的自定义 Django 表单字段成为非必需字段?

django - 如何测试模型方法django

Django 模型引用 postgres 外部表 (clickhouse_fdw)

python - 如何调试 : Internal Error current transaction is aborted, 命令在事务 block 结束之前被忽略

django - 在 Django 中使用 OSGeo4W 的 GDAL 时 libcurl.dll 出错

postgresql - 使用 PostGIS 获取基于位置的数据

postgresql - postgis 中的空间要点索引 - 性能

postgresql - 在子查询返回的每一行上调用一个函数

python - GeoDjango:PostgreSQL 未运行迁移,对象没有属性“geo_db_type”