django 2.1 - LayerMapError: не удалось получить геометрию из объекта - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь следовать учебнику GeoDjango кенийского ютубера здесь . Но я застрял в какой-то момент, когда мне нужно загрузить шейп-файл с GeoDjango, после того, как я попробовал решения, предлагаемые: этим постом и этим другим решением, я застрял в некоторых указать следующую ошибку: LayerMapError: Could not retrieve geometry from feature.

Вот мои файлы, начинающиеся с models.py:

from django.db import models
from django.contrib.gis.db import models

# Create your models here.
class Parcelles(models.Model):
    ogc_fid = models.FloatField()
    geo_parcel = models.CharField(max_length=254)
    idu = models.CharField(max_length=254)
    tex = models.CharField(max_length=254)
    geo_sectio = models.CharField(max_length=254)
    nomcommune = models.CharField(max_length=254)
    codecommun = models.CharField(max_length=254)
    surface_ge = models.FloatField()
    lot = models.CharField(max_length=254)
    layer = models.CharField(max_length=100)
    path = models.CharField(max_length=200)
    geom = models.PolygonField(srid=4326)

    def __unicode__(self):
        return self.idu

    class Meta:
        verbose_name_plural = "Parcelles"

Затем в parcelles.py (файл python я вызову в shell, чтобы сохранить мой шейп-файл):

import os
from django.contrib.gis.utils import LayerMapping
from .models import Parcelles

# Auto-generated `LayerMapping` dictionary for Parcelles model
parcelles_mapping = {
    'ogc_fid': 'ogc_fid',
    'geo_parcel': 'geo_parcel',
    'idu': 'idu',
    'tex': 'tex',
    'geo_sectio': 'geo_sectio',
    'nomcommune': 'nomcommune',
    'codecommun': 'codecommun',
    'surface_ge': 'surface_ge',
    'lot': 'lot',
    'layer': 'layer',
    'path': 'path',
    'geom': 'POLYGON',
}

parcelles_shp = os.path.abspath(os.path.join(os.path.dirname(__file__),'data/Parcelles_marseille.shp'))

def run(verbose=True):
    lm = LayerMapping(Parcelles, parcelles_shp, parcelles_mapping, 
                      transform=False, encoding='utf-8')
    lm.save(strict=True, verbose=verbose)

чтобы получить их, я сначала запустил команду: python manage.py ogrinspect reporter/data/Parcelles_marseille.shp Parcelles --srid=4326 --mapping и скопируйте / вставьте то, что было сгенерировано в соответствии с руководством.

Как только эти файлы созданы, я просто набираю команду: python manage.py shell Затем я иду на это: from reporter import parcelles

И оттуда я получаю сообщение об ошибке: LayerMapError: Could not retrieve geometry from feature.

Сначала я подумал, что это просто проблема с геометрией моего слоя, но на самом деле это не изменило, поместил ли я мультиполигон или полигон.

...