Geo Django / GDAL: сохраняется неправильное поле данных - PullRequest
2 голосов
/ 04 августа 2020

Я использую Geo Django в течение нескольких месяцев без каких-либо проблем, однако при импорте нового файла формы номер идентификатора сохраняется вместо кода сетки. В поле gridcode есть int, который важен для моего проекта.

Я знаю, что поле gridcode присутствует в шейп-файле, потому что могу протестировать его в оболочке.

#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) 

Однако, когда я пытаюсь сохранить данные, она сохраняет номер идентификатора вместо кода сетки. Например, терминал выглядит так:

Saved: GeoModel object (1517)
Saved: GeoModel object (1518)
Saved: GeoModel object (1519)
Saved: GeoModel object (1520)
[ . . .]

Любая помощь будет принята с благодарностью

1 Ответ

2 голосов
/ 06 августа 2020

Я нашел простой обходной путь. Покопавшись в документации Geo Django в разделе « Lazy Geometries », я обнаружил, что могу просто запрашивать значения, которые не возвращаются « пересекает ». Например: Когда я запускаю

>>> 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

Хотя это напрямую не решает проблему, указанную выше, это делает проблему неактуальной для меня и, вероятно, для всех, кто столкнется с такой же проблемой в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...