【问题标题】: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)