Интерактивное приложение для пространственного анализа с помощью шестиугольной сетки.
-
React + TypeScript
-
Deck.GL + MapLibre GL
-
Turf.js (hexGrid, centerOfMass, distance)
-
Zustand
-
Ant Design
-
React Query (TanStack Query)
-
Поиск и выбор области по OSM Nominatim API
-
Отрисовка границ выбранной области
-
Генерация шестиугольной сетки поверх области
-
Ввод пользовательских значений для каждой ячейки
-
Расчет "поля напряженности" на основе удаленности
-
Node.js версии ≥ 18.x (скачать: https://nodejs.org)
-
Yarn или npm (npm идет в комплекте с Node.js)
-
Интернет для запросов к Nominatim и тайлов карт
-
Docker Engine (скачать: https://docs.docker.com/get-docker/)
-
(опционально) Docker Compose
Если у вас нет Node.js, используйте Docker. Если нет Docker — установите Node.js.
-
Скачайте установщик с https://nodejs.org и установите LTS-версию (≥18)
-
(Опционально) Установите Yarn глобально:
npm install -g yarn
git clone https://github.com/your-org/geo-map.git
cd geo-map
yarn install
yarn dev
-
Откройте в браузере: http://localhost:5173
-
При изменении кода страница обновится автоматически
yarn build
yarn preview
-
Production-статические файлы в папке
dist
-
Сервер предпросмотра откроется на http://localhost:4173
- Установите Docker Desktop (Windows/macOS) или Docker Engine (Linux):
https://docs.docker.com/get-docker/
-
В корне проекта (где находится
Dockerfile
):docker-compose build
-
Запустите контейнер:
docker-compose up -d
-
Перейдите в браузере: http://localhost:4173
Для остановки выполните:
docker-compose down
geo-map/
├─ src/
│ ├─ api/ # React Query hooks и клиенты для OSM Nominatim
│ ├─ components/ # Компоненты React
│ │ ├─ common/ # Map, Search, DeckOverlay
│ │ └─ features/ # HexagonInputModal и др.
│ ├─ constants/ # MapTiler стили, пути API
│ ├─ helpers/ # Утилиты (createSelectors, debounce и др.)
│ ├─ store/ # Zustand-сторы (location, hexagon)
│ ├─ types/ # TypeScript-описания (GeoJSON, HexagonFeature)
│ ├─ utils/ # hex-geometry.ts, tension-calculator.ts
│ ├─ app.tsx # Корневой компонент
│ └─ index.tsx # Точка входа
├─ Dockerfile # Инструкция для Docker
├─ docker-compose.yml # (опционально) dev-сервис
├─ package.json # Скрипты и зависимости
├─ yarn.lock / package-lock.json
└─ tsconfig.json # Конфигурация TypeScript
-
Поиск локации (
SearchLocation
):-
Debounce пользовательского ввода
-
React Query запрос
/search
к Nominatim -
Сохранение полной OSMLocation в Zustand
-
-
Загрузка GeoJSON (
useGetLocationQuery
):-
Получение границ выбранной области
-
Центрирование карты под эти границы
-
-
Генерация сетки (
hexGrid
из Turf.js):-
Плоские шестиугольники в odd-q вертикальной раскладке
-
Привязка к границе (mask)
-
Сохранение в HexagonFeature (id, value, cellSize)
-
-
Ввод значений (
HexagonInputModal
):-
Открытие по клику на шестиугольник
-
Сохранение значения и source → recalculateTension()
-
-
Расчет напряженности (
calculateTension
):-
centerOfMass
→ центр каждой ячейки -
distance
→ расстояние в км -
Круги соседей: n = ceil(distKm / cellSize)
-
Формула: value += srcValue / n²
-