2014-05-06 7 views
3

J'ai installé toutes les dépendances de Geodjango! Maintenant, je suivais son tutoriel https://docs.djangoproject.com/en/1.2/ref/contrib/gis/tutorial/ - Problème: commande python manage.py syncdb génère l'erreur à mpoly geometry(multipolygon 4326) not null that geometry does not existGéométrie N'existe pas dans GEODJANGO

from django.contrib.gis.db import models 

class WorldBorders(models.Model): 
    # Regular Django fields corresponding to the attributes in the 
    # world borders shapefile. 
    name = models.CharField(max_length=50) 
    area = models.IntegerField() 
    pop2005 = models.IntegerField('Population 2005') 
    fips = models.CharField('FIPS Code', max_length=2) 
    iso2 = models.CharField('2 Digit ISO', max_length=2) 
    iso3 = models.CharField('3 Digit ISO', max_length=3) 
    un = models.IntegerField('United Nations Code') 
    region = models.IntegerField('Region Code') 
    subregion = models.IntegerField('Sub-Region Code') 
    lon = models.FloatField() 
    lat = models.FloatField() 

    # GeoDjango-specific: a geometry field (MultiPolygonField), and 
    # overriding the default manager with a GeoManager instance. 
    mpoly = models.MultiPolygonField() //ERROR HERE 

Comment résoudre cette erreur?

UPDATE:

python manage.py sqlall world génère sortie suivante:

BEGIN; 
CREATE TABLE "world_worldborders" (
    "id" serial NOT NULL PRIMARY KEY, 
    "name" varchar(50) NOT NULL, 
    "area" integer NOT NULL, 
    "pop2005" integer NOT NULL, 
    "fips" varchar(2) NOT NULL, 
    "iso2" varchar(2) NOT NULL, 
    "iso3" varchar(3) NOT NULL, 
    "un" integer NOT NULL, 
    "region" integer NOT NULL, 
    "subregion" integer NOT NULL, 
    "lon" double precision NOT NULL, 
    "lat" double precision NOT NULL, 
    "mpoly" geometry(MULTIPOLYGON,4326) NOT NULL 
) 
; 
CREATE INDEX "world_worldborders_mpoly_id" ON "world_worldborders" USING GIST ("mpoly"); 

COMMIT; 

et python manage.py syncdb génère: Program Error Geometry Doesn't exist:

[email protected]:~/geodjango# python manage.py syncdb Syncing... Creating tables ... Creating table django_admin_log Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Creating table world_worldborders Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line utility.execute() File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv self.execute(*args, **options.__dict__) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 415, in handle return self.handle_noargs(**options) File "/usr/local/lib/python2.7/dist-packages/south/management/commands/syncdb.py", line 92, in handle_noargs syncdb.Command().execute(**options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 415, in handle return self.handle_noargs(**options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py", line 107, in handle_noargs cursor.execute(statement) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 69, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 53, in execute return self.cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 99, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 51, in execute return self.cursor.execute(sql) django.db.utils.ProgrammingError: type "geometry" does not exist LINE 14: "mpoly" geometry(MULTIPOLYGON,4326) NOT NULL

+1

Avez-vous le résoudre? voulez-vous partager avec nous? Thx – Armance

Répondre

0

Voici le billet fixe,

https://code.djangoproject.com/ticket/21547

Mise à jour GeoDjango tutoriel avec PostGIS 2 Sortie

+0

Avant de poster la question ici j'ai lu ceci mais je ne comprends pas ce billet. Pouvez-vous s'il vous plaît expliquer les étapes pour résoudre ce problème? –

+0

Essayez ce 'python gérer.py sqlall world' et publiez la sortie dans votre question – dhana

+0

'django.core.exceptions.ImproperlyConfigured: Impossible de déterminer la version de PostGIS pour la base de données" geodjango ". GeoDjango nécessite au moins la version 1.3 de PostGIS. La base de données a-t-elle été créée à partir d'un modèle de base de données spatiale? '@dhana ' –

5

Un couple de choses à vérifier:

  • Vous avez exécuté CREATE EXTENSION postgis;
  • Le GEOS_LIBRARY_PATH est défini dans les paramètres de votre projet. fichier py

Ceci Le deuxième point m'a donné quelques problèmes, même si c'était le premier qui a finalement réussi. Je cours cela sur Cygwin 64 bits, donc il y a un peu de travail supplémentaire à faire pour le faire fonctionner. Si vous n'utilisez pas l'environnement Cygwin, le fichier que vous recherchez est probablement libgeos_c.so; J'avais besoin de le pointer vers cyggeos_c-1.dll (fonctionnant toujours sous Windows, donc l'extension .dll est ce que j'avais besoin de trouver).

J'étais sûr que j'avais déjà exécuté la commande CREATE EXTENSION, mais je ne l'ai peut-être pas exécutée dans l'environnement Cygwin. Ou j'avais essayé, mais je n'avais pas réussi à me rappeler que j'avais un cauchemar d'une configuration telle que le serveur postgres ne fonctionne pas sur localhost, alors j'évitais psql. Telle est ma propre marque d'épaisseur.

0

Dans mon cas, la question est que les commandes:

-- Enable PostGIS (includes raster) 
CREATE EXTENSION postgis; 
-- Enable Topology 
CREATE EXTENSION postgis_topology; 
-- fuzzy matching needed for Tiger 
CREATE EXTENSION fuzzystrmatch; 
-- Enable US Tiger Geocoder 
CREATE EXTENSION postgis_tiger_geocoder; 

shoudl être exécuté dans le contexte de certaines bases de données, vous devez vous connecter à your_db premier:

\connect your_db 

puis exécutez ci-dessus !

0

essayer d'ajouter

objects = models.GeoManager()

après mpoly dans votre models.py

+0

Vous devriez [modifier] votre réponse pour ajouter une description * comment * cela répond à la question. –