Adição de um polígono directamente em Geodjango / PostGIS
-
19-09-2019 - |
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.
Solução
O WKT tem alguns problemas:
- dimensões coordenadas são separados por espaços
- pares de coordenadas (ou linhas) são separados por vírgulas
- 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'