Добавление многоугольника прямо в Geodjango / PostGIS - PullRequest
2 голосов
/ 01 октября 2009

Я возиться с Geodjango, и я просто хочу добавить простое поле многоугольника в базу данных, а затем запустить на нем точку-полигон, чтобы убедиться, что все работает нормально.

Вот мой код в 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)') 

и вот что у меня есть в 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?

Спасибо.

1 Ответ

5 голосов
/ 06 октября 2009

Ваш WKT имеет несколько проблем:

  1. Размеры координат разделены пробелами
  2. Пары координат (или кортежи) разделяются запятыми
  3. Порядок координат: (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'
...