Жилье в Москве для здорового образа жизни

—

от автора

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

Если вам важен спорт, то жить рядом с объектами спортивной инфраструктуры это не просто удобство, это основа здорового образа жизни:

  • Отсутствие необходимости в долгих поездках до тренировок позволяет сосредоточиться на упражнениях, а не тратить несколько раз в неделю время на дорогу.

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

  • Фитнес центры и бассейны часто являются местами, где можно встретить единомышленников. Как в шутку говорил дедушка друга: жену лучше выбирать на пляже.

  • Видя людей, занимающихся спортом, вы тоже захотите тренироваться.

  • Регулярные физические упражнения способствуют выработке эндорфинов — гормонов счастья, что в свою очередь улучшает настроение и общее психологическое состояние. А главное без побочных эффектов нездорового образа жизни.

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

Поиск домов

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

Нам для анализа не нужно скачивать данные всей планеты, а можно загрузить лишь Центральный федеральный округ и извлечь из него даннные для Москвы. Запускал импорт данных в openstreetmap_h3 PostgreSQL на Ubuntu, с предустановленными git, docker.io, wget:

mkdir ~/moscow && cd ~/moscow  wget https://download.geofabrik.de/russia/central-fed-district-latest.osm.pbf wget https://raw.githubusercontent.com/mapsme/omim/master/data/borders/Russia_Moscow.poly docker run -rm -it -w /wkd -v $(pwd):/wkd mschilde/osmium-tool osmium extract --polygon Russia_Moscow.poly central-fed-district-latest.osm.pbf -o moscow.osm.pbf  git clone https://github.com/igor-suhorukov/openstreetmap_h3.git cd openstreetmap_h3 && docker build -t openstreetmap_h3 . cd postgis_docker-master && docker build -t postgres15_postgis .  cd ~/moscow docker run -it --rm -w $(pwd) -v $(pwd):/$(pwd) -v /var/run/docker.sock:/var/run/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)/moscow.osm.pbf -result_in_tsv true docker run --name postgis15-moscow --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)/database:/var/lib/postgresql/data -v $(pwd)/moscow_loc_ways:/input -e POSTGRES_PASSWORD=osmworld -d -p 5432:5432 postgres15_postgis:latest -c checkpoint_timeout='15 min' -c checkpoint_completion_target=0.9 -c shared_buffers='4096 MB' -c wal_buffers=-1 -c bgwriter_delay=200ms -c bgwriter_lru_maxpages=100 -c bgwriter_lru_multiplier=2.0 -c bgwriter_flush_after=0 -c max_wal_size='32768 MB' -c min_wal_size='16384 MB'

После импорта данных подключаемся к базе psql -h 127.0.0.1 -p 5432 -U postgres -d osmworld исоздаем список интересующих нас спортивных объектов. Здесь приведу упрощенный запрос на центроидах геометрии спорт объектов, так же как и для списка зданий:

CREATE TABLE sport_poi AS   SELECT id,type,        h3_8,        st_x(centre),        st_y(centre),        tags  FROM geometry_global_view  WHERE tags@>'amenity=>dojo'   OR tags@>'leisure=>fitness_centre'   OR tags@>'leisure=>fitness_station'   OR tags@>'leisure=>golf_course'   OR tags@>'leisure=>sports_centre'   OR tags@>'leisure=>pitch'   OR tags@>'leisure=>stadium'   OR tags@>'leisure=>swimming_pool'   OR tags@>'leisure=>track'   OR tags@>'aerialway=>cable_car'   OR tags@>'aerialway=>chair_lift'   OR tags@>'aerialway=>gondola'   OR tags@>'aerialway=>pylon'   OR tags@>'aerialway=>station'   OR tags?'sport'

