Обратное геокодирование

Установка последней версии Docker Compose на CentOS 7

Сообщение от вас:

Чтобы установить последнюю версию Docker Compose на CentOS 7, выполните следующие шаги:

  1. Установите Docker:

    • Установите репозиторий Docker:
      sudo yum install -y yum-utils
      sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      
    • Установите Docker:
      sudo yum install -y docker-ce docker-ce-cli containerd.io
      
    • Запустите и активируйте Docker:
      sudo systemctl start docker
      sudo systemctl enable docker
      
  2. Установите Docker Compose:

    • Загрузите последнюю версию Docker Compose:
      sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      
    • Дайте права на выполнение файлу Docker Compose:
      sudo chmod +x /usr/local/bin/docker-compose
      
    • Создайте символическую ссылку:
      sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
      
  3. Проверьте установку Docker Compose:

    docker-compose -v
    

Теперь вы должны увидеть версию Docker Compose, которую вы установили.

 

Быстрый, самостоятельно размещённый сервис обратного геокодирования, построенный на основе данных OpenStreetMap. Имея координаты широты и долготы, он возвращает ближайший адрес улицы, включая номер дома, название улицы, город, штат, округ, почтовый индекс и страну.

Особенности

  • Обратное геокодирование на уровне улицы на основе данных OSM
  • Поиск по адресной точке, названию улицы и интерполяции по адресу
  • Определение административных границ (страна, штат, округ, город, почтовый индекс)
  • Субмиллисекундная задержка запросов с индексными файлами, отображаемыми в памяти
  • Автоматический HTTPS с Let's Encrypt
  • Поддержка Docker с автоматической загрузкой и индексацией PBF

Быстрый старт

Docker Compose

services:
  geocoder:
    image: traccar/traccar-geocoder
    environment:
      - PBF_URLS=https://download.geofabrik.de/europe/monaco-latest.osm.pbf
    ports:
      - "3000:3000"
    volumes:
      - geocoder-data:/data

volumes:
  geocoder-data:
 
docker compose up
 

Docker

# All-in-one: download, build index, and serve
docker run -e PBF_URLS="https://download.geofabrik.de/europe-latest.osm.pbf" \
  -v geocoder-data:/data -p 3000:3000 traccar/traccar-geocoder

# Build index only
docker run -e PBF_URLS="https://download.geofabrik.de/europe-latest.osm.pbf" \
  -v geocoder-data:/data traccar/traccar-geocoder build

# Serve only (from pre-built index)
docker run -v geocoder-data:/data -p 3000:3000 traccar/traccar-geocoder serve

# Multiple PBF files
docker run -e PBF_URLS="https://download.geofabrik.de/europe/france-latest.osm.pbf https://download.geofabrik.de/europe/germany-latest.osm.pbf" \
  -v geocoder-data:/data -p 3000:3000 traccar/traccar-geocoder

# With automatic HTTPS
docker run -e PBF_URLS="https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf" \
  -e DOMAIN=geocoder.example.com \
  -v geocoder-data:/data -p 443:443 traccar/traccar-geocoder
 

Файлы PBF можно скачать с Geofabrik.

Полный индекс Земли займёт около 18 ГБ дискового пространства, поэтому для высокой производительности нужен компьютер с минимум 16 ГБ оперативной памяти или быстрый NVME-носитель.

API

GET /reverse

Параметры запроса:

  • lat - широта (требуется)
  • lon - долгота (требуется)
  • key - Ключ API (обязательно)

Пример запроса:

GET /reverse?lat=43.7384&lon=7.4246&key=YOUR_API_KEY
 

Ответы следуют формату Nominatim:

{
  "display_name": "Avenue de la Costa 42, 98000 Monaco, Monaco",
  "address": {
    "house_number": "42",
    "road": "Avenue de la Costa",
    "city": "Monaco",
    "state": "Monaco",
    "county": "Monaco",
    "postcode": "98000",
    "country": "Monaco",
    "country_code": "MC"
  }
}
 

Поля опускаются, когда они недоступны.

Коды статуса:

  • 200 - успех
  • 401 - отсутствующий или некорректный ключ API
  • 429 - превышенный лимит ставки

Аутентификация

Сервер включает веб-панель управления ключами API. При первом запуске перейдите по URL сервера в браузере, чтобы создать аккаунт администратора. После входа вы можете генерировать API-ключи и создавать дополнительных пользователей с настраиваемыми ограничениями скорости.

Архитектура

Проект состоит из двух компонентов:

  • Builder (C++) — парсирует файлы OSM PBF и создаёт компактный бинарный индекс с использованием ячеек геометрии S2 для пространственного поиска.
  • Server (Rust) — отображает файлы индекса памяти и отправляет запросы через HTTP/HTTPS с задержкой до миллисекунды.

Структура индекса

Сборщик создаёт 14 бинарных файлов:

Файл Описание
geo_cells.bin Объединённый индекс ячеек S2 для улиц, адресов и интерполяций
street_entries.bin Уличные идентификаторы на ячейку
street_ways.bin Заголовки уличных путей (смещение узлов, название)
street_nodes.bin Координаты уличных узлов
addr_entries.bin ID адресных точек на ячейку
addr_points.bin Данные адресных точек (координаты, номер дома, улица)
interp_entries.bin ID путей интерполяции на ячейку
interp_ways.bin Интерполяционные заголовки пути
interp_nodes.bin Координаты узла интерполяции
admin_cells.bin Индекс ячеек S2 для границ администратора
admin_entries.bin Идентификаторы полигонов администратора на ячейку
admin_polygons.bin Метаданные админских полигонов
admin_vertices.bin Вершины админ-полигонов
strings.bin Дедупликационный пул струн

Строительство из источника

Предварительные условия

Builder (C++):

  • CMake 3.16+
  • Компилятор C++17
  • libosmium, protozero, s2geometry, zlib, bzip2, expat

Сервер (Rust):

  • Инструментарий Rust

Строительство

# Build the indexer
mkdir build && cd build && cmake ../builder && make

# Build the server
cargo build --release --manifest-path server/Cargo.toml
 

Беги

# Create index from PBF file
./build/build-index output-dir input.osm.pbf [input2.osm.pbf ...]

# Start the server
./server/target/release/query-server output-dir [bind-address]

# Start with automatic HTTPS
./server/target/release/query-server output-dir --domain geocoder.example.com
 

Переменные среды (Docker)

Переменная Описание По умолчанию
PBF_URLS Разделённый по пробелу список URL для загрузки PBF (требуется для авто/сборки)
DOMAIN Доменное имя для автоматического HTTPS через Let's Encrypt (отключённый)
BIND_ADDR HTTP-адрес связи 0.0.0.0:3000
DATA_DIR Каталог данных для PBF-файлов и индекса /data
CACHE_DIR Каталог кэша сертификатов ACME acme-cache