Что такое GeoDjango
GeoDjango — это модуль django.contrib.gis: точки, линии и области в моделях. Запросы по расстоянию и «внутри области» выполняет база PostGIS. Подходит для кафе, филиалов, курьеров и карт.
| Компонент | Роль |
|---|---|
| PostGIS | пространственные типы, индексы, функции ST_* |
| GEOS | объекты Point, Polygon в Python |
| GDAL | форматы файлов, GDAL_LIBRARY_PATH |
| PROJ | преобразование систем координат |
SRID 4326 (WGS 84) — координаты карт и GPS. Правило: сначала долгота (x), потом широта (y).
Установка: PostGIS и GDAL
Для базы проще всего образ postgis/postgis:
services:
db:
image: postgis/postgis:16-3.4
environment:
POSTGRES_DB: geo
POSTGRES_USER: geo
POSTGRES_PASSWORD: change-me
ports:
- "5432:5432"Django нужны GDAL, GEOS и PROJ в системе. Ставить Python-пакет не требуется.
# Ubuntu / Debian / Dockerfile
sudo apt-get install -y gdal-bin libgdal-dev
# macOS
brew install gdalНа Windows установите GDAL через OSGeo4W и укажите путь к DLL в GDAL_LIBRARY_PATH. Имя DLL зависит от версии (например, gdal310.dll).
# settings.py
INSTALLED_APPS = [
# ...
"django.contrib.gis",
"places",
]
DATABASES = {
"default": {
"ENGINE": "django.contrib.gis.db.backends.postgis",
"NAME": "geo",
"USER": "geo",
# PASSWORD and HOST come from environment variables
}
}
# Only if Django cannot find the libraries itself (typical on Windows):
# GDAL_LIBRARY_PATH = r"C:\OSGeo4W\bin\gdal310.dll"⚠️ Ошибка
Could not find the GDAL libraryзначит, что библиотека не найдена: поставьте системный пакет или укажите путь.
Модели и миграции
Импортируйте models из django.contrib.gis.db. PointField хранит точку, MultiPolygonField — область. Пространственный индекс (GiST) создаётся автоматически.