ImportOSM
Z UMP
Linia 73: | Linia 73: | ||
Otwieramy zaimportowany plik w edytorze tekstowym. Obiekty z OSM mają wszystkie dane zapisane przez ME++ jako Extras, np. tak: | Otwieramy zaimportowany plik w edytorze tekstowym. Obiekty z OSM mają wszystkie dane zapisane przez ME++ jako Extras, np. tak: | ||
- | [POLYLINE] | + | [POLYLINE] |
- | Type=0x0 | + | Type=0x0 |
- | Data0=(........... | + | Data0=(........... |
- | osm:id=31398313 way | + | osm:id=31398313 way |
- | osm:highway=tertiary | + | osm:highway=tertiary |
- | osm:lanes=3 | + | osm:lanes=3 |
- | osm:name=Novosmolenskaya Embankment | + | osm:name=Novosmolenskaya Embankment |
- | osm:oneway=yes | + | osm:oneway=yes |
- | [END] | + | [END] |
W dalszej pracy skorzystamy z trzech własności ME++: | W dalszej pracy skorzystamy z trzech własności ME++: |
Wersja z dnia 21:58, 6 sty 2011
Spis treści |
Założenia (prawne)
stara licencja OSM
Osoby wkładają swoją wiedzę do OSM, i zgadzają się na użycie licencji OSM (czyli obecnie CC-BY-SA), ale nadal są tej wiedzy właścicielami. UMP może
- dostać te dane jeszcze raz od danej osoby, wtedy po raz drugi wiedza danej osoby, oraz realizacja przez edytora UMP, jest obejmowana licencją UMP (także CC-BY-SA)
- wziąć te dane bezpośrednio z OSM, opisując obiekty stosownie do licencji OSM.
nowa licencja OSM
?
dyskusje
Na Flyspray oraz na forum OSM.
Sposób z użyciem skryptu Perl osm2mp.pl
- Ściągnąć dane w formacie XML *.osm
- Najłatwiej tego dokonać z użyciem przeglądarki WWW. Wchodzimy na stronę OSM
- Wybieramy obszar który na interesuje. Maksymalny dowolny rozmiar to kwadrat kilkadziesiąt kilometrów. Zoom level >=11.
- Teraz na górze zakładka Export, dalej 'Format to Export' -> 'OpenStreetMap XML Data' i przycisk 'Export'
- Alternatywnie eksporty *.osm dla krajów Europy lezą tu
- Konwersja *.osm -> *.mp
Należy ściągnąć skrypt perlowy osm2mp.pl z forum OSM [1] Strona poświęcona konwerterowi osm2mp.pl [2]
Uwaga: Przerobiłem osm2mp.pl tak żeby: * Umożliwiał odsianie obiektów zaimportowanych od nas ( opcja --umpremove ) * Wstawia do komentarza dowolny tag z obiektu n.p. ( --xcommentlist="surface" ) * Dodaje automatycznie coś do obiektów n.p. Miasto= lub Plik= Jeśli ktoś potrzebuje mogę wrzucić do narzędzi w CVSie.
Zainstalować Perla wraz z wymaganymi pakietami.
* Template-toolkit * Getopt::Long * Text::Unidecode * List::MoreUtils * Math::Polygon * Math::Polygon::Tree * Math::Geometry::Planar::GPC::Polygon
Na Linuxie każdy sobie poradzi. Na Windows mi zadziałało z ActivePerlem.
Uruchomić konwerter z linii komend z opcjami --norouting --codepage 1250
C:\Garmin\osm2mp>c:\Perl\bin\perl.exe osm2mp.pl --norouting --codepage 1250 map.osm >out.mp ---| OSM -> MP converter 0.80 (c) 2008-2010 liosha, xliosha@gmail.com Processing file map.osm Loading nodes... 41943 loaded Loading relations... 3 multipolygons 0 turn restrictions 0 destination signs Loading necessary ways... 37 loaded Processing multipolygons 0 polygons written 0 cities and 0 suburbs loaded Processing nodes... 229 POIs written 4 barriers loaded Processing ways... 106 lines and 818 polygons dumped 805 roads loaded Merging roads... 121 merged Detecting road nodes... 1121 found Detecting duplicates... 5 segments, 4 roads Splitting roads... 11 self-intersections, 0 long roads Fixing close nodes... 0 pairs fixed Writing roads... 695 written Writing crossroads... 8 restrictions, 0 signs All done!!
Plik out.mp otwieramy sobie ulubioną wersją edytora MapEdit i kopiujemy interesujące nas obiekty.
Sposób z MapEdit++
Od kwietnia 2010 MapEdit++ ma możliwość importu i eksportu w formacie OSM, choć jest to dość żmudne zajęcie.
Importujemy wybrany fragment OSM do pliku *.osm w podany wyżej sposób. Przy większych obszarach trzeba to zrobić w kilku kawałkach. Uruchamiamy ME++, w zakładce "File" wybieramy "Import", a następnie "OpenStreetMap XML file". Po wybraniu pliku otwiera się okno importu. Zaznaczamy w nim "Import objects with unknown types" i "Join outer parts", a w "Save tags" wybieramy wariant "Place into fields". Następnie wybieramy do importu tylko Level 0 i klikamy "Zakończ". Powtarzamy ten import dla kolejnych kawałków. Na końcu wykonujemy operację "Remove object duplicates". Zaimportowany fragment mapy zawiera wyłącznie obiekty typu 0x0. Do dalszej obróbki musimy podzielić go na trzy oddzielne pliki zawierające punkty, obszary i linie. Każdy z tych plików obrabiamy osobno korzystając naprzemiennie z edytora tekstowego i ME++.
Otwieramy zaimportowany plik w edytorze tekstowym. Obiekty z OSM mają wszystkie dane zapisane przez ME++ jako Extras, np. tak:
[POLYLINE] Type=0x0 Data0=(........... osm:id=31398313 way osm:highway=tertiary osm:lanes=3 osm:name=Novosmolenskaya Embankment osm:oneway=yes [END]
W dalszej pracy skorzystamy z trzech własności ME++: 1. umieszcza wpisy o znanych etykietach (np. Label, DirIndicator, Miasto itd.) we właściwej kolejności; 2. usuwa komentarze znajdujące się wewnątrz opisu obiektu (za słowem POLYLINE, POLYGON i POI); 3. w przypadku kilku identycznych etykiet wybiera ostatnią, np. z wpisu:
Label=A Label=B Label=C
po zapisaniu przez ME++ otrzymamy Label=C.
Otwieramy plik do obróbki ulubionym edytorem tekstowym. Zbędne wpisy usuwamy zamieniając je na komentarze, np.: Global Replace - "osm:id=" > ";" Właściwe parametry obiektów określamy także korzystając z Global Replace, np.:
"osm:highway=tertiary" > "Type=0x5" "osm:name=" > "Label=" "osm:oneway=yes" > "DirIndicator=1"
Po kilkunastu zmianach trzeba plik zapisać, odczytać w ME++, zapisać w celu uporządkowania i ponownie odczytać w edytorze. I tak, aż do skutku. :)
UWAGI: 1. Ronda i place są często zapisywane w OSM jako obszary. 2. Odwrotnie, morza i duże jeziora są zapisywane jako linie typu "coastline", a rzeki zamiast obszarem typu 0x48 - linią typu "water" lub "river". Zdarza się to również w przypadku dużych lasów. 3. Obiekty w OSM mają dużo więcej atrybutów i typów niż w UMP. Trzy przykłady: a). droga osm:highway=residential powinna być zamieniona na Type=0x6, może mieć jednak dodatkowy parametr osm:surface:unpaved i trzeba zmienić jej typ na 0xa (ale nie globalnie, bo ścieżka piesza lub rowerowa też może być unpaved) b) ścieżka może mieć atrybuty osm:foot=yes, osm:bicycle=no itp. - abe je uwzględnić trzeba zmienić RouteParam c) ścieżka typu 0x16 może mieć parametr "osm:highway=" określony jako foot, path, track i inne. 4. Pracować uważnie - różne kwiatki się trafiają.