Question

Je suis déconner avec GeoDjango, et je veux juste ajouter un simple champ de polygones à une base de données, puis exécutez un point en polygone pour vous assurer que tout fonctionne bien.

Voici mon code dans 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 en models.py:

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

Mais quand je tente d'ajouter le polygone (PolygonExample.objects.create), je reçois une erreur. « Une erreur se Geometry vérification de retour de la fonction GEOS C « GEOSWKTReader_read »

est mon code pour ajouter le mauvais polygone? Je ne suis pas sûr que je comprends comment SLOT en latitude / longitude directement les coordonnées.

Ou est-ce une erreur d'installation GEOS?

Merci.

Était-ce utile?

La solution

WKT a quelques problèmes:

  1. Coordinate dimensions sont séparées par des espaces
  2. paires de coordonnées (ou tuples) sont séparés par des virgules
  3. Coordonner la commande est (x, y) - qui 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'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top