你的解决方案似乎不像你想象的那么恶心。
自从你
data['geometry']
字段返回一个
WKT
字符串表示法(
'POLYGON ((-4.337076919429241 53.41842814531255, ... ))
)你可以避免
fromstr
直接走过去
to a GEOSGeometry
:
from django.contrib.gis.geos import GEOSGeometry
polygon = GEOSGeometry('POLYGON ((-4.337076919429241 53.41842814531255, ... ))')
您还可以添加一些错误处理,不再担心解决方案崩溃:):
for data in gdf.to_dict("records"):
name = data.pop("name")
geometry_str = data.pop('geometry')
try:
geometry = GEOSGeometry(geometry_str)
except (TypeError, ValueError) as exc:
# If the geometry_str is not a valid WKT, EWKT or HEXEWKB string
# or is None then either continue, break or do something else.
# I will go with continue here.
continue
if geometry.geom_type != 'Polygon':
# If the created geometry is not a Polygon don't pass it on MyModel
continue
MyModel.objects.update_or_create(
name=name, geometry=geometry,
defaults=data,
)