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

Основная ценность этой публикации в новой визуализации. Теперь интерактивная карта доступна в браузере и работает на смартфонах!

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

Группировка данных по этим факторам основана на иерархической системе индексации Uber H3 с масштабом ячеек 10. Ячейки раскрашивались по следующим правилам:

  • Если все жилые дома в ячейке подвержены воздействию отрицательных факторов, то ячейка окрашивается в красный цвет.

  • Если жилые дома в ячейке не подвержены воздействию отрицательных факторов, то ячейка окрашивается в зеленый цвет.

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

В случае если вас интересуют только результаты аналитики, вы можете зайти на GitHub Pages и посмотреть карту Берлина в своем веб‑браузере. Возможно прийдется подождать загрузки 80Мб GeoJSON - в первый раз это не быстрый процесс.

Использовал openstreetmap_h3 для обработки исходных данных OpenStreetMap:

wget https://download.geofabrik.de/europe/germany/brandenburg-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)/brandenburg-latest.osm.pbf -result_in_tsv true
docker run --name postgis15-brandenburg --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)/database:/var/lib/postgresql/data -v $(pwd)/brandenburg-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 создает таблицы с геоданными OSM, секционированными по индексам H3 и может упростить запросы SQL с помощью geometry_global_view.

PSQL подключится к базе данных PostGIS только после успешного импорта данных OSM:

psql -h 127.0.0.1 -p 5432 -U postgres -d osmworld

Давайте создадим геоиндексы для ускорения SQL-запросов и после этого активируем расширение H3:

CREATE INDEX idx_nodes_geometry ON nodes USING gist (geom);
CREATE INDEX idx_ways_geometry ON ways USING gist (linestring);
CREATE INDEX idx_multipolygon_geometry ON multipolygon USING gist (polygon);

CREATE INDEX idx_nodes_geography ON nodes USING gist (cast (geom as geography));
CREATE INDEX idx_ways_geography ON ways USING gist (cast (linestring as geography));
CREATE INDEX idx_multipolygon_geography ON multipolygon USING gist (cast (polygon as geography));

CREATE EXTENSION h3_postgis CASCADE;

Данные для карты я подготовил и выгрузил с помощью следующих запросов:

