【问题标题】:GeoDjango Admin how to populate a GeometryField from a file upload?GeoDjango Admin 如何从文件上传中填充 GeometryField?
【发布时间】:2026-02-13 18:35:02
【问题描述】:

我有一个使用 GeoDjango 存储 GPS 路线的项目。几何图形存储在 GeometryField 中。这在使用地理空间信息导入数据时非常有用,但当我有一个需要用户提供数据的模型时,这会令人沮丧。我想在 Admin 中有一个小部件,可以让我上传文件,然后使用该文件实质上导入地理空间信息。

FileField 字段似乎不合适,因为我不希望文件存储在文件系统上。我希望将其处理并存储在地理空间数据库字段中,以便我可以对数据运行地理空间函数。

理想情况下,管理界面应包含文件上传小部件和地理空间字段,与典型地图一起显示。

【问题讨论】:

    标签: django-admin postgis geodjango


    【解决方案1】:

    将地理数据文件导入数据库有几个选项。 如果您想使用压缩的 shapefile,Geodjango 提供了一个不错的解决方案,即 LayerMapping。

    在导入文件之前,您应该实现使用表单上传 zip 文件、检查所需扩展名([".shp"、".shx"、".dbf"、".prj"])并保存的工作流程用于阅读的文件。

    然后你必须定义一个映射来匹配文件和 Django 模型中的字段名称。

    完成这些步骤后,您可以将几何图形保存到数据库中:

    from django.contrib.gis.utils.layermapping import LayerMapping
    
    layer = uploaded_and_extracted_file
    
    mapping = {"id": "district", "name": "dis_name", "area": "shape_area", "geom": "MULTIPOLYGON"}
    
    lm = LayerMapping(ModelName, layer, mapping, transform=True, encoding="utf-8")
    
    lm.save(verbose=True, strict=True, silent=True)
    

    【讨论】: