Full-stack приложение для загрузки и хранения пространственных данных (Shapefile → GeoJSON), визуализации их на карте Leaflet и расчета рейтингов участков относительно водных объектов. Репозиторий уже содержит бэкенд на Spring Boot и статический фронтенд. Было создано для проекта внутри университета. Жесткий вайбкод из-за работы с Shapefile.
- Стек: Java 17, Spring Boot 3.4, Spring Data JPA, Hibernate Spatial, GeoTools, PostgreSQL/PostGIS.
- Основные возможности:
- Прием ZIP-архива с Shapefile (
POST /api/upload) и преобразование в GeoJSON. - Валидация типов объектов (
land_plot,water_channel) и whitelisting колонок DBF. - Хранение исходных файлов и геометрий (таблицы
file_entity,feature_entity). - Расчет рейтингов участков по критериям площади, расстояния до каналов и локальной плотности (
/api/ranking/*).
- Прием ZIP-архива с Shapefile (
- Установите PostgreSQL (желательно с PostGIS). Создайте базу, например
Geo. - Обновите креды в
Backend/src/main/resources/application.properties. - При необходимости укажите диалект PostGIS и иные параметры JPA.
cd Backend
./mvnw spring-boot:run # локальный сервер на http://localhost:8080
./mvnw clean package # сборка jar в Backend/target| Метод | Маршрут | Описание |
|---|---|---|
POST |
/api/upload |
Загрузка архивированного Shapefile с параметром featureType (land_plot/water_channel). |
GET |
/api/files |
Список всех загруженных слоев. |
GET |
/api/files/{id}/features |
Геометрии и свойства фичей выбранного файла. |
GET |
/api/ranking/scores |
Текущие рейтинги участков. |
POST |
/api/ranking/calculate |
Пересчет рейтинга с телом RankingCriteria (необязателен, есть дефолты). |
POST |
/api/ranking/reset |
Сброс уже сохраненных рейтингов. |
- HTML/JS/CSS лежат в
Frontend/. - Карта Leaflet отображает участки и каналы; есть поиск, фильтрация по bounding box, диаграмма свойств Chart.js и легенда рейтингов.
- Клиент обращается к REST API по
http://localhost:8080/api. ИзменитеAPI_BASE_URLвFrontend/js/app.js, если бэкенд размещен иначе.
- Запустите Spring Boot сервис (
localhost:8080). - Поднимите фронтенд (статический сервер).
- Через UI загрузите ZIP Shapefile с корректным
featureType. - Проверьте появление слоев на карте, выполните поиск/фильтрацию.
- Запустите расчет рейтингов через интерфейс (вызывает
/api/ranking/calculate) и визуализируйте результат. - При необходимости сбросьте рейтинг и повторите аналитику.
- При добавлении новых типов объектов расширьте
ALLOWED_FEATURE_TYPESи whitelists вShapefileService.