ImportOSM

Z UMP

(Różnice między wersjami)
d (wprowadzenie prawne, ME++ OSM.)
Linia 65: Linia 65:
== Sposób z MapEdit++ ==
== Sposób z MapEdit++ ==
-
Od kwietnia 2010 [[MapEdit|MapEdit++]] ma możliwość importu i eksportu w formacie OSM, cokolwiek by to nie znaczyło i jak nie działało. ''proszę o opis kogoś, kto to przećwiczył''
+
Od kwietnia 2010 [[MapEdit|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ą.

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' Grafika:OSM-Import1.JPG
    • 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ą.