Я пытаюсь следовать учебнику 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.
Сначала я подумал, что это просто проблема с геометрией моего слоя, но на самом деле это не изменило, поместил ли я мультиполигон или полигон.