geodjango 在 python 升级后创建 GEOS 多几何图形失败 (M1)

geodjango creating GEOS multi geometries fails after python upgrade (M1)

我在一个模型上有一个@属性,它为与数据集关联的所有几何图形获取一个边界框。这段代码已经运行了几年。现在,在一台新的 M1 mac 笔记本电脑上,我升级了 Python(3.7.4 到 3.9.7)并且 GDAL 和 GEOS 的配置很困难。但据我了解,django.contrib.gis 包含这些库的自己的版本。相关代码片段:

from django.contrib.gis.geos import GeometryCollection, MultiPoint, Point
from places.models import PlaceGeom
from datasets.models import Dataset

class Dataset(models.Model):

    fields …

    @property
    def bounds(self):
        dsgeoms=PlaceGeom.objects.values_list(‘geom’,flat=True).filter(place__dataset=self.label)

        print(tuple(dsgeoms[:2]))
        # (<Point object at 0x12ee39988>, <Point object at 0x12ee39a08>)

        gc = GeometryCollection(tuple(dsgeoms[:2]))

        return json.loads(gc.envelope.geojson) if pg_geoms.count() > 0 else None

创建 GeometryCollection 时会崩溃,但不知道为什么, 在 PyCharm 中: “进程结束,退出代码 138(被信号 10 中断:SIGBUS)”

在 Django 中 shell: “67692 总线错误 ./manage.pyshell”

在浏览器中: 简单地退出 runserver

所以我只是尝试了 https://docs.djangoproject.com/en/2.2/ref/contrib/gis/geos/ 处的 Geodjango 文档中的示例,虽然 Point 和 LineString 的创建有效,但 GeometryCollection 和 MultiPoint 没有,出现 shell 错误 “68483 分段错误 ./manage.py shell”

我很困惑,但在我尝试使用 Shapely 和多重转换构建 bbox 之前,我想我会寻求帮助

@bpartridge 在 GitHub 上提供了解决此问题的答案和补丁,此处: https://github.com/libgeos/geos/issues/528#issuecomment-997327327

TLDR; -- Django 2.2 对 GEOS 的调用很松散,早期的 GEOS 版本 'forgave' 但后来的版本没有。