How old is this house. Как я делал карту возраста домов Петербурга


Идея


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


В памяти есть какие-то онлайн-проекты.
Беглый поиск дает много примеров из разных городов: Портланд, Рейкьявик, Нью-Йорк: Бруклин, Манхеттен, Барселона, Любляна, Львов, и даже проект масштаба страны, — Нидерланды.
Про Петербург тоже кое-что есть: например, отличные данные на Петроградку: «Ретроспектива застройки Петербурга» и проект Делового Петербурга: «Как застраивался Петербург: история строительства города за 68 секунд».


Цель — бумажная карта, к идее сделать how-old-is-this.house приду в процессе. Начинаю искать сырые данные.


Данные


Проекты Павла Суворова про Петроградку и Делового Петербурга ссылаются на «Технико-экономические паспорта многоквартирных домов» — это табличка на двадцать две с лишним тысячи домов, с разными характеристиками. Как я понял, она появилась благодаря программе взносов на капитальный ремонт. В таблице интерес представляют адрес и год постройки, географических координат, увы нет.


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


Но не каждое здание в Петербурге имеет адрес, зато почти каждое — отрисовано соавторами карты OpenStreetMap. Именно этого нам недостает для базового слоя геометрии — выгружаем все объекты с ключамиbuilding=* и addr:city='Санкт-Петербург'. Заодно прихватим ключи с именем, адресом и годом постройки (изредка он бывает заполнен). Получаем сто сорок три тысячи объектов, из которых про две тысячи есть информация о годе постройки.


Eсли накинуть все адреса из паспортов домов как точки и выделить полигоны с годами из «объектно-адресной системы» и OSM — можно оценить покрытие. Оцениваем: очень много серых пятен — продолжаю искать исходные данные.



Искать долго не приходится, есть прекрасный «Архитектурный сайт Санкт-Петербурга CityWalls.ru». Деликатно собираем данные с портала, получаем табличку с адресом, годами постройки, именем архитектора, архитектурным стилем, ссылками на страницу сооружения и его фотографию. Таких записей 27 тысяч, но часть из них — утраченные здания.



Быстро превращаем адреса в точки, накидываем на карту вместе с предыдущими слоями — кажется покрытые очень приличное, ура!


Теперь нужно все эти данные собрать вместе, причесать и преобразовать в симпатичный вид.


Геопроцессинг


Для решения геоинформационных задач использовал QGIS и ArcGIS Pro, если нужно было что-то автоматизировать на Python — PyCharm.


В первую очередь, готовлю слой зданий, который потом буду максимально наполнять атрибутами. Основа слоя — «Объектно-адресная система Санкт-Петербурга» с портала открытых данных Санкт-Петербура, геометрия детальная, видимо, из кадастровых паспортов, смотрится красиво, бонусом забираем все мосты. Максимально избавляемся от ненужных нам полигонов набережных, подъездных путей, площадок складирования и т.п.


Из выгрузки OpenSteetMap забираем все полигоны, которые не пересекаются с полигонами из первого слоя. Получаем вот такой результат на сто сорок две тысячи объектов, полезные атрибуты из исходных слоёв уже включены.



Базовый слой зданий «Объектно-адресная система Санкт-Петербурга»+ OpenStreetMap


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


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


По простому принципу — если точка находится на полигоне — присоединяем информацию из «Паспортов» и CityWall к зданиям. Теперь про каждый полигон у нас есть табличка с кучей информации из разных источников:


  • «Объектно-адресная система Санкт-Петербурга»
  • OpenStreetMap
  • «Технико-экономические паспорта многоквартирных домов»
  • СityWalls

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


  • название
  • год постройки
  • архитектор
  • стиль
  • адрес
  • ссылку на страницу CityWalls
  • ссылку на фотографию
  • id

Эмпирически определяем приоритет источников для атрибутов, например, адреса лучше всего указаны в слое «Объектно-адресная система», хорошо — в «Паспортах» и примерно одинаково по качеству — в CityWalls и OpenStreetMap


Отдельный прикол с годом, для анализа нужно число, а во всех источниках — это строка, причем формат очень разнообразный: это может быть понятный "1703" или "1703г", список годов "1703,2020", период строительства "1822-1917", эпоха "до 1822", или прекрасное "1 9471 94 8", а также их комбинации и исключения.


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



Зеленый — полигоны с годами, красный — без года


Если смотреть на процент заполнения (из ста сорока двух тысяч полигонов, года есть только для пятидесяти пяти), кажется, что покрытие вышло слабое, но если оценить на пространственное распределение, и качество объектов (например, дома против трансформаторных будок), получается прилично. Визуально кажется, что задачу слой выполняет: видны пространственные паттерны, дырок визуально мало, или они распределены равномерно. Слой интересно изучать, но перфекционист хочет полного покрытия, перфекциониста пока придушим.


