також, судячи з імені файлу, використовуються гіслабівські вигрузки
не багато, але можна виграти використовуючи дані геофабрік.дє (на 15% менший файл) http://download.geofabrik.de/osm/europe/
ці completeWays=yes якраз не потрібні в рамках Валідатора вулиць
На рахунок групування по областям. Єдина можливість, яку я побачив, це вибірка за ISO 3166-2. Тому додав ці теги для Київа і Севастополя. Після завтрашнього оновлення ці два міста зявляться у списку
Викинув зі списку об’єктів, що перевіряються highway=footway і highway=path
Додав підсвітку будинків зв’язаних через relation.
Паралельно виявив ряд проблем:
Присутні 68 відношень, у котрих відсутні атрибут name - такі відношення ігноруються
У відношеннях в якості будинків присутні об’єкти з геометрією LINESTRING (також багато POINT, хоча це і не помилка, здається) - такі об’єкти також ігноруються
Загалом, на поточний момент підсвічується 34477 будинки з 69255 пронумерованих по Україні.
трохи повиправляв: один спочатку і десь десять з кінця списку(крім 2060931-206093, там взагалі неправильні звязки).
потім подумав, що дійсно якась дивна вимога вказувати ще й name для relation’a
помилковими мабуть треба вважати ті лінії, що входять в більш ніж один звязок типу street/associatedStreet
а також ті звязки у яких є лінії з різними назвами, хоча можуть бути виключення: вулиця, що включає міст, який має власну назву, яка прописана в name
можливо ще є виключення
Поясніть ще раз по тих зв’язках стріт. Питався в російському ірц-каналі - пишуть, що не потрібно використовувати, а ставити кожному будинку 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 на будинки, це не буде помилкою.
у нас було вирішено використовувати зв"язки, в Росії - 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”
Будуть пропозиції щодо вдосконалення такої вибірки, аби враховувались усі наведені вище варіанти адресації?