В запросе спортивных объектов учитываются:

  • Додзё — официальное место обучения любому из японских боевых искусств.

  • Фитнес-центр, оздоровительный клуб или тренажёрный зал с тренажёрами для
    упражнений, занятия фитнесом, место с тренажёрами и/или с танцевальным
    залом, залом для занятием фитнесом. Сюда приходят, чтобы позаниматься
    упражнениями. Также известен как качалка, клуб здоровья или фитнес-клуб.

  • Спортивные уличные тренажёры, воркаут, оборудование для гимнастики или снаряды для уличной физподготовки — сооружение на открытом воздухе, где люди могут выполнять различные физические упражнения.

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

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

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

  • sport как обозначение одного или нескольких видов спорта, в которые можно играть внутри или на каком-либо физическом объекте.

  • Поле для гольфа — территория, на которой играют в гольф.

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

  • Специальная дорожка для бега, езды на велосипеде и других немоторизованных гонок.

  • Станция, на которой пассажиры могут входить и/или выходить на канатную дорогу (горнолыжный подъемник или фуникулёр).

И список многоэтажных домов у которых указан в адресе номер дома:
CREATE TABLE multi_storey_building AS WITH   building_parts_ AS (   SELECT building.id,        building.type,        part.id part_id,        part.type part_type,        part.tags part_tags,        building.tags,        area FROM   (SELECT *,           (CASE                WHEN TYPE='ways'                     AND ST_IsClosed(geom) THEN st_area(ST_MakePolygon(geom)::geography)                WHEN TYPE='multipolygon' THEN st_area(geom::geography)                ELSE 0            END) area    FROM geometry_global_view    WHERE tags?'building'      AND tags?'building:part'      AND ST_IsClosed(geom)) part,    (SELECT *,           (CASE                WHEN TYPE='ways'                     AND ST_IsClosed(geom) THEN ST_MakePolygon(geom)                ELSE geom            END) shape    FROM geometry_global_view    WHERE tags?'building'      AND not(tags?'building:part')      AND ST_IsClosed(geom)) building WHERE st_contains(shape, part.geom) ),  building_w_parts AS   (SELECT id,           TYPE,           sum((CASE                    WHEN part_tags->'building:flats' ~ '^[0-9]+$' THEN part_tags->'building:flats'                    ELSE NULL                END)::smallint) flats,           max((CASE                    WHEN part_tags->'building:levels' ~ '^\d+(\.\d+)?$' THEN part_tags->'building:levels'                    ELSE NULL                END)::real) levels,           sum(area) area    FROM building_parts_    WHERE tags?'addr:housenumber'    GROUP BY id,type),                                           flats_precalc AS   (SELECT g.id,           g.type,           centre,           (CASE                WHEN g.tags->'building:levels' ~ '^\d+(\.\d+)?$' THEN g.tags->'building:levels'                ELSE NULL            END)::real levels,           (CASE                WHEN g.tags->'building:flats' ~ '^[0-9]+$' THEN g.tags->'building:flats'                ELSE NULL            END)::smallint flats,           (CASE                WHEN g.type='ways'                     AND ST_IsClosed(g.geom) THEN st_area(ST_MakePolygon(g.geom)::geography)                WHEN g.type='multipolygon' THEN st_area(g.geom::geography)                ELSE 0            END) area    FROM geometry_global_view g    WHERE type<>'nodes'      AND tags->'building' not in --в перечисленных ниже зданиях не живут на постоянной основе         ('service','garages','industrial','retail','office','roof','commercial','garage','kiosk','warehouse','church',         'parking','public','shed','hangar','train_station','guardhouse','transportation','terrace','greenhouse','bridge',         'government','chapel','gazebo','civic','ruins','supermarket','sports_centre','semidetached_house','toilets',         'sports_hall','clinic','farm_auxiliary','stable','grandstand','bunker','gatehouse','store','temple','ventilation_kiosk',         'carport','cowshed','barracks','shop','cabin','barn','cathedral','wall','townhouse','manufacture','shelter',         'fire_station','stadium','stands','sport_hall','theatre','storage_tank','checkpoint','houseboat','abandoned','dovecote','mosque','museum','military','container','observatory','lift','tent','factory','sport','mall','riding_hall','depot',         'prison','gate','triumphal_arch','water_works','public_building','pavilion','bank','institute','works','collapsed',         'car_repair','crossing_box','fuel','tree_house','presbytery','yesq','farm','outbuilding','police','porch','sauna',         'monastery','cinema','tower','boathouse','library','transformer_tower','heat_exchange_station','ice_rink','entrance','construction','transformer')      AND not(tags?'building:part')),  building_precalc AS   (SELECT fp.id,           fp.type,           centre,           coalesce(fp.flats, p.flats) flats,           coalesce(p.area, fp.area) area,           coalesce(fp.levels, p.levels) levels    FROM flats_precalc fp    LEFT JOIN building_w_parts p ON p.id=fp.id    AND p.type=fp.type) SELECT id,        type,        st_x(centre),        st_y(centre),        levels,        coalesce(flats, (levels*area*                           (SELECT avg((flats/levels)/area)                            FROM flats_precalc                            WHERE area>0                              AND flats>0))::smallint) flats FROM building_precalc WHERE levels>2;

Как считать пешеходные расстояний я рассказывал в публикации Где 15 минут пешком от дома до метро в Москве. Поскольку это ресурсозатратная операция, REST API бесплатного GraphHopper тут не особо поможет, только in-process вызовы роутера, поэтому нужно писать свою программу для расчета. Перед этим еще ограничил выборку многоэтажных домов только домами в 2км пешком от входа в метро для учета лучшей транспортной доступности жилья.

Расчитаем число спортивных объектов в пешей доступности от жилых домов в Москве:

CREATE TABLE moscow_district AS select tags->'name' name,polygon from multipolygon where tags->'admin_level'='8' and tags->'boundary'='administrative';  CREATE INDEX idx_moscow_district_geometry ON moscow_district USING gist (polygon);   CREATE TABLE infrastructure_for_sport AS   select       (select name        from moscow_district        where st_contains(polygon, centre) limit 1) district,   tags->'addr:street' street,    tags->'addr:housenumber' housenumber,     totalscore from (select building_id,building_type,count(*) totalscore       from calculated_distance where distance<=2000         group by 1,2) stat    inner join  geometry_global_view g      on stat.building_id=id and stat.building_type=type    inner join multi_storey_building USING(id,type) -- только многоэтажные дома  order by totalscore desc;

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

select district, street, housenumber,         totalscore from   (select *, row_number() over (partition by district order by totalscore desc)     from infrastructure_for_sport) a  where row_number=1 and district is not null order by totalscore desc;

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

Выгрузил результат как GeoJson:

\copy (select json_build_object('type', 'FeatureCollection','features', json_agg(json_build_object('type', 'Feature','geometry', st_AsGeoJSON(centre)::json,'properties', json_build_object('district',district ,'street',street, 'housenumber',housenumber, 'totalscore', totalscore )))) from (select *, row_number() over (partition by district order by totalscore desc) from infrastructure_for_sport) buildings where row_number=1  and district is not null) to 'best_houses_near_sport.json';