Стоит оценить качество полученных данных. Из базовых методов, всегда доступно — можно посмотреть на график:



Сразу бросаются в глаза два пика — 1917 и 2008 год. Провалы после революции, Великой Отечественной войны и распада Советского союза — логичны и читаемы. Как быть с двумя выбросами? Гипотеза такая — многие дома дореволюционной постройки помечены как 1917, всякие варианты "до/предположительно" я отмечал.


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


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


Ура! Данные обработали, качество оценили, можно визуализировать.


Кстати, набор свободно доступен по лицензии CC BY-SA в разделе "Данные".


Палитра цветов


Опыт коллег подсказывает, что выигрышно смотрится представление возраста домов в непрерывной палитре от горячих цветов к холодным, на темном фоне. Попробуем:
возьмем стандартную темную базовую карту от ESRI и цветовую палитру Spectral, предустановленную в QGIS:



Смотрится эффектно, но хочется, чтобы было круто и как-то связано с Петербургом.


Задача — подобрать цвета для базовой карты и домов. Один из моих любимых фотографов Петербурга — Андрей Михайлов, цвета на его фотографиях созвучны с моим "чувством города". Из инстаграмма фотографа набираю картинки, чтобы выудить из них ключевые цвета.




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



Попы грифонов с Банковского мостика и крыши Васильевского острова дают так нужный нам диапазон синих и темно-серых оттенков. Все же Петербург.


В Mapbox Studio весело и удобно делаем базовую карту:



studio.mapbox.com


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



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


Проклятый-Старый.дом


Нужен прототип. Кидаю набор данных друзям, которые разрабатывают хаб пространственных данных «Геосемантика». На карте показываем возраст цветом, а при нажатии на дом показываем его атрибуты и фотографию, если она есть. Пробую веб карту на "ближнем круге".



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


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


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


Колдуем над HTML карточкой объекта, чтобы она была красивой и показывала ссылки. Вздыхаем, что не все реализовано, как бы хотелось, а тонкая настройка возможна с API, что трудоемко и дорого. Получается довольно симпатичная, быстрая и отзывчивая веб-карта.



carto.com


Проблему сбора правок решаю в меру изящным костылем. Гугл-форму можно предзаполнить по параметрам в ссылке, а ответы она, форма, складывает в таблицу. Это нас вполне устраивает: в таком виде правки можно и проверять, и можно автоматически обновить слой. Генерирую ссылки для каждого из объектов (некоторые выходят очень длинными, но костыль есть костыль), прикручиваем ссылку в карточку здания — сбор правок готов.


Теперь надо придумать доменное имя, задача оказывается прикольная и непростая: хочется передать в названии суть проекта, быть немного оригинальным и избежать слова "каждый" (потому что дом — не каждый). В процессе выясняю, что есть доменное пространство .house — рождается вариант «how-old-is-this.house». Если вдруг появится желание сделать проект глобальным — имя уже подходит. Только жаль, что нет русского домена .дом.


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


Верстаю сайт, вставляю карту с carto.com, делаю его двуязычным, подключаю комментарии, адаптирую под разные размеры экрана — вообще, процесс интересный. Результат — how-old-is-this.house


"Там что-то было про бумажную карту?"


В картографии очень люблю делать вещи осязаемые: печатные или деревянные. Чтобы можно было руками потрогать, на полку поставить или на стену повесить, например, и относительно холоден к мобильным и веб историям (и в одном и в другом убедитесь в моем портфолио на Behance).


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


Стиль визуализации, разработанный для веба, прямо просится на плакат и на стену. Вооружаюсь цитатой Шарля Жозефа Минарда: "Мои карты не просто показывают, они так же рассчитывают, вычисляют для глаза; это переломная точка...", и приступаю к верстке постера. Цель — красиво показать полученные данные, желательно так, чтобы можно было увидеть каждый дом, а также показать распределение зданий на карте по годам постройки. Кажется, что если окрасить в разработанную палитру гистограмму — выйдет познавательно.


Выбираю платформы для печати на заказ постеров. Соотношу рабочий масштаб карты и доступные размеры на платформах для печати — размер постера 60*90 сантиметров.


Верстка — дело приятное, тем более, львиная часть работы сделана до этого: экспортирую растр высокого разрешения из QGIS, в Adobe Illustrator готовлю гистограмму, добавляю копирайты, логотипы. Сейчас важно не забыть показать аномалии на гистограмме и пояснить, в чем дело. Получилось симпатично.


Заказываю пробные отпечатки на обеих платформах, финальные правки — готово!


Постер можно купить на странице "Постер и бумажная карта"



Улыбчивая безымянная девушка из Printful держит виртуальный постер


Спасибо


Было весело делать этот проект, хочу сказать спасибо:


  • друзьям, кто терпел меня и тестировал и вычитывал разные части и этапы проекта
  • Саше Семенову из Геосемантики за технические консультации и советы
  • нашей самой крутой магистерской программе по картографии Cartography M. Sc., которая дает мне возможность, круг коллег и время делать такие истории
    -Ване Тхоржевскому и Машеньке Садчиковой, которые героически организовали образцовое производство, упаковку и доставку с нуля за сутки

Бонус хабру, по просьбам трудящихся — обои для рабочего стола,

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 60

    +6
    А можно не постер, а заставку на рабочий стол сделать для любых расширений?
      0
      Давайте сделаем, подготовите список разрешений?
        +5
        Подозреваю, что 3840х, 2560х, 1920х будет достаточно по горизонтали, конечно же.
        Естественно, карта развернуть налево в горизонт.
          0
          О вертикальных мониторах замолвите слово. У меня, в основном, основной монитор заполнен окнами, так что я не вижу обоев, а тот, что в портретной ориентации, иногда простаивает.
            +2
            Так вы просто поверните обои в вертикаль и ничего не поменяется.
              +3
              Север переместится на запад или восток, например. Мне это не нравится. :)

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

        Как пример можно открыть iframe с картой, скрыть пару блоков, подправить CSS, запустить полноэкранный режим и сделать скриншот.
        https://habrastorage.org/webt/5r/hj/7h/5rhj7hqm2k78lr7eomkhwl4fvea.png

        +1
          0
          Спасибо Вам огромное! Смотрится изумительно!
        +1
        А ведь действительно, на ровном месте, идея, замечательная. Спасибо.
        Можно, например, сервис для экскурсоводов сделать, или просто для всех интересующихся определёнными эпохами — готовые маршруты же, целые кварталы, подтягивать из GIS релевантные исторические данные, доступные архивные документы и пр. и пр…
          +7
          В Firefox не работает карта.
            0
            сайт собран на тильде, проблема где-то там, баг-репорт несколько раз делал, надеюсь скоро разберемся
            +1
            Просто великолепная работа.
            Скажите, для других городов России планируете делать подобное?
              0
              вообще думал, нужен интерес со стороны в меру технически продвинутого местного, и некоторая удача в датамайнинге
                0
                Да, работа проделана замечательная!
                Для своего города в свое время делал сайт с базой исторических зданий. И выводил их на карте, правда в виде точек, в таком виде карта наверное с 2013 года, если не раньше.
                barnaulheritage.ru
                А хотелось бы доработать, как у вас в виде полигонов зданий. Каким-то образом видимо здания нужно привязать к id зданий на OSM и уже собрать эти полигоны.
                  0
                  Называется пространственным объединением. Делается в один запрос.
              0
              Здорово вышло, ждем обои на рабочий стол
                0
                Идея отличная.
                По реализации: периодически пропадают куски карты с выбранными зданиями (например с 1700 по 1760 г) при масштабировании карты и при изменении диапазона лет. Браузер последняя Opera.
                  0
                  Увы carto.com не вытягивает Хабр эффект, обещали отбалансировать
                  0

                  Спасибо, отличная работа!
                  Какое разрешение печати на постере?

                    0
                    720 dpi, масштаб карты позволяет рассмотреть практически каждое здание в городе
                    0
                    Мурино добавьте(((
                      0
                      так ведь область)))
                      +5
                      За работу с палитрой — отдельный респект.
                        0

                        Отличный проект! Как бывший гид благодарю за работу. Очень полезно иметь такой наглядный источник. Отправил сразу вам репорт по одному зданию, проверяйте)
                        Хотелось бы иметь возможность посмотреть, как менялся город с момента закладки и до наших времён. Такая же реализация в виде ползунка на карте, как в данном посте, была бы крайне наглядна.

                          +1
                          Очень хорошая идея с ползунком для перемотки. Хотя может возникнуть ложное впечатление, что видишь карту города за выбранный год, что на деле совсем не так. Но все равно очень здорово.

                          К слову, для этого даже не нужно перерисовывать карту или взаимодействовать с сервером. Карта выводится тайлами, можно прямо на них повесить шейдер (на хабре были статьи об этом), и скрывать часть градиента кодом. Будет моментальная отзывчивость и можно добавить красивости вроде затухания волнами, взаимодействие с мышью и пр.
                            0
                            изящное решение! жаль, я не разработчик
                          0
                          Приветствую, не желаете реализовать показ количества зданий определенного периода не только при наведении на саму диаграмму, но и при наведении на весь столбик? А то приходится заниматься охотой на пиксели, если количество зданий мало )
                            0
                            Диаграмма от carto, увы не настроить
                            0
                            Красота! Кажется, мы с вами учились на одной кафедре СПбГУ, но в разное время. Я, правда, почти сразу отошел от темы картосоставления и ГИС, но это не значит, что я забыл, как это делать (забудешь тут, после такой-то школы, где даже палитру карты учат соотносить с принятой палитрой окраски фасадов зданий :)
                              +2
                              Вообще, вернее было бы выбрать все объекты building* внутри полигона границ города, а не по addr:city.
                                0

                                Туда бы часть Кронштадта не затесалась)

                                  0

                                  Вы ссылку откройте.

                                    0

                                    Я знаю что это мультик на Питер)


                                    Я только сейчас понял, что у автора на карте даже Петровский док имеет год постройки, а в ОСМ у этого дока даже нет building, он там attraction=urban. В общем, интересно получается)

                                      0
                                      петровский док отдельная любовь — добавил руками
                                0
                                Хорошая идея. Респект
                                  0
                                  Глядя на эту палитру, очень захотелось прикрутить временную шкалу и посмотреть в динамике, как Питер строился. Это же супер круто пощупать, покрутить ползунок, посмотреть как расползался от центра город!
                                    0
                                    да, но уловка в том что на карте только здания что есть сейчас. кстати фильтрация по годам есть.
                                      0

                                      Петровский док в Кронштадте не является зданием, но как-то он попал и отрисовывается)

                                    0

                                    А вы не думали обновить базу OSM полученными данными?

                                      0

                                      А каков легальный статус этих данных, лицензия?

                                        0

                                        Автор поста свою агрегацию данных выложил под CC-BY-SA. Но ещё не факт что он имеет право выдавать эту информацию так.


                                        Я не помню чтобы данные на основе ОСМа можно было передавать другим без копирайта самого ОСМа.

                                          0

                                          Да, это тоже проблема.

                                            0
                                            чуть разгребу хабр эффект, и лицензию сменю, о конфликте мне указали, полностью согласен
                                          +1

                                          В ОСМ можно тянуть только открытые источники, которые согласились в ОСМ поучаствовать. CityWalls вроде как разрешил ОСМу брать данные с картинок, но не информацию с самого сайта (если правильно помню там предлагали что-то с превьюшками зданий намутить)


                                          В общем для того чтобы в ОСМ это всё импортнуть надо ещё получить всякие разрешения.


                                          До сих пор не можем получит разрешение на использование Публичной Кадастровой Карты(

                                          +1
                                          Круто!

                                          Делали похожее для центра Нижнего Новгорода: evgenykatyshev.carto.com/builder/8e2f42cd-10fa-4ef7-b08b-6df3330c5631
                                            0
                                            А никто не в курсе, — где-то можно получить данные по году постройки домов в в других городах?
                                            Ну кроме сайта МинЖКХ, где данные неполные, к по крайней мере для нашего города.
                                            Есть вялотекущее желание развить тему, которую я описал здесь, — Статистика по стоимости недвижимости — визуализация на карте, но для мотивации не хватает какой то новой идеи… Введение в модель данных по возрасту домов могло бы быть таким катализатором.
                                              0

                                              внезапно Росреестр может вам помочь)
                                              Фонд данных государственной кадастровой оценки содержит сведения обо всех объектах недвижимости, адресе, годе постройки.
                                              Вот здесь, например, можно скачать отчет по Саратовской области.

                                              0

                                              Это очень круто!
                                              Особенно впечатлил тёплый подход к выбору цветов. Кайф. Не от балды три цвета (зелёный, желтый, красный), а именно выбор. Здорово.
                                              С Тильды переносить не хотите? Она ж, вроде, платная и не сильно гибкая (по сравнению с собственным решением)

                                                +1
                                                Смотрите, я не разработчик, тут кода было в проекте пара скриптов, мне удобно конструкторами собирать. Тильда для сайта меня вообще устраивает. А вот гибкости carto не хватило, очень хотелось своего.
                                                0

                                                Отличная идея и реализация! Понравилась идея выбора цветовой схемы. Карта получилась приятная и, действительно, залипательная.
                                                Другие города планируете делать? У меня сразу руки зачесались. Хочется "погулять" По таким картам по всему миру. Можно использовать в поездках по разным странам, городам.

                                                  0

                                                  А можно заказать у вас постер ?)

                                                  0
                                                  Вспомнил, что несколько лет назад была такая же карта для Москвы msk.mercator.ru — а теперь сайт перестал работать. Интересно, куда она пропала?
                                                  0

                                                  В веб-версии не хватает подписи ключевых объектов (реки например). Для человека не погруженного в географию Питера, наверно полезно было бы.

                                                    +1

                                                    Насчёт пика в 1917 г. — это именно так, многие дореволюционные строения, особенно рядовые, не очень примечательные, датируются именно 1917 годом. Такое массово встречается, например, на сайте reformagkx.ru.

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

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