Социальные объекты

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

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Расчёты и диагностика → «Социальные объекты». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
просмотр и поиск — всем, кто вошёл; загрузки, «Скрыть» и «Скрытые» — роль администратора и включённая правка данных на сервере.
Читаю как

Возможности

  • Видеть, сколько в городе школ, детских садов, больниц, поликлиник и соцучреждений; чипы включают и выключают вид в списке и на карте.
  • Найти объект по названию или адресу; кнопка в строке приближает карту к нему.
  • «Показать на карте» — точки выбранных видов поверх сети, цвет — по виду; «Убрать с карты».
  • Администратор: загрузить объекты из потребителей сети, из файла акимата или из 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 — выход сервера в интернет.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Социальные объекты» — пункт выделен рамкой.

    Пункт «Социальные объекты» в панели «Инструменты»

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

    Окно «Социальные объекты»

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

    Социальные объекты: шаг 3

Примеры

Копия Алматы. 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.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо