Что такое GeoDjango

GeoDjango — это модуль django.contrib.gis: точки, линии и области в моделях. Запросы по расстоянию и «внутри области» выполняет база PostGIS. Подходит для кафе, филиалов, курьеров и карт.

Браузер, Django, GDAL/GEOS/PROJ и PostGIS
Браузер, Django, GDAL/GEOS/PROJ и PostGIS
КомпонентРоль
PostGISпространственные типы, индексы, функции ST_*
GEOSобъекты Point, Polygon в Python
GDALформаты файлов, GDAL_LIBRARY_PATH
PROJпреобразование систем координат

SRID 4326 (WGS 84) — координаты карт и GPS. Правило: сначала долгота (x), потом широта (y).

Установка: PostGIS и GDAL

Для базы проще всего образ postgis/postgis:

text
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-пакет не требуется.

bash
# 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).

python
# 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) создаётся автоматически.