Pergunta

Eu estou brincando com Geodjango, e eu só quero acrescentar um campo de polígono simples para um banco de dados e, em seguida, executar um ponto no polígono nele para ter certeza de que tudo está funcionando bem.

Aqui está o meu código em 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)') 

e aqui está o que eu tenho em models.py:

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

Mas quando eu tento adicionar o polígono (PolygonExample.objects.create), eu recebo um erro:. "Erro encontrado verificando Geometria retornou de função GEOS C 'GEOSWKTReader_read'

É o meu código para adicionar o errado polígono? Eu não estou certo que eu entender como slot em latitude / longitude coordenadas diretamente.

Ou isso é um erro de instalação GEOS?

Graças.

Foi útil?

Solução

O WKT tem alguns problemas:

  1. dimensões coordenadas são separados por espaços
  2. pares de coordenadas (ou linhas) são separados por vírgulas
  3. Coordenar ordenação é (x, y) - que é (lon, lat)

Testing um polígono ao redor do Reino Unido deve ficar assim:

>>> 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'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top