【发布时间】:2020-08-04 18:33:37
【问题描述】:
我已经使用 GeoDjango 几个月了,没有任何问题,但是在导入新的形状文件时,将保存 id 编号而不是网格代码。 gridcode 字段有一个对我的项目很有价值的 int。
我知道 shapefile 中存在 gridcode 字段,因为我可以在 shell 中对其进行测试。
#shell
>>> print(lyr.fields)
['Id', 'gridcode']
>>> feat = lyr[234]
>>> print(feat.get('gridcode'))
90 #This is the desired value
我以与往常相同的方式设置模型:
#models.py
class GeoModel(models.Model):
idn = geomodels.BigIntegerField(null=True)
grd = geomodels.BigIntegerField(null=True)
geo = geomodels.MultiPolygonField(null=True, srid=4326)
def __int__(self):
return self.grd
path_shp = os.path.abspath(os.path.join(os.path.dirname(app.__file__), 'data', 'folder', 'map.shp'))
mapping = {
'idn': 'Id',
'grd': 'gridcode',
'geo': 'MULTIPOLYGON',}
def run(verbose=True):
lm = LayerMapping(GeoModel, path_shp, mapping, transform=False)
lm.save(strict=True, verbose=verbose)
但是,当我尝试存储数据时,它存储的是 id 号而不是网格代码。例如,终端如下所示:
Saved: GeoModel object (1517)
Saved: GeoModel object (1518)
Saved: GeoModel object (1519)
Saved: GeoModel object (1520)
[ . . .]
任何帮助将不胜感激
【问题讨论】:
-
是根本没有保存网格代码,还是在保存时它只是不显示?您可能只需要在模型上设置 str 方法
-
我认为它根本没有被保存,除了为我的每个 Geodjango 函数保存为“self”的值之外,我无法提取任何值。我尝试在自定义定义中将 int 更改为 str,不出所料,它给了我一个类型错误:TypeError: str 返回了非字符串(int 类型)。 @leelum1
标签: django-models gdal shapefile geodjango ogr