КОАТУУ та інші бази по Україні

У сусідній гілці про адресацію між іншим згадано про використання КОАТУУ.

В мене з цим виникло питання – як планується прописати теґи з КОАТУУ на всіх містах і селах України?

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

Також хотілося б завдати кількість населення в кожному пункті, використовуючи хоча б той самий сайт Верховної Ради з обліковими картками (чи хтось витягав звідти інформацію?). Це допомогло б автоматично перевірити тип населенного пункту (city, village, hamlet). Але знову ж таки, в тій базі немає КОАТУУ, і повністю все буде неможливо автоматизувати.

Також цікавить, хто і з яких даних наніс усі населені пункти? Може в тій базі були ще хоча б якісь додаткові дані, які допомогли б у зв’язуванні записів між собою?

В інтернеті декілька сайтів продають бази зі зв’язаним населенням, КОАТУУ, та російською назвою, але я не взнавав, чи дозволяє їх ліцензія потім вивантажити на ОСМ, я в тому дуже сумніваюся. То ж думаю, що доведеться зробити таку базу самим, використовуючі відкриті джерела.

Взагалі, які бази існують? Можливо що якась з продвинутих облрад чи міськрад в себе публікує якісь географічні дані? Я з заздрістю читав про Штати, Францію, Голандію, для яких завантажено досить подробні бази як про населені пункти, вулиці, так і про використання землі. В нас же рано чи пізно доведеться fuzzerом проходитись :frowning:

Eugene

Подивився у Вікіпедії, в них є проект Населені пункти України, де знайшов посилання не ще декілька баз.

Але я бачу скрот – можна вже більшість потрібної інформації взяти з самої Вікіпедії, тобто: всі пункти мають георграфічні координати, тобто є 1:1 зв’язок з тим, що ми маємо зараз у базі. Маємо однозначну назву українською мовою (наприклад, я помітив, що в імпорті, який існує зараз, літери після апострову написано у верхньому реєстрі), КОАТУУ, населення, висоту над рівнем моря.

На жаль, я побачив розбіжності між російською та українською назвами, тому тут Вікіпедія загубила точність, а на сайті укрпошти вже в системі пошуку індексів російські назви не подаються. Тобто, питання з російською залишається відкритим. Англійскі назви отримуються через транслітерацію.

Тож я бачу конкретний шлях до додавання КОАТУУ та населення автоматичним шляхом.

Коментарі?

Eugene

Зібрав трошки статистики. Получається наступне:

В КОАТУУ зараз 29785 населених пунктів.

У Вікіпедії:
29392 неселених пунктів

З них
Без КОАТУУ 4956 записів
Без індексу 648 записів
Без російського перекладу 17620 записів
Без координат 3 записи
Без вказанного населення 144

На мій погляд досить непогано, бо доведеться з’ясувати КОАТУУ тільки для трохи менше ніж 17% записів, і ще знайти десь чотириста НП. До речі, в Вікіпедії є певна кількіть населених пунктів, які не входять до КОАТУУ бо є нежилими. Наприклад, Чорнобиль, або Дорогоща, Ізяславського району Хмельницької області.

Дані я вже з Вікіпедії, як бачите, вибираю. Залишилось зробити їм певну невеличку обробку і почати поєднувати з даними у ОСМ.

Eugene

Ну, трошечки розстроїло мене положення з населеними пунктами в українській OSM.

Зробив спробу знайти відповідність між НП у Вікіпедії та на ОСМ. При цьому перевіряв за наступними критеріями:

  1. Чи співпадають координати (вони фактично ніколи не співпадають 1 в 1)

То ж я знаходжу найближчий НП у Вікіпедії

  1. Порівнюю name з назвою, українською чи російською, якщо є у Вікіпедії
  2. Порівнюю теґи name:ru та name:uk з відповідними значеннями з Вікіпедії
  3. Порівнюю КОАТУУ. Інколи воно там є

Якщо найближчий НА не співпав, дивлюся наступні 1-5 (обмеження по радіусу).

Результат подібного порівняння виявив наступні проблеми:

  1. НП без назв

  2. Спотворені українські назви (правильна → неправильна, у ОСМ): Новосімейкіне → Новосімейкине, Червона Україна → Червона Українка, Матіївці → Матеївці, Октябрське → Октябрьське, Лукашенкове → Лукашенківське, Вільхуватка → Олховатка, тощо

  3. Дублі (поряд 2 об’єкти з тою самою назвою)

  4. Не населені пункти: База отдыха “Серебрянный бор”, “Долина сказок”, “База им. Соича”, “совхоз им. 28 июня” та ін.

  5. Населені пункти, які було вилучено: Добробут, Скляри, багато інших. Бачив ті, що вилучені у 1988, може є і раніші.

  6. Населені пункти, які було перейменовно: Дзвінкове → Горноглаб

  7. Населені пункти, які було об’єднано: Цапівка → Вапнярка

Разом маємо 2125 проблемних НП. Багацько.

Що робити з першим, другим та третім, зрозуміло. А от що робити з рештою? Видалити? Напевно мені треба буде опублікувати список, і потім усі бажаючі допоможуть по нему пройтися. Ще планую обробити базу облікових карток, і зробити порівняння з ними. Можливо можна буде щось автоматизувати.

Скаладється таке враження, що десь будо взято досить старий (принаймні до 1988) список НП з координатами, перероблений з російської, і завантажений у Вікіпедію. Цікаво, наприклад, спостерігати купу сіл навколо Чорнобиля, які вже давно оголошені як нежилі.

Вікіпедія теж гарна. Чого вартує, наприклад “Смяч, Решетник П. М.” чи “Лісний Хлібичин або Степовий Ковбасятин”, але то просто вандвлізм і виключення, вже виправив.

Eugene

Може створиш таблицю у http://docs.google.com/ щоб можна було подивитись та перевірити всім загалом? Я би порівнював в такій послідовності КОАТУУ=>Вікіпедія=>ОСМ. Чи є так що ні у Вікіпедії ні у ОСМ назви НП не відповідають назвам у КОАТУУ?

Так, трошки таких записів є. Але переважна більшість – це “творчість” редакторів Вікіпедії.

Я виложив усі дані на github для ознайомлення. Завтра можливо зроблю табличку на Google Docs.

Код та лоґи можна знайти за цією адресою.

У файлі koatuu-wiki-compare.log видно ті НП, де є розбіжність у назві (я забрав звідти НП без КОАТУУ у Вікіпедії).

У файлі updatecities.log видно НП, які не співпали за координатами зі списками найближчих кандидатів. Але він трошки застарів, я його поновлю зранку, запустив перегенерацію, яка займає приблизно 45 хвилин.

Eugene

Все, поновив лоґ. Тепер 2040 НП, яким не знайдено відповідності.

Eugene

Трошки загальмувався процес, бо зайнятий на роботі. Що ще почав робити, так це імпорт бази з сайту ВР. Скоро буде точніша інформація по індексах та населенню. Ну, і нарешті зрозумліло що всі недоліки походять з VMAP0, базі, якій вже 24 роки.

Eugene

есть какой-то либо прогресс с импортом данных?
я полагаю что можно сразу добавлять данные, выглядящие корректными
к примеру, взять таблицу с населением (допустим, эту)
сделать поиск по укр-osm файлу узлов с name или name:uk совпадающими с данными таблицы
(если найдётся несколько - пропускаем строку таблицы)
проверить - указано ли в узле население. если указано - пропускаем
если населения нет, добавляем population тег с данными таблицы

Нет, во-первых, происхождение тех данных совершенно неизвестно, во-вторых, они на коммерческом сайте, что намекает. Ну, и наконец, я совершенно не уверен в верности данных, ну и там всего 1000 нп, что составляет около 3% от общего числа.

Теперь по импорту. Сейчас на паузе – занимался ботом, теперь вот маплю домики в Харькове.

Мой подход к задаче (я уже писал тебе в приват):

Сейчас у меня есть 3 больших плоских таблицы: Википедия, КОАТУУ и дамп сайта Верховной Рады. Все данные отпарсены и в виде csv файлов с сопутствующими программами парсинга.

Написан скрипт сравнения координат, указанных в Википедии с тем, что сейчас живёт на ОСМ. Процент попадания весьма велик. Но данных на Википедии особых нет, кроме высоты над уровнем моря и КОАТУУ. Интерес представляет дамп Верховной Рады.

В дампе я имею (то, что представляет интерес): иерархию, население, индекс.

Теперь, на чём я и застопорился, необходимо связать Раду с КОАТУУ. Вариант решения задачи – построить два дерева, у них одниаковая иерархия – по административному делению, и сопоставить.

