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' 但后来的版本没有。
我在一个模型上有一个@属性,它为与数据集关联的所有几何图形获取一个边界框。这段代码已经运行了几年。现在,在一台新的 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' 但后来的版本没有。