django — добавить ТОЧКУ в базу данных PostgreSQL, используя GeoDjango из десятичных координат

Я использую PostGIS с django. Я знаю, как добавить «POINT» в PostgreSQL из десятичных координат, но как мне добавить ее с помощью GeoDjango?

Вот как я это делаю в PostgreSQL:

UPDATE "my_table" SET coordinates=GeometryFromText('POINT(-93.7505 31.3059)',4269) WHERE id=101;

Как мне сделать то же самое из django?


person avatar    schedule 25.02.2011    source источник


Ответы (1)


Вот что, я думаю, вы просите:

GeoDjango использует объектно-реляционный преобразователь. В вашем файле models.py вам нужно будет определить модель, которая включает точку, например:

class my_points(models.Model):
  name = models.CharField(max_length = 100)
  coords = models.PointField()

Затем в одном из ваших представлений вам нужно будет создать экземпляр объекта my_points:

a = my_point(name="example", coords=x,y)

Я предполагаю, что это не идеально синтаксически, но API модели GeoDjango: http://docs.djangoproject.com/en/dev/ref/contrib/gis/model-api/ и руководство по обычным моделям geodjango: http://docs.djangoproject.com/en/dev/topics/db/models/, вероятно, приведет вас туда, где вам нужно идти. Надеюсь, это поможет.

Редактировать: Хорошо, я не понял вашего сообщения. «добавить ТОЧКУ» указал мне, что вы хотите добавить ее. Однако ваш оператор SQL предназначен для обновления значения.

Для обновления значений в базе данных вам все равно понадобится модель. Я буду исходить из того, что у вас есть настроенная модель под названием «my_points».

from django.contrib.gis.geos import GEOSGeometry
# queries the database for the object with an id=101
a = my_points.objects.get(id=101)
# defines your point
pnt = GEOSGeometry('POINT(5 23)')
# updates the object in memory
a.coords = pnt
# saves the changes to the database
a.save()
person canisrufus    schedule 25.02.2011
comment
Используя GeoDjango, я хочу выполнить запрос на обновление таблицы с полем геометрии POINT. - person avatar; 25.02.2011
comment
Не знаю, как работает SO. Обновил свой пост, однако. Надеюсь, это более полезно - person canisrufus; 25.02.2011