Социальные объекты
Социальные объекты — школы, детские сады, больницы, поликлиники, соцучреждения: на карте, в выборке «в N м от школ» и в списке зоны отключения.
Возможности
- Видеть, сколько в городе школ, детских садов, больниц, поликлиник и соцучреждений; чипы включают и выключают вид в списке и на карте.
- Найти объект по названию или адресу; кнопка в строке приближает карту к нему.
- «Показать на карте» — точки выбранных видов поверх сети, цвет — по виду; «Убрать с карты».
- Администратор: загрузить объекты из потребителей сети, из файла акимата или из OpenStreetMap; удалить всё из одного источника.
- Администратор: скрыть ошибочно найденный объект («Скрыть — не социальный объект») и вернуть его из списка «Скрытые».
- Объекты используются в других окнах: выборка участков «в N м от школ» и список социальных объектов в зоне отключения.
Как это работает
Объекты хранятся в tgid_poi: вид, название, адрес, источник, точка, отметка «скрыт». Скрытые не попадают на карту, в выборки и в отключения, а повторная загрузка не снимает отметку.
Из потребителей. Название потребителя проверяется по правилам: «больниц», «роддом», «перинатал» — больница; «поликлиник», «амбулатор», «диспансер», «травмпункт» — поликлиника; «детский сад», «д/с», «дс», «ясли» — детский сад; «школ», «гимназия», «лицей», «СОШ» — школа; «интернат», «приют», «дом престарелых» — соцучреждение. Порядок важен: «детская больница» — больница. Автошколы и языковые школы отбрасываются. Объект ставится в точку узла присоединения, по одному на узел и вид; потребители с тем же названием не дальше 150 м сливаются в один объект (здание на нескольких узлах, копии фрагментов). У объекта запоминаются первые 20 потребителей.
Из файла. GeoJSON или CSV (CSV браузер переводит в GeoJSON сам), точки или контуры — у контура берётся точка внутри. Вид — из колонки файла, иначе из поля «Категория, если в файле нет». Объекты дальше 0,5° от охвата сети считаются ошибкой координат: если далеко все — загрузка отклоняется.
Из OpenStreetMap. Запрос к Overpass API в охвате сети города: amenity school, kindergarten, hospital, clinic и doctors (поликлиника), social_facility. Ожидание ответа — до 90 секунд. Загрузка заменяет прежние объекты этого источника.
Загрузка источника обновляет изменённые объекты и удаляет пропавшие. До 20 000 объектов за раз; список в окне — до 2000 строк. Каждое действие администратора пишется в журнал действий.
Что нужно для работы
- Просмотр, поиск и показ на карте — всем, кто вошёл.
- Загрузки, удаление источника, «Скрыть» и «Скрытые» — роль администратора и включённая запись на сервере (
MUTATIONS_ENABLED). - Для OpenStreetMap — выход сервера в интернет.
Шаги
Откройте «Инструменты» и наберите в поиске «Социальные объекты» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

«Показать на карте» — объекты точками цвета своего вида поверх сети: видно, какие школы и больницы стоят у каких участков.

Примеры
Копия Алматы. 890 объектов: школ 301 (274 из OpenStreetMap и 27 из потребителей), детских садов 234 (204 и 30), больниц 80 (79 и 1), поликлиник 265 (262 и 3), соцучреждений 10 (все из OpenStreetMap). Без названия — 129, все из OpenStreetMap.
Объект из потребителей. «д/с восток» найден по названию потребителя и объединяет 7 потребителей; «дс,52» — 10. Если по названию попал не детский сад, администратор скрывает его кнопкой в строке: счётчик «Детские сады» уменьшается на один, объект уходит в «Скрытые».
Если не получается
- «Неизвестная категория: …» — в файле вид, которого нет среди пяти; задайте «Категорию, если в файле нет».
- «В файле нет объектов с точкой и категорией» — нет координат или вида.
- «Все объекты далеко от сети города — проверьте систему координат и порядок «долгота, широта»».
- «OpenStreetMap (Overpass) недоступен: …», «OpenStreetMap (Overpass) ответил <код> — попробуйте позже», «OpenStreetMap (Overpass) вернул не JSON» — служба перегружена или нет интернета; повторите позже.
- «Показаны первые 500 — уточните поиск.» — найдено больше 500 объектов, окно показывает первые 500: уточните поиск или выберите меньше видов.
- Нет кнопок загрузки и «Скрыть» — у вас не роль администратора или запись на сервере выключена.
Для администратора
OVERPASS_URL— свой сервер Overpass вместо общего.- Таблица
tgid_poi; действия записываются в журнал действий как POI_REFRESH, POI_IMPORT_FILE, POI_IMPORT_OSM, POI_UPDATE, POI_DELETE_SOURCE. - Названия из потребителей не маскируются: если потребитель назван по фамилии владельца (частный детский сад), имя попадёт в название объекта. Проверьте объекты из потребителей после загрузки и скройте лишние.
Для разработчика
- API:
GET /api/v1/poi/summary,GET /api/v1/poi(category,source,q,hidden,limitдо 2000),GET /api/v1/poi/geojson,POST /api/v1/poi/refresh-consumers,POST /api/v1/poi/import,POST /api/v1/poi/import-osm,PATCH /api/v1/poi/{id},DELETE /api/v1/poi?source=…. - API, код:
routers/poi.py,database/poi.py; выборка —database/network_select.py(near_poi), отключения —database/outages.py. - Веб:
components/PoiDialog.vue,utils/poi.ts,services/api/poi.ts. - Тесты:
tests/utils/poi.spec.ts; API —test_poi.py; e2e —e2e/functions/other-networks.spec.ts.
