lekss361
f4e74916be
feat(site-finder): P1 geometry suitability score ( #45 )
...
Backend (parcels.py):
- _polygon_suitability() — Shapely metrics on parcel WGS84 polygon:
area_ha/m2 (projected via cos(lat) к UTM-like meters), perimeter_m,
aspect_ratio (long/short side of MABR), convex_hull_ratio (area / hull area),
min_inscribed_rect_dim_m.
- Composite suitability score 0..1:
base = area_subscore (0 при <0.2 ha, linear → 1 при ≥0.5 ha)
−0.3 если aspect_ratio > 5 (вытянутый)
−0.3 если convex_hull_ratio < 0.65 (изрезанный)
−0.5 если min_inscribed_rect_dim_m < 30 (узкий)
- Label: микро / подходящий / сложная форма / слабо подходит
- Recommendation: "для МКД 16+ нужно >0.3 ha + минимум 40м"
- В analyze response → geometry_suitability.
Frontend:
- Новый GeometrySuitabilityBlock.tsx с color-coded badge + метрики grid +
penalties + recommendation
- Добавлен в LandTab (выше "Зонирование (ПЗЗ)")
- TS типы расширены: GeometrySuitability
Closes #45 .
2026-05-12 00:51:08 +03:00
lekss361
2cbcea9e73
fix(zoning): NSPD blocks bot access — fallback to deep-links (PKK6 API closed 2024)
2026-05-11 22:56:50 +03:00
lekss361
ab0647e4d5
feat(site-finder): distance to EKB center + success quartirography recommendation
2026-05-11 22:35:21 +03:00
lekss361
8be539ddc6
feat(site-finder): ПЗЗ territorial zones from Rosreestr PKK6 + zoning in analyze
2026-05-11 21:51:51 +03:00
lekss361
923f250926
feat(site-finder): /parcels/{cad}/isochrones via OpenRouteService
2026-05-11 21:44:22 +03:00
lekss361
6ce634a9b9
feat(site-finder): utilities (power/pipeline) + fix Внешние факторы layout
2026-05-11 21:38:20 +03:00
lekss361
2855a01ca7
feat(site-finder): v3.5 - seasonal weather + hydrology + geotech risk
2026-05-11 21:32:07 +03:00
lekss361
7bb51aa838
feat(site-finder): v3.4 - weather enrichment (temp/precip/UV) + geology stub
2026-05-11 21:17:57 +03:00
lekss361
7900dc5238
fix(site-finder): WKT LINESTRING needs commas + rosreestr_deals real column names
2026-05-11 20:58:49 +03:00
lekss361
232c81eae9
feat(site-finder): v3.3 - score label + market_trend + multi-thematic bulk
2026-05-11 20:51:59 +03:00
lekss361
1e9d32ee3c
feat(site-finder): v3.2 — noise + air quality + wind analytics
2026-05-11 20:42:37 +03:00
lekss361
f419900968
feat(site-finder): v3.1 — cad_parcels_geom, analyze fallback, POI lat/lon, OSM expand
...
- nspd_geo: add _save_parcel() for thematic_id=1 → cad_parcels_geom (UPSERT,
ST_Transform from Web Mercator); _persist_target now handles 1/2/5
- parcels.py: analyze endpoint geom lookup extended with cad_parcels_geom as
3rd fallback source (after cad_quarters_geom, cad_buildings); both SELECT
and WKT subqueries updated
- parcels.py: POI score_breakdown items now include lat/lon for map markers
- poi_loader: OSM_CATEGORIES expanded — college+university→school,
hypermarket→shop_supermarket; coverage +3 tag pairs
2026-05-11 19:52:19 +03:00
lekss361
a7d7dc9667
fix(site-finder): dedupe competitors — same domrf_kn_objects 3x snapshots bug
2026-05-11 19:04:29 +03:00
lekss361
a4e8fff5ac
feat(site-finder): POST /parcels/{cad}/analyze endpoint + UI
...
Backend:
- analyze endpoint: cad → geom lookup → POI within 1km → district
context → competitors within 3km. Tram_stop carries negative weight.
Frontend /site-finder:
- CadInput regex-validated (default 66:41:0204016:10)
- SiteMap (Leaflet via next/dynamic) with parcel polygon + legend
- ScoreCard color-coded (>5 green, 2-5 yellow, <2 red) with tram-warning
- CompetitorTable top-20 with same-district highlight
- useSiteAnalysis hook + TS types
2026-05-11 18:11:58 +03:00
lekss361
b95559eac9
init
2026-04-25 13:45:19 +03:00