Задать вопрос

Использовать ли django.contrib.gis.db.backends.postgis для всего проекта?

В проекте, разработанном на Django, есть задания, которые прикреплены к определенным координатам. Необходимо реализовать сортировку заданий по дистанции от пользователя до задания. Для этого было решено использовать PostGIS, но почитав документацию, стало понятно, что для работы с PostGIS, необходимо использовать движок django.contrib.gis.db.backends.postgis:
DATABASES = {
    'default': {
         'ENGINE': 'django.contrib.gis.db.backends.postgis',
         'NAME': 'geodjango',
         'USER': 'geo',
     }
}

Вопрос заключается в следующем: имеет ли смысл создать отдельную базу данных, которая будет поддерживать PostGIS и работать через движок, описанный выше? Или работать только с одной базой и через один движок django.contrib.gis.db.backends.postgis?

Понимаю, что можно сделать стандартными средствами Postgres'а:
CREATE OR REPLACE FUNCTION distance(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) RETURNS FLOAT AS $$
DECLARE                                                   
    x float = 69.1 * (lat2 - lat1);                           
    y float = 69.1 * (lon2 - lon1) * cos(lat1 / 57.3);        
BEGIN                                                     
    RETURN sqrt(x * x + y * y);                               
END
$$ LANGUAGE plpgsql;

но так не пойдет.
  • Вопрос задан
  • 1274 просмотра
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@TitanFighter
Встала похожая задача. Почитав все что можно, ответа не нашел. Решил сам проверить, как оно будет с одной базой.

1. Под гео данные сделал отдельное приложение app_geo.
2. В инете нашел, что django.contrib.gis.db.models наследуется от django.db.models, по этому в этом апп-е в models.py прописал
from django.contrib.gis.db import models

В моделях других приложений оставил старый вариант
from django.db import models

3. Поменял в settings.py движок, как указано в шапке.

После миграции в базу добавились парочка новых таблиц из app_geo.
В итоге все работает нормально.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы