ШТОСМ

Миллиард

Аманда обратила внимание, что в субботу американский картограф залил в базу линию с круглым номером — 1 000 000 000.

Практического смысла в таких событиях нет, зато это повод отметить рост OpenStreetMap. Как в феврале можно было отпраздновать стамиллионный пакет правок, в апреле — точку 2³³, а скоро мы увидим десятимиллиардную точку.

Таких ошибок, как восемь лет назад, когда номера точек перевалили за 32-битный лимит, и многие приложения сломались, мы уже не допускаем. Или..? Что произойдёт через пару лет, когда номера линий тоже выйдут за 2³², требуя другого типа данных для их хранения? Когда чинили типы для точек, все ли попутно увеличили лимит для линий?

Некоторые готовятся уже сегодня. Например, Overpass API. В нём есть отдельный тип данных, area (области). Его идентификаторы генерируются из идентификатора линий или отношений, добавлением фиксированного очень большого числа. Но что выглядело большим десять лет назад, теперь пугающе близко к настоящим номерам. Для линий выделено окошко всего в 1,2 миллиарда значений. В следующем году нумерация area на замкнутых линиях в Overpass API начнёт пересекаться с областями на отношениях.

В версии 0.7.57 Overpass API, вышедшей в октябре, такая нумерация областей больше не поддерживается. Автор переписал обработку замкнутых линий, и теперь нужно пользоваться либо запросами на поиск области по названию и местоположению, либо кодом way(1234567); map_to_area;.

Хитрости с числами рано или поздно выходят боком. Вспомним проблему 2000 или даты в GPS. Хочется сказать: не делайте так. Но такие оптимизации помогают сделать алгоритмы быстрее и уменьшить их требования к памяти. Аккуратное отношение к типам данных помогло, например, когда-то запихнуть движок OSRM внутрь мобильного приложения MAPS.ME.

Так что решение — не мешок побольше, а постоянная поддержка. Заходить раз в пару лет в репозиторий и проверять, что предположения, сделанные годы назад, ещё верны. Жаль, что в мире открытых исходников популярность не означает денег на поддержку, и некоторые инструменты устаревают просто потому, что некому поменять несколько букв в исходном коде.

Савёловские Мнёвники на Кушелевке под Семково

С этого дня поисковик Nominatim на главной osm.org по запросу «Савёловский» возвращает точно такие же результаты, как по «Савеловский», без «ё». Сара Хоффманн встроила в обработчик данных токенизатор ICU, благодаря которому взаимозаменяемые буквы можно заменять. Это требовало перезаливки данных в базу, которую приурочили к выходу Nominatim 4.0.0.

Действию, очевидному для любого, кто владеет русским языком, Nominatim просили научить с 2018 года. Было два способа: воспользоваться новым токенизатором, добавленным в PostgreSQL за пару месяцев до просьбы, или поправить таблицу автозамены в Nominatim. Последнее K Rahul Reddy сделал слишком поздно: его пул-реквест отклонили, потому что таблицу планировали убрать.

Русскоязычным сервисам было бы разумно забыть о номинатиме и воспользоваться альтернативными поисковыми движками: Pelias или Gazetteer. Не Photon — тот работает на данных Nominatim и пока различает эти буквы. К сожалению, размер имеет значение: несмотря на проблемы с поиском и сложный процесс установки, люди предпочитают пользоваться движками из списка Top 1.

В этом году разработка Nominatim набрала невиданную скорость: релизы выходили один за другим, а Саре постоянно находила что-то новое, о чём рассказать на конференциях или в блоге проекта. Причина — в деньгах. Движок останется открытым на 100%, но это не означает, что разработчики будут голодать. На сайте упомянуты несколько спонсоров — NLNet, OpenCage, GraphHopper, Komoot и другие. Судя по их количеству и по тому, что OSMF, чей грант запустил ускорение проекта, упомянут последним, денег там достаточно, чтобы Сара не занималась ничем другим. Это обнадёживает: может, скоро движок научится другим полезным эвристикам, типа учёта дефисов, пробелов и литер в номерах домов.

Помимо замены самопального токенизатора на стандартный ICU от ассоциации Unicode, в четвёртой версии убрали скрипты командной строки на PHP в пользу единого инструмента на Python. Этот инструмент помогает во всём, от подготовки базы данных до её обновления и администрирования. То есть, кажется, теперь не нужно устанавливать PHP для подготовки данных. В документации дописали большой раздел про настройку движка. И теперь можно подключить базу почтовых индексов для любой страны, а не только для США и Великобритании, как раньше.

Свой Overpass

