我正在开发一个允许用户上传 shapefile 的项目。目前,如果没有映射属性,我有以下模型可以正常工作。
class PolygonFeature(models.Model):
shp = models.ForeignKey(Shapefile,
on_delete=models.CASCADE, related_name='shp_poly')
editor = models.ForeignKey(settings.AUTH_USER_MODEL,null=True, blank=True,
on_delete=models.SET_NULL, related_name='gu_poly')
geom = mg.PolygonField(srid=4326, blank=True, null=True)
m_geom = mg.MultiPolygonField(srid=4326, blank=True, null=True)
attr = models.TextField(default=str({}))
而我的图层映射代码是:
gdf = gpd.GeoDataFrame.from_file(inp)
gdf["shp_pk"] = obj.pk
gdf['attr'] = str({})
gdf.to_file(out)
mapping = {
'shp': {'id': 'shp_pk'},
'geom': geom,
'attr': 'attr'
}
lm = LayerMapping(model, out, mapping,
source_srs=source_srs,
transform=transform,
encoding='iso-8859-1')
lm.save(verbose=False)
问题在于用户 shapefile 可以具有不同的属性名称。
我愿意更改模型架构。