На вихідних якийсь румун поламав кордон Чернівецької області, а всі інші мультиполігони областей коректні
http://tools.geofabrik.de/osmi/?view=multipolygon&lon=27.57906&lat=49.10887&zoom=8&overlays=ring_not_closed
Шкода, що owl зараз тормозить, раніше таке виявлялось ним
завтра подивлюсь
пофіксив кордони України, Румунії, Чернівецької області і нашого Глибоцького району.
На рахунок групування по областям. Єдина можливість, яку я побачив, це вибірка за ISO 3166-2. Тому додав ці теги для Київа і Севастополя. Після завтрашнього оновлення ці два міста зявляться у списку
Валідатор групує по областях. Буквально кілька хвилин тому з’явилося
продовжую писати свої прохання:)
викиньте будь ласка зі списку об’єктів, що перевіряються
highway=footway і highway=path
http://www.openstreetmap.org/browse/way/132809068
Оновив дані і код - nadoloni.com/streets.html
- Викинув зі списку об’єктів, що перевіряються highway=footway і highway=path
- Додав підсвітку будинків зв’язаних через relation.
Паралельно виявив ряд проблем:
- Присутні 68 відношень, у котрих відсутні атрибут name - такі відношення ігноруються
- У відношеннях в якості будинків присутні об’єкти з геометрією 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
Валідатор стає все гарнішим, дякую
трохи повиправляв: один спочатку і десь десять з кінця списку(крім 2060931-206093, там взагалі неправильні звязки).
потім подумав, що дійсно якась дивна вимога вказувати ще й name для relation’a
з вказаних вами звязків, наприклад
http://www.openstreetmap.org/browse/relation/1552690
чому він некоректний? усі вулиці мають одну і ту ж назву
http://www.openstreetmap.org/browse/relation/1694471
у цього взагалі тільки один член з роллю street
помилковими мабуть треба вважати ті лінії, що входять в більш ніж один звязок типу street/associatedStreet
а також ті звязки у яких є лінії з різними назвами, хоча можуть бути виключення: вулиця, що включає міст, який має власну назву, яка прописана в name
можливо ще є виключення
Проблема у тому, що мембери одного відношення часто мають різні name
От такі випадки було б непогано виявляти і помічати як помилки.
olehz
Пропав Володимир-Волинський
Поясніть ще раз по тих зв’язках стріт. Питався в російському ірц-каналі - пишуть, що не потрібно використовувати, а ставити кожному будинку addr:street
Тут бачу використовують і type=street, і type=associatedStreet - можливо прийдем до спільного знаменника?
olehz
Пропав Володимир-ВолинськийПоясніть ще раз по тих зв’язках стріт. Питався в російському ірц-каналі - пишуть, що не потрібно використовувати, а ставити кожному будинку addr:street
Тут бачу використовують і type=street, і type=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[k2] = ‘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[k2] = ‘street’ AND
(substring(members[k*2-1], 1, 1) = ‘w’)
)) - замінити members[k2] = ‘house’ на members[k2] in (‘house’,‘address’)