Избранное

Позднее Ctrl + ↑

OpenStreetMap не ваш

На волне новостей от Google Том Чедвин напомнил о преимуществах открытого софта и закончил заметку словами: «теперь у вас есть железный аргумент для тех, кто спрашивает, почему бы просто не взять Google Maps».

А у меня титановый аргумент в пользу условных Google Maps: потому что у вашей открытой карты нет будущего, вот почему. На ней даже POI нет нормальных, не то, что у гугля, которому все эти точки несут владельцы добровольно. Потому что там не сотня хмурых амбалов, отворачивающих всех, кто несёт данные, а коврик постелен с «добро пожаловать».

Разумеется, это преувеличение. У нас замечательная, красивая карта, которой во многих областях нет не то, что равных, — нет альтернатив. Ниоткуда вы больше не возьмёте в меру корректный граф дорог. Ни по одной другой карте не прикинете плотность населения. Никто не даст вам данные, чтобы установить копию сервиса в закрытой сети.

Но нельзя не заметить, что OpenStreetMap загибается. Не потому, что у нас база данных вместо карты, или модераторов нет, или данные не разделены на слои, как придирался Серж. Для технически подкованного человека поверить в упадок OSM невозможно: это же децентрализованные данные, они по определению вечны. Кроме того, они бесплатны и наполняются миллионом редакторов по всему миру: почему их не использует каждый первый сайт?

А дело в том, что невозможно нас использовать. OSM проигрывает любой альтернативе по одной причине: нет контроля. Ни у кого. Ни над чем. OpenStreetMap примерно с 2012 года на автопилоте летит в бездну, и редкие попытки выправить курс наталкиваются на хмурых амбалов, защищающих ручки управления со словами «не позволим захватить власть» и «у нас саморегулирующийся проект». Сила проекта оказалась его слабостью — и, кажется, фатальной.

Над картой нет контроля. Хотите импортировать сеть своих магазинов? Фигушки, ваше качество данных не отвечает нашим критериям. Хотите порисовать свой посёлок? Познакомьтесь с местным вахтёром, который сначала поругает вас за выбор классов дорог, а затем пропадёт, потому что вы невыносимы. А вахтёрам, кстати, тоже несладко: четырнадцатый год проекту, а лучшее, что мы смогли сделать для контроля качества, — OSMCha. Пользователи которого до сих пор стонут от диаметров больших, но худых пакетов правок. Автора OWL мы успешно потеряли. Члены DWG до сих пор для работы пользуются скриптами на Perl из прошлого десятилетия.

Над сайтом нет контроля. Это прочувствовал каждый, кто делал пул-реквесты в любой элемент нашей основной инфраструктуры. Никогда вы не услышите спасибо, зато комментариев соберёте полное лукошко. Два человека на страже не пропускают никаких концептуальных изменений: будто посреди рушащегося мира нужно удержать хотя бы то, что есть. Не понять им, что они так крепко держат, что мир крошится в их руках.

Над моделью данных нет контроля. В последний раз для изменения API потребовались деньги и усилия целой компании Cloudmade, десятка осмеров, работавших за венчурные инвестиции несколько недель. Надежда на тип area или другие изменения тлела лет пять назад, но теперь об изменениях перестали думать даже самые оптимистичные осмеры. Единственное, что нас ждёт в API, — это огораживание личных данных для GDPR, да и то потому что штраф платить никто не хочет.

Над тегированием нет контроля. Главное отличие и достоинство OpenStreetMap — свободная атрибутивная модель — настолько разрослась, что никому, даже ветеранам проекта, не под силу выбрать правильные теги. Форумы полнятся шутками про вереск, лес и пространства имён. Пропозалы — смех: с одной стороны изобретают инопланетные схемы на полсотни килобайт, с другой изворачиваются в попытках потопить каждое предложение. Новички не офигевают только потому, что все редакторы, даже мобильные, заменили таблицы тегов заготовками.

Над картостилем нет контроля. Когда-то основной стиль был настолько сложен, что все боялись к нему притронуться. Потом его перевели на CartoCSS, навели порядок, и сразу потянулись участники, пошла работа. Несколько лет улучшали значки и цвета, поменяли структуру базы данных, причесали шрифты — карта стала выглядить прилично, как у людей. Такая же блёклая.

Но сейчас заметно, что никто не знает, куда двигаться дальше. Собственно, Пол Норман с этой темой уже два года выступает на конференциях. На конвульсии разработчиков особенно тяжело смотреть в этом году: они безуспешно пытаются изменить устоявшиеся схемы тегирования, потому что модель данных OSM несовместима с приличной картографией. Мы упёрлись в потолок стека, написанного пять лет назад. Единственным разумным выходом будет выкинуть всё и начать заново — что авторы и обсуждают.

Над разработчиками нет контроля. «Наш главный ресурс — это люди, которые тянут проект в светлое будущее». Ага, а присмотришься к разработчикам — там кто в лес, кто по дрова. Одни пилят двадцатый геокодер или десятый роутер, другие на две недели погружаются в жонглирование данными, чтобы на выходе получить невпечатляющий набор точек. «Мне удалось поднять тайл-сервер» — слышно из угла. Мои поздравления, блин. 2018 год, а у нас ни окружения для разработчиков или интеграторов, ни финансовой поддержки, ни стратегического плана. Только по одному волонтёру на ключевых элементах инфраструктуры сидят.

Над лицензией нет контроля. Картографы хотят защитить свой труд, это понятно. Отсюда растут все вирусные лицензии, которые когда-то ставили целью сделать мир лучше, открытее. Вот только у них обнаружилась проблема. Для успеха в этом мире нужно уметь договариваться. Взять у муниципалитета информацию по всем зданиям, а взамен предоставлять правки, уточняющие геометрию. Позволить сервису бронирования не раскрывать данные о гостиницах, которые они примешивают, чтобы получить полтора миллиона проверенных точек и иметь возможность исправлять ошибки позиционирования в сервисе, которым пользуются сотни миллионов. И так далее.

Наша лицензия запрещает всё это, от чего третьи стороны не особо страдают — у них уже есть достаточно данных. Страдаем мы, потому что не можем адекватно ни с кем договориться. Участники сообщества зорко следят, чтобы никто не проскочил. Даже с тривиальными случаями использования у нас проблема. Я только за этот год видел полдюжины вопросов насчёт использования карты в телепередачах, и каждый раз на одинаковые вопросы им выдавали разные ответы. Никто, даже юридическая рабочая группа, не понимает ODbL. Но это статус кво, в OpenStreetMap он тут власть.

Как вы знаете, в этом мире чтобы оставаться на месте, нужно быстро бежать. Я читаю новости 2ГИС, Яндекс.Карт, Google Maps и вижу, что они пробуют новые алгоритмы, новые точки зрения. Меняют интерфейсы, постоянно дополняют модели данных, учатся по-новому взаимодействовать с сообществом. Реагируют на проблемы структурными изменениями. В их возможностях всё поменять — или наоборот, причесать данные, сгладить углы, сделать удобно. Они могут купить и продать, чтобы сделать свою карту лучше.

Всё, что на сегодня способно сообщество OpenStreetMap, — сообща за выходные нарисовать домики ещё в одном городе. Поэтому главными применениями проекту остаются гуманитарные инициативы, да использование в качестве подложки, когда не хватило денег на нормальную карту. Вспомните, что у нас такого происходило за последний год, достойного заметок в главных технологических журналах? Новую версию JOSM выпустили с обрезанием пробелов в тегах?

Да, полагаться на проприетарную карту — значит, отдавать часть контроля корпорации. Но вы уверены, что хотите иметь контроль над каждой частью картографического стека? Вам точно хватит денег? Коммерческая компания может изменить условия и поставить вас в неловкое положение, но от OSM её отличает договороспособность. Там работают живые люди и у них есть все рычаги: можно позвонить и сторговать лимиты, или попросить помочь с картографическими данными. Для них вы — клиент; для OSM вы, если чего-то хотите от карты для бизнеса, хуже чем никто.

Поэтому OpenStreetMap не растёт. Если приглядеться, на графиках намечаются негативные тренды. Как викимапия около 2011 года, наш проект выбрал большую часть своих смыслов. С нынешним направлением у нас ещё лет десять, после которых мы будем выглядеть как викимапия сейчас: с кучей данных и без сообщества, разбежавшегося по альтернативным проектам. И тогда уже люди, выбравшие OSM как замену Google Maps, задумаются.

Именно сейчас, в ближайшие два года, нужно найти для проекта новые векторы развития. Риторика «а зато у нас бесплатно», неизменная на протяжении десяти лет, превратилась из прогрессивной в жалкую. Главный вопрос — зачем вам OpenStreetMap, когда есть много альтернативных картографических сервисов, каждый из которых в чём-то его превосходит (и не надо тут про качество отрисовки вашего двора)? Может, мы собираемся перевернуть обучение географии, или стать новой универсальной базовой картой, или заделаться фреймворком для экспериментов в новой картографии. Любой ответ хорош, если вы готовы подкрепить его делом.

А пока что для многих организаций проще взять Google Maps.

Подъездное воскресенье

Яндекс объявил о большой прогулке народных картографов 9 сентября. Единый день, чтобы участники НЯК вышли и собрали в блокноты немного информации для своей карты. «Ваш город полностью отрисован? Мы не верим!» Честно говоря, не верю я и в полноту информации в OpenStreetMap.

10 сентября выходите на улицы тоже! Почему не девятого? Для прогулки хорошо бы иметь повод, и такой нашёлся — ровно два года назад. Тогда мы выходили на подъездное воскресенье и за несколько часов вчетвером собрали и отметили более шестисот подъездов. То есть, их номеров и номеров всех квартир внутри. Но это только в Москве.

Будущее «воскресенье» всероссийское: не важно, назначена ли на этот день встреча картографов в вашем городе. Не важно, свободен ли у вас целый день. Выходите в любое время и обойдите хотя бы десять домов в любом районе, даже в своём. Вечером того же дня откройте JOSM или iD и добавьте или уточните собранные подъезды. В понедельник посмотрим, насколько больше их стало по России.

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

Как собирать

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

Собирать можно двумя способами. Если подготовиться заранее, не будете зависеть от батареек. Распечатайте карту своего района, или подготовьте в QGIS. Возьмите ручку и подписывайте по дороге каждый подъезд. Ставите точку и подпишите рядом номер подъезда и диапазон квартир: «● 2: 16-30». Вернувшись домой, просто перебейте это в OSM: добавляйте в контуры домов точки с тегами:

Если хочется быстро, то нужно взять три устройства: фотоаппарат, GPS-трекер и самокат или велосипед. Проезжаете мимо каждого подъезда и фотографируете табличку с квартирами. От углов делаете общие планы, чтобы вспомнить последовательность. На выходе у вас получится несколько сотен фотографий и трек, которые нужно будет обработать в JOSM. Таким образом два года назад я собирал сто подъездов в час.

Адреса и этажность домов важны — но в вашем городе они могут быть уже отмечены. Если нет, записывайте или фотографируйте и этажи для тега building:levels. Проверьте наличие этого тега и выберите район для подъездного воскресенья на этой карте Overpass (приблизьте свой город и нажмите «Старт»).

Обходные листы в QGIS

Шесть лет назад я написал инструкцию, как печатать обходные листы с использованием современного (на тот год) открытого софта и активно разрабатываемого (на тот год) рендерера Maperitive. Вечером перед тульской картовстречей я посмотрел на каталог этого рендерера и понял, что хватит это терпеть. Но что открыть взамен? В mapnik непросто повернуть карту (а это критично), с эзотерическими рендерерами, типа alaCarte и smrender, долго разбираться. Я уже много лет советую всем QGIS для печати карт — так возьму его сам.

Это одновременно статья про то, как непросто и одновременно несложно было разобраться в инструментах и получить файл pdf с обходными листами, и инструкция. Печатайте больше обходных листов и выводите картографов на улицы. Вам не обязательно загружать собранные объекты именно в OpenStreetMap, но мы были бы рады. А вот данные для печати, кроме как из OSM, взять неоткуда. Начнём с их подготовки.

(Если вы делаете обходные листы, не дочитав заметку до конца, советую заглянуть в главу «волшебство»).

Подготовка данных

Прежде всего, вам понадобятся QGIS версии не ниже 2.14, GDAL не ниже 2.0 и JOSM.

  1. Откройте JOSM, включите «режим эксперта», если ещё не.
  2. В меню «Файл» выберите «Загрузить с Overpass API» и введите туда запрос: (node({{bbox}});<;>);out meta;
  3. Выберите район картовстречи и качайте. А затем сохраните в файл .osm и закрывайте редактор.
  4. Теперь нужен GDAL, чтобы сделать файл для QGIS. Для сохранения тегов типа addr:housenumber нужно настроить ogr2ogr. Если коротко, берите этот osmconf.ini и положите к данным. Возможно, вы захотите добавить тегов в поля attributes разделов [lines] и [multipolygons].
  5. Выполните из командной строки:
ogr2ogr --config OSM_CONFIG_FILE osmconf.ini -t_srs EPSG:3857 -f GPKG party.gpkg party.osm

Здесь мы используем все достижения последних трёх лет: простое скачивание данных из Overpass API, хорошую поддержку формата OSM библиотекой GDAL и формат GeoPackage. Последний опубликован только три года назад и удобен для хранения данных из OSM: в отличие от шейпов, файл получается всего один и при этом непустой.

Файл osmconf.ini в комплекте GDAL разочаровывает на каждом шагу: очень мало тегов, даже адресов нет. И нет полигональных водоёмов. То ли дело файл style, приложенный к osm2pgsql. Воспользовался бы последним, но тогда цепочка получилась бы слишком сложной: osm → osm2pgsql → postgresql → ogr2ogr → gpkg. Два шага в этой цепочке выглядят лишними.

Оформление карты в QGIS

Было бы здорово сказать: «просто используйте этот стиль на ваш файл», как обычно с мапником или маперитивом, но в мире высоких ГИС не всё так просто. Нужно открывать свойства каждого слоя, кликать на цвета, делать дубликаты, фильтровать. Любое ваше действие QGIS запишет в файл проекта, поэтому я не дам свой: кто знает, какую порнографию вы откопаете в tula.qgs. Так что — пошаговая инструкция.

  1. Откройте в QGIS файл GeoPackage и добавьте слои lines и multipolygons. В первом лежат дороги, ручьи и заборы, во втором — здания, парки и водоёмы.
  2. Справа внизу кликните на «EPSG:4326», включите перепроецирование на лету и выберите проекцию EPSG:3857, привычную по растровым картам.
  3. Отфильтруем дороги. Кликните правой кнопкой на слое линий, там — «Фильтр». Выделим улицы: highway in (’trunk’, ’primary’, ’secondary’, ’tertiary’, ’residential’, ’unclassified’, ’pedestrian’)
  4. Теперь оформим: двойной клик на слое, во вкладке стиля цвет #777777 и толщину 0,3 мм.
  5. Во вкладке «Подписи» окна свойств сверху выберите «показывать подписи» и ниже поле «name». Цвет #666666 и размер шрифта 10.
  6. А что с пешеходными дорожками? Правую кнопку на слое, «Дублировать». Правите теги в фильтре на (’footway’, ’path’) и в свойствах: «простая линия», стиль линии ставите в «штриховая».
  7. Аналогично для всех остальных слоёв: линии highway=service, railway=rail, waterway NOT NULL и полигоны воды, парков и зданий building NOT NULL.
  8. Для зданий нужно указать подписи не только с номером дома, но и с этажностью. Справа от выбора поля подписи жмите на кнопку «ε» и введите формулу: addr_housenumber || ’/’ || building_levels

На этапе фильтрации данных в слое я понял, что импорт файлов OSM напрямую — это шляпа: на любой чих QGIS мне мерзко отвечал: «какая-то проблема в вашем SQL». Поэтому нужен GeoPackage. Можно справиться и с более старым Spatialite, но зачем.

После танцев с бубном в Maperitive (да, я помню их спустя шесть лет!) оформление карты в QGIS — праздник предсказуемости и удовольствие конфигурируемости. Не программирование, а интерактивный выбор из списков. Никаких подписей поверх линий, работает их вытеснение, а линии не меняют толщину и цвет в непонятной зависимости от масштаба. Да и вообще не нужно думать о масштабе. Первые десять минут не верил, что всё так просто, но да: быстро переписал все размеры и цвета из стиля для Maperitive и увидел красивую карту.

Пирог

  1. Добавьте новый векторный слой типа Polygon. В нём нужны поля name (строка) и rotation (целое число).
  2. В его свойствах отключите заливку, добавьте жирный контур и подпись из name.
  3. Включите редактирование и обводите листы для печати, один за другим. Левый клик — добавить точку, правый — завершить. Рисовать лучше прямо по улицам. Поле fid, если есть, заполнять не нужно. Называйте полигоны в формате «14-запад»: номер куска в пироге и указание на его часть.

Опять же, видя прямоугольники листов на карте, ощутил наступление будущего: не нужно терпеть ме-е-едленный поворот всей карты в Inkscape, элементарно переставить или подвинуть куски. Единственное, чего не хватает, — автоматического вычисления поворота, чтобы каждый кусок печатать в максимально возможном масштабе. Поле rotation придётся заполнять самостоятельно.

Печать атласа

  1. «Проекты» → «Создать макет», там во вкладке «Атлас» включите его, выберите слой, скройте его и щёлкните на «создать многостраничный документ».
  2. Добавьте карту и во вкладке «Свойства элемента» отрегулируйте положение и размер. Включите «используется для атласа» с полем 0%, выше свяжите вращение карты с полем rotation.
  3. Добавьте в угол текстовую метку с содержимым [% «name» %] и настройте её вид.

Это всё — если не нужно поворачивать карту на отдельных листах. Но, конечно, поворачивать надо. Поэтому:

  1. Включите предпросмотр атласа.
  2. В окне QGIS откройте таблицу атрибутов слоя пирога и включите редактирование.
  3. Для каждого листа оцените поворот в градусах (положительные значения — по часовой стрелке) и впишите в нужную строку. После этого в окне макета нажмите «Обновить» и проверьте угол. Поправьте, если не попали.
  4. «Следующий объект» — и так далее до последней страницы. Муторно, но всё проще и быстрее, чем в Inkscape.

Теперь точно всё. Из меню «Атлас» сразу печатайте или сохраните в PDF. Если нужно проверить оформление, напечатайте одну страничку из меню «Макет».

Нет, не всё

Боже, двадцать два шага. Пирог «наполеон» готовить проще, чем пирог к очередной картовстрече. Даже с учётом современных технологий получилось длинно и сложно. Клики правой кнопкой мыши, клики левой. Нам нужно проще. Поэтому я начал смотреть, как оптимизировать отдельные этапы. Главное — подбор углов поворота. Глазами получается неточно, а в модуле processing есть интересная функция «oriented minimum bounding box», которая делает ровно то, что нужно: находит повёрнутый прямоугольник минимальной площади, в который вписывается каждый объект слоя.

Открыл питонскую консоль, набросал короткий скрипт — и действительно, поверх слоя домиков в своём районе увидел россыпь повёрнутых прямоугольников вокруг них. А в атрибутах — размеры и углы. Сохранил скрипт, довольный. Через пару минут дошло: плагины же тоже на питоне пишутся. Если делать не только для себя — нужен плагин. А если делать плагин, то нужно идти до конца, чтобы получилось...

Волшебство

Именно по этой причине эта заметка задержалась на три недели. Забудьте все шаги выше. Забудьте Overpass, забудьте ogr2ogr, забудьте свойства слоёв и составление атласов. Теперь подготовка пирога так же проста, как его обход:

  1. Установите модуль «Walking Papers».
  2. Найдите кнопку с синими прямоугольничками и после нажатия выберите «Скачать данные OSM».
  3. На новом слое нарисуйте (слева вверху карандашик и какая-то область) полигон вокруг области картовстречи. Затем снова жмите «Скачать».
  4. Ура, есть карта! В слое «Pie Overview» наметьте широкими линиями границы кусков пирога.
  5. В слое «Pie Sheets» обведите кварталы, которые войдут на каждый лист. Обычно это два-три листа на кусок пирога. Давайте им названия в виде «4-запад», с номером куска и ориентиром внутри него.
  6. Снова под той же синей кнопкой «Подготовить к печати». Всё, просмотрите листы и экспортируйте в PDF.
Картинка со старой версией модуля, где был лишний шаг

Невероятно! Шесть шагов, из которых только два требуют осмысленной работы, чесания головы, пристального взгляда на спутниковые снимки, ворошения прошлых пирогов, захлопывания крышки ноутбука с возгласом «да ну его, завтра нарисую!» Печать качественных обходных листов больше не удел гиков, которые «на ты» с таким осмерским софтом, который вы бы не захотели встретить в тёмной подворотне. Жду не дождусь августа, чтобы воспользоваться модулем по назначению.

