Получение кадастровых полигонов на российском сервере¶
Скрипт получает реальные границы земельных участков из Росреестра ПКК
и обновляет properties.json — заменяет точки (Point) на полигоны (Polygon).
Требования к серверу:
- Python 3.10+ (проверить: python3 --version)
- Российский IP (ПКК API заблокирован из-за рубежа)
- ~500 МБ свободного места
- Доступ в интернет
Внешние зависимости не нужны — скрипт использует только стандартную библиотеку Python.
Шаг 1. Подготовка файлов на локальной машине¶
Из корня проекта silent-meadow:
# Создать временную папку для передачи
mkdir -p /tmp/cadastral-job
# Скопировать скрипт и данные
cp .github/scripts/fetch_cadastral_standalone.py /tmp/cadastral-job/
cp frontend/public/data/properties.json /tmp/cadastral-job/
Шаг 2. Загрузить на российский сервер¶
# Замените user@ru-server на ваши данные
scp /tmp/cadastral-job/fetch_cadastral_standalone.py user@ru-server:~/cadastral/
scp /tmp/cadastral-job/properties.json user@ru-server:~/cadastral/
Или если используете другой способ доступа (FTP, панель хостинга), загрузите оба файла в одну папку на сервере.
Шаг 3. Подключиться к серверу¶
Шаг 4. Проверить Python¶
Если Python не установлен:
# Ubuntu/Debian
sudo apt update && sudo apt install -y python3
# CentOS/RHEL
sudo yum install -y python3
Шаг 5. Тестовый запуск (5 участков)¶
Ожидаемый вывод:
Total: 5, already have polygons: 0
Testing PKK API access... OK
[1/5] #1 (55.51697, 35.86733)... OK 50:23:0040203:123 (8 pts)
[2/5] #2 (55.51695, 35.86731)... OK 50:23:0040203:124 (7 pts)
...
Done:
OK: 5
Skipped: 0 (already have polygon)
Failed: 0
Total: 5
Если видите "FAILED! PKK API is not accessible" — сервер не имеет доступа к Росреестру. Нужен другой сервер с российским IP.
Шаг 6. Полный запуск (все 436 участков)¶
# Запуск в фоне через nohup (чтобы не оборвалось при разрыве SSH)
nohup python3 fetch_cadastral_standalone.py properties.json > log.txt 2>&1 &
# Следить за прогрессом
tail -f log.txt
Или без фона:
Время выполнения: ~7-10 минут (436 участков x 2 запроса x 0.5с задержка).
Скрипт сохраняет промежуточный результат каждые 20 участков. Если прервётся — запустите снова, уже обработанные участки будут пропущены.
Шаг 7. Проверить результат¶
# Сколько полигонов получено
python3 -c "
import json
with open('properties.json') as f:
data = json.load(f)
types = {}
for f in data['features']:
t = f['geometry']['type']
types[t] = types.get(t, 0) + 1
print(types)
"
Ожидаемый вывод:
(Некоторые участки могут остаться Point — не найдены в кадастре.)
Шаг 8. Скачать результат на локальную машину¶
# На локальной машине (НЕ на сервере)
scp user@ru-server:~/cadastral/properties.json frontend/public/data/properties.json
Шаг 9. Проверить на карте¶
Откройте карту в браузере — участки должны отображаться как закрашенные полигоны вместо точек-маркеров.
Шаг 10. Очистка на сервере¶
Решение проблем¶
"FAILED! PKK API is not accessible"¶
Сервер не может достучаться до pkk.rosreestr.ru. Проверьте:
curl -s -o /dev/null -w "%{http_code}" --connect-timeout 10 \
"https://pkk.rosreestr.ru/api/features/1?text=&tolerance=50&limit=1" \
-H "User-Agent: Mozilla/5.0"
000 или ошибку — нужен другой сервер.
Скрипт прерван / SSH отключился¶
Просто запустите снова — участки с уже полученными полигонами будут пропущены:
Много ошибок "x not found" / "x no geometry"¶
Координаты в properties.json могут быть неточными (синтетические).
Скрипт ищет участок в радиусе 50 метров от указанной точки.
Если координаты сильно отличаются от реальных — участок не найдётся.
Python версия ниже 3.10¶
Скрипт использует match / type hints из 3.10+. Если на сервере Python 3.8/3.9,
обновите: sudo apt install python3.11 или используйте pyenv.