GeoDjango / GDAL:存储了错误的数据字段

时间:2020-08-04 18:33:37

标签: django-models gdal shapefile geodjango ogr

我已经使用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)
[ . . .]

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

我找到了一个简单的解决方法。在“ Lazy Geometries”下的GeoDjango文档中进行挖掘后,我发现我可以查询“ intersects”未返回的值。例如:当我运行

>>> q = GeoModel.objects.get(geo__intersects=point)
# and then I get a value I don't care for (i.e GeoModel object (1520))
# I can then run the following:
>>> q.grd
# and return the following:
90

尽管这不能直接解决上述问题,但它使该问题与我无关,也可能与将来遇到相同问题的其他人无关。

相关问题