Внутри QGIS

Осталась одна ма-аленькая проблемка. Если повернуть страницу атласа, то её масштаб станет мельче, чтобы вместить все данные с неповёрнутой страницы. А если карта управляется объектами с отдельного слоя, то на вычисление масштаба размеры этих объектов не влияют (посмотрите на отступ до дороги сверху на правом листе на фотографии в начале статьи). Вот незадача: хотели повернуть кварталы вдоль листа, чтобы приблизить их до упора и не мельчить при обходе, а получилось наоборот. Из-за этого поворот карты становится бесполезным. Что же делать?

Как известно, открытый софт развивается через боль. Если вас что-то не устраивает в QGIS, вы либо идёте жаловаться в телеграм, либо оплачиваете разработку в NextGIS, либо делаете git clone и открываете Qt Designer сами. Будучи ленивым, я пропустил первые два шага, нашёл в исходниках вычисление размеров объекта и всунул в нужное место geometry.rotate(). Пул-реквест отправился в ветку будущего релиза QGIS 3.0.

А дальше я начал узнавать, чем гостеприимный опенсорс отличается от пассивно-агрессивного, как принято в OSM. «Офигенное решение проблемы, спасибо!» — поприветствовал меня один из разработчиков QGIS. И сразу такое тёплое чувство внутри: меня ждали, мне рады, я не зря изучал исходники. «Только допиши тест на питоне, пожалуйста» — и окрылённый, я пошёл изучать систему тестирования QGIS и писать нужную функцию.

В процессе наткнулся на неудобство API прямоугольников и дописал функции их сдвига. Так я узнал про SIP bindings и зачем нужен скрипт prepare_commit.sh, который нужно запускать до git commit. На каждом этапе я мог кинуть клавиатуру в окно от очередного «сделай ещё тут кое-что», но благодаря вежливости и доброжелательности участников проекта я был рад делать ещё и ещё. Только метафорической линейкой по пальцам удержало меня от новых правок и улучшений в коде QGIS. Зачем оставаться в OSM и всё это терпеть, когда там так приятно и легко, и говорят спасибо после мёржа?

Встреча приятных людей в Эссене, фотография Аниты Грейзер

Но проблема осталась

Версия QGIS 2.18 останется в большинстве репозиториев до сентября 2018 года: моя правка в неё не попадёт. Пользоваться модулем хочется прямо сейчас, не дожидаясь новых версий QGIS. Поэтому нужно как-то обойти ошибку. С пул-реквестом за плечами решение оказалось несложным: модуль делает копию слоя пирога с модифицированной геометрией и новыми атрибутами. Новый слой невидимо управляет параметрами карты, чтобы у вас были идеальные обходные листы.

Как ещё можно улучшить? Ну, например, сделать рисование листов пирога сразу прямоугольниками пропорций листа А4. Тогда этап вычисления углов поворота станет ненужным. Слой тайлов OpenStreetMap пока приходится подключать вручную через QuickMapServices: возможно, лишние клики стоит оптимизировать, общаясь с этим модулем напрямую. Это поможет и для подготовки обзорных страниц в атлас. Наконец, оформление обходных листов зашито в модуль: чтобы его поменять, нужно править файл внутри каталога, но после обновления модуля правки потеряются.

Буду ли я улучшать модуль? Нет, он достаточно хорош и мне лень.

Писать модули прикольно. Что для JOSM, что для QGIS. По окончании радует ощущение, что операции, которые требовали времени и внимательности, переложены на машину и делаются одной кнопкой. Оформление модуля трудоёмко: нужно копаться в API, разбираться с репозиторием, рисовать значки и не забыть про переводы. Альтернатива — короткие куски кода для консоли python или плагина JOSM Scripting. Писать их не проще, а найти потом, когда через год-другой возникнет похожая задача, — почти невозможно. Так что лучше неделю потерять, но потом несколько часов сэкономить.

Пакет не нужен

«Нельзя ли при отправке изменений из maps.me разделять объекты по континентам?» — в очередной раз спрашивают на форуме. А то bbox (ограничительный прямоугольник) слишком большой, неудобно. OpenStreetMap был зачат тысячу лет назад программистом, и это лезет изо всех щелей: удивительно, как самые бессмысленные атрибуты становятся мерилом качества.

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

Но даже когда найдёшь нужный пакет правок, останется только бессильно смотреть на его bbox. И на стастраничный список точек, линий и отношений, каждая строчка которого по-своему бесполезна. Ченджсеты — это псевдоупорядочивание. Кажется, что они полезны присвоением метаданных группе объектов, своего рода над-отношения, но на самом деле — метки времени произвольны, их порядок не зависит от номера пакета, комментарии никто не пишет, источник часто врёт, географически, как видим, тоже никто не группирует. Остаётся один полезный атрибут: created_by. Всему остальному верить нельзя.

То есть, единственная польза от пакета правок — это посмотреть, каким редактором сделаны правки. Все остальные атрибуты: даты, bbox, список объектов — только отвлекают, создавая ложное впечатление группировки и упорядоченности. Которых нет, потому что техническое воплощение API не обещает порядка и не подразумевает удобства. Так, для правок maps.me я игнорирую пакеты и рассматриваю каждую правку отдельно. Правки на mmwatch — это поток объектов, у которых номер ченджсета лишь бесполезный атрибут. Увы, для сложных правок со взаимосвязанными изменениями (таких как сдвиг линии) такой подход не сработает.

Примерно об этом я говорил на схемотехнике год назад. О bbox нужно просто забыть: область применения этих прямоугольников ограничена и точно не касается ваших задач. А проблему пакетирования нужно как-то решать. Развязать топологические структуры, группировать по времени и географии, не давать пользователям и приложениям свободы в объединении правок. Это настоящая тема для какого-нибудь будущего API 0.8. А пока приходится работать с тем, что есть.

Следить за изменениями в регионе можно (нужно!) через WhoDidIt, искать их — в его более быстром форке. Пакет правок из интерфейса этого сайта можно открыть в Achavi, но иногда может не повезти. Если bbox окажется слишком велик, загрузки правок вы можете не дождаться. Потому что даже лучшие инструменты полагаются на bbox, который, повторюсь, плох примерно для всего.

Загружать геометрию ченджсетов часто приходится команде по работе с данными в Mapbox. Для этого они сделали и постоянно улучшают сайт OSM Changeset Analyzer, где есть фильтры по любому атрибуту, вплоть до причины для подозрений. Но самые подозрительные пакеты накрывают весь мир, Achavi тут бессилен. Поэтому в этом месяце они сделали то, что давно было пора: кэширование ченджсетов.

Каждую минуту скрипт скачивает свежие дополненные диффы и складывает их в хранилище Amazon S3. Затем он раздербанивает эти диффы на пакеты правок и результат тоже загружает туда же. И теперь сервис визуализации Changeset Map, встроенный в OSMCHA, загружает пакеты мгновенно. Обновите ваши букмарклеты: Changeset (перетащите в закладки).

Проблемы, конечно, есть, но с ними борются. Например, дополненные диффы не окончательны из-за чехарды с транзакциями в базе данных OSM. Их приходится обновлять и обновлять. То же касается и пакетов правок, которые возможно держать открытыми целые сутки, понемногу доливая в них новые объекты. Наконец, история там только новейшая: пакеты старее марта этого года можно не найти. Их загружают, но медленно. Проблему поиска по региону архив тоже не решает, как показывает опыт фильтрации на сайте OSMCHA. Поэтому пользуйтесь им для просмотра недавних правок, а историю ищите на WhoDidIt и Achavi. Неидеально — но пока мы не избавились от концепции пакетов правок, ничего лучше не сделать.

Атака покемонов

В июле прошлого года Niantic сделали игру Pokémon Go, которая немедленно стала самой популярной в мире. Сто миллионов игроков искали покемонов в парках и у ручьёв. «Давайте придумаем, как отхватить хотя бы процент этой аудитории», — носились маркетологи вокруг maps.me. «Давайте придумаем, как этих игроков заманить в OpenStreetMap», — обсуждали в нашей рассылке talk@. Мапперы искали признаки OSM в картооснове Pokémon Go, но игра упорно отказывалась демонстрировать точность и детальность наших карт. Кажется, в ней использовали те же данные, что в старой Ingress той же компании.

