2009-10-01 11 views
2

Je suis en train de jouer avec Geodjango, et je veux juste ajouter un simple polygone à une base de données, puis lancer un point-in-polygon dessus pour m'assurer que tout fonctionne d'accord.Ajout d'un polygone directement dans Geodjango/PostGIS

Voici mon code views.py:

#adding a polygon 
    pe = PolygonExample.objects.create(name="uk_polygon", poly="POLYGON((58.768200159239576, -12.12890625, 58.49369382056807 1.1865234375, 49.18170338770662 -12.9638671875, 50.2612538275847 5.537109375))") 
    #doing the point-in-polygon check 
    result = PolygonExample.objects.filter(poly__contains='POINT(52.696361078274485 -0.87890625)') 

et voici ce que j'ai dans models.py:

class PolygonExample(models.Model): 
     name = models.CharField(max_length=16, db_index=True) 
     poly = models.PolygonField() 
     objects = models.GeoManager() 

Mais lorsque je tente d'ajouter le polygone (PolygonExample.objects.create) , J'obtiens une erreur: "Erreur rencontrée lors de la vérification de la géométrie renvoyée par la fonction GEOS" GEOSWKTReader_read "

Mon code pour l'ajout du polygone est-il incorrect? Je ne suis pas sûr de comprendre comment insérer lat/lon coordonne directement.

Ou est-ce une erreur d'installation GEOS?

Merci.

Répondre

5

Votre WKT a quelques problèmes:

  1. cotes de coordonnées sont séparées par des espaces
  2. des paires de coordonnées (ou tuples) sont séparés par des virgules
  3. Coordinate commande est (x, y) - que est (LON, latitude)

Test d'un polygone autour du Royaume-Uni devrait ressembler à ceci:

>>> wkt = "POLYGON((-12.12890625 58.768200159239576, 1.1865234375 58.49369382056807, 5.537109375 50.2612538275847, -12.9638671875 49.18170338770662, -12.12890625 58.768200159239576))" 
>>> pe = PolygonExample.objects.create(name="uk_polygon", poly=wkt) 
>>> result = PolygonExample.objects.filter(poly__contains='POINT(-0.87890625 52.696361078274485)') # note x,y order here, too 
>>> result[0].name 
u'uk_polygon' 
Questions connexes