Валідатор назв вулиць

На вихідних якийсь румун поламав кордон Чернівецької області, а всі інші мультиполігони областей коректні
http://tools.geofabrik.de/osmi/?view=multipolygon&lon=27.57906&lat=49.10887&zoom=8&overlays=ring_not_closed

Шкода, що owl зараз тормозить, раніше таке виявлялось ним :slight_smile:

завтра подивлюсь

пофіксив кордони України, Румунії, Чернівецької області і нашого Глибоцького району.

На рахунок групування по областям. Єдина можливість, яку я побачив, це вибірка за ISO 3166-2. Тому додав ці теги для Київа і Севастополя. Після завтрашнього оновлення ці два міста зявляться у списку

Валідатор групує по областях. Буквально кілька хвилин тому з’явилося :smiley:

продовжую писати свої прохання:)
викиньте будь ласка зі списку об’єктів, що перевіряються
highway=footway і highway=path
http://www.openstreetmap.org/browse/way/132809068

Оновив дані і код - nadoloni.com/streets.html

  1. Викинув зі списку об’єктів, що перевіряються highway=footway і highway=path
  2. Додав підсвітку будинків зв’язаних через relation.

Паралельно виявив ряд проблем:

  1. Присутні 68 відношень, у котрих відсутні атрибут name - такі відношення ігноруються
  2. У відношеннях в якості будинків присутні об’єкти з геометрією LINESTRING (також багато POINT, хоча це і не помилка, здається) - такі об’єкти також ігноруються

Загалом, на поточний момент підсвічується 34477 будинки з 69255 пронумерованих по Україні.

То правильно, це напевно будинки за схемою Карлсруе, тобто будинки точкою, плюс інтерполяція адрес. Їх теж потрібно обробляти.

Якщо ви про відношення associatedStreet, то в ньому атрибут name опціональний. Назва вулиці має братися з name мембера ролі street.

optional but recommended… Проблема у тому, що мембери одного відношення часто мають різні name. Ось список:

http://www.openstreetmap.org/browse/relation/416568
http://www.openstreetmap.org/browse/relation/1316746
http://www.openstreetmap.org/browse/relation/1353268
http://www.openstreetmap.org/browse/relation/1353269
http://www.openstreetmap.org/browse/relation/1353271
http://www.openstreetmap.org/browse/relation/1353272
http://www.openstreetmap.org/browse/relation/1353273
http://www.openstreetmap.org/browse/relation/1552690
http://www.openstreetmap.org/browse/relation/1563329
http://www.openstreetmap.org/browse/relation/1612043
http://www.openstreetmap.org/browse/relation/1656289
http://www.openstreetmap.org/browse/relation/1656347
http://www.openstreetmap.org/browse/relation/1656348
http://www.openstreetmap.org/browse/relation/1656349
http://www.openstreetmap.org/browse/relation/1657144
http://www.openstreetmap.org/browse/relation/1666661
http://www.openstreetmap.org/browse/relation/1666663
http://www.openstreetmap.org/browse/relation/1666664
http://www.openstreetmap.org/browse/relation/1666665
http://www.openstreetmap.org/browse/relation/1666666
http://www.openstreetmap.org/browse/relation/1666668
http://www.openstreetmap.org/browse/relation/1666670
http://www.openstreetmap.org/browse/relation/1666671
http://www.openstreetmap.org/browse/relation/1666672
http://www.openstreetmap.org/browse/relation/1667269
http://www.openstreetmap.org/browse/relation/1672414
http://www.openstreetmap.org/browse/relation/1672432
http://www.openstreetmap.org/browse/relation/1679900
http://www.openstreetmap.org/browse/relation/1679901
http://www.openstreetmap.org/browse/relation/1679902
http://www.openstreetmap.org/browse/relation/1685556
http://www.openstreetmap.org/browse/relation/1685557
http://www.openstreetmap.org/browse/relation/1685559
http://www.openstreetmap.org/browse/relation/1685560
http://www.openstreetmap.org/browse/relation/1685561
http://www.openstreetmap.org/browse/relation/1685562
http://www.openstreetmap.org/browse/relation/1693540
http://www.openstreetmap.org/browse/relation/1693541
http://www.openstreetmap.org/browse/relation/1694119
http://www.openstreetmap.org/browse/relation/1694120
http://www.openstreetmap.org/browse/relation/1694469
http://www.openstreetmap.org/browse/relation/1694470
http://www.openstreetmap.org/browse/relation/1694471
http://www.openstreetmap.org/browse/relation/1694472
http://www.openstreetmap.org/browse/relation/1707292
http://www.openstreetmap.org/browse/relation/1707293
http://www.openstreetmap.org/browse/relation/1707294
http://www.openstreetmap.org/browse/relation/1707295
http://www.openstreetmap.org/browse/relation/1707297
http://www.openstreetmap.org/browse/relation/1707298
http://www.openstreetmap.org/browse/relation/1711115
http://www.openstreetmap.org/browse/relation/1711116
http://www.openstreetmap.org/browse/relation/1748426
http://www.openstreetmap.org/browse/relation/1749542
http://www.openstreetmap.org/browse/relation/1832907
http://www.openstreetmap.org/browse/relation/1837642
http://www.openstreetmap.org/browse/relation/1863990
http://www.openstreetmap.org/browse/relation/1914036
http://www.openstreetmap.org/browse/relation/2044196
http://www.openstreetmap.org/browse/relation/2052034
http://www.openstreetmap.org/browse/relation/2054977
http://www.openstreetmap.org/browse/relation/2060065
http://www.openstreetmap.org/browse/relation/2060931
http://www.openstreetmap.org/browse/relation/2060932
http://www.openstreetmap.org/browse/relation/2060933
http://www.openstreetmap.org/browse/relation/2077813
http://www.openstreetmap.org/browse/relation/2082607
http://www.openstreetmap.org/browse/relation/2085774

Валідатор стає все гарнішим, дякую :slight_smile:

трохи повиправляв: один спочатку і десь десять з кінця списку(крім 2060931-206093, там взагалі неправильні звязки).
потім подумав, що дійсно якась дивна вимога вказувати ще й name для relation’a

з вказаних вами звязків, наприклад
http://www.openstreetmap.org/browse/relation/1552690
чому він некоректний? усі вулиці мають одну і ту ж назву

http://www.openstreetmap.org/browse/relation/1694471
у цього взагалі тільки один член з роллю street

помилковими мабуть треба вважати ті лінії, що входять в більш ніж один звязок типу street/associatedStreet
а також ті звязки у яких є лінії з різними назвами, хоча можуть бути виключення: вулиця, що включає міст, який має власну назву, яка прописана в name
можливо ще є виключення

От такі випадки було б непогано виявляти і помічати як помилки.

olehz
Пропав Володимир-Волинський

Поясніть ще раз по тих зв’язках стріт. Питався в російському ірц-каналі - пишуть, що не потрібно використовувати, а ставити кожному будинку addr:street
Тут бачу використовують і type=street, і type=associatedStreet - можливо прийдем до спільного знаменника?

У мене про street і associatedStreet теж колись були аналогічні питання.

З моєї точки зору, addr:street на будинках додає занадто багато ручної роботи. Також дуже легко зробити помилку, тобто, якщо людина з якихось причин написала в name російську назву, а потім з часом поставили правильно український напис, то треба йти по всіх будинках, і змінювати там, бо шукатися вони ну будуть. Ще й буде проблема їх знайти, тобто будинки у містах, особливо у мікрорайонах не стоять уздовж веїв вулиць. “Загубиш дім”, адресний пошук працювати не буде. Те ж саме, коли людина напише “вул. Дорошенка”, яке потім буде згідно угоди перейменоване у “Дорошенка вуліця”.

Також зв’язки дозволяють правильно поставити будинок на дві вулиці, вказавши дрібний номер “1/23”, а не тулити addr2:street, які зараз ніде не підтримуються.

Про те, як ці теґи використовуються, можна дивитися тут: addr:street, 4 мільйони домів, 9 мільйонів нод (очевидно Карлсруе), 20 тисяч відношень. associatedStreet – 57 тисяч, street – 12 тисяч. Слід зауважити, що дуже багато домів було заімпортовано. При імпорті набагато легше вказати addr:street на будинку. Я у своїх імпортах створював відношення окремою програмою у другому проході, після вивантаження домів і вулиць.

Але якщо ви у своєму місті будете ставити addr:street на будинки, це не буде помилкою.

Так є ж узгоджена схема
http://wiki.openstreetmap.org/wiki/Proposed_features/House_numbers/Karlsruhe_Schema#Using_relations_to_associate_house_and_street_.28optional.29
дозволяє писати type=street/associatedStreet
і ролі street/house/address

Київська область теж пропала

у нас було вирішено використовувати зв"язки, в Росії - addr:street на кожній будівлі. тому на ірц таке радили.

на рахунок кількох номерів на будинку - або вказувати лише по більш головній вулиці (у нас, наприклад, практично всюди примусово познімали номери з кутових будинків, щоб залишався лише один), або другий ставити точкою на лінії будівлі у місці розташування номера.

Дуже багато різних способів адресації, що сильно ускладнює запити до БД. Зараз валідатор обробляє лише будинки, що входять у відношення street, чи associatedStreet і для яких вказаний тег name. Валідатор працює з даними імпортованими за допомогою osm2pgsql з ключами -k -s -G. Для будинків використовується наступний запит:

SELECT
osm_id,
ASTEXT(ST_MakePolygon(ST_ExteriorRing(way))) AS the_geom,
X(CENTROID(way)) AS x,
Y(CENTROID(way)) AS y,
“addr:housenumber” AS num

FROM planet_osm_rels rel, planet_osm_polygon
WHERE
ST_Within(way, ST_PolygonFromText(‘Геометрія межі міста’)) AND
GEOMETRYTYPE(way) = ‘POLYGON’ AND
hstore(rel.tags)->‘name’ = ‘Назва вулиці’ AND
(hstore(rel.tags)->‘type’ = ‘associatedStreet’ OR hstore(rel.tags)->‘type’ = ‘street’) AND
osm_id=ANY(ARRAY(
SELECT
CAST(replace(replace(members[k2-1], ‘w’, ‘’),‘r’,‘-’) AS int)
FROM (SELECT generate_subscripts(parts, 1) AS k, id, parts, members
FROM planet_osm_rels
WHERE id = rel.id
) sub
WHERE members[k
2] = ‘house’ AND
(substring(members[k2-1], 1, 1) = ‘w’ OR substring(members[k2-1], 1, 1) = ‘r’)
))
ORDER BY
CAST(substring(“addr:housenumber” FROM ‘^\d+’) AS int),
LENGTH(“addr:housenumber”),
“addr:housenumber”

Будуть пропозиції щодо вдосконалення такої вибірки, аби враховувались усі наведені вище варіанти адресації?

може

  • викинути hstore(rel.tags)->‘name’ = ‘Назва вулиці’ AND
  • замінити osm_id=ANY(ARRAY( на ‘ID лінії’=ANY(ARRAY(
  • замінити members[k2] = ‘house’ на members[k2] in (‘house’,‘address’)
  • (hstore(rel.tags)->‘type’ = ‘associatedStreet’ OR hstore(rel.tags)->‘type’ = ‘street’) перемістити в середину ARRAY(…) і викинути зовнішній planet_osm_rels rel
    ?

трохи невірно зрозумів початковий запит…
мабуть краще так:

  • викинути hstore(rel.tags)->‘name’ = ‘Назва вулиці’ AND
  • додати
    AND
    ‘ID лінії’=ANY(ARRAY(
    SELECT
    CAST(replace(members[k2-1], ‘w’, ‘’) AS int)
    FROM (SELECT generate_subscripts(parts, 1) AS k, id, parts, members
    FROM planet_osm_rels
    WHERE id = rel.id
    ) sub
    WHERE members[k
    2] = ‘street’ AND
    (substring(members[k*2-1], 1, 1) = ‘w’)
    ))
  • замінити members[k2] = ‘house’ на members[k2] in (‘house’,‘address’)