Frage

Ich bin Herumspielen mit Geodjango, und ich möchte nur ein einfaches Polygon Feld zu einer Datenbank hinzufügen und dann eine Point-in-Polygon darauf laufen zu um sicherzustellen, dass alles funktioniert gut.

Hier ist mein Code in 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)') 

und hier ist was ich in models.py haben:

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

Aber wenn ich versuche, das Hinzufügen des Polygon (PolygonExample.objects.create), bekomme ich einen Fehler. „Fehler aufgetreten Prüfung Geometrie zurück von GEOS C-Funktion‚GEOSWKTReader_read‘

Ist mein Code, um das Polygon falsch für das Hinzufügen? Ich bin nicht sicher, ob ich verstehe, wie in lat Schlitz / lon-Koordinaten direkt.

Oder ist dies ein GEOS Installationsfehler?

Danke.

War es hilfreich?

Lösung

WKT hat ein paar Probleme:

  1. Koordinaten Dimensionen getrennt werden durch Leerzeichen
  2. Koordinatenpaar (oder Tupel) werden durch Komma getrennt
  3. Koordinaten
  4. Ordnung ist (x, y) - das ist (lon, lat)

Testen eines Polygons um das Vereinigte Königreich sollte wie folgt aussehen:

>>> 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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top