Извлечение контуров
Построение векторных контуров из тайловых GPKG через Potrace (bitmap tracing)
Справка
| Сценарий | Turdsize | Alpha | OptTol | Blur | Buffer |
|---|---|---|---|---|---|
| Точный контур | 0 | 0.5 | 0.1 | 0 | 0 |
| Стандарт (по умолч.) | 2 | 1.0 | 0.2 | 0 | 0 |
| Плавные границы | 2 | 1.334 | 0.5 | 1.0 | 50 |
| Сильное сглаживание | 5 | 1.334 | 1.0 | 2.0 | 100 |
Параметры запроса
| Параметр | Тип | По умолч. | Описание |
|---|---|---|---|
| gpkg_name | string | — | Имя папки GPKG (обязательный) |
| turdsize | int | 2 | Подавление пятен ≤ N тайлов |
| alphamax | float | 1.0 | Скругление углов (0…1.334) |
| opttolerance | float | 0.2 | Оптимизация кривых Безье |
| blur_sigma | float | 0 | Гауссово размытие bitmap |
| threshold | int | 128 | Порог бинаризации (1-255) |
| simplify_tolerance | float | 0 | Упрощение контура (метры) |
| buffer_smooth | float | 0 | Buffer-сглаживание (метры) |
Примеры запросов и ответов
# ── Создать задачу ── curl -X POST http://localhost:8080/api/v1/tasks \ -H "Content-Type: application/json" \ -d '{"gpkg_name": "GTMSK_F_2023.01.21_1.6-1.9_1_2_SA6000_20mm"}' # ── Ответ (202) ── # { # "task_id": "a1b2c3d4e5f6", # "status": "queued", # "gpkg_name": "GTMSK_F_2023...", # "queue_depth": 0 # } # ── Получить результат ── curl http://localhost:8080/api/v1/tasks/a1b2c3d4e5f6 # ── Ответ (200) ── # { # "status": "success", # "duration_ms": 14320, # "result": "2 shapes, 5440 vertices", # "geojson": {"type":"FeatureCollection", ...} # } # ── Обновить настройки ── curl -X PUT http://localhost:8080/api/v1/settings \ -H "Content-Type: application/json" \ -d '{"contour":{"turdsize":2,"alphamax":1.0,"opttolerance":0.2}}'
import requests # ── Создать задачу ── resp = requests.post( "http://localhost:8080/api/v1/tasks", json={"gpkg_name": "GTMSK_F_2023..."}, ) task = resp.json() # ── Получить результат ── result = requests.get( f"http://localhost:8080/api/v1/tasks/{task['task_id']}" ).json() # result["geojson"] содержит GeoJSON FeatureCollection # с полигонами контуров в EPSG:4326
Алгоритм (Potrace)
1. Чтение индекса тайловых позиций из GPKG
2. Построение бинарной bitmap-карты покрытия (1 пиксель = 1 тайл)
3. Опциональное Гауссово размытие (blur_sigma) + бинаризация (threshold)
4. Трассировка контуров через Potrace CLI (turdsize, alphamax, opttolerance)
5. Преобразование SVG-путей из пиксельных координат в геокоординаты
6. Опциональное упрощение (simplify_tolerance)
7. Опциональное Buffer(+d).Buffer(-d) сглаживание (buffer_smooth)
8. Репроекция в EPSG:4326 (WGS84)