Я бы не жил в Сочи в этих местах…

—

от автора

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

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

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

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

  • Сочи славится своими пляжами на Черном Море, а один из самых известных пляжей — «Ривьера».

  • Дендрарий: Этот ботанический сад на побережье Черного моря представляет собой коллекцию уникальных растений со всего мира. Это прекрасное место для прогулок и отдыха.

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

Готовим данные

Исходные данные я загружал с сайта Geofabric для всего Южного федерального округа. Как их загрузить для анализа рассказывал в «Где бы вы точно не жили и не остановились даже на время, если бы знали и выбирали на основе фактов». Рекомендую прочесть. Там больше технической информации, которую здесь я повторять не буду.

На этот раз запускал

команды
docker run -it --rm -w $(pwd) -v $(pwd):/$(pwd) -v /var/run/docker.sock:/var/run/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)/south-fed-district-latest.osm.pbf -result_in_tsv true docker run --name postgis15-south-fed-district --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)/database:/var/lib/postgresql/data -v $(pwd)/south-fed-district-latest_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'

openstreetmap_h3 нужен для преобразования дампов OpenStreetMap. Позволяет параллельно загружать их в PostGIS, используя партиционирование данных, либо экспортировать в набор parquet/arrow файлов для Spark/Hadoop. Про этот инструмент подробно рассказывал в серии публикаций на Хабре. Теперь его можно использовать в Docker!

Границу городского округа Сочи для аналитики

извлекаем таким запросом
select geom from geometry_global_view where  tags->'addr:region'='Краснодарский край' and  tags->'admin_level'='6' and  (tags->'name'='городской округ Сочи' or tags->'name'='городской округ Сириус')

Эти полигоны с помощью функции h3_polygon_to_cells(geom,8) можно превратить в геоиндексы. С ними будет быстрее и удобнее работать в запросах к геоданным…

«Готовим» выборку из расчетов всего ЮФО для дистанций в Сочи и Сириус
create table distance_sochi as    select * from distance    where h3_8 in (select h3_polygon_to_cells(geom,8)                     from geometry_global_view                     where tags->'addr:region'='Краснодарский край' and tags->'admin_level'='6' and (tags->'name'='городской округ Сочи' or tags->'name'='городской округ Сириус'));  create table h3_10_stat_sochi as    select h3,h3_cell_to_boundary_geography(h3) cell ,count, reason    from (           select h3_10 h3, count(distinct (to_id,to_type)),array_agg(distinct reason) reason              from distance_sochi              where to_id is not null             group by 1              order by 1        ) geo;

Что учитывается, а что нет

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

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

Модель — это всего лишь грубое приближение реальности, тем более что данные о материалах дома и реальное качество строительства не учитываются. Как и года постройки здания, название типового проекта. Не учитывается слышимость из соседних квартир и с улицы. Так же как нерасчитывается затухание шума на деревьях/ на шумозащитном экране у трассы( детальная информация о высоте деревьев и плотности их размещения на OpenStreetMap отсутствует), какие соседи из каких квартир уходят в запой и поколачивают свою семью, где есть агрессивные к другим людям индивиды во дворах и парках, качество водоснабжения и можно ли безопасно пить воду из-под крана. Живут ли в доме тараканы. Работает ли вентиляционная труба или ее замуровал сосед сверху расширив за ее счет объем свей жилплощади. Как часто ломает лифт сосед перегружая его до потолка стройматериалами. Есть ли хулиганы жгущие пластиковые кнопки в лифте и побелку в подъезде, изрисовывают ли стены дома. И многое другое не менее важное для комфорта остается вне модели.

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

Если вам так же как и мне все это не добавляет комфорта в жилье, то продолжим.

Я проверил исходные данные OSM для Сочи в поисках разметки обозначающей опасность:

  1. tags->'hazard' — отмечена одна точка, где есть опасность оползней https://www.openstreetmap.org/node/8616000015

  2. tags->'flood_prone' 3 узла для мест возможного затопления: https://www.openstreetmap.org/node/706309487 https://www.openstreetmap.org/node/3682998930 https://www.openstreetmap.org/node/3682998934

  3. tags->'hazard_prone' ничего не найдено

Сделал это запросом
select id,type,tags from geometry_global_view    where (tags->'hazard_prone' is not null or           tags->'flood_prone' is not null or           tags->'hazard' is not null)         and h3_8 in ( select to_short_h3_8(h3_polygon_to_cells(geom,8)::bigint)                       from geometry_global_view                        where  tags->'addr:region'='Краснодарский край' and                               tags->'admin_level'='6' and                                   (tags->'name'='городской округ Сочи' or                                   tags->'name'='городской округ Сириус')                    )

to_short_h3_8 и приведение h3index к типу bigint нужно из-за компактного представления индексов h3_8 масштаба 8 в моей базе данных openstreetmap_h3

     id     | type  |                        tags                          ------------+-------+-----------------------------------------------------   706309487 | nodes | "ford"=>"yes", "flood_prone"=>"yes"  3682998930 | nodes | "ford"=>"yes", "depth"=>"0.8", "flood_prone"=>"yes"  3682998934 | nodes | "ford"=>"yes", "depth"=>"0.8", "flood_prone"=>"yes"  8616000015 | nodes | "hazard"=>"landslide" (4 rows)  Time: 2797,106 ms (00:02,797)

Совсем не густо! Если вспоминать новости, то в данных должно было быть много мест, рядом с домами у ручьев, где несколько лет назад что смыло или где сошла сель итп. Местное комьюнити OpenStreetMap, обращаюсь к вам, вам есть над чем поработать!!!

Результаты

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

Сохраняем geojson файлы
osmworld=# \copy (select distinct h3_10, reason,                                CASE                                   WHEN to_type='nodes' THEN 'https://www.openstreetmap.org/node/'||to_id                                    WHEN to_type='ways' THEN 'https://www.openstreetmap.org/way/'||to_id                                    WHEN to_type='multipolygon' THEN 'https://www.openstreetmap.org/relation/'||to_id                                END OSM_URL                      from distance_sochi where to_id is not null order by 1) to 'uncomfortable_sochi.tsv' COPY 27609 Time: 80,586 ms osmworld=# \copy (select json_build_object('type', 'FeatureCollection',                                            'features', json_agg(json_build_object('type', 'Feature',                                                                                   'geometry', st_AsGeoJSON(cell)::json,                                                                                    'properties', json_build_object('count', count,'h3_10',h3, 'reason', reason))))                    FROM h3_10_stat_sochi) to 'uncomfortable_h3-10_region_sochi.json.geojson'; COPY 1 Time: 52,928 ms  osmworld=# \copy ( select json_build_object('type', 'FeatureCollection','features',                                              json_agg(json_build_object('type', 'Feature','geometry', st_AsGeoJSON(cell)::json,                                                                         'properties', json_build_object('count', count,'h3_10',h3))))                      FROM (                            select h3_cell_to_boundary_geography(h3) cell,*                             from (                                   select h3_10 h3,count(*)                                    from distance_sochi inner join geometry_global_view                                    on to_id is null and from_id=id and from_type=type group by 1                                 ) good                          ) good_h3_10) to 'maybecomfortable_h3-10_region_sochi.json.geojson'; COPY 1 Time: 447,092 ms

Сочи

Сочи
Адлер и округ Сириус

Адлер и округ Сириус
Красная Поляна

Красная Поляна

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

И конечно же поделюсь районами с жилыми зданиями, что не попали в результаты модели и возможно там «неплохо». Это не значит что там хорошо, а значит что в окрестности нет вышеперечисленных негативных факторов и требуется дополнительная информация для уточнения, наскольно комфортно жить здесь. Здесь эта визуализация полезна, так как местные глядя на нее могут сказать «в таком-то гексагоне на самом деле некомфортно жить потому что …» и факты.

Сочи

Сочи
Адлер и округ Сириус

Адлер и округ Сириус
Красная Поляна

Красная Поляна

Удачи вам в поиске комфортного жилья!


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


Комментарии

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

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