Domanda

Sono nei guai con Geodjango, e voglio solo aggiungere un semplice campo di poligoni a un database e quindi eseguire un point-in-poligono su di esso per assicurarsi che tutto funzioni bene.

Ecco il mio codice 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)') 

ed ecco cosa ho in models.py:

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

Ma quando provo aggiungendo il poligono (PolygonExample.objects.create), ottengo un errore:. "L'errore ha rilevato checking Geometry restituito dalla funzione GEOS C "GEOSWKTReader_read"

è il mio codice per l'aggiunta del torto poligono? Io non sono sicuro di aver capito come slot in lat / lon coordinate direttamente.

O si tratta di un errore di installazione GEOS?

Grazie.

È stato utile?

Soluzione

Il tuo WKT ha qualche problema:

  1. coordinata dimensioni sono separate da spazi
  2. coordinate coppie (o tuple) sono separati da virgole
  3. coordinata ordinare è (x, y) - cioè (lon, lat)

Il test di un poligono di tutto il Regno Unito dovrebbe essere simile a questo:

>>> 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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top