如何将 GDAL 对象存储在 geodjango 几何对象中?

How to store GDAL objects in a geodjango Geometry object?

我的数据库中有一个 GeoDjango GeometryField:

class Place(models.Model):
    name = CharField()
    geometry = models.GeometryField()

我正在尝试将 shapefile 的某些部分加载到我的数据库中。

from django.contrib.gis.gdal import DataSource
datasource = DataSource("file.shp")
layer = datasource[0]

for each in layer:
    name = each.get("NAME") # To obtain the name
    ... (some more logic to add properties and validate which objects should be imported)
    Place.objects.create(
        name = name,
        geometry = each.geom
    )

但是,这个returns这个错误:

Cannot set Place SpatialProxy (GEOMETRY) with value of type: <class 'django.contrib.gis.gdal.geometries.MultiPolygon'>

我不确定我必须如何转换这个 gdal.geometries.MultiPolygon 对象才能将其存储在数据库中。我试过使用:

from django.contrib.gis.gdal import OGRGeometry
geometry = OGRGeometry(each.geom)

但这行不通。

我查看了 GeoDjango LayerMapping utility 的源代码,它似乎将 GDAL 几何图形转换为 WKT。

您应该可以像这样设置值:

Place.objects.create(
    name = name,
    geometry = each.geom.wkt  # note the .wkt at the end
)