Access A3: Per-category routing-radius decay (closes Limit_POI_Factor_Tiny) #41

Closed
opened 2026-05-11 20:16:25 +00:00 by lekss361 · 1 comment
lekss361 commented 2026-05-11 20:16:25 +00:00 (Migrated from github.com)

Эшелон: 🟡 Accessibility — routing вместо straight-line

Контекст / проблема

Limit_POI_Factor_Tiny_OPEN — POI ratio 0.99-1.02 равномерно по районам, weight 5% обесцвечен. Корень — hardcoded 1км radius для всех категорий + straight-line distance. После A1 (OSRM) можно переписать на routing + per-category radius.

Что сделать

  1. Заменить ST_Distance(geography) на OSRM /table query (один HTTP call per analyze, batch до 1000 POI):
    distances_min = osrm_table(parcel_centroid, [(p.lon, p.lat) for p in poi_rows])
    
  2. Per-category radius (минут пешком, не метров прямой):
    _CATEGORY_RADIUS_MIN = {
        "metro_stop": 20,      # 20 мин пешком
        "school": 15,
        "kindergarten": 10,
        "park": 10,
        "pharmacy": 12,
        "shop_supermarket": 12,
        "tram_stop": 15,       # с negative weight
        ...
    }
    
  3. Per-category decay function (не только linear):
    • metro: linear decay
    • school/kindergarten: piecewise (full weight 0-5 мин, decay 5-15 мин, ноль после)
    • park: step function (full если в 10 мин, иначе 0)
  4. Acceptance: разброс final POI score между лучшими и худшими участками вырастает с 1.02× до >3×

Acceptance

  • POI ratio range 0.99-1.02 → expand to >0.5-3.0
  • Тест 20 случайных cad: relative ordering качественной экспертной оценки сохраняется
  • Latency analyze <2s (OSRM table batch effective)

Owner

backend-engineer

Effort

1–2 дня

Dependencies

  • A1 (OSRM service)
  • Опционально lay-over: A2 (если структура изохрон даст radius bounds)

Closes / refs

**Эшелон:** 🟡 Accessibility — routing вместо straight-line ## Контекст / проблема [Limit_POI_Factor_Tiny_OPEN](https://obsidian.gendsgn.ru/) — POI ratio 0.99-1.02 равномерно по районам, weight 5% обесцвечен. Корень — hardcoded 1км radius для всех категорий + straight-line distance. После A1 (OSRM) можно переписать на routing + per-category radius. ## Что сделать 1. Заменить `ST_Distance(geography)` на OSRM `/table` query (один HTTP call per analyze, batch до 1000 POI): ```python distances_min = osrm_table(parcel_centroid, [(p.lon, p.lat) for p in poi_rows]) ``` 2. Per-category radius (минут пешком, не метров прямой): ```python _CATEGORY_RADIUS_MIN = { "metro_stop": 20, # 20 мин пешком "school": 15, "kindergarten": 10, "park": 10, "pharmacy": 12, "shop_supermarket": 12, "tram_stop": 15, # с negative weight ... } ``` 3. Per-category decay function (не только linear): - metro: linear decay - school/kindergarten: piecewise (full weight 0-5 мин, decay 5-15 мин, ноль после) - park: step function (full если в 10 мин, иначе 0) 4. Acceptance: разброс final POI score между лучшими и худшими участками вырастает с 1.02× до >3× ## Acceptance - [ ] POI ratio range 0.99-1.02 → expand to >0.5-3.0 - [ ] Тест 20 случайных cad: relative ordering качественной экспертной оценки сохраняется - [ ] Latency analyze <2s (OSRM table batch effective) ## Owner `backend-engineer` ## Effort 1–2 дня ## Dependencies - **A1** (OSRM service) - Опционально lay-over: A2 (если структура изохрон даст radius bounds) ## Closes / refs - **Closes [Limit_POI_Factor_Tiny_OPEN](https://obsidian.gendsgn.ru/)**
Owner

Status update — НЕ реализовано. Зависит от #39 (OSRM A1), который тоже не сделан. POI расстояния продолжают считаться через ST_Distance(geography) straight-line.

Limit_POI_Factor_Tiny пока open. Issue остаётся в backlog priority/normal.

Status update — НЕ реализовано. Зависит от #39 (OSRM A1), который тоже не сделан. POI расстояния продолжают считаться через `ST_Distance(geography)` straight-line. `Limit_POI_Factor_Tiny` пока open. Issue остаётся в backlog priority/normal.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#41
No description provided.