gpt4 book ai didi

django-models - GeoDjango/GDAL : Wrong data field being stored

转载 作者:行者123 更新时间:2023-12-04 09:15:16 26 4
gpt4 key购买 nike

我已经使用 GeoDjango 几个月了,没有任何问题,但是在导入新的形状文件时,将保存 ID 号而不是网格代码。 gridcode 字段有一个对我的项目很有值(value)的 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)
[ . . .]
任何帮助将非常感激

最佳答案

我找到了一个简单的解决方法。在“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
尽管这并不能直接解决上述问题,但它使问题与我无关,并且可能与将来面临相同问题的其他人无关。

关于django-models - GeoDjango/GDAL : Wrong data field being stored,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63253093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com