CREATE TABLE distance AS
            select b.h3_3, h3_lat_lng_to_cell(b.centre,10) h3_10, h3_lat_lng_to_cell(b.centre,8) h3_8,
                    round(ST_Distance(b.geom::geography,g.geom::geography))::integer distance,
                    b.type from_type, g.type to_type, b.id from_id, g.id to_id,
                    CASE
                        WHEN g.tags->'amenity'='waste_transfer_station' or
                             g.tags->'landuse'='landfill' or
                             g.tags->'man_made'='spoil_heap' or
                             g.tags->'man_made'='wastewater_plant' or
                             g.tags->'building'='cowshed' or
                             g.tags->'building'='sty' or
                             g.tags->'building'='slurry_tank' or
                             g.tags->'man_made'='chimney' or
                             g.tags->'amenity'='crematorium' THEN 'air_quality'
                        WHEN g.tags->'power'='substation' or
                             g.tags->'power'='generator' or
                             g.tags->'power'='plant' or
                             g.tags->'building'='industrial' or
                             g.tags->'landuse'='industrial' or
                             g.tags->'landuse'='quarry' THEN 'industrial'
                        WHEN g.tags->'natural'='wetland' and g.tags->'wetland' is distinct from 'mangrove' THEN 'mosquitoes'
                        WHEN g.tags->'aeroway'='runway' or
                             g.tags->'aeroway'='helipad' or
                             g.tags->'railway'='rail' or
                             g.tags->'highway'='primary' or
                             g.tags->'highway'='trunk' or
                             g.tags->'leisure'='stadium' or
                             g.tags->'landuse'='construction' or
                             g.tags->'lanes'~'^\d+$' and (g.tags->'lanes')::integer>2 THEN 'noisy_place'
                        WHEN g.tags->'shop'='pyrotechnics' or
                             g.tags->'hazard' is not null or
                             g.tags->'hazard_prone' is not null or
                             g.tags->'flood_prone' is not null or
                             g.tags->'man_made'='storage_tank' THEN 'dangerous'
                    END reason

                        FROM geometry_global_view b
                        left join geometry_global_view g

                            on ST_DWithin(b.geom::geography,g.geom::geography,150)
    and g.tags->'disused' is distinct from 'yes'
    and (
        g.tags->'amenity'='waste_transfer_station' or --_air quality_
        g.tags->'landuse'='landfill' or --_air quality_
        g.tags->'man_made'='spoil_heap' or --_air quality_
        g.tags->'man_made'='wastewater_plant' or --_air quality_
        g.tags->'amenity'='crematorium' or --_air quality_
        (g.tags->'natural'='wetland' and g.tags->'wetland' is distinct from 'mangrove') or --_mosquitoes_
        (g.tags->'power'='substation' and g.tags->'substation' is distinct from 'minor_distribution') or --_industrial_
        (g.tags->'power'='generator' and g.tags->'generator:source' is distinct from 'wind' and g.tags->'generator:source' is distinct from 'solar' and g.tags->'generator:method' is distinct from 'photovoltaic' and g.tags->'generator:method' is distinct from 'run-of-the-river' and g.tags->'generator:method' is distinct from 'heat_pump' and g.tags->'generator:method' is distinct from 'thermal') or --_industrial_
        g.tags->'power'='plant' or --_industrial_
        g.tags->'building'='industrial' or --_industrial_
        g.tags->'landuse'='industrial' or --_industrial_
        g.tags->'landuse'='quarry' or --industrial_
        g.tags->'aeroway'='runway' or --_noisy_place_
        g.tags->'aeroway'='helipad' or --_noisy_place_
        g.tags->'railway'='rail' or --_noisy_place_
        g.tags->'highway'='primary' or --_noisy_place_
        g.tags->'highway'='trunk' or --_noisy_place_
        g.tags->'leisure'='stadium' or --_noisy_place_
        g.tags->'landuse'='construction' or --_noisy_place_
        g.tags->'shop'='pyrotechnics' or --_dangerous_
        g.tags->'man_made'='storage_tank' or --_dangerous_
        g.tags->'hazard' in ('landslide','erosion','rock_slide','falling_rocks','shooting_range','flooding','minefield','rockfall','ditch','flood','toxic plants','toxic fumes','quicksand','avalanche','fall','falling_ice','toxic_fumes','slide','Rock_slide','fire') or --_dangerous_
        g.tags->'hazard_prone' is not null or --_dangerous_
        g.tags->'flood_prone' is not null or --_dangerous_
        g.tags->'building'='cowshed' or --_air quality_
        g.tags->'building'='sty' or --_air quality_
        g.tags->'building'='slurry_tank' or --_air quality_
        g.tags->'man_made'='chimney' or --_air quality_
        (g.tags->'lanes' is not null and g.tags->'lanes'~'^\d+$' and (g.tags->'lanes')::integer>2) --noisy_place
    )
  where
    b.tags->'building' is not null and
    b.tags->'amenity' is null  and
    b.tags->'shop' is null and
    b.tags->'building' not in --the buildings listed below do not house people on a permanent basis
        ('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')
    and (ST_MinimumBoundingRadius(b.geom)).radius > 0.00007; --filter small non living buildings

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 'berlin-h3-10_colored.json.geojson';

Разделил загружаемый файл размером 80 Мб на 4 части (как обходной путь ограничения размера файла GitHub), загрузил эти данные в репозиторий github и использовал виджет MapLibre для визуализации этих данных:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head>
    <title>Map of negative factors in Berlin that affect housing comfort</title>
    <script src='https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.js'></script>
    <link href='https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.css' rel='stylesheet'/>
    <style>
        #map-container {
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
            }
        #map {
                width: 100%;
                height: 100%;
             }
    </style>
</head>
<body>
<div id="map-container">
    <div id="map"></div>
</div>
<script>
    function displayInfo(selectedFeature) {
        if(selectedFeature.properties.fill=='#00ff00') return;
        var popup = new maplibregl.Popup()
        .setLngLat(selectedFeature.geometry.coordinates[0][0])
        .setHTML('<h3>count ' + selectedFeature.properties.count +
                    '<br/>reason '+ selectedFeature.properties.reason+'</h3>')
        .addTo(map);
    }
    
    const style = {
      "version": 8,
        "sources": {
        "osm": {
                "type": "raster",
                "tiles": ["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"],
                "tileSize": 256,
          "attribution": "&copy; OpenStreetMap Contributors",
          "maxzoom": 19
        }
      },
      "layers": [
        {
          "id": "osm",
          "type": "raster",
          "source": "osm"
        }
      ]
    };

    var map = new maplibregl.Map({
      container: 'map',
      style: style,
      center: [13.4092, 52.5151],
      zoom: 12
    });

    map.on('load', function () {
        
        for (var idx = 0; idx <= 3; idx++) {

            map.addSource('geojson-'+idx, {
                type: 'geojson',
                data: 'https://raw.githubusercontent.com/igor-suhorukov/igor-suhorukov/main/berlin-h3-10_colored-'+idx+'.json'
            });

            map.addLayer({
                id: 'geojson-'+idx+'-layer',
                type: 'fill',
                source: 'geojson-'+idx,
                paint: {
                    'fill-color': ['get', 'fill'],
                    'fill-opacity': 0.5
                }
            });

            map.on('click', 'geojson-'+idx+'-layer', function (e) {
                var selectedFeature = e.features[0];
                displayInfo(selectedFeature);
            });

            map.on('mouseenter', 'geojson-'+idx+'-layer', function () {
                map.getCanvas().style.cursor = 'pointer';
            });

            map.on('mouseleave', 'geojson-'+idx+'-layer', function () {
                map.getCanvas().style.cursor = '';
            });
        }
    });
</script>
</body>
</html>

Окончательная визуализация доступна в виде статического веб‑сайта на GitHub Pages по адресу: https://igor‑suhorukov.github.io.

Напомню, что ячейки раскрашивались по следующим правилам:

  • Если все жилые дома в ячейке подвержены воздействию отрицательных факторов, то ячейка окрашивается в красный цвет.

  • Если жилые дома в ячейке не подвержены воздействию отрицательных факторов, то ячейка окрашивается в зеленый цвет.

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

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

Центр Берлина на интерактивной карте
Центр Берлина на интерактивной карте

Эта модель и подход просты на первый взгляд, но за ними стоят многие месяцы работы как над openstreetmap_h3, так и недели отладки SQL здесь, с сообществом на Хабре. Спасибо всем кто помог!

Жизнь вокруг Берлинского зоопарка для людей
Жизнь вокруг Берлинского зоопарка для людей

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

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


  1. Einherjar
    03.10.2023 07:19
    +1

    Рядом с жильем, ближе чем в 150м не хотел бы видеть, нюхать и слышать влияющее на:

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


    1. igor_suhorukov Автор
      03.10.2023 07:19
      -1

      У меня есть плохая новость в этом случае, нужно уезжать из мегаполиса подальше - в сторону полюса! Но так да, зависит от ветра...


      1. Einherjar
        03.10.2023 07:19
        +5

        Да, коровники и свинарники в центре мегаполисов это большая проблема.


        1. igor_suhorukov Автор
          03.10.2023 07:19

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

          качество воздуха: Станция перевалки мусора, Свалка, Террикон, Коровник, Свинарник, Жидкий навоз, Очистка сточных вод, Дымовая труба, Крематорий


      1. Dolios
        03.10.2023 07:19

        Конечно, ведь свинарники в мегаполисах повсеместно...


        1. igor_suhorukov Автор
          03.10.2023 07:19

          Мой ответ относился к

          Для этих объектов и километра мало. Станция перевалки мусора, Свалка, Террикон, Коровник, Свинарник, Жидкий навоз, Очистка сточных вод, Дымовая труба, Крематорий

          А не именно к свинарнику)


  1. olku
    03.10.2023 07:19
    +1

    Нашел свой дом в зелёной зоне, но соседи социальщики с шестью детьми превосходят показатели карты по половине параметров.


    1. igor_suhorukov Автор
      03.10.2023 07:19

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


      1. olku
        03.10.2023 07:19
        +1

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


        1. igor_suhorukov Автор
          03.10.2023 07:19

          А протоколы нарушений где-то публикуются? Фамилии жильцов написаны в подъезде?


          1. KivApple
            03.10.2023 07:19
            +1

            Фамилии жильцов написаны в подъезде?

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


            1. igor_suhorukov Автор
              03.10.2023 07:19

              Спасибо, теперь понял о чем речь!


          1. olku
            03.10.2023 07:19

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


          1. Sun-ami
            03.10.2023 07:19

            Да, фамилии жильцов написаны на домофонных кнопках возле входа в подъезд, на почтовых ящиках, и на кнопках звонков у входа в квартиры. Причём на домофонных кнопках они размещены согласно этажу, снизу вверх.


  1. Lorik22
    03.10.2023 07:19

    Актуально... Этот метод можно использовать и с анализом жилья в других городах? Или, если, к примеру, брать не город, а отдельные районы?


    1. igor_suhorukov Автор
      03.10.2023 07:19

      Конечно, к любым регионам/выгрузкам из OpenStreetMap. Открываете мои публикации на Хабре и читайте последние 6 из них.


      1. pbw
        03.10.2023 07:19

        Эх, жаль что моих знаний недостаточно... Но может когда-нибудь найдется добрый/заинтересованный человек, который сделает карту Хельсинки?

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

        Заболоченные участки - мало. Но вот комаров - много. Просто из небольших лесов (коих много) летят. Фильтр смысла не имеет.

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

        Железные дороги есть. Но все дома в непосредственной близости от путей снабжены стеклопакетами и центральным кондиционированием, чтобы летом окна не открывали. И рельсы - сварные, нет стука колес. Можно жить спокойно.

        Всего остального, в 150м от жилья - можно сказать что нет.

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


        1. olku
          03.10.2023 07:19
          +1

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


        1. tommyangelo27
          03.10.2023 07:19
          +1

          Из имеющих смысл: Автомобильные дороги, Стадион

          Кстати, живу возле стадиона (по прямой 1.2 км) и шум вообще никак не мешает. Матчи 1-2 раза в неделю максимум, концерты — ну пусть раз в месяц (возможно, есть более загруженные стадионы, конечно). И то не сказал бы, что шум прям какой-то значительный.


          Вот автострада, до которой у меня около 550 метров, создаёт в несколько раз больше шума (так как он перманентный).


          Но и автострада, и стадион — ничто в сравнении со стройкой бизнес-центра под окнами.


  1. KivApple
    03.10.2023 07:19
    +1

    Хотелось бы такую статью для Ниццы, в которой я живу. Тут тоже много россиян.


  1. Ayahuaska
    03.10.2023 07:19

    Потрясающе, в Берлине почти нигде лучше не жить. (:

    А как-то можно узнать, отчего та или иная сота красная? А то я можт живу и не знаю, что у меня тут плохо (:


    1. igor_suhorukov Автор
      03.10.2023 07:19

      Теперь ссылки на факторы в ячейке есть во всплывающем Popup элементе при ее выборе. Обновил данные и JS код


  1. Sun-ami
    03.10.2023 07:19

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


    1. igor_suhorukov Автор
      03.10.2023 07:19

      Специально для вас обновил dataset - добавил файл с факторами и ссылки на них из ячеек.


      1. Sun-ami
        03.10.2023 07:19

        Но почему к категории industrial отнесены обычные отделения банков?


        1. igor_suhorukov Автор
          03.10.2023 07:19

          Скиньте мне пожалуйста ссылки на банки, надо смотреть на разметку в OSM. В запросе банковские отделения не участвуют.


          1. Sun-ami
            03.10.2023 07:19

            1. igor_suhorukov Автор
              03.10.2023 07:19

              Спасибо! Здание протегировано как силовая подстанция. Если там расположен банк, то это ошибка разметки в OSM.

              power=substation
              power=substation

              Если в одном здании с банком небольшая трансформаторная будка, то тогда не хватает тега substation=minor_distribution и на такие объекты модель не реагирует!


              1. Sun-ami
                03.10.2023 07:19

                Что-то похожее на маленькую подстанцию там тоже есть, но не в этом здании, а в маленьком квадратном здании рядом.


  1. Dolios
    03.10.2023 07:19

    А что в этот раз с кладбищами?


    1. igor_suhorukov Автор
      03.10.2023 07:19

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


  1. xeonvs
    03.10.2023 07:19
    +1

    Очень забавный результат, весь основной туристический центр зелёный. Там постоянные тусовки, бары и шумовой фон нормальный разве что только часов в 4-5 утра. На мой взгляд, нужно нормировать по числу увеселительных заведений такие области.


    1. igor_suhorukov Автор
      03.10.2023 07:19
      +1

      Замечание резонное! С актуальностью разметки для баров и ночных клубов в OSM есть вопросы.


  1. svartberg
    03.10.2023 07:19

    Все очень прикольно. Но все же такие карты не дадут реальную оценку района. Довольно много факторов, которые влияют на район и не все можно легко учесть. И вот получается, что судя по карте нужно ехать в Neukölln или селиться около аэропорта прямо под глиссадой и наслаждаться самолетами, или в сторону Кёпеника, где наблюдаются некоторые проблемы с водоснабжением.

    Но в целом, как частичный анализ - неплохо. И если и использовать то только в рамках уже заранее выбранного района.


    1. igor_suhorukov Автор
      03.10.2023 07:19

      Я же и не пытаюсь претендовать на полноту модели. Глиссады воздушных судов отсутствуют в исходных данных, возможно данные flightradar24 с этим помогут, если их удасться скачать


      1. svartberg
        03.10.2023 07:19
        +1

        Да это я больше к тому, что в реальности такие карты не применимы к некоторым(или многим городам). Просто даже если брать тот же Берлин - эта карта ничего не даст. Берлин выбирает где будет жить человек, а не человек =) (Принимая во внимание катастрофическую ситуацию с рынком жилья в крупных городах Европы, выбор жилья будет всегда обусловлен просто фактом "где удастся снять - там и жить")


        1. igor_suhorukov Автор
          03.10.2023 07:19

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


          1. svartberg
            03.10.2023 07:19
            +1

            Верно, но поверьте, лучше спросить у местных. Я ещё раз внимательно посмотрел районы где я живу и в котором гуляю каждый день по несколько часов с детьми и могу сказать, что карте нельзя верить примерно на 90%. Это я говорю именно про Берлин и про те районы, которые я очень хорошо знаю. Возможно, другие города - лучше представлены.
            Очень-очень хорошие дома/кварталы отмечены как не рекомендуемые, при этом как рекомендуемые отмечены довольно сомнительные.
            Даже откровенные топ места района (и я бы сказал даже города) отмечены как не рекомендуемые.
            Так же критерии некоторые очень и очень сомнительные. Например:
            близость к ЖД - жить окнами к путям не ок, но в 100 метрах уже ничего не слышно. В то же время школы (которые не учитываются) - это довольно шумно. Больница/пожарная часть (так же не взяты в расчет) рядом с домом это может быть супер-шумно.
            А если брать не оценку дома, а района по количеству "зелёных" областей получается что довольно трешевый район Wedding не хуже довольно хорошего Charlottenburg-Wilmersdorf. А довольно средний Spandau соответствует одному из самых лакшери районов Grünewald. И что из такого анализа следует? - ничего.


            1. igor_suhorukov Автор
              03.10.2023 07:19

              К тому же не сомневаюсь в том что вы хорошо знаете Берлин и что есть другие факторы, которые вам важны. Я четко описал что входит в модель и на что она реагирует. Зеленое - это не значит что там точно хорошо, это лишь что на здания в этой ячейки удалены более чем на 150м от тех факторов что описаны в статье и размечены на карте.

              В то же время школы (которые не учитываются) - это довольно шумно. Больница/пожарная часть (так же не взяты в расчет) рядом с домом это может быть супер-шумно.

              Кому-то наоборот без этого жить не будет смысла. То есть этот фактор такой же субъективный как и близость жилья к кладбищу.

              В основе аналитики — моя субъективная модель, которая отговаривает меня жить в определенных местах.

              Это то что прямо написано в тексте.

              И что из такого анализа следует?

              Ровно то что я не хотел бы жить в 150м от того что указал


  1. lromanov
    03.10.2023 07:19

    Как вы проверяете разметку на false positive?
    Я сходу нашёл пару нелепостей, и уверен, что их ещё куча.

    • Kulturbraueri — джентрифицированное культурное пространство. Но вы разметили, что там лучше не жить из-за загрязнения воздуха, потому что есть труба (https://www.openstreetmap.org/way/377907066), которая сто лет как не работает.

    • Фотостудия с садом и площадкой для проведения эвентов в тихом квартале (https://www.openstreetmap.org/way/25224087) размечена как industrial и покрашена красным.

    • много разметок dangerous и опять же красный цвет из-за того, что в данных отмечено, что на дороге могут играть дети. Это серьёзный минус района?


    1. igor_suhorukov Автор
      03.10.2023 07:19

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

      Спасибо вам за внимательное изучение мест которые вы знаете! Благодаря вам добавил в условия негативных факторов tags->'disused' is distinct from 'yes'

      Если труба действительно не работате и местные OSMеры добавят тег disused=yes кhttps://www.openstreetmap.org/way/377907066 то при следующем запуске модели этот фактор не будет считаться негативным.

      С фотостудией похоже на проблему в разметке в OSM, если это не действующее индустриальное здание:

      много разметок dangerous

      посмотрел значения tags->'hazard' для всей планеты и сузил выборку до tags->'hazard' in ('landslide','erosion','rock_slide','falling_rocks','shooting_range','flooding','minefield','rockfall','ditch','flood','toxic plants','toxic fumes','quicksand','avalanche','fall','falling_ice','toxic_fumes','slide','Rock_slide','fire')

      Спасибо вам за участие в улучшении модели!


      1. lromanov
        03.10.2023 07:19

        Спасибо за исправление.
        Давайте я вам ещё косяков накидаю :)
        Довольно много забраковано из-за небольших электрощитов на улицах. Например таких: https://www.openstreetmap.org/way/186054154
        (к сожлаению, не могу вставлять картинки, но его хорошо видно на панорамах apple maps, на google maps не отснято)
        Ещё в этом же районе Neu Tempelhof есть какие-то неразмеченные дырки прямо на жилых домах к западу от приведённой выше точки. Как будто там нет жилья, хотя там напротив, кроме частных домов почти ничего и нет.


    1. igor_suhorukov Автор
      03.10.2023 07:19

      Данные карты обновил с учетом изменений SQL запроса.