Впрочем, недавно на сайте Reddit обнаружили, что в списке источников в приложении появилось слово OpenStreetMap: оттуда компания взяла данные для Южной Кореи. Выбор понятен, если вспомнить, что в ноябре власти Южной Кореи отказались предоставить Google картографические данные (гугль сейчас там показывает старые растровые данные 2012 года от SK telecom).

Благодаря заметке, долгожданная популярность пришла в OSM: Южная Корея вышла в рейтинге активности стран на второе место (после США или Германии) с 600 редакторами в день. Неплохая прибавка к обычным пятнадцати на страну. Новички наносят на карту десятки тысяч объектов, и их качество, по оценке Мартина Райфера, неплохое.

С окончанием лета многие ушли из игры, и сейчас в неё играют самые упёртые, «хардкорные» игроки. Проблема в том, что их немало: только в Южной Корее четыре миллиона человек открывают приложение каждый день. Такие игроки, скорее всего, собрали основных покемонов и ищут способы быстрее найти редких. Они отслеживали их по карте и высматривали паттерны. Всё изменилось 31 августа: на Reddit опубликовали презентацию, сопоставляющую места появления покемонов с данными OpenStreetMap. Другие игроки проверили эту теорию и подтвердили: многие объекты, которых нет на Google Maps, притягивали покемонов.

Теперь у игроков в Pokémon Go был способ вычислить места с повышенной вероятностью найти редких покемонов. В последующие месяцы они его уточняли: например, определили релевантные теги (тропинки highway=footway или path внутри парков leisure=park/playground, landuse=grass и т. п.) и проверили, что покемоны появляются вдоль линий тропинок. Сайты показывали покемонов поверх OpenStreetMap, а покемоноводы передавали друг другу тексты запросов в Overpass API для поиска интересных мест.

22 декабря автор ютуб-канала Trainer Tips проверил, появятся ли покемоны на дорожке в парке, которую он нарисует в прямом эфире. Видео снято отлично, к слову. Всё важное происходит примерно с третьей минуты. К сожалению для нас, когда он приехал в пресловутый парк, его ждали сразу пять покемонов. Игроки быстро сообразили, что делать. Осмеры начали ругаться, затем вспомнили, что у нас дружелюбное сообщество, и под Новый год написали приветствие новичкам. Неизвестно, прочитал ли его кто, но змейки из тропинок пропали.

Ненадолго: 24 января участник Reddit похвастался, что он нарисовал в своём городе два парка и две поляны, после чего там появились гнёзда покемонов. В комментариях другие удачливые игроки поделились историями успеха: один парк нарисовал, другой — школу, и все радовались новым гнёздам. На следующий день весть подхватил сайт молодёжных новостей Mic.com, и в редактор iD побежала толпа игроков: Паскаль заметил, что его сайт статистики впервые зарегистрировал шесть тысяч активных картографов за сутки. То есть, около двух тысяч покемоноводов.

С этого дня новости про вандалов в OpenStreetMap стали включать слово «покемоны». Тропинки странной формы начали появляться не только в Корее, но и в Штатах, Индии, Бразилии, Южной Африке. Везде. Даже в Москве и в Ханты-Мансийске. Помня о вежливости, некоторые осмеры приветствуют новичков, но вычищая сотни километров ложных highway=footway, сложно сохранять лицо. BushmanK просто поругался (почему-то на участника DWG), а Майкл Райхерт написал инструкцию по поиску и уничтожению покемоноданных и покемонокартографов (на немецком языке, автоперевод). В Германии, говорят, две трети новых пользователей рисуют чушь для Pokémon Go. Даже сайт Mic.com через два дня попросил не портить карту — тщетно.

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

Те, кто зарегистрирован в OSM, могут поддаться желанию увеличить вероятности в своём районе. Я приветствую качественные и обдуманные правки OSM, но до сих пор не видел увеличения количества гнёзд на тропинках, нарисованных после первого релиза Pokémon Go.

Многие другие игроки поддерживают это наблюдение (например). К сожалению, информация об отсутствии влияния правок в OSM на количество покемонов вдохновляет не так, как слухи о их взаимосвязи, подкреплённые удачными вылазками. Поэтому прямо сейчас мы вынуждены регулярно просматривать карту и удалять потрясающие узоры из зелёных (у кого-то — пунктирных красных) линий.

Ранее Ctrl + ↓

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