Как стать автором
Обновить

Я бы не жил на побережье Черного моря Краснодарского края в этих местах…

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров13K

Про городской округ Сочи я высказывал свое мнение в "Я бы не жил в Сочи в этих местах…"

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

Загрузка данных

Подробно про процесс подготовки данных и запросов к ним уже расказывал здесь раньше. Для запуска модели мне в этот раз нужны данные для Туапсинского района, городского округа Геленджик, городского округа Новороссийск и городского округа Анапа.

Подготовил геоиндекс для аналитики этих районов
select h3_polygon_to_cells(geom,8) 
  from geometry_global_view 
  where type='multipolygon'::table_reference and 
              id in (365231,364548,364545,364543)

Перед этим загрузив открытые геоданные Южного федерального округа
wget https://download.geofabrik.de/russia/south-fed-district-latest.osm.pbf
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.

Статья про Москву собрала 200+ комментариев, где мне подсказали какие проблемы есть в каких районах, так же исправил благодаря подсказке читателя как модель реагировала на будки во дворах, помеченные industrial.

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

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

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

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

Новая визуализация для результатов

Читатели подсказывали в комментариях что было бы полезно увидеть сразу все здания - в которых я бы не стал жить и те которые модель не считает не подходящими для жилья.

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

  • 'fill' - цвет области (красный #ff0000 в ячейках индекса Uber H3, где по модели и данным у зданий есть негативные факторы, зеленый #00ff00 где они отсутствуют, оранжевый #ff9700 смешанные ячейки где и то и то)

  • 'fill-opacity' - выставил в 50% прозрачности

Для того чтобы в результат попали ячейки без негативных факторов: в запросе для расчета таблицы distance в PostreSQL/PostGIS я заменил inner join на left join и расчитал результаты агрегации этих дистанций в таблицу h3_10_stat_colored:

create table h3_10_stat_colored as 
select h3,h3_cell_to_boundary_geography(h3) cell ,count, reason,
  case
    when ARRAY_POSITION(all_reason,NULL::text) is null and cardinality(reason)>0 then '#ff0000'
    when ARRAY_POSITION(all_reason,NULL::text)>0 and cardinality(reason)>0 then '#ff9700' else '#00ff00'
  end colour
from (
   select h3_10 h3, count(distinct (to_id,to_type)),array_agg(distinct reason) filter (where reason is not null ) reason, array_agg(distinct reason) all_reason 
      from distance 
      group by 1 order by 1
) geo;

\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, 
                                                        'reason', reason,
                                                        'fill',colour,
                                                        'fill-opacity',0.5)))) FROM h3_10_stat_colored ) to 'h3-10_colored.json.geojson';

Остается одна проблема - встроенный виджет карты в GitHub Gist не поддерживает цвета. Но онлайн сервис geojson.io поддерживает стили и цвета в GeoJSON. В QGIS тоже можно загрузить данные из таблицы h3_10_stat_colored и настроить цвета:

Настройки цвета ячеек
Настройки цвета ячеек

И отображение этих же данных без каких-либо настроек "из коробки" в geojson.io

Туапсе в geojson.io
Туапсе в geojson.io

Результаты

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

Здесь будут лишь скриншоты результатов работы модели в QGIS:

Туапсе в QGIS
Туапсе в QGIS
Геленджик
Геленджик
Новороссийск
Новороссийск
Анапа
Анапа

Интересно будет узнать где в этих местах на берегу моря вам было дискомфортно и что на это влияло.

Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+6
Комментарии27

Публикации

Ближайшие события