Експорт даних в OSM з проекту nadoloni.com

У мене є власні напрацювані GIS дані по агломерації міст у Львівській області - http://nadoloni.com
База даних у PostGIS та база компаній агломерації. Яким чином я можу швидко експортувати ці дані в OSM?

Подивився на сайт. У вас на сайт мапа від Гугла. Яка інформація є у вас, що відповідає Ліцензії ОСМ?

Для початку ознайомтесь з форматом файлів http://wiki.openstreetmap.org/wiki/OSM_XML
та з API - http://wiki.openstreetmap.org/wiki/API

на додачу вікі-стаття про PostGIS - http://wiki.openstreetmap.org/wiki/PostGIS

Давайте данные, я помогу выгрузить.

Eugene

andygol, давайте уточнимо. У мене мапа не від Гугла, просто стиль схожий. Якщо ж мова йде про джерело знімків, з чого ви взяли, що були використані саме знімки Гугла, а не, наприклад, аерофотозйомка з параплану?

_sev, выложил дамп базы тут: http://nadoloni.com/postgis.zip

Може мене збило з пантелику це — .
Я не хотів нікого образити.
Буде дуже добре якщо такі докладні дані з’являться в ОСМ.

Повідомляю про прогрес. Вже завантажив дані у локальну PostGIS базу, і почав працювати над налаштуванням конвертера.

Наскільки мені зрозуміло, як такої проекції там нема – всі дані лежать у [-10000.-300.10400,-18200]. Тож буду мудрити з тим, щоб перетворити це на справжні координати.

Питання, чи базу даних компаній прив’язано до тої самої координатної сітки? І можна получити теж і її дамп?

Робота полегшена тим, що в ОСМ в тому районі майже нічого не замаплено, тож буде потрібно об’єднувати незначну кількість даних.

Eugene

Точно, я виклав не у тій проекції (мені так зручніше для рендерігу через mapnik). Давайте в нормальній проекції викладу краще, якщо так зручніше буде?

На php так конвертнути можна:

private function _coordinate2location($cs)
{
    foreach ($cs as $key=>$val)
    {
        $px_py = explode(' ', $val);
        $k = 4096;
        $sx = 9260 * $k;
        $sy = 5600 * $k;
        $ex = 9265 * $k;
        $ey = 5605 * $k;
    
        $px = $px_py[0]*2 + $sx;
        $py = (1024-$px_py[1])*2 + $sy;
    
        $ax = 1.068070779e7;
        $bx = 0;
        $cx = 3.355443185e7;
        $ay = 0;
        $by = -1.068070890e7;
        $cy = 3.355443057e7;

        $px = ($px*$by - $py*$bx - $cx*$by + $cy*$bx) / ($ax*$by - $ay*$bx);
        $py = ($px*$ay - $py*$ax - $cx*$ay + $cy*$ax) / ($bx*$ay - $by*$ax);                

        $py = 2 * atan(pow(exp(1), $py)) - 0.5 * PI(); 
        
        $xx = 180*$py/PI();
        $yy = 180*$px/PI();

        $cs[$key] = str_replace(',', '.', $xx).' '.str_replace(',', '.', $yy);
    }
    return $cs;
}

І є ще проблема, що при промальовуванні доріг я орієнтувався на зовнішній вигляд так аби дороги з різною шириною не перекривались на стиках. Тобто граф шляхів побудувати на основі моїх даних не вийде (а відповідно і пошук маршрутів) - доведеться правити якось. А база компаній використовує стандартну широту / довготу - її дамп викладу трішки пізніше (є ще кілька помилок).

Дякую за код, але я вже все переконвертував.

Тож, все готове для імпорту. Що сидить в таблиці routes? Схоже на трамвай.

Деякі речі потребують доробки вручну:

  • areas: вони використовуються для позначення різного викроистання землі, але непослідовно. Тож я буду імортувати з landuse=unknown.

  • squares: окрім справжніх площей, вони використовуються для позначення заассфалтованих поверхонь. Тож highway=unclassified, area=yes

  • circles: landuse=grass, але треба перевіряти

  • будинки не мають ніякого зв’язку з вулицями, номери на них проставлені просто так

З графами біда, тож доведеться з’єднувати докупи ріки і дороги, деякі дороги накладаються, але то я виправлю сам. І так, я використовую ширину дороги для обчислення її класу, що скорше за все буде не зовсім вірно, треба буде передивитися.

Сам імпорт зроблю завтра.

Eugene

Ще питання до інших. Що робити з існуючими даними, конкретно лісами та дорогами? Доріг зовсім небагато, але вони маю історію змін. Я б такий, щоб все одно їх видалив перед іспортом, бо нові дані набагато більш подробніші.

І ще, всі дані будуть позначатися source="nadoloni.com import’. Може щось ще прописати?

Eugene

Так, це не закінчена таблиця маршрутів громадського транспорту.

http://nadoloni.com/nadoloni.zip - виклав дамп звязки вулиця/будинок і mapnik style XML для зума 18 - можливо так буде зрозуміліше.

При рендерінгу через мапнік використовується наступне правило:
SELECT DISTINCT style, (style/$k) AS width, (style/$k + 1) AS width_plus FROM streets, де $k - 2 в степіні zoom (1…6), width - ширина дороги, width_plus - ширина зрвнішнього контуру дороги. Клас доріг мабуть доведеться піправляти вручну.

І заюзайте, будь-ласка тег source_ref з урлом сайту.

ще можна додати якись nadoloni:id
так як пишеться в Wiki

Буде зручно використати цей ID в разі необхідності повторного імпорту даних

І ще в вікі(розділ Use a dedicated user account) пишуть, що бажано виконувати імпорт окремим юзером.
Можна створити юзера nadoloni.com і ним виконати імпорт.

Завів користувача nadoloni-com (точку не можна використовувати в імені). Тож починаю потихеньку імпорт. Старі дані видалю, тим більше, що частина з них була зроблена тими, хто ще не прийняв нову ліцензію.

Eugene

Перший пішов: streets_main changeset. Помилки по більшості не виправляв поки що, бо будуть ще більші зміни з дорогами.

Eugene

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

…Побачив, що то взагалі інша база, до того ж MySQL. Питання, чи id будинків співпадають з базою PostGIS? Сподіваюсь, що так. Те ж саме питання стосовно ключів у onames.

Eugene

пропоную обмежити значення тегу highway
максимум secondary

А більше і не буде. Там взагалі, така мішанина з дорогами буде… І немає ніякої можливості зробити автоматично, бо недостатньо інформації.

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

Eugene

Закінчено завантаження геометрії. Залишилось прив’язати доми до вулиць, і отримати та завантажити POI.

Ну, і, звичайно, треба по всьому цьому ще проходитися вручну і правити, правити. Цим займуся, але, звичайно, допомога не завадить. В першу чергу треба проставити теґи на areas, і з’єднати дорожній граф.

Eugene

Почав потроху виправляти дороги. Десь приблизно 95% них між собою не зв’язані :frowning: Але, думаю, за пару днів можна виправити.

Eugene

Спасибі, Eugene, за пророблену роботу. Сьогодні ввечері буду мати - можу згенерувати дамп у потрібній проекції зі звязкою вулиця/будинок, якщо це ще необхідно. До речі, якщо вірити SASPlanet, імпортовані дані зміщені відносно моїх на кілька метрів. Чи можна це якось підправити?

Можна. Потрібні GPS-треки по яких можна перевірити, як принаймні лягли основні дороги. Виділити всі данні і пересунути їх так, щоб дороги лягли на треки.