LayerMapping 添加具有动态属性的 shapefile

时间:2021-04-13 07:10:29

标签: django geopandas geodjango

我正在开发一个允许用户上传 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 可以具有不同的属性名称。

我愿意更改模型架构。

0 个答案:

没有答案