Сегодня у сайта osm.org появился свой выделенный сервер для запросов к Overpass API. Он не публичный (и пожалуйста, не надо добавлять его себе в зеркала) и предназначен только для одного: поиска объектов вокруг заданной точки. Когда вы выбираете на сайте инструмент «Что здесь?» со стрелочкой и знаком вопроса и тыкаете в карту, сайт запрашивает список у Overpass API (потому что OSM API этого не умеет). Раньше это был сторонний сервер overpass-api.de, теперь — свой.

Эта новость порадует всех, кто пользуется инструментом «что здесь». Как узнать, что стало лучше? Тыкните в любое место три раза подряд. Из-за драконовских ограничений сервера раньше вы гарантированно получили бы ошибку: слишком много запросов. Теперь и на десятый клик сайт стабильно показывает объекты рядом и полигоны, содержащие заданное место. Видеть, как Overpass API работает без сбоев, умилительно: будто вернулся на пять лет назад.

Кажется, это была единственная часть сайта, которая работала нестабильно. После перехода с тайлового CDN (тридцать серверов которого так и стоят без дела) на Fastly ушли проблемы с медленными тайлами. Удивительно, но когда платишь людям за работу, эта работа оказывается сделанной хорошо. Построение маршрутов обеспечивают немецкий сервер OSRM (оплачен FOSSGIS) и немецкий же GraphHopper (витрина их бизнеса), оба стабильные. Чужие тайловые слои работают как часы, включая добавленные за пандемию французский велосипедный и немецкий общественного транспорта.

Но этот переход напоминает, что на самом деле стабильность стоит очень больших денег. Восьмиядерные серверы со ста гигабайтами памяти и терабайтом диска для Overpass API на дороге не валяются. Прокладка маршрута будет вам стоить от 50$ в месяц. Чуть меньше, если поднимете сервер на амазоне сами. Геокодирование платное. Тайлы платные. Кэширующий CDN тоже дорогой. А если хочется бесплатно и по-быстрому, то ограничения делают открытые сервисы бесполезными для публичных проектов.

OpenStreetMap — это открытые и бесплатные карты для каждого. Для каждого человека. Но когда нашими сервисами начинают пользоваться компании, оказывается, что стоимость этого пользования слишком велика. Раньше мы могли банить проблемных пользователей по-одиночке, но теперь их слишком много. Карты нужны всем. И либо ты строишь забор, который мешает и тем, кто растит в саду яблони, либо каждый день будешь видеть длинную очередь людей в костюмах и с пустыми мешками.

Пяти знаков после запятой хватит всем

В начале мая Ньёлл Доусон показал, что свежий QGIS при выборе системы координат EPSG:4326 (или любой другой, основанной на датуме WGS-84, включая 3857) предупреждает: эта СК опасна для точности ваших данных.

*я иногда путаю датум (параметры эллипсоида, как WGS-84), системы координат (как на этот эллипсоид натянуты широта и долгота, как 4326) и проекции (отображение эллипсоида на плоскость, как 3857).

Неужели всё настолько плохо, что WGS-84 нужно отменить? Напомню, эта система координат используется почти везде: в GeoJSON, в приёмниках GPS, в данных OpenStreetMap. Мы рисуем в этой системе поребрики и балконы на домах, пользуясь пучками GPS-треков и RTK для достижения сантиметровой точности.

Проблема в том, как позже разъяснил Ньёлл и ранее — этот отчёт 2019 года, что местные (статические) СК привязаны к земле, а глобальные (динамические) — к общим параметрам земного шара. Австралия, например, медленно плывёт: с 1994 года она сместилась на 1,8 метра на северо-восток. Динамичность WGS-84 означает, что то, что единожны нарисовано в СК на её основе, каждый год нужно сдвигать.

В качестве местных в Австралии используются «слепки» WGS-84: система координат GDA94 была определена в 94 году как «эквивалентная WGS-84». А GDA2020 в прошлом году определили точно так же. Получается, можно преобразовать координаты без пересчитывания GDA94 → WGS-84 → GDA2020 и получить ответ, отличный от преобразования GDA94 → GDA2020.

Земная кора двигается и под остальными континентами, пусть и с меньшей скоростью. WGS-84 — динамическая СК: чтобы точно отражать физические координаты, к широте и долготе в ней нужно добавлять время наблюдений. Иначе, как пишет ИКАО в разделе 3.3.1 инструкции по WGS-84, даже учитывая теоретическую сантиметровую точность GPS-приёмников, точность данных в этой СК не превышает одного метра по горизонтали. То есть, пять знаков после запятой — предел точности для широты и долготы в WGS-84.

Чтобы увеличить точность хранения координат, рядом с ними нужно хранить «эпоху» — то есть, год наблюдений. Проблема в том, что ни один популярный формат хранения геоданных не поддерживает поле метки времени, особенно чтобы учитывать его в преобразованиях координат. После твита Ньёлла это начало меняться: с июня поле epoch добавили в GeoPackage.

GeoJSON и KML неисправимы, шейпфайлы и PostGIS тоже, соответствующее поле WKT CRS не поддерживает даже Proj 8. А вот в OpenStreetMap... формально, все объекты имеют дату создания, которую с натяжкой можно считать нужной меткой времени. Но кто в здравом уме использует OSM как формат для обмена геоданными? А при конвертации информация о времени теряется.

Обойти эту проблему легко: используйте местные, или хотя бы статические, системы координат. GDA2020 (EPSG:7844) для Австралии, ETRS89 (EPSG:4258) для Европы, ГСК-2011 (EPSG:7683) для России. Но скорее всего (ролик с ржущим фермером) у вас нет таких вариантов, и остаётся ждать, когда боги геоджейсона придумают решение. Глобальных СК лучше 4236 нет, поэтому последний QGIS 3.10 по умолчанию всё ещё предлагает эту систему для новых проектов.

Телевизор для картографа

Фрагмент групповой фотографии-коллажа участников State of the Map 2021

На этих выходных мы три дня смотрели заранее записанные ролики с выступлениями осмеров. Сверялись с программой передач, включали в нужное время первую или вторую кнопку, делали перерыв на рекламу (прошлых конференций и плакатов с исследованиями). Так нынче проходят конференции State of the Map: минимум общения, максимум нагрузки на стул.

Все эти дни я писал впечатления в телеграм и — впервые в истории SotM — синхронно переводил доклады. Двадцать одна запись звука ждёт публикации докладов, чтобы прилепиться к ним: вы сможете послушать выступления, не зная английского языка! Очень интересный опыт, пусть из-за него я реже делился впечатлениями. Главный секрет приемлемого перевода — посмотреть запись заранее.

Подытожил впечатления от конференции: «как будто за последние десять лет ничего не произошло». Всё так, но в мелочах было интересно. Много мыслей у ребят, и у всех глаза горят. Вот что спровоцировало на заметки в канале:

  • Мартайн удивился, что приходится выбирать между unclassified и residential, и предложил (т. е. написал пропозал) объединить их в highway=street. Немного истории об unclassified и highway=road.
  • Самый профессионально смонтированный ролик конференции — про сообщество OpenStreetMap в Филиппинах.
  • «Дэйви тараторит с ощущением „аааа ничего не успеваю рассказать пойду вырежу все промежутки между словами“. Рекламирует свой SuperRoute.org, где можно скачать маршруты из OSM, экспортировать в mapsme или в josm, посмотреть историю и ещё и ещё и ещё»
  • Автор OSM2World научил систему отображать схемы помещений и придумал схему тегирования, когда один объект висит на другом. Типа урны на фонарном столбе или почтового ящика на доме. Для этого он переопределил тег support=*, так что непонятно, как сообщество это примет.
  • Сара Хоффман долго распутывала иерархию административных границ и под конец воскликнула прямо то, о чём думают все пользователи сырых данных OSM: ребята, остановитесь, хватит усложнять модели! Это не открытые данные, если их нельзя понять и использовать.
  • Третий день начался с классного академического доклада про переводчик с английского на язык Overpass, но в целом впечатление от академиков так себе. «Как Петер заметил в ответах на вопросы, было бы офигенно видеть исследователей, работающих над задачами от сообщества OSM, а не берущих эти задачи с потолка».
  • Приложение A/B Street выглядит как симсити на базе OSM: ездят машинки и велосипедисты, стоят на светофоре и поворачивают по полосам. Но одно дело — написать, другое — найти, кому эту систему продать. Беда с опенсорсом.
  • А вот иметь редактор а-ля SimCity было бы круто (и ещё семь выводов со встречи авторов мобильных редакторов).
  • Что имеем — не ценим: векторные тайлы сейчас просты, как никогда, но есть ощущение, что это не то, чем стоит заниматься. А Overpass API, обогнавший своё время лет на пять, — это такое же невероятное чудо, как интернет в самолёте. Но мы пользуемся и не удивляемся.
  • Пора идти наполнять OpenHistoricalMap.

Видеозаписи опубликуют, скорее всего, уже к выходным. Пока их нет, воспользуйтесь каталогом русскоязычных ютуберов. Они иногда слишком любят JOSM, но рассказывают и другие интересные вещи.

Ранее Ctrl + ↓

Мнения, высказанные на этом сайте, отражают точку зрения лично автора сайта и ничью больше: ни его бывших или настоящих работодателей, ни семьи и знакомых.