Мне нужно сесть и сделать. Вот закончу домики на востоке Харькова, возможно сделаю паузу, и напишу код. Если кто-то хочет помочь, пожалуйста, но это должен быть Перл, и программа, не ручками, дабы в будущем можно было безболезненно отслеживать изменения. Альтернатива Перлу – Питон, но тогда нужно будет переписывать скрипты с нуля.

Eugene

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

я полагаю что за основу можно взять данные переписи 2001
вот их сайтик: http://www.ukrcensus.gov.ua/rus/
как оттуда по-хорошему вытащить данные я не знаю
но в любом случае можно написать граббер
получатся как минимум рус/укр/англ названия, область и население

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

По поводу сайта переписи. Особо не искал, можешь объяснить, как увидеть на экране название какого-нибудь населенного пункта на трёх языках?

Eugene

раз есть точный и более полный источник - хорошо :slight_smile:
прошу прощения за мою небольшую лень :wink:

там на этом сайте чёрт ногу сломит
еле нашел второй раз
вот как-то так

Не особо подходит – проблема в строчке “інші сільські населені пункти”. Т.е. снова неполное покрытие. Хотя, как будет закончен проект с загрузкой с ВР, можно подумать и про эти данные. Ценность тут представляет перевод с украинского на русский. Население есть на ВР, английский получается из украинского.

Eugene

Після заверешення проекту по вивантаженню nadoloni.com, поновив роботу над проектом. Також обговорив з Zverik та dezhin. dezhin буде прикручувати свій валідатор. Але обидва говорять про те, що не варто вивантажувати атоматично дані, і що теґ code:koatuu взагалі зайвий. Що скажете? На мою думку це внесе безперечну однозначність і дозволить далі вже підтримувати за допомогую валідаторів.

Пвру днів займався тим, що виправляв КОАТУУ у Вікіпедії. Планую також додати посилання на неї у всіх точках НП.

Тож зараз планується вивантажити наступну інформацію: КОАТУУ, площа, населення, стаття на Вікіпедію, індекс, код телефону, російська назва.

Далі, помітити ті НП, яких було усунено як place=abandoned, або щось подібне, далі розберуся.

На основі даних встановити admin_level, але для цього нам потрібно ще узгодити правила поділення.

До тих НП, назви яких співпадають у рамках одної сільради, додати статусну частину. Частіше за все це село або селище. Приклад: Губник, Гайсинський район, є і село і селище.

То що скажете, вивантажувати, чи тільки будувати валідатор?

Eugene

Тег потрібен! Не знаю, як вірніше, code:koatuu=* або просто koatuu=. Американці для своєї БД застосовують теги tiger:name_base= або tiger:name_type=, tiger:source= і т.д. В цих тегах міститься інформація про приналежність до районів, джерело імпорту, перевірку достовірності користувачами і багато іншого. Для України можна теж розробити подібну схему.

Підтримую майже всі вищенаведені заходи :wink:

Я проти того, щоб перейменовувати (обтяжувати додатковою інформацією) населені пункти: не варто дописувати приналежність до району в назву. Для цього є інші теги. А пошукові машини за ними мають вирізняти однойменні населені пункти. В найгірших випадках назва з районом затулить власне мапу цього селища.

Ні, я мав на увазі у випадку вище писати не район (він той самий), а “Губник село” та “Губник селище”. Район я писав, бо може комусь цікаво буде подивитись. І писати таке лише у випадку повного співпадіння назви у НП, які належать до тої самої сільради. Таких випадків небагато, але є.

Eugene

Зрозумів, особисто не заперечую.

Виникла ідея. А що як нам використати дані з сайтів і створити БД по мережевих торговельних закладах, відділеннях пошти, банкоматах і тп? Назви, адреси були б в єдиному, зручному для пошуку форматі. Чи може об’єднувати мережу в relation?!

Я на ті бази постійно задивляюся, але поки не закінчено адресацію у кожному конкретному місті, ними користуватися тяжко. А так, щоб їх зібрати докупи… Вже робилося таке, наприклад, http://gdebankomat.com

А об’єднувати мережу в relation не треба, і навіть взагалі, шкідливо. Причина в тому, що їх обробка накладає серйозне навантаження на БД, тому і в оприділенні англійською пишеться, що це “об’єкти, які поєднані гегорафічно (прилеглі або дотичні)”, і до того ж “Відношення – це не категорії”. Докладніше тут: http://wiki.openstreetmap.org/wiki/Relations/Relations_are_not_Categories

Eugene

Думаю, що це зайве.Нехай буде просто “Губник” і там і там.
Різні значення в admin_level визначатимуть де село а де селище.