Geodjango создание мультигеометрии GEOS не удается после обновления python (M!)

У меня есть @property на модели, которая получает ограничивающую рамку для всех геометрий, связанных с набором данных. Этот код прекрасно работал в течение нескольких лет. Теперь, на новом ноутбуке 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 bus error ./manage.py shell"

>

в браузере: просто выходит из runserver

Поэтому я просто попробовал примеры из документации Geodjango на https://docs.djangoproject.com/en/2.2/ref/contrib/gis/geos/, и хотя создание Point и LineString сработало, GeometryCollection и MultiPoint - нет, с ошибкой оболочки "68483 segmentation fault ./manage.py shell"

Я в тупике, но прежде чем я попробую построить bbox с помощью Shapely и многочисленных трансформаций, я решил попросить помощи

Ответ и патч для исправления этого были предоставлены @bpartridge на GitHub, здесь: https://github.com/libgeos/geos/issues/528#issuecomment-997327327

TLDR; -- Django 2.2 был небрежен в своем обращении к GEOS, что более ранние версии GEOS "простили", а более поздние - нет.

Вернуться на верх