Создавая карту комфортной прогулки

    Эта история о небольшом проекте «Улицы прогулок», который призван помогать людям комфортно перемещаться по городу. Текущая стадия проекта — очень ранний прототип, демонстрирующий определённые идеи и возможности. При этом, я решил опубликовать его, чтобы собрать обратной связи от внешнего мира и единомышленников.



    Мне по-прежнему нравятся карты и я их люблю и рассказываю про них, а ещё иногда что-то такое иногда с картами делаю. И сейчас рассказ тоже будет про картографический сервис.

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

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


    Размышляя дальше, мы (я и группа неравнодушных знакомых, которым я рассказывал идеи) пришли к выводу, что помогать пешеходам можно с двух сторон одновременно: заниматься улучшением городского пространства, делая среду удобнее, или создавать сервисы для пешеходов, помогающие сделать их прогулку комфортной. Однако, обычно всё начинается с анализа и выяснения текущей обстановки. Так пришла идея сделать на первом этапе инструментарий для интерактивного изучения городской среды.

    Самый первый прототип сервиса получился таким:



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

    Пару слов о том, как я сделан этот прототип:
    • Я взял с сайта GIS-Lab данные OpenStreetMap
    • Проимпортировал их в локальную базу Postgres c помощью osm2pgsql
    • Добавил к интересующим меня таблицам поля с параметрами и навбивал «рыбные» данные
    • Взял TileMill от MapBox, стилизовал карту и визуализировал параметры улиц, импортировал тайлы в акаунт на Мапбоксе
    • Набросал статичную страничку с картой Mapbox.js
    • Для фоток мест я использовал API Panoramio, а популярные места


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

    Очень хотелось чтобы данные для проекта были открытыми и доступными, чтобы любой желающий мог сам добавлять важную для него информацию, экспериментировать с данными и исследовать их самостоятельно.

    Откуда взять реальные данные? Таких открытых данных, что оказались нужны людям, для Москвы пока что нет, и поэтому мы будем собирать их самостоятельно, а для того, чтобы не заниматься только сбором данных и всё же успеть сделать что-то интересное, мы ограничили территорию исследования двумя частями районов Якиманка и Замоскворечье в пределах Садового кольца.

    Набор исследователя городской среды

    Наиболее подходящей базой для проекта оказался OpenStreetMap, помимо набора доступных инструментов и технологий, у каждого пешехода в городе появляется возможность отметить или уточнить исследуемые данные, карта OSM создаётся и редактируется силами пользователей.

    В итоге, после серии полевых исследований и экспериментов, мы собрали часть параметров про городские улицы и у нас получился небольшой интерактивный проект с реальными данными, который мы назвали «Улицы прогулок»

    Проект рассказывает 4 истории о городе в исследованном нами районе: ширина тротуаров, доступность среды (входы в здания, лестницы), шум на улице и интересные места.

    Сейчас это не законченный пользовательский сервис, который мог бы решить все проблемы комфортного перемещения по городу, скорее, это чуть более проработанная версия прототипа, который мы публикуем с целью собрать обратную связь, выяснить какие моменты стоит проработать детальнее или вовсе переделать.

    Про каждый срез данных расскажем подробнее:

    Тротуары



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

    Мы решили рассказать историю, насколько широкие в выбранном нами районе тротуары и создали специальную карту тротуаров. На узком тротуаре (ширина меньше 1 метра) неудобно расходиться с встречными прохожими, а если вы гуляете с компанией, общаться и двигаться гуськом тоже, в общем-то, неудобно.



    Мы выделили несколько категорий по ширине тротуара, и показали на каких тротуарах какой компанией можно комфортно прогуливаться. Кликая на карте по каждому отмеченному тротуару можно узнать конкретное значение ширины.


    Карта тротуаров

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


    Реконструкция тротуара на Большой Ордынке, июль, 2015

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

    Сейчас известно про 92 километра тротуаров и их ширину. В исследованном районе средняя ширина тротуаров 2 метра 18 сантиметров. Ожидаемо широкие тротуары в выбранном районе оказались на улице Большая Якиманка — шире 5 метров каждый, это большая улица. В исторических улочках тротуары традиционно узкие, в среднем 1–1.5 м. Однако, нашлось несколько некрупных улиц, где тротуар достаточно широкий и удобный. Например, Новокузнецкая, Татарская и Бахрушина, Малая Ордынка и переулки — Старомонетный, Пыжевский, половина 1-го Спасоналивковского и Казанский переулки.

    Доступность среды



    Речь про маломобильных горожан: инвалидов-колясочников и молодых родителей с детскими колясками. Мы создали карту доступности в исследуемом нами районе.

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


    Игорь и узкий тротуар на Кадашевской набережной

    Игорь Гаков:
    «В любом городе мира живёт много людей, которых смело можно назвать маломобильными. Это родители с маленькими детьми в колясках (зачастую до 5 лет во время длительных прогулок), пожилые люди и инвалиды использующие всевозможные приспособления для передвижения по городу (коляски, скутеры, опоры итд).

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


    То же самое касается и перемещения с детской коляской. Уже после пары прогулок с коляской меняется восприятие города и маршрута перемещения. Стоит попробовать хотя бы раз — это определённо интересный опыт.

    Оценивая доступность заведений мы начали с проверки входов в заведения и здания, используя три категории:

    «Доступно» (зелёное) — на входе либо нет ступенек выше 7 см, либо владельцы заведения позаботились смонтировать удобный пандус. Ширина проёма входной двери не меньше 60 см.

    «Ограниченно доступно» (жёлтое) — одна-две ступеньки на входе или невысокий бордюр: в инвалидном кресле, скорее всего, в это заведение без посторонней помощи не попасть, а с детской коляской вполне можно проникнуть.

    «Недоступно» (красное) — и с детской коляской, и в инвалидном кресле в заведение проникнуть сложно. В эту категорию попали учреждения и места, на входе в которые вас ожидает крутая лестница без рампы или высокое крыльцо, либо нужно подниматься или спускаться по лестнице на другой этаж.

    В исследованном районе мы проверили 203 места и выяснили, что из них 103 недоступны (50.7%), 68 — ограниченно доступны (33.5%), и лишь 32 места доступны для маломобильных людей (15.8%).

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



    Как и для тротуаров, для объектов мы показываем фотографии ближайшей местности из Mapillary.

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

    Шум на улице



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

    В практике исследований городской среды активно используется noise mapping — но это довольно трудозатратный метод: нужно подсчитывать все источники шума и строить точную модель.

    На первом этапе мы решили пойти более простым путём, и сделали серию точечных замеров уровня шума, гуляя по городу. В основном, замеры были сделаны в будние дни, в период 9 утра до 19 вечера.

    Данные об уровне шума собирались с помощью InstaDecibel. Это приложение позволяет сопроводить каждый замер фотографией, поясняющей, когда было сделано измерение и как выглядит местность. Все результаты замеров мы публиковали в специальный Instagam-аккаунт.



    В итоге, получилась такая карта уровня шума:


    Менее 60 дБ (синее) в центре бывает крайне редко, нужно искать для этого совсем тихие дворики, а на маленьких улочках, где изредка проезжают автомобили и нет плотного траффика уровень уличного шума — 60–70 дБ (зелёное): можно комфортно общаться, слушать музыку.

    На улицах чуть крупнее, где автомобилей больше или в пешеходных зонах с большим скоплением людей (например около станции метро Третьяковская) уличный шум держится на уровне 70–80 дБ. В таких условиях тихим голосом разговаривать уже не очень получится.

    На больших магистралях стабильно много машин, поэтому уровень шума в активное время выше 80 дБ. Это некомфортные условия для прогулки.

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

    Интересные места



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

    Рассказывает Филипп Кац:

    «В современном интернете десятки доступных источников POI (points of interest), начиная с великолепной базы Foursquare. Однако источников актуальных данных под открытой лицензией, разумеется, гораздо меньше. В нашем случае прекрасным источником послужила Википедия.

    Использование википедии как источника геоданных очень интересно. Только так мы обнаружили, что есть статьи о местах в городе, написанные только на иностранных языках; другими словами, какие-то вещи о Москве русскоговорящий пользователь просто не сможет прочитать, эти данные будто спрятаны от нас, оставаясь доступными, например, знатокам норвежского (а точнее, тем, кто использует этот сегмент википедии для запросов о Москве). Было бы интересно исследовать, насколько много таких ‘скрытых’ точек в разных городах мира и о чем они, собственно, рассказывают. Впрочем, и статьи с большим количеством переводов, языковые кластеры, корелляция пространственных и языковых и временных координат, история правок о геолокациях — все это таит в себе большое поле возможностей для развития проекта.

    Википедия, как известно, не имеет API, предлагая вместо этого смело собирать данные прямо с веб-страниц. В то же время, ресурс обладает массивным архивом различных метрик и данных, включая полные дампы в нескольких форматах. Мы использовали JSON-формат.

    Надо сказать, что модель данных при этом достаточно экзотическая: каждая страница (item) состоит из неструктурированного набора 'заявлений' (statement) и массива внутренних отсылок к этой же статье на других языках; прочитать о модели подробнее можно здесь.
    Хотя с виду вариант скачать все в одном файле и кажется простым, в нем содержится своя сложность: обычные компьютеры не готовы вгружать в оперативную память полный дамп, весящий около 20 гб, а значит, и прочитать его. Для «стриминга» файла, то есть чтение его линия за линией, храня только несколько линий в оперативной памяти в каждый отдельный момент, я воспользовался замечательным модулем ijson от Ивана Сагалаева.

    Дальнейшая работа была не очень сложной – для каждой страницы в Википедии я проверяю, нет ли у нее атрибутов геолокации, и если есть — не лежат ли они в интересующем меня диапазоне. Если она попадает, я сохраню ее русское название и ссылку, а если такого нет — английские (если такого языка вдруг тоже нет, сохраняется первая в очереди). Для упрощения жизни я также настроил простой категоризатор наиболее частых тип страниц — улицы, монастыри и церкви, площади и музеи, и т.п. распознаются по соотв. словами в названии. В довесок, я помечаю статьи без русской версии (о Москве! Таких набралось несколько десятков) и считаю в отдельной колонке количество языков перевода статьи. Обработка всей базы данных заняла ночь — к утру небольшой csv с 7 тысячами POI.


    Ось X — количество просмотров статьи в месяц; Y — число языков статьи (июнь, 2015).

    Последний этап — ранжирование. Дабы упростить работу сервера, используя простейшие команды R, строим гистограмму статистики сайтов, и смотрим, можно ли найти видимый повод для категоризации. Это не сложно — гистограмма четко показывает уровни статей 'универсальных' (например, статья 'Россия', указывающая широту и долготу столицы), со статистикой более 75000 просмотров в месяц. С большим отрывом идет вторая группа элементов — чуть менее универсальных (например, 'Москва'), имеющие более 2000 просмотров, и далее, в самом начале, от нуля и до 500 просмотров получает основная масса. Основываясь на гистограмме, они были поделены еще на три группы: до 100, до 500 и более. Всего получилось 5 ранжиров значения точек. Данные готовы к использованию.


    Гистограмма статистики просмотров статей с координатами в Москве

    В исследуемом районе, нет самой большо категории и поэтому категорий популярности получилось всего четыре — метки на карте четырёх размеров. Чуть позже мы визуализируем эти данные на весь город.»

    Поскольку статьи в Википедии с координатами чаще всего про популярные места, то наиболее удачной иллюстрацией каждого объекта стали фотографии из Panoramio.

    Проект без бэкенда


    Для тех кто, дочитал до этих строк: Сюрприз! У проекта нет собственного бэкенда. Мы используем облачное хранение данных на Mapbox, а весь проект — это статичная страничка где используется несколько API.

    Расскажу подробнее как это всё работает.

    Самая большая работа в проекте — подготовка данных и их предпроцессинг. Окружение для этого я собрал на локальном компьютере, где-то данные заливались в Postgres, a где-то я просто использовал GeoJSON формат.

    Например, ширина тротуаров [width] — стандартный тег дорог в OpenStreetMap, поэтому можно использовать любой датасет Planet.osm. А вот, например, доступность мест использует тег [wheelchair], который в Planet.osm нет, поэтому я использовал Overpass-turbo для выгрузки данных из OSM.

    Незаменимый инструмент для просмотра и работы с любыми форматами геоданных — Quantum GIS, я о нём уже рассказывал в скринкастах про визуализацию геоданных.

    Для процессинга данных Википедии, Филипп разработал специальный инструментарий —  WikiGeoParser

    Подготовленные данные импортируются в Mapbox. Для этого используется Mapbox Design Studio:


    Работа с данными в Design Studio

    Для отображения импортированных данных используется API Mapbox GL для Java Script. А переключение режимов карты использует переключение классов для стиля карты, как в этом примере.

    По привычке, для управления DOM на странице я задействовал знакомый мне D3.js (я не фронтендер, так что мне можно странного).

    Из UX-фишек, характерных картографическим проектам стоит отметить запоминание текущего состояния карты (я использую location.hash). Чтобы всегда можно было скопировать URL из адресной строки и поделиться нужным фрагментом карты с выбранным в данный момент режимом.

    Собственно, это и всё что есть. Простенькое JavaScript-приложение в браузере.
    Не очень стройный не разработческий код проекта опубликован на GitHub :)

    Нам нужна помощь



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

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

    Сейчас нам нужна помощь по двум фронтам:

    Сбор и исправление данных:

    В OpenStreetMap нужных нам данных мало, но есть все инструменты и возможности их разметить.

    Вы можете помочь проекту с разметкой данных о тротуарах и доступности среды: для этого нужно просто немного прогуляться по городу внести данные в проекте OpenStreetMap. Чтобы легче было с этим разобраться — мы подготовили подробную инструкцию про сбор данных, а для координации усилий по сбору данных мы стартовали специальную группу в Facebook.

    Даже если вы не бываете в центре Москвы и готовы помогать с другими районами и городами — помогайте! Надеемся, что у нас получится расширить территорию проекта в будущем. Эти данные будут полезны не только нам, но всем OSM-проектам, которые их будут использовать. В том числе вы и сами можете сделать что-нибудь интересное с собранными данными.

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

    Если не очень хочется разбираться с правками в OpenStreetMap будет полезно, если вы просто будете фотографировать тротуары с помощью Mapillary — это поможет участникам сообщества OSM разметить карту точнее.

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

    Мы ищем бэкендера. Если вы такой разработчик (C++, Python, Node.js, Postgres), который хочет влиться в команду проекта — напишите, пожалуйста, мне karmatsky (at) gmail.com и обсудим условия сотрудничества.

    В планах — куча различных экспериментов с открытыми геоданными в больших объёмах и подключение новых слоёв.




    Будет здорово получить любую обратную связь о проекте и обсудить идеи проекта в коментариях.

    Комфортной вам прогулки!

    Команда проекта: Андрей Кармацкий, Филипп Кац, Игорь Гаков. Спасибо за советы Илье Звереву и Тимофею Самсонову.

    Разработка и дизайн: Urbica — дизайн-студия, специализирующаяся на интерактивных проектах про городскую среду.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну, и что?
    Реклама
    Комментарии 17
    • +4
      Весьма интересно и для велосипедистов.

      > Филипп Кац
      Не родственник Максима Каца?
      • +4
        > Википедия, как известно, не имеет API

        Вот так сюрприз ;) Конечно у Википедии есть API. Их там даже джва. Просто надо искать не «API Википедии», а «API MediaWiki».
        • +1
          Хорошая идея. Удачи вам в развитии!
        • 0
          А бэкенд на C++ по привычке? Шучу) Удачи на новом поприще и спасибо за кивок в сторону OSM. У Яндекса — неплохие карты и данные, но высасывать оттуда датасет напряжненько.
          • 0
            C++, насколько я понимаю, нужен для того, чтобы поднять OSRM для маршрутов.
            • 0
              Ага, верно. И уметь подпиливать OSRM под свои задачи, если потребуется.
          • 0
            Для маршрутов OSRM думаете использовать? Или что-то другое?
            • 0
              Честно говоря, пока только пробую изучить вопрос, знаю что есть OSRM и Graphhopper — что подойдёт под мою задачу лучше, пока неясно, надо тестировать, наверное.
              • 0
                Посмотрите еще на github.com/valhalla молодой проект.
                • 0
                  Я бы смотрел на проекты, обросшие коммьюнити — иначе любая проблема/ошибка может стоить слишком много нервов.
                  Как у него с этим делом?
                  • 0
                    Изменения вносятся активно, подписан на один из репозиториев, по 3-4 PR в неделю. Поддерживается и спонсируется mapzen.. Продукт на публику вышел чуть больше месяца назад. На вопросы отвечают довольно быстро, помогают разобраться.
                    • 0
                      А есть какие-то преимущества проекта перед аналогами? Или интересные особенности?
                      • +1
                        Первое, на что обратил внимание, это способ представления индекса на диске. Используют понятие тайла и хранят индекс частями. При импорте позволяют строить индекс не по одному файлу, а по нескольким сразу. Логично было попробовать инкрементную загрузку, но данный случай не поддерживается, но после разговора с авторами, пришли к результату: если такой функционал будет востребован, то они рассмотрят его реализацию.

                        Так же понравилась внутренняя структура самого кода. Сделать свой класс для расчета весов графа не такая сложная задача (базовый класс). Приложение имеет микросервисную архитектуру. Минимум зависимостей, поэтому при наличие хорошего напильника вполне возможно интегрировать в приложение.
                        • 0
                          Мне показалось речь шла не про инкрементную загрузку (кстати, что это и зачем?) а про возможность генерации частей индекса (т.е. обновление части графа). Но я не вижу в этом особого смысла, т.к. версии могут сильно отличаться, вплоть до того, что граф в этих тайлах не состыкуется.
                          Хотя есть одна мысль для чего это можно было бы использовать.
                          • 0
                            Под инкрементной подразумевал: сначала загрузили части A и B, потом понадобилась C, но для загрузки не нужно пересобирать все целиком, а только добавить этот. Вопрос нестыковки это уже отдельный момент.
            • 0
              Я, как водитель самоката, предложил бы еще добавить тип покрытия тротуара. По брусчатке, к примеру, на большинстве самокатов с полиуретановыми колесами ездить крайне неприятно. Плюс наклон воерхности, я вот так и не нашел карту Москвы со склонами, что бы прокладывая маршрут ехать под гору, а не наоборот.
              А в целом проект замечательный и крайне полезный.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое