---
name: zemlya-local-settlements-index
description: "ЗБР: соседние НП из своего OSM-индекса (13 МБ) вместо Overpass — 16 мс против 10-13с; проверка участка 68.7с → 16.3с"
metadata: 
  node_type: memory
  type: project
  originSessionId: d0c6c5aa-4d05-42e2-a1f9-034482b88603
  modified: 2026-08-02T10:10:05.492Z
---

**2026-08-02, «Земля без риска».** Имена соседних населённых пунктов брались из публичного Overpass: 10–13 с на запрос, а вызывается он **три-четыре раза за одну проверку**. Данные всё это время лежали на мини — `geocoder.db` собран из того же `russia-latest.osm.pbf` и содержит 157 207 строк `kind='settlement'` с именем, регионом и координатами.

**Сделано:** `bot/tools/build_settlements_local.py` → компактная БД 13.2 МБ (против 3.3 ГБ исходной) с составным индексом `(lat, lon)`; `bot/services/settlements_local.py` — bbox + точная дистанция + дедуп; `find_nearby_settlement_names` ходит туда, Overpass остался запасным путём. Пересборка подцеплена к `refresh_geocoder.sh`.

**Две вещи, которые легко забыть:**
1. **launchd не читает `/Volumes`** (TCC) — боту обязательно нужна ВНУТРЕННЯЯ копия БД. Тот же приём уже был у `poi.db` и у геокодера сайта; без копии индекс «есть», а бот его не видит.
2. **Сборщик держим в репозитории, а не на Ext.** Внешний диск уже пропадал; данные пересоберутся, скрипт вне git — нет.

**Замеры:** Томск 16 мс/46 имён, СПб 19 мс/60, Тосно 16 мс/2 — против 12.9с и НУЛЯ имён у Overpass. В боевом пайплайне на 50:25:0100210:688 четыре запроса НП уложились в 1.9с, **total 16.3с против 68.7с** у того же участка накануне.

**Охват стал шире:** геокодер относит к `settlement` ещё `suburb` и `quarter` (районы города). Для поисковых запросов к площадкам это плюс, но «Пороховые» и «Полюстрово» — не населённые пункты. У части объектов тип вшит в имя («деревня Рыбацкое»).

**Правило:** если данные уже есть в локальном индексе — наружу не ходим даже «на всякий случай».

См. [[zemlya_slow_check_overpass_gap]], [[avito_qrator_blocks_chrome_fingerprint]], [[mini_launchd_ext_tcc_fda]].