Самые спортивные дома Москвы по районам

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

            district             |            street             | housenumber | totalscore  ---------------------------------+-------------------------------+-------------+------------  Тверской район                  | улица Большая Дмитровка       | 7/5         |       6241  Пресненский район               | Малый Кисловский переулок     | 7           |       5727  район Арбат                     | Романов переулок              | 5           |       5595  Красносельский район            | Сретенский бульвар            | 6/1 с1      |       5434  Мещанский район                 | Рождественский бульвар        | 11          |       5366  Басманный район                 | улица Маросейка               | 9 с1        |       5343  район Хамовники                 | улица Знаменка                | 13 с1       |       5195  Таганский район                 | Яузский бульвар               | 14/8        |       4840  район Якиманка                  | улица Серафимовича            | 2/20        |       4439  район Замоскворечье             | улица Большая Ордынка         | 7           |       4187  район Беговой                   | Ленинградский проспект        | 2           |       2891  район Марьина Роща              | улица Сущёвский Вал           | 3/5А        |       2820  Бутырский район                 | Бутырская улица               | 4           |       2439  Савёловский район               | Вятская улица                 | 1           |       2395  Даниловский район               | Большая Серпуховская улица    | 56          |       2365  Донской район                   | улица Шаболовка               | 32          |       2259  Гагаринский район               | улица Вавилова                | 72/13       |       2154  Хорошёвский район               | улица Викторенко              | 2/1         |       2141  район Дорогомилово              | Большая Дорогомиловская улица | 4           |       2104  район Сокольники                | Русаковская улица             | 18/20       |       2079  Академический район             | улица Ивана Бабушкина         | 24          |       2079  район Черёмушки                 | Нахимовский проспект          | 67 к3       |       2075  Ломоносовский район             | улица Панфёрова               | 18          |       2073  Южнопортовый район              | 3-й Крутицкий переулок        | 15          |       2055  район Аэропорт                  | Ленинградский проспект        | 56          |       2038  район Сокол                     | Чапаевский переулок           | 12 к3       |       2007  район Северное Тушино           | улица Героев Панфиловцев      | 2           |       1968  Тимирязевский район             | Дмитровский проезд            | 1           |       1932  район Южное Тушино              | бульвар Яна Райниса           | 1           |       1890  район Митино                    | Митинская улица               | 21          |       1831  Орехово-Борисово Южное          | Ореховый бульвар              | 20/2        |       1740  район Зябликово                 | Ореховый бульвар              | 29/49       |       1738  Обручевский район               | улица Гарибальди              | 20/29 к2    |       1737  район Орехово-Борисово Северное | улица Генерала Белова         | 33/19       |       1737  район Марьино                   | Братиславская улица           | 5           |       1669  район Люблино                   | улица Верхние Поля            | 35 к3       |       1656  район Преображенское            | Преображенская улица          | 2 к1        |       1650  район Измайлово                 | Верхняя Первомайская улица    | 51          |       1604  район Северное Измайлово        | Сиреневый бульвар             | 37/40       |       1579  район Лефортово                 | Волочаевская улица            | 19          |       1575  район Восточное Измайлово       | 11-я Парковая улица           | 34          |       1545  Войковский район                | 1-й Новоподмосковный переулок | 2/1         |       1511  Алексеевский район              | проспект Мира                 | 124 к3      |       1457  район Гольяново                 | Чусовская улица               | 2           |       1457  район Соколиная Гора            | Большая Семёновская улица     | 21          |       1449  Останкинский район              | улица Кондратюка              | 2           |       1448  район Богородское               | Краснобогатырская улица       | 79 к3А      |       1417  Бескудниковский район           | Дмитровское шоссе             | 105 к1      |       1408  Бабушкинский район              | Енисейская улица              | 34          |       1389  район Котловка                  | улица Кржижановского          | 27          |       1375  район Проспект Вернадского      | улица Удальцова               | 1 к1        |       1373  район Бибирево                  | Шенкурский проезд             | 10          |       1365  район Щукино                    | улица Маршала Рыбалко         | 1           |       1365  район Лианозово                 | Алтуфьевское шоссе            | 85          |       1348  Дмитровский район               | Дмитровское шоссе             | 107 к1      |       1345  район Восточное Дегунино        | улица 800-летия Москвы        | 14          |       1335  Головинский район               | Флотская улица                | 28 к1       |       1317  район Перово                    | Зелёный проспект              | 39 к1       |       1311  район Кузьминки                 | Волгоградский проспект        | 52 к1       |       1307  район Коптево                   | улица Космонавта Волкова      | 29          |       1303  район Текстильщики              | 11-я улица Текстильщиков      | 12          |       1303  район Коньково                  | Профсоюзная улица             | 102/47      |       1298  район Раменки                   | проспект Вернадского          | 10 к1       |       1288  район Северное Медведково       | Сухонская улица               | 9           |       1279  район Южное Медведково          | Сухонская улица               | 5           |       1266  район Левобережный              | Фестивальная улица,           | 4           |       1262  Лосиноостровский район          | улица Лётчика Бабушкина       | 40          |       1260  район Новогиреево               | Новогиреевская улица          | 39          |       1255  район Тёплый Стан               | Профсоюзная улица             | 126         |       1242  район Ховрино                   | Флотская улица                | 7 к2        |       1235  район Ростокино                 | улица Сергея Эйзенштейна      | 2           |       1233  район Западное Дегунино         | Коровинское шоссе             | 9 к1        |       1217  Рязанский район                 | Зеленодольская улица          | 7 к3        |       1209  Алтуфьевский район              | Костромская улица             | 10          |       1205  район Свиблово                  | Кольская улица                | 13          |       1178  район Братеево                  | улица Борисовские Пруды       | 20 к1       |       1154  район Ивановское                | Свободный проспект            | 11 к1       |       1142  район Хорошёво-Мнёвники         | улица Маршала Тухачевского    | 21 к1       |       1127  район Зюзино                    | Азовская улица                | 23          |       1122  район Выхино-Жулебино           | улица Академика Скрябина      | 7 к1        |       1121  район Чертаново Центральное     | Кировоградская улица          | 30          |       1120  район Филёвский Парк            | улица Барклая                 | 5 к4        |       1118  Нагорный район                  | Симферопольский бульвар       | 15 к5       |       1074  район Кунцево                   | Полоцкая улица                | 2           |       1071  район Отрадное                  | Юрловский проезд              | 27          |       1033  район Вешняки                   | Кетчерская улица              | 12          |       1003  район Марфино                   | улица Академика Королёва      | 14          |        987  район Чертаново Южное           | Кировоградская улица          | 42 к1       |        980  Тропарёво-Никулино              | улица Коштоянца               | 47 к2       |        976  район Царицыно                  | Кантемировская улица          | 31          |        972  район Чертаново Северное        | Кировоградская улица          | 10 к1       |        959  Можайский район                 | улица Маршала Неделина        | 34 к1       |        952  Ярославский район               | Хибинский проезд              | 26          |        944  район Крылатское                | Рублёвское шоссе              | 34 к1       |        936  район Печатники                 | улица Полбина                 | 30          |        920  район Фили-Давыдково            | Минская улица                 | 5           |        908  район Ясенево                   | Новоясеневский проспект       | 3           |        882  район Нагатино-Садовники        | Каширский проезд              | 1/1         |        854  район Нагатинский Затон         | проспект Андропова            | 19          |        812  район Покровское-Стрешнево      | Полесский проезд              | 2 к1        |        806  район Южное Бутово              | Южнобутовская улица           | 36          |        797  район Москворечье-Сабурово      | Кантемировская улица          | 20 к2       |        794  район Строгино                  | Строгинский бульвар           | 15          |        787  район Солнцево                  | улица Богданова               | 26 к3       |        773  район Косино-Ухтомский          | улица Наташи Качуевской       | 5           |        757  Нижегородский район             | Подъёмная улица               | 10          |        731  район Новокосино                | Суздальская улица             | 10 к4       |        730  район Северное Бутово           | бульвар Дмитрия Донского      | 16          |        709  район Очаково-Матвеевское       | Озёрная улица                 | 17          |        695  Ново-Переделкино                | улица Скульптора Мухиной      | 7           |        618  поселение Внуковское            | улица Анны Ахматовой          | 10          |        573  поселение Московский            | улица Зелёная Горка           | 1 к3        |        569  район Бирюлёво Восточное        | 6-я Радиальная улица          | 3 к1        |        543  район Северный                  | Дмитровское шоссе             | 122Д к4     |        482  район Некрасовка                | Рождественская улица          | 29 к3       |        475  поселение Сосенское             | Фитарёвская улица             | 21          |        443  район Метрогородок              | Открытое шоссе                | 24 к2       |        412  район Внуково                   | Спортивная улица              | 2/11        |        364  поселение Воскресенское         | Чечёрский проезд              | 128         |        306

Выгрузка этих домов в виде карты доступна на GitHub.

Хоть в Москве все отлично со спорт площадками, фитнес центрами, залами для единоборств и игровыми видами спорта, но есть спорт который требует другой географии. Катание на вейкборде за катером или серф на искусственной волне не заменят впечатлений от волн в океане, чистой морской воды и свежего воздуха. То же самое и с горнолыжными склонами у мегаполиса — это спуски с холмов, которые не сравнить с катанием в настоящих горах.


ссылка на оригинал статьи https://habr.com/ru/articles/781802/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *