Добавление полигона непосредственно в Geodjango/PostGIS
-
19-09-2019 - |
Вопрос
Я возился с Geodjango и просто хочу добавить простое полигональное поле в базу данных, а затем запустить на нем точку в полигоне, чтобы убедиться, что все работает нормально.
Вот мой код в view.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)')
и вот что у меня есть в models.py:
class PolygonExample(models.Model):
name = models.CharField(max_length=16, db_index=True)
poly = models.PolygonField()
objects = models.GeoManager()
Но когда я пытаюсь добавить многоугольник (PolygonExample.objects.create), я получаю сообщение об ошибке:«Обнаружена ошибка при проверке геометрии, возвращенной функцией GEOS C «GEOSWKTReader_read».
Мой код для добавления многоугольника неправильный?Я не уверен, что понимаю, как напрямую вставлять координаты широты и долготы.
Или это ошибка установки GEOS?
Спасибо.
Решение
Твой ВКТ имеет несколько проблем:
- Координатные размеры разделяются пробелами.
- Пары координат (или кортежи) разделяются запятыми.
- Порядок координат: (x, y), то есть (lon, lat).
Тестирование полигона вокруг Великобритании должно выглядеть так:
>>> 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'
Не связан с StackOverflow