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

тоді замість
б) хоча б одну лінію з роллю street яка має name=‘Назва вулиці’
таке
б) хоча б одну лінію з роллю street яка має name=‘Назва вулиці’
або
б’) relation-name=‘Назва вулиці’

Ось модифікований запит:

(
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,
    CAST(substring("addr:housenumber" FROM '^\d+') AS int) AS num_base,
    LENGTH("addr:housenumber") AS num_len
FROM planet_osm_polygon
INNER JOIN planet_osm_rels rel ON
    (hstore(rel.tags)->'type' = 'associatedStreet' OR hstore(rel.tags)->'type' = 'street') AND
    ARRAY[Список ID доріг згрупованих по назві в межах одного міста] && ARRAY(
        SELECT CAST(replace(members[k*2-1], 'w', '') AS int)
        FROM (SELECT generate_subscripts(parts, 1) AS k, id, parts, members) sub
        WHERE members[k*2] = 'street' AND
        (substring(members[k*2-1], 1, 1) = 'w')
    )
WHERE
    ST_Within(way, (SELECT way FROM planet_osm_polygon WHERE osm_id = ID межі міста)) AND
    GEOMETRYTYPE(way) = 'POLYGON' AND
    osm_id=ANY(ARRAY(
        SELECT CAST(replace(replace(members[k*2-1], 'w', ''),'r','-') AS int)
        FROM (SELECT generate_subscripts(parts, 1) AS k, id, parts, members) sub
        WHERE members[k*2] IN ('house', 'address') AND
        (substring(members[k*2-1], 1, 1) = 'w' OR substring(members[k*2-1], 1, 1) = 'r')
    ))
) UNION (
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,
    CAST(substring("addr:housenumber" FROM '^\d+') AS int) AS num_base,
    LENGTH("addr:housenumber") AS num_len
FROM planet_osm_polygon
WHERE
    building IS NOT NULL AND
    \"addr:housenumber\" IS NOT NULL AND
    "addr:street" = 'Назва вулиці' AND
    ST_Within(way, (SELECT way FROM planet_osm_polygon WHERE osm_id = ID межі міста)) AND
    GEOMETRYTYPE(way) = 'POLYGON'
)
ORDER BY
    num_base,
    num_len,
    num

Відповідно з чим необхідно підправити наступні відношення, включивши до них ролі street:

http://www.openstreetmap.org/browse/relation/158417
http://www.openstreetmap.org/browse/relation/365784
http://www.openstreetmap.org/browse/relation/417093
http://www.openstreetmap.org/browse/relation/946947
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/1491643
http://www.openstreetmap.org/browse/relation/1492401
http://www.openstreetmap.org/browse/relation/1545755
http://www.openstreetmap.org/browse/relation/1552690
http://www.openstreetmap.org/browse/relation/1559358
http://www.openstreetmap.org/browse/relation/1563329
http://www.openstreetmap.org/browse/relation/1649094
http://www.openstreetmap.org/browse/relation/1656348
http://www.openstreetmap.org/browse/relation/1675727
http://www.openstreetmap.org/browse/relation/1703470
http://www.openstreetmap.org/browse/relation/1710256
http://www.openstreetmap.org/browse/relation/1834767
http://www.openstreetmap.org/browse/relation/1966230
http://www.openstreetmap.org/browse/relation/1977549
http://www.openstreetmap.org/browse/relation/2052036
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/2062235
http://www.openstreetmap.org/browse/relation/2072322
http://www.openstreetmap.org/browse/relation/2072323
http://www.openstreetmap.org/browse/relation/2073259
http://www.openstreetmap.org/browse/relation/2076743
http://www.openstreetmap.org/browse/relation/2076744
http://www.openstreetmap.org/browse/relation/2077139
http://www.openstreetmap.org/browse/relation/2077140
http://www.openstreetmap.org/browse/relation/2077141

Зараз оновлю дані на сервері - подивимось, що з того вийде

може ще
INNER JOIN planet_osm_rels rel ON
(hstore(rel.tags)->‘type’ = ‘associatedStreet’ OR hstore(rel.tags)->‘type’ = ‘street’) AND
ARRAY && ARRAY
замінити на
INNER JOIN planet_osm_rels rel ON
(hstore(rel.tags)->‘type’ = ‘associatedStreet’ OR hstore(rel.tags)->‘type’ = ‘street’) AND
(hstore(rel.tags)->‘name’ = ‘Назва вулиці’ or ARRAY && ARRAY)
чи це сильно сповільнить запит?

які є ідеї щодо розділення вулиць що мають однакову назву в межах одного міста? :slight_smile:

додай будь ласка highway=raceway у виключення типу path/footway
і також “лінія” і “дорога” у регулярку “вулиця|проспект…”

Ой, точно пропустив. Поправлю завтра

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

Перше, що приходить в голову, розбивати місто на райони. В Київі, здається, є 4 вулиці Шевченка, але вони всі в різних районах.

hstore(rel.tags)->‘name’ = ‘Назва вулиці’ or hstore(rel.tags)->‘name’ is null and ARRAY && ARRAY)

http://nadoloni.com/streets.html - спробував зробити розмежування міст на райони. І знов проблеми:

  1. Міст, у котрих зроблено таке межування, лише 5: (Дніпропетровськ, Київ, Кривий Ріг, Севастополь, Чернівці)
  2. Треба якось позначати, що адміністративний кордон є саме районом міста (наприклад place=suburb), бо відсутність таких тегів сильно ускладнює запити
  3. Незрозуміло як бути з ситуацією, коли вулиця географічно належить більше, а ніж одному району

а що на даний момент є містом в розумінні валідатора?

       
                SELECT
                    polygon.osm_id,
                    polygon.way,
                    point.population,
                    point.name,
                    point."name:ru",
                    point."name:en",
                    X(CENTROID(point.way)) AS longitude,
                    Y(CENTROID(point.way)) AS latitude
                FROM planet_osm_polygon polygon, planet_osm_point point
                WHERE
                    polygon.name IS NOT NULL AND
                    polygon.admin_level IS NOT NULL AND
                    (polygon.place = 'city' OR polygon.place='town') AND
                    (point.name = polygon.name) AND
                    (point.place = 'city' OR point.place='town') AND
                    ST_Within(point.way, polygon.way)

Тому Херсон, наприклад, до списку і не потрапив - у цього обласного центру відсутній адміністративний кордон

думаю, що поки не узгодимо класифікацію адмін.кордонів
http://forum.openstreetmap.org/viewtopic.php?id=7583
то не треба робити такого розбиття на nadoloni.com

та й не розумію як будувати цю ієрархію…
наприклад той же ж Львів
http://forum.openstreetmap.org/viewtopic.php?pid=225940#p225940
в якому райони міста виходять за межі самого міста…

admin_level не принциповий. Я керуюсь лише геометричною вкледеністю.

Ця проблема просто обходиться, якщо позначати райони міста тегом place=suburb. А саме розсташування геометрії вулиці в перетині геометрій з тегами place (suburb і city) дає однозначну приналежність вулиці конкретному місту і конкретному району міста.

Тобто аби побудувати таку ієрархію достатньо додати тег place=suburb для района (цих районів небагато - постараюсь на днях додати теги) + перевірити, чи геометрія вулиці не присутня в кількох районах одночасно

place=suburb
цим тегом позначаються мікрорайони міст

для районів міст як таких що ділять на частини міста обласного значення(які позначаємо тегами admin_level=6) пропоную ставити
boundary=administrative
admin_level=7, але в Києві і Севастополі 6
name=‘* район’

Такий варіант не є задовільним. Якщо вже такі трабли з визначеннями адміністративного устрою і place=suburb ідеологічно незадовільний, давайте узгодимо чисто укркаїнський тег для розбиття міста на райони. Які будуть пропозиції?

Скільки емоцій… А насправді все просто: от що говорить вікіпедія.
Тобто, це не самостійна адміністративна одиниця. Це житловий комплекс, який з самого початку задумувався як цілісний, відносно самодостатній - з усією необхідною для життя інфраструктурою, щоб жителям не доводилося мандрувати в пошуках необхідного з одного кінця міста в інший.
В наведеному списку є позначені мною в Полтаві - Сади-1, Сади-2, Огнівка. Вони наочно показують що таке мікрорайон. З такими назвами вони фігурують не тільки між жителів та таксистів, а якщо можна так висловитися, це було їхнім “codename:slight_smile: і в офіційних документах - рішеннях міськради і т.п.
Позначати їх звичайно, потрібно, бо це давня усталена назва місцевості, хоча, повторюся - ніякого відношення до адмінподілу мікрорайони не мають, бо не формують власних представницьких органів.
Також сюди ж можна віднести не новобудови, а давні історичні назви місцевостей, назви поглинутих містом сіл.
Це ж пише і OSM-wiki: http://wiki.openstreetmap.org/wiki/Tag:place%3Dsuburb

P.S. (update)
В останньому лінку тільки після того як запостив, помітив посилання на place=neighbourhood. Раніше його начебто не було. Схоже, для мікрорайонів і місцевостей можна використати його, а suburb тоді відповідно - для районів міст. Чи я невірно трактую? Які ще думки будуть?

Справа не в емоціях. Як бути з Шевченка вул. у Київі? - по факту у Київі 4 вулиці з такими назвами - їх необхідно розмежувати. Я лише закликаю до тимчасовго вирішення проблеми - введення окремого тегу.

Не знаю, що вкладується в поняття “народних” мікрорайонів :slight_smile:
А для усіх інших видів мікрорайонів пацанів з районів кликати не доведеться, можна звернутися до архіву рішень місцевих органів влади. Обвести схеми їх забудови - от і кордон.
Для новопроектованих мікрорайонів, взагалі все спрощується завдяки інету, наприклад: http://www.poltava.pl.ua/photo/480/ (до речі, для даного мікрорайону бачив навіть у відкритому доступі детальні плани кожного з будинків!)

Врешті решт, якщо чіткий кордон провести неможливо - навіщо його проводити взагалі? Поставити точку, назвати її і спати з чистою совістю. Так же радять і на сторінці place=neighbourhood - почитайте, не пошкодуєте.

Без чіткого визначення адмінрайонів геокодінг не працюватиме

В Києві кілька вулиць Шевченка? Офіційно? Я вражений. В яких суворих умовах доводиться працювати поштовій службі… Не впевнений, що тут немає помилок. Пошлю бандерольку, підпишу адресу “Київ, Шевченка, буд. 1” - як вони дізнаються куди її доставити?
Мене це відверто дивує, бо в силу специфіки роботи з назвами вулиць в населених пунктах доводиться працювати щодня і знаю напевне, що поіменовані вони в межах населеного пункту, а не районів-мікрорайонів. В усякому разі за Полтавську область ручаюся. Це логічно, бо якщо не так - матимемо хаос. Не буває в одному місті кількох вулиць з однаковими назвами. Якщо, умовно кажучи, в Кременчуці проспект припустимо “55-річчя Жовтня” проходить через усе місто, через два його райони, то це один і той же проспект, а не свій в Автозаводському і свій у Крюківському районах. Нумерація будинків почнеться в одному кінці і завершиться в іншому.

Вікімапія? Ні-ні-ні, не згадуйте. Це уособлення хаосу. Сказати, що вона “неточна” - буде компліментом в її сторону. На рівні “баба бабі сказала”. Таке враження, що креслять там або ті тьоті, які сидять під під’їздами на лавочках, або ностальгуючі особистості, які навчались/служили/були проїздом в місті 10-20-30 років тому. Можливо, по об’єму даних вона і випереджає OSM, але в плані достовірності - повний шлак.

Хоча то все, як кажуть, американці, бла-бла-бла. Нам потрібна схема.
ОК, пропоную:
райони в містах - place=suburb
мікрорайони, місцевості - place=neighbourhood (якщо чіткі межі невідомі, діємо як рекомендують - ставимо точку в орієнтовному центрі)
Хто що про це думає?

Але знову ж таки, райони-мікрорайони ніяким чином не повинні впливати на ідентифікацію вулиць. Пара “населений пункт” - “вулиця” унікальна завжди, а коли ні - треба позначати як помилку.

Іноді, все ж такb трапляється кілька вулиць в одному місті з однаковими назвами. Доволі часто це відбувається коли до великого міста приєднують невеличкий НП, що був передмістям, а потім з ростом великого міста увійшов до його складу. В Дніпропетровську є такі випадки. Після включення с. Таромського до складу міста у Дніпропетровську з’явились по дві вулиці з однаковими назвами, одна з Таромського інша з Дніпропетровська.
Ось наприклад вулиця Леніна:
Таромьске — http://www.openstreetmap.org/?minlon=34.7949867248535&minlat=48.4412269592285&maxlon=34.7973709106445&maxlat=48.4466514587402
Дніпропетровськ (місто) — http://www.openstreetmap.org/?minlon=35.0347137451172&minlat=48.4609031677246&maxlon=35.0445861816406&maxlat=48.4719772338867

Також поруч із ними вулиця Серова (Таромське та в місті)

Щодо використання suburb для позначення районів, виглядає нелогічно, бо suburb — це перш за все передмістя

Для районів більше підійшло б district

Дуже просто — за поштовим індексом. Навіть якщо вулиці і мають однакову назву, зазвичай вони знаходяться у різних частинах міста, тому аж ніяк не будуть належати до одного поштового відділення.

Мені подобається.

вважаю, що ці теги необхідно ставити на одні і ті самі об’єкти, адже:

а якщо вулиця належить кільком районам — можливо варто об’єднати всі її частини у відношення, тоді необхідно буде аналізувати його, а не шляхи, однак проблема зникне.

так, в англійській мові зазвичай саме таке значення слова suburb, але: