Adds site-finder/ subfolder with:
- server.py — FastAPI scoring service v2 (35 endpoints, ~85KB)
- 01_load_sites.py … 12_more_pois.py — data ingest pipeline
- db_init.py — SQLite schema bootstrap
- static/ — Leaflet UI (index.html ~3500 lines + sw.js)
- cache/ — small persistent caches (admin districts, jk polygons,
geocode warm cache, parcel polygons drop-zone with README)
- reports/ — sample generated parcel report (HTML+JSON)
Excluded via .gitignore (regeneratable, too big for git):
- analysis.db (336MB SQLite — rebuild via 01_*..12_*.py)
- cache/objective_raw/ (1.2GB Объектив raw dumps)
- cache/overpass_raw.json, cache/osm_buildings_all.geojson
(regen from Overpass API)
Production deploy: /opt/gendesign/site-finder/ on gendsgn.ru
(container gendesign-site-finder-1, served at /sf/).
77 lines
No EOL
11 KiB
HTML
77 lines
No EOL
11 KiB
HTML
<!doctype html>
|
||
<html lang=ru><head><meta charset=utf-8>
|
||
<title>Анализ участка Участок 66:41:0204016:10</title>
|
||
<style>
|
||
body{font-family:-apple-system,Segoe UI,sans-serif;max-width:980px;margin:32px auto;padding:0 16px;color:#222;line-height:1.5}
|
||
h1{font-size:24px;margin:0 0 8px}
|
||
h2{font-size:18px;margin-top:32px;border-bottom:1px solid #eee;padding-bottom:6px}
|
||
.kpi{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:18px 0}
|
||
.kpi div{background:#f5f7fa;border-radius:8px;padding:14px}
|
||
.kpi b{display:block;font-size:11px;color:#666;text-transform:uppercase;margin-bottom:4px}
|
||
.kpi span{font-size:24px;font-weight:600}
|
||
.big{font-size:42px;font-weight:700;color:#0a6}
|
||
table{border-collapse:collapse;width:100%;margin:8px 0;font-size:13px}
|
||
th,td{border:1px solid #ddd;padding:6px 10px;text-align:left}
|
||
th{background:#f5f7fa;font-weight:600}
|
||
.r{text-align:right}
|
||
.g{color:#0a6;font-weight:600}
|
||
.r.r{color:#c33;font-weight:600}
|
||
.muted{color:#888;font-size:12px}
|
||
.note{background:#fffbe6;border-left:4px solid #f0c000;padding:10px 14px;border-radius:4px;margin:12px 0}
|
||
</style></head><body>
|
||
<h1>Анализ участка <code>66:41:0204016:10</code></h1>
|
||
<div class=muted>Сгенерировано 2026-05-08T00:34:04 · Сравнение с 380 строящимися ЖК Екатеринбурга</div>
|
||
|
||
<div class="note">
|
||
Координаты участка получены из ссылки на NSPD-карту (EPSG:3857 → WGS84):
|
||
<b>56.878913, 60.522615</b>. Район — центрально-северная часть ЕКБ (Пионерский / Втузгородок).
|
||
</div>
|
||
|
||
<div class=kpi>
|
||
<div><b>Итоговый балл</b><span class=big>72.1</span><span class=muted>из 100</span></div>
|
||
<div><b>Ранг по ЕКБ</b><span>#183 / 381</span></div>
|
||
<div><b>Перцентиль</b><span>52%</span></div>
|
||
<div><b>Медиана ЖК</b><span>70.9</span></div>
|
||
<div><b>Топ-25% ЖК ≥</b><span>81.7</span></div>
|
||
</div>
|
||
|
||
<h2>Компоненты (взвешенные)</h2>
|
||
<table><thead><tr><th>Компонент</th><th class=r>Участок</th><th class=r>Медиана ЖК</th><th class=r>P75 ЖК</th><th class=r>Δ vs медиана</th></tr></thead>
|
||
<tbody><tr><td>economic</td><td class='r'>40.2</td><td class='r'>47.2</td><td class='r'>59.5</td><td class='r r'>-7.0</td></tr><tr><td>education</td><td class='r'>79.5</td><td class='r'>75.9</td><td class='r'>94.7</td><td class='r g'>+3.6</td></tr><tr><td>health</td><td class='r'>88.7</td><td class='r'>83.2</td><td class='r'>98.3</td><td class='r g'>+5.5</td></tr><tr><td>leisure</td><td class='r'>98.4</td><td class='r'>86.1</td><td class='r'>96.9</td><td class='r g'>+12.3</td></tr><tr><td>retail</td><td class='r'>100.0</td><td class='r'>100.0</td><td class='r'>100.0</td><td class='r '>+0.0</td></tr><tr><td>transit</td><td class='r'>69.7</td><td class='r'>70.0</td><td class='r'>85.0</td><td class='r r'>-0.3</td></tr></tbody></table>
|
||
<div class=muted>Веса: образование 20% · здоровье 10% · ритейл 15% · транспорт 15% · досуг 10% · экономика 30%</div>
|
||
|
||
<h2>Экономика района (Объектив API, последние 90 дней)</h2>
|
||
|
||
<table>
|
||
<tr><th>Район (Объектив)</th><td><b>Старая Сортировка</b> <span class=muted>(по голосованию 5 ближайших ЖК (расст. до репрезентанта 492 м))</span></td></tr>
|
||
<tr><th>Проектов в районе</th><td>6</td></tr>
|
||
<tr><th>Лотов всего / продано</th><td>8,356 / <b>4,078</b> (48.8%)</td></tr>
|
||
<tr><th>Цена за м² (медиана)</th><td><b>114.9 тыс ₽</b> · P25=96.1 · P75=132.7</td></tr>
|
||
<tr><th>Средняя площадь сделки</th><td>49.0 м²</td></tr>
|
||
<tr><th>Скорость продаж (real)</th><td><b>2.7</b> зарег. ДДУ/корпус/мес <span class=muted>(по 12 мес)</span></td></tr>
|
||
<tr><th>Средняя готовность</th><td>75.8%</td></tr>
|
||
<tr><th>Цена corp_sum (взвеш.)</th><td class=muted>128.3 тыс ₽/м² · скорость 0.5</td></tr>
|
||
<tr><th>Распродажа стока (corp_sum)</th><td class=muted>15.9 мес</td></tr>
|
||
</table>
|
||
<p class=muted><b>real_*</b> рассчитаны по 8,356 лотам из Поквартирные/Лоты (303 677 квартир Екб). Это per-flat, основной источник правды.</p>
|
||
|
||
|
||
<h2>Ближайшие POI вокруг участка</h2>
|
||
<table><thead><tr><th>Категория</th><th>Ближайший</th><th class=r>До него</th><th class=r>В 500 м</th><th class=r>В 1 км</th></tr></thead>
|
||
<tbody><tr><td>kindergarten</td><td>Детский сад № 357</td><td class='r'>380 м</td><td class='r'>1.0</td><td class='r'>4.0</td></tr><tr><td>school</td><td>Школа № 122</td><td class='r'>792 м</td><td class='r'>0.0</td><td class='r'>3.0</td></tr><tr><td>university</td><td>Железнодорожный техникум</td><td class='r'>906 м</td><td class='r'>0.0</td><td class='r'>1.0</td></tr><tr><td>pharmacy</td><td>Вита Экспресс</td><td class='r'>471 м</td><td class='r'>1.0</td><td class='r'>8.0</td></tr><tr><td>clinic</td><td>Инвитро</td><td class='r'>450 м</td><td class='r'>1.0</td><td class='r'>6.0</td></tr><tr><td>hospital</td><td>Дорожная больница станции Екатеринбург-Пассажирский</td><td class='r'>1761 м</td><td class='r'>0.0</td><td class='r'>0.0</td></tr><tr><td>shop_big</td><td>Магнит</td><td class='r'>20 м</td><td class='r'>3.0</td><td class='r'>10.0</td></tr><tr><td>shop_med</td><td>Кировский</td><td class='r'>450 м</td><td class='r'>1.0</td><td class='r'>12.0</td></tr><tr><td>shop_small</td><td>—</td><td class='r'>—</td><td class='r'>0.0</td><td class='r'>0.0</td></tr><tr><td>bus_stop</td><td>Билимбаевская</td><td class='r'>320 м</td><td class='r'>4.0</td><td class='r'>20.0</td></tr><tr><td>tram_stop</td><td>Расточная улица</td><td class='r'>598 м</td><td class='r'>0.0</td><td class='r'>8.0</td></tr><tr><td>metro</td><td>—</td><td class='r'>—</td><td class='r'>0.0</td><td class='r'>0.0</td></tr><tr><td>park</td><td>—</td><td class='r'>566 м</td><td class='r'>0.0</td><td class='r'>3.0</td></tr><tr><td>playground</td><td>—</td><td class='r'>163 м</td><td class='r'>12.0</td><td class='r'>22.0</td></tr><tr><td>sports</td><td>—</td><td class='r'>243 м</td><td class='r'>7.0</td><td class='r'>16.0</td></tr></tbody></table>
|
||
|
||
<h2>10 ближайших ЖК (для прямого бенчмарка)</h2>
|
||
<table><thead><tr><th class=r>Расст.</th><th>Название</th><th>Район</th><th>Девелопер</th><th>Класс</th><th class=r>Балл</th><th class=r>Ранг</th></tr></thead>
|
||
<tbody><tr><td class='r'>492 м</td><td>Квартал "Траектория"</td><td>Железнодорожный</td><td>Брусника</td><td></td><td class='r'>66.6</td><td class='r'>#223</td></tr><tr><td class='r'>994 м</td><td>Квартал Депо</td><td>Железнодорожный</td><td>Брусника</td><td></td><td class='r'>69.5</td><td class='r'>#206</td></tr><tr><td class='r'>994 м</td><td>Квартал Депо</td><td>Железнодорожный</td><td>Брусника</td><td></td><td class='r'>73.3</td><td class='r'>#176</td></tr><tr><td class='r'>1036 м</td><td>Астон. Движение</td><td>Железнодорожный</td><td>Астон</td><td></td><td class='r'>64.3</td><td class='r'>#240</td></tr><tr><td class='r'>1211 м</td><td>Жилой Комплекс "Раута" </td><td>Железнодорожный</td><td>Эталон</td><td></td><td class='r'>72.0</td><td class='r'>#186</td></tr><tr><td class='r'>1312 м</td><td>Жилой Комплекс "Раута" </td><td>Железнодорожный</td><td>Эталон</td><td></td><td class='r'>74.4</td><td class='r'>#168</td></tr><tr><td class='r'>3065 м</td><td>ЖК Белая Башня</td><td>Орджоникидзевский</td><td>Ривьера Инвест Екатеринбург</td><td></td><td class='r'>81.2</td><td class='r'>#106</td></tr><tr><td class='r'>3596 м</td><td>ЖК "ПАЙЕР"</td><td>Железнодорожный</td><td>Самолет</td><td></td><td class='r'>58.8</td><td class='r'>#267</td></tr><tr><td class='r'>3612 м</td><td>ЖК ТЕМП</td><td>Орджоникидзевский</td><td>Практика</td><td></td><td class='r'>81.4</td><td class='r'>#104</td></tr><tr><td class='r'>4021 м</td><td>ЖК "Парк Победы"</td><td>Орджоникидзевский</td><td>PRINZIP</td><td></td><td class='r'>80.3</td><td class='r'>#118</td></tr></tbody></table>
|
||
|
||
<h2>Топ-10 ЖК ЕКБ по локационной привлекательности</h2>
|
||
<table><thead><tr><th class=r>Ранг</th><th>Название</th><th>Район</th><th>Девелопер</th><th>Класс</th><th class=r>Балл</th></tr></thead>
|
||
<tbody><tr><td class='r'>#1</td><td>—</td><td>Железнодорожный</td><td>ТЭН</td><td></td><td class='r'>91.2</td></tr><tr><td class='r'>#2</td><td>Квартал «Лайв»</td><td>Ленинский</td><td>Атомстройкомплекс</td><td></td><td class='r'>91.0</td></tr><tr><td class='r'>#3</td><td>Клубный дом инженера Ятеса</td><td>Железнодорожный</td><td>ТЭН</td><td></td><td class='r'>91.0</td></tr><tr><td class='r'>#4</td><td>Клубный дом инженера Ятеса</td><td>Железнодорожный</td><td>ТЭН</td><td></td><td class='r'>90.7</td></tr><tr><td class='r'>#5</td><td>Квартал "На Некрасова"</td><td>Железнодорожный</td><td>Брусника</td><td></td><td class='r'>90.6</td></tr><tr><td class='r'>#6</td><td>ЖК "Азина 16"</td><td>Железнодорожный</td><td>ЛСР</td><td></td><td class='r'>90.4</td></tr><tr><td class='r'>#7</td><td>Жилой дом "ТЕТРО"</td><td>Железнодорожный</td><td>Девелоперская компания "Люди"</td><td></td><td class='r'>90.2</td></tr><tr><td class='r'>#8</td><td>Жилой квартал «Тихий центр» 1 оч. 1 этап</td><td>Железнодорожный</td><td>Синара-Девелопмент</td><td></td><td class='r'>90.1</td></tr><tr><td class='r'>#9</td><td>ЖК "Кайдзен"</td><td>Верх-Исетский</td><td>Астра</td><td></td><td class='r'>90.0</td></tr><tr><td class='r'>#10</td><td>ЖК "Азина 16"</td><td>Железнодорожный</td><td>ЛСР</td><td></td><td class='r'>89.7</td></tr></tbody></table>
|
||
|
||
<h2>Методика</h2>
|
||
<p><b>Источник POI:</b> OpenStreetMap (Overpass API), bbox по всем 381 ЖК Свердл.</p>
|
||
<p><b>Логика:</b> для каждой категории — расстояние-в-балл (piecewise linear от <i>ideal_m</i> к <i>max_m</i>),
|
||
далее агрегация в 5 компонент с весами (max-pool там, где категории альтернативны: ритейл = max(big, 0.7×med); транспорт = max(metro, 0.85×tram, 0.7×bus)).
|
||
Финальный балл — взвешенная сумма компонент.</p>
|
||
<p><b>База данных:</b> локальная SQLite <code>analysis.db</code> (sites/pois/features/scores), под-выборка строящихся ЖК ЕКБ из прода <code>domrf_kn_objects</code>.</p>
|
||
</body></html> |