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

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

Как "готовить" открытые данные OpenStreetMap я рассказывал в "Где 15 минут пешком от дома до метро в Москве и как различать панельные дома…", не будем перед праздником распыляться в деталях. На этот раз для расчета дистанций нужны только дома построенные по типовому проекту "башня Вулыха":

create table focus_on_building as 
  select id,type 
    from geometry_global_view  
    where tags->'design:ref'='Башня Вулыха';

Проект дома в виде башни подходит сказку сказывать - он обычно одноподъездный и пешеходные пути от входа в здание до POI в окрестностях получаются почти в форме снежинок. А для людей живших в эпоху СССР это были одни из самых комфортных квартир из типовых новостроек.

Скоро сказка сказывается, да не скоро код пишется. Библиотека для расчета расстояний GraphHopper умеет выдавать маршрут в виде ломаных линий, а мы легко можем превратить ее объект в строку WKT (Well-known text representation of geometry)

String path = bestRoute.getPoints().toLineString(false).toString();

И при сохранении расчитанного маршрута в таблицу PostGIS:

osmworld=# \d footpath_distance 

    Column     |           Type            | 
---------------+---------------------------|
 building_id   | bigint                    | 
 building_type | table_reference           | 
 poi_id        | bigint                    | 
 poi_type      | table_reference           | 
 distance      | geometry(LineString,4326) | 

GraphHopper маршрут из WKT легко превращается в линию:

ST_SetSRID(ST_GeomFromText(path),4326)::geometry(LineString,4326)

Можно добавить еще больше зимней сказки, если приближение окрестностей делать шестигранниками геоиндексов H3 H_3_CORE.gridDistance( centreIdx, H_3_CORE.latLngToCell(ghPoint.lat, ghPoint.lon,8))<MAX_DISK_DISTANCE . Сходство пешеходных дистанций вокруг дома со снежинкой-изохроной будет ближе.

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

В данных OSM столицы оказалось 293 башни Вулыха, так что возможно он гулял в других окрестностях:

Выгружу данные в GeoJSON и поделюсь с вами:

\copy (select json_build_object('type', 'FeatureCollection','features', json_agg(json_build_object('type', 'Feature','geometry', st_AsGeoJSON(path)::json))) from (select distance path from footpath_distance) fp) to '~/moscow_snowflake.json';

Пока со стороны кажется, что в этом нет особой практической пользы, кроме предновогоднего настроения. Но это только кажется???? До встречи в новом году, будет интереснее!

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

А начинался этот год с того что я поделился своим проектом Как поместить весь мир в обычный ноутбук: PostgreSQL и OpenStreetMap. и выступал на PGConf.Russia 2023 перед дружелюбной аудиторией специалистов по PostgreSQL. За год я получил море практики в работе с данными OpenStreetMap, а также выиграл джекпот "поисковой деоптимизации". Покинул привычную "тепличную" обстановку офиса чтобы набраться нового для себя опыта и научиться новым навыкам, необходимым чтобы выжить в изменяющейся реальности, где со стороны может казаться что "пошел за ёлкой, а уже продает шкуру зайца".

Уважаемые программисты и сочувствующие нам читатели, поздравляю всех с наступающим Новым годом!

Комментарии (0)