Пишіть статтю - поставимо на сайті, мені самому цікаво повчитися - я
не дуже уявляю як з назви населеного пункту (область, район, назва)
можна перейти до координати.
Як правильно закодувати назви нас. пунктів?
Наскільки це довга робота, зробити таку гео-прив'язку?
День добрий!
Ну, ставити в статті на текстах мабуть не варто. Все ж таки тема більш
технічна, а тексти більш загально-популярні.
При створені картограми з геокодованими статтями Вікіпедії було
простіше: там не було потреби співставляти назвам нас. пунктів їхні
координати, оскільки:
1. назви там ніде не використані, то ж вони взагалі не потрібні
2. вони зазначені в тому самому дампі даних, в якому вказані
координати, і йдуть в одному з координатами рядку таблиці
У випадку візуалізації бази даних назв вулиць, на яких знаходяться
адміністративні установи, ситуація відмінна: тут доведеться
співставляти, і все залежатиме від її змісту та джерела походження.
Якщо не помиляюсь, такі дані оприлюднені на сайті Верховної Ради, і
були використані для заповнення карток населених пунктів в статтях на
Вікіпедії.
Однак, найбільша проблема в тому, що назви деяких населених пунктів не
унікальні, наприклад:
http://uk.wikipedia.org/wiki/Приморське
І статті про них у Вікіпедії мають довшу назву, яка не ідентична
офіційній назві населеного пункту.
Також, теоретично (ще не перевіряв на практиці), можна скористатись
службами геокодування карт Гугл.
Однак, все залежить від формату бази даних (таблиці) з населеними
пунктами, адресами рад, та класифікацією.
В найкращому випадку, кожен рядок такої бази даних мав би містити
назву статті Вікіпедії, офіційну назву, адресу ради, та тип за
класифікацією (радянський, не радянський, тощо).
Але, остаточно щось можна буде казати тільки подивившись на дані цієї
бази.
Віктор
P.S. про технологію створення неінтерактивних точкових картограм ще
напишу. Якщо виявиться, що 30тис нас. пунктів не дуже велике число, то
вдасться створити й інтерактивну версію (на основі D3JS.org).
До речі, а чи є можливість запросити Віктора, який зібрав дані про
населені
пункти та назви вулиць, на яких знаходяться місцеві органи влади, до
цієї
групи?
З ним можна було б обговорити формат даних та подальші кроки з їхньої
візуалізації.
Дякую,
Віктор (інший)
2012/5/21 Vityok <bob...@ua.fm>:
Ну коли йдеться лише про кілька десятків точок, то тут можна
координати і вручну проставити. Не велике діло.
Далі можна скористатись тим самим R та пакетом ggplot2. Де взяти
контури України та областей написано в першому кроці тут: http://bit.ly/Ka9rWB
Малювати контури країни та областей може geom_polygon; точки
проставляє geom_point.
Оформлення там те саме, як і в решті випадків. Наприклад, так:
http://uchicagoconsulting.wordpress.com/tag/r-ggplot2-maps-visualization/
Замість растру можна згенерувати векторний SVG та доробити його в
ілюстраторі чи інкскейпі.
Отже, все що залишилось, так це отримати дані.
Віктор
А, ну це також можливо.
Ця інформація є в статтях Вікіпедії, в картках населених пунктів.
Там же є і координати. Або можна взяти вже наявні координати.
Проблема буде в категоризації вулиць понад 30 тис. нас. пунктів.
Але і там може статись так, що ці назви матимуть обмежену кількість
через наявність дуже популярних вулиць (Леніна, Миру, тощо).
Задача не тривіальна, але можлива...
2012/5/23 Vityok <bob...@ua.fm>:
2012/6/14 Наталка Зубар <panim...@gmail.com>:
Саме так, і тому geonames тут не були використані. Натомість, я
скористався даними з дампів Вікіпедії. Один, з географічними
координатами дав зв'язку між назвою статті у Вікіпедії та
географічними координатами. Цей дамп можна отримати тут:
http://de.wikipedia.org/wiki/Wikipedia:WikiProjekt_Georeferenzierung/Hauptseite/Wikipedia-World/en
Там є дані для *багатьох* Вікіпедій. Для української вікіпедії можна
отримати дані завдяки скрипту:
gunzip < ../new_C-link.gz | egrep "^uk" > uk.txt
Потім звідти слід буде вирізати три стовпчики після першого (бо перший
код мови).
Дані по населених пунктах можна отримати з іншого дампу Вікіпедії. Тут
шукаєте ukwiki:
http://dumps.wikimedia.org/backup-index.html
А потім найсвіжіший дамп "pages-articles.xml.bz2".
Там буде просто затиснений архіватором BZ2 величезний XML файл.
Аналізувати його слід SAX аналізатором або чимось таким, що аналізує
XML потоково.
Дані про нас. пункти можна видерти з карток (Місто, Село, Селище, Смт,
Місто України, Село України, Селище України, Смт України). Для цього
підійдуть регулярні вирази. Наприклад:
(concatenate 'string "{{\\s*(([Шш]аблон|[Tt]emplate)\\s*:\\s*)?
([Кк]артка\\s*:\\s*)?" *infobox-templates* )
може знаходити картку, а окреме поле з неї можна отримати:
"\\|\\s*адреса\\s*=\\s*([^\\n]+)\\n"
Потім отримані дані слід буде переглянути та підчистити.
Зв'язати координати та дані тепер можна командою merge в R.
Ще раз переглянути дані та підчистити.
І отримаєте результат.
Теоретично, було б дуже добре мати можливість перетворювати картки
населених пунктів в структуровані бази даних (або реляційні, або RDF).
Щось подібне пропонує dbpedia
http://uk.wikipedia.org/wiki/DBpedia
Але дані для української вікіпедії вони не пропонують.
Тобто, правильніше було б спонукати DBPedia пропонувати дані для
української вікіпедії. Тоді весь процес був би набагато простіше
(майже елементарним).
Ну от і все. Якщо є якісь запитання або ідеї з поліпшенням, пишіть.
Віктор