Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

OpenStreetMap

Autor: Piotr Karpiuk o czwartek 25. Październik 2012

Wstęp

OpenStreetMap (OSM) to opensource’owy projekt światowej geograficznej bazy danych. Docelowo ma przechowywać wszystkie geograficzne obiekty planety. Początkowo projekt skupiał się na ulicach, ale obecnie przechowywane są w nim takie obiekty jak ścieżki, budynki, drogi wodne, potoki, lasy, plaże, skrzynki pocztowe, a nawet pojedyncze drzewa. Użytkownicy chętnie dodają budki telefoniczne, przystanki autobusowe i toalety publiczne. Ścieżki dla pieszych i rowerowe są w OSM reprezentowane lepiej niż w innych bazach danych. Ogólnie jest umowa żeby w bazie umieszczać informacje o obiektach trwałych (ang. permanent geographical feature). W projekcie uczestniczą zarówno osoby prywatne jak i firmy, a sposób działania serwisu opiera się na idei crowdsourcingu, czyli wykorzystaniu Internetu do przydzielania zadań wolontariuszom i zbierania od nich wyników.

Serwis używa systemu podobnego do wiki, gdzie każdy może dodać lub edytować dowolny obiekt bazy, przy czym przechowywana jest historia edycji każdego obiektu (nawet jeśli został usunięty), dzięki czemu można np. wycofać skutki wandalizmu. OSM do przechowywania danych nie używa żadnego oprogramowania typu GIS, ale zamiast tego oferuje własną implementację i model danych nastawione na maksymalne ułatwienie crowdsourcingu. Nie ma „superużytkowników” którzy mogliby wprowadzać więcej zmian niż zwykli użytkownicy, i nie ma żadnej sztywnej, ustalonej ontologii dla wprowadzanych danych. W praktyce można mówić o schematach tagowania przyjętych przez społeczności poszczególnych krajów.

Chociaż projekt skupia się na zbieraniu danych, członkowie projektu stworzyli wiele narzędzi do tworzenia, edycji, i użycia danych OSM na różne sposoby.

Obecnie dane są udostępniane na licencji Creative Commons Attribution Share-Alike 2.0 (CC-BY-SA), ale rozważa się przejście na licencję Open Database 1.0 (ODBL).

Baza OSM jest aktualizowana częściej niż inne tego typu. W rzeczywistości, jest aktualizowana na bieżąco (zmiany są dostępne na głównej stronie projektu w ciągu kilku minut), a najnowsze zmiany zawsze są dostępne do ściągnięcia. Dla odmiany, pełna baza zwana plikiem planety jest wypuszczana co tydzień, z dziennymi łatkami. Kilka systemów GIS i pakietów renderowania danych potrafi obsłużyć dane OSM. Najlepsze pokrycie mają dane OSM dla terenów zurbanizowanych Europy Zachodniej.

Historia

2004
Projekt rozpoczęty w 2004 roku przez brytyjskiego programistę Steve Coasta, który chciał poeksperymentować z nowo zakupionym odbiornikiem GPS podłączanym przez USB do laptopa z Linuksem. Serwer początkowo został napisany w Javie, następnie przepisany na Ruby’ego i Ruby on Rails.
2006
Pojawiła się pierwsza aplikacja (JOSM) do edycji danych OSM, napisana w Javie. Wkrótce potem powstał pierwszy renderer danych OSM, zwany Osmarender. Odbył się pierwszy mapping event, czyli spotkanie wolontariuszy w terenie, aby opracować dane wyznaczonego obszaru. Od tej pory tego typu imprezy są już powszechne na całym świecie, do ich śledzenia można użyć profilu projektu na Facebooku lub LinkedIn. Powstała Fundacja OpenStreetMap, która jest właścicielem infrastruktury technicznej, przyjmuje finansowe donacje, a także wypożycza odbiorniki GPS aktywnym użytkownikom w ubogich krajach.
2007
Pojawił się pierwszy edytor danych we Flashu: Potlatch. Pierwsze firmy (Automotive Navigation Data i Dutch Mapping Company) wniosły do projektu swoje dane. Rozpoczął się proces ładowania danych udostępnianych przez rząd USA – zakończył się w 2008 roku
2008
25 tys. zarejestrowanych użytkowników OSM. Wystosowano apel o zebranie 10 tys. funtów na nowy serwer, zebrano 15 tys. w przeciągu mniej niż tygodnia.
2009
100 tys. zarejestrowanych użytkowników
2010
500 tys. punktów dodawanych do bazy każdego dnia. OSM stał się poważnym projektem skupiającym uwagę dużych firm i rządów; mapy OSM można znaleźć nawet na stronie Białego Domu whitehouse.gov

Okazuje się, że dokładność zbieranych danych jest duża. W 2008 roku Muki Haklay z University College London sprawdził dane OSM dla Wielkiej Brytanii porównując je z danymi Ordnance Survey. 80% wierzchołków z obu baz danych pokrywało się, a średnia odległość między odpowiadającymi sobie wierzchołkami nie przekracza 6 metrów, czyli mniej niż wynosi dokładność GPS. Problem z danymi OSM polega na ich niekompletności (białe plamy na mapie), a nie braku dokładności.

Użytkownik który zacznie edytować bazę danych, moze się spodziewać zaproszeń do wydarzeń społecznych związanych z OSM. Po założeniu konta i podaniu swojej lokalizacji, użytkownik może zobaczyć lokalizację innych 10 użytkowników w promieniu 50km. Po założeniu konta można dodawać sobie znajomych (dostaną o tym powiadomienie mailowe), przy czym lista znajomych nie jest widoczna w publicznie dostępnym profilu użytkownika. Ze strony profilu można dostać się do listy swoich edycji oraz śladów GPS (ang. traces).

Każdy użytkownik ma swój dzienniczek (ang. diary), do którego może dodawać wpisy (ang. entries) informujące pozostałych o dokonanych i planowanych poczynaniach, przy czym z każdym wpisem można skojarzyć lokalizację, jak również każdy wpis można komentować (autor otrzymuje wówczas email). Każdy dzienniczek ma swój kanał RSS, a także istnieje kanał RSS łączący wszystkie dzienniczki.

Mapa wyświetlana na stronie głównej witryny openstreetmap.org, tzw. slippy map ma kilka udogodnień nawigacyjnych. Możesz przybliżyć dowolny obszar przyciskając klawisz Shift i zaznaczając prostokątny obszar do powiększenia. Ponadto dwuklik na dowolnym punkcie mapy wycentruje ją i przybliży o jeden poziom.

Wśród grup dyskusyjnych warto wspomnieć o trzech:

Announce
Moderowana, z niewielką liczbą postów, z informacjami o znaczących zmianach w projekcie.
Newbies
dla początkujących, gdzie można zadać proste pytania.
Legal-talk
Gdy chcesz zaimportować dane z innych źródeł, tutaj możesz zapytać o zagadnienia związane z licencjami.

Ponadto istnieją listy dla poszczególnych krajów, a nawet części krajów.

Dane

OpenStreetMap stał się możliwy dzięki dwóm technologicznym nowościom: względnie przystępnym odbiornikom GPS i szybkiemu dostępowi do Internetu. Wiele danych projektu bazuje na śladach (ang. traces) sporządzonych przez woluntariuszy, czy to podczas swoich codziennych czynności takich jak droga do pracy, czy podczas wycieczek zaplanowanych w celu zebrania danych. Ślady jako takie są używane do ustalenia położenia obiektów, ale nie przekładają się bezpośrednio na mapę. Stanowią raczej tło programu edycyjnego, a mapa jest rysowana ręcznie w oparciu o to tło. To oznacza, że nie musisz martwić się o dokładność śladów, czy ich przystawanie do ścieżek czy dróg. Błędy są z czasem eliminowane w miarę jak w systemie pojawi się więcej ścieżek z tymi samymi obiektami.

Każdy satelita GPS ma bardzo dokładny zegar atomowy na pokładzie, a wszystkie zegary satelitów są zsynchronizowane. Każdy satelita transmituje sygnał zawierający czas i swoją pozycję na niebie. Odbiornik GPS nie transmituje żadnych informacji, a satelita nie wie gdzie jesteś. Odbiornik GPS wylicza Twoją pozycję odbierając komunikaty z kilku satelitów i porównując czas zawarty w każdym z komunikatów z czasem własnego zegara. To pozwala wyliczyć przybliżoną odległość od każdego z satelitów, i na tej podstawie Twoją pozycję na powierzchni Ziemi. Trzy satelity wystarczą do wyznaczenia długości i szerokości geograficznej, przy czterech satelitach można również ustalić Twoją wysokość nad poziomem morza. Im więcej satelitów jest widocznych, tym dokładniejszy wynik pomiaru. Wiele odbiorników GPS jest w stanie wyliczyć błąd pomiaru, zwany DOP (ang. Dilution of Precision) – im większą ma wartość tym większy błąd. Błąd ma tym mniejszą wartość, im bardziej odległe od siebie są satelity. Gdy satelity są blisko, np. wszystkie nad Twoją głową, DOP będzie miał wysoką wartość. Nie masz na ogół kontroli nad satelitami wybieranymi przez Twój odbiornik GPS, ale nowocześniejsze chipsety GPS będą automatycznie wybierały najlepiej rozmieszczone satelity, a nie te które dają najsilniejszy sygnał.

Dzięki decyzji Billa Clintona z 1990 roku wyłączono opcję SA (ang. Selective Availability), który intencjonalnie zmniejszał precyzję pomiaru dla użytkowników innych niż wojsko USA. Gdyby to nie miało miejsca, projekt w rodzaju OSM raczej nie miałby racji bytu.

Jakkolwiek odbiorniki GPS używane przez zwykłych ludzi nie są tak dokładne jak urządzenia profesjonalistów, to jeśli zostanie zebranych odpowiednio dużo śladów tej samej drogi lub ścieżki, po uśrednieniu otrzymamy prawdziwe umiejscowienie drogi na mapie. OSM umożliwia użytkownikom korygowanie danych w miarę jak stają się dostępne dokładniejsze dane. Podczas wycieczki, odbiornik GPS najlepiej umieścić na klapie plecaka lub przytroczyć do ramienia. Jeśli używasz roweru, warto zaopatrzyć się w odpowiedni uchwyt uwalniający ręce. Wiele osób uważa, że rower jest najlepszy do badania obszarów zamieszkanych i podmiejskich – jest szybszy niż przemieszczanie się pieszo, tańszy w eksploatacji niż samochód, i łatwiej niż samochodem zawrócić po wjeździe w ślepą uliczkę. Nawiasem mówiąc, podczas badania skomplikowanego labiryntu ulic warto postępować według zasady „zawsze skręcaj w prawo”, aby mieć pewność że żadna uliczka nie zostanie pominięta. W przypadku samochodów problemem może być fakt, że w przednich szybach niektórych nowoczesnych aut zawarty jest metal, który blokuje sygnały GPS – w takiej sytuacji pozostaje półka pod tylną szybą. Nie rozpoczynaj pomiarów dopóki odbiornik GPS nie złapie sygnału. Większość odbiorników potrafi łapać sygnał w ruchu, ale zajmie im to więcej czasu i wynik może być mniej dokładny.

Poza śladami, większość odbiorników GPS pozwala zapamiętać i nazwać wybrane punkty, zwane waypoints. Ta użyteczna funkcja pozwala zapisać pozycję takich obiektów jak skrzynki pocztowe, czy przystanki autobusowe. OSM akceptuje wyłącznie ślady w formacie GPX, ang. GPS Exchange format, koniecznie ze stemplami czasowymi – aby zapobiec przed ładowaniem śladów powstałych w wyniku konwersji z innych baz danych, które zwykle podlegają ograniczeniom prawnym. Do konwersji innych śladów na GPX można użyć programu GPSBabel. Być może w przyszłości wgrane przez wolontariuszy ślady zostaną wykorzystane również do innych celów, np. wyznaczania średnich prędkości dla dróg, wykrywania dróg jednokierunkowych itp.

Dane OSM są zwykle reprezentowane w postaci spakowanych plików XML.

Oprócz nagrywania swojego śladu GPS, co dzieje się automatycznie, wolontariusz musi notować takie rzeczy jak nazwy ulic, numery domów, rodzaje sklepów, skrzyżowania, znaki drogowe itp. – te informacje będą potrzebne na etapie edycji mapy. Stąd też w skład typowego wyposażenia wolontariuszy oprócz odbiornika GPS wchodzą często papierowy notatnik, dyktafon i cyfrowy aparat fotograficzny. Konieczna jest synchronizacja czasu zegara aparatu z zegarem odbiornika GPS.

Nie ma problemu, jeśli chcesz nanieść na mapę OSM jakieś punkty „z pamięci” – później sam, albo inny użytkownik dokona stosownych poprawek jeśli się pomylisz.

Format danych

OSM używa własnego modelu danych, innego niż wszystkie modele danych używane w systemach GIS. Dostępne są tylko trzy typy podstawowe (ang. primitive types), które w połączeniu z dość dowolnym schematem tagowania pozwala opisać precyzyjnie praktycznie każdy obiekt geograficzny, włącznie z jego topologią – tj. informacjami o tym jak jest połączony z innymi obiektami i jak można przejść z jednego do drugiego. Prostota modelu OSM często zaskakuje ludzi wywodzących się ze środowisk GISowych, przyzwyczajoych do wielu warstw danych i opisywania każdego obiektu w oderwaniu od pozostałych. Niektórzy szukają na siłę jakiejś ustalonej ontologii lub bardziej skomplikowanych struktur danych, i nie znajdując ich czują się zagubieni.

Model danych OSM został zaprojektowany w taki sposób aby był przede wszystkim prosty do wprowadzania i edycji danych, bez zbędnego tracenia czasu i biurokracji, a nie do renderowania czy użycia w innych aplikacjach. Serwer OSM przeprowadza bardzo mało sprawdzeń, pozostałe wykonuje szereg zewnętrznych narzędzi, o których później.

Jak już wspomniano, mamy trzy typy podstawowe: wierzchołki (ang. nodes), drogi (ang. ways) oraz relacje (ang. relations). Z każdym z tych typów można związać dowolne etykietki (ang. tags) na zasadzie klucz-wartość. Domyślnym formatem danych OSM jest XML i jest to jedyny format w jakim aktualnie możesz wyciągać dane z serwera OSM. Istnieje kilka atrybutów wspólnych dla wszystkich typów. Każdy ma ID, unikalny w obrębie typu (tzn. może istnieć wierzchołek, droga i relacja o tym samym ID). W bazie OSM trzymana jest historia (tj. wszystkie wersje) każdego obiektu, dlatego też każdy obiekt posiada swój numer wersji, jak również ID transakcji (ang. changeset). Transakcja to ciąg zmian dokonanych w bazie za jednym razem – jest to pojęcie wprowadzone na użytek edytorów, które zatwierdzają zmiany w wielu obiektach naraz, dzięki czemu np. można łatwo wycofać wszystkie zmiany dokonane przez nieodpowiedzialnego użytkownika-wandala. Inne atrybuty wspólne dla wszytkich typów to ID użytkownika i jego nazwa (ang. display name) – użytkownik może zmieniać swoją nazwę, ale nie może zmienić swojego ID – oraz stempel czasowy (ang. timestamp). Należy podkreślić, że poprawnym uchwytem obiektu jest jego ID i numer wersji, a nie stempel czasowy.

Wierzchołki

Wierzchołki są punktami w przestrzeni i jest to jedyny typ danych zawierający współrzędne geograficzne – pozostałe typy danych zależą od wierzchołków. Wierzchołek może reprezentować POI (ang. point of interests), skrzyżowanie lub zmianę kierunku drogi.

    <osm version="0.6" generator="OpenStreetMap server">
      <node id="483034256" lat="55.9458449" lon="-3.2035477" version="1"
          changeset="2369219" user="spytfyre" uid="166957" visible="true"
          timestamp="2009-09-04T13:35:42Z">
        <tag k="name" v="The Blue Blazer"/>
        <tag k="amenity" v="pub"/>
      </node>
    </osm>

Każdy wierzchołek ma współrzędne GPS przechowywane w formacie dziesiętnym z precyzją 7 liczb po przecinku. Daje to równoleżnikową dokładność reprezentacji rzędu 1cm a południkową 1cm na równiku i 0.6cm w Greenwich. OSM nie wykonuje sprawdzeń na okoliczność zduplikowanych wierzchołków, więc może się zdarzyć że w bazie będą dwa wierzchołki o identycznym położeniu GPS (poprawianiem tego typu błędów zajmują się zewnętrzne narzędzia).

Drogi

Droga to uporządkowana lista wierzchołków. Jeśli jest zamknięta, reprezentuje obszar (np. las). Droga ma kierunek (ang. direction) od pierwszego do ostatniego wierzchołka, choć nie zawsze jest on istotny. Gdy trzeba stworzyć bardziej skomplikowany kształt, np. budynek z wewnętrznym dziedzińcem lub las z polaną, można to zrobić za pomocą kilku dróg i łączącej je relacji (ang. relation). Drogi mogą nachodzić na siebie bez łączenia i należy zakładać że drogi są fizycznie połączone tylko wtedy gdy współdzielą jakieś wierzchołki.

    <osm version="0.6" generator="OpenStreetMap server">
      <way id="43157302" visible="true" timestamp="2009-10-26T10:45:09Z"
          version="1" changeset=2954960" user="Ed Avis" uid=31257">
        <nd ref="540653724"/>
        <nd ref="25507043"/>
        <nd ref="107762"/>
        <nd ref="25507038"/>
        <nd ref="107759"/>
        <tag k="highway" v="primary"/>
        <tag k="lcn_ref" v="6a"/>
        <tag k="name" v="Parliament Street"/>
    </osm>

Relacje

Relacja to lista wartości prostych, w szczególności innych relacji. Relacja służy do modelowania wszystkich obiektów nie dających się wyrazić za pomocą wierzchołka ani drogi, albo gdy obiekty tego samego typu nachodzą na siebie. Przykłady: złożone rozgałęziające się ulice, zakaz skrętu na skrzyżowaniu.

    <osm version="0.6" generator="OpenStreetMap server">
      <relation id="113421" visible="true" timestamp="2009-11-03T10:08:27Z"
          version="2" changeset="3023369" user="Jonathan Benett" uid="5352">
        <member type="node" ref="270186" role="via"/>
        <member type="way" ref="4418767" role="from"/>
        <member type="way" ref="4641665" role="to"/>
        <tag k="restriction" v="no_right_turn"/>
        <tag k="type" v="restriction"/>
      </relation>
    </osm>

Etykietki

Każdy obiekt typu prostego może mieć etykietki, które mówią co to za obiekt – to tutaj tak naprawdę tkwi cała potęga modelu danych. Etykietka składa się z klucza i wartości – oba są łańcuchami Unicode o długości nie większej niż 255 znaków. (Cały system OSM posługuje się kodowaniem znaków UTF-8). Zestaw dopuszczalnych tagów i ich wartości to kwestia ustaleń wewnątrz społeczności OSM – wynik dyskusji i kompromisów. Etykiety są semantyczne, tzn. opisują funkcję jaką pełni obiekt, ale nie mówią nic o sposobie jego reprezentacji na mapie. Wygląd obiektów na mapie leży w zakresie obowiązków osoby opracowującej szatę graficzną (ang. renderer).

Jeden klucz może mieć tylko jedną wartość. Chcąc powiązać wiele wartości z jednym kluczem, należy użyć różnych prefiksów lub sufiksów oddzielonych od właściwej nazwy etykiety dwukropkiem:

    <tag k="place" v="city"/>
    <tag k="name:sv" v="London"/>
    <tag k="name:pl" v="Londyn"/>
    <tag k="name:es" v="Londres"/>

Informacja przechowywana w bazie OSM musi być weryfikowalna, tzn. inni użytkownicy muszą mieć możliwość sprawdzić jej prawdziwość w oparciu o to co widzą w terenie. Dlatego też w bazie nie ma miejsca dla informacji pochodzących z innych źródeł niż dane terenowe. Np. jeśli dokumentujesz szlak turystyczny, musisz zrobić to w oparciu o znakowanie w terenie, a nie na podstawie przewodnika turystycznego. Co więcej informacja musi być obiektywna i mierzalna. Jeśli inny wolontariusz OSM może mieć inne zdanie na temat danej etykietki, to znaczy że etykietka nie jest dobra.

Dostępna jest lista podstawowych etykiet a także informacja o tym jak w praktyce sa używane: Tagwatch.

Aplikacje które nie rozumieją danego tagu, powinny go ignorować.

Edytory OSM

Potlatch JOSM Merkaartor
Wymagania Przeglądarka WWW z pluginem Flash Java Runtime 1.5+ Windows, Linux lub Mac OS X z Qt
Czy działa offline? Nie Tak Tak
Czy wymaga instalcji? Nie Nie Tak
Czy wspiera zdjęcia? Częściowo (wymaga załadowania zdjęć na osobną witrynę) Tak Tak
Czy wspiera audio? Nie Tak Nie

Potlatch jest dostępny w przeglądarce na witrynie openstreetmap.org, z konta użytkownika.

Napisany w Javie JOSM posiada mechanizm pluginów zwiększających jego funkcjonalność – potrafią one np. w czasie rzeczywistym pobierać ślady z odbiornika GPS lub udostępniają dodatkowe narzędzia rysowania.

Napisany w C++ Merkaartor najbardziej ze wszystkich edytorów przypomina oprogramowanie GISowe, jakkolwiek nie jest rozszerzalny za pomocą pluginów. Poza edycją mapy, Merkaartor pozwala na renderowanie map i konfigurowanie stylów.

Audyt danych

Omówione tu narzędzia oferują raczej wskazówki niż odpowiedzi tak/nie, i w związku z tym niemal zawsze wymagają decyzji użytkownika i jego zdrowego rozsądku. Pełna lista dostępnych narzędzi jest na stronie Quality assurance na wiki projektu.

Wybór opcji Zmiany z belki głównej menu witryny openstreetmap.org po zalogowaniu pozwoli przeglądać strukturę danych dla obiektów widocznych aktualnie w przeglądarce. Można obejrzeć też historię zmian dla każdego wskazanego obiektu.

Witryna qa.pole.ch wyświetla mapę, na której widać ile jeszcze jest potrzebnych poprawek do już zgromadzonych danych w OpenStreetMap, przy czym chodzi głównie o ulice naniesione na podstawie zdjęć lotniczych, o nieuzupełnionych jeszcze nazwach.

OSM Mapper (konieczna darmowa rejestracja) pozwala tworzyć i zapamiętywać perspektywy (ang. views) prezentujące tylko wyfiltrowane obiekty, np. autostrady naniesione przez wskazanego użytkownika.

OSM Inspector to witryna webowa niemieckiej firmy GeoFabrik, wyszukująca potencjalnych nieścisłości w bazie OSM. Nie jest tu wymagana żadna rejestracja. Mapa błędów jest aktualizowana co dwa dni. W combo na górze po lewej można sobie wybrać rodzaj interesujących nas nieścisłości lub miejsc wymagających uzupełnienia.

Renderowanie mapy

Obrazek mapy można otrzymać na przykład używając:

  • standardowego renderera OSM na witrynie projektu (klikamy polecenie Eksport w górnym menu); można w ten sposób wyeksportować zaznaczony fragment mapy w postaci XMLa, obrazka (PNG, JPG, SVG bitmapowy, PDF, lub PS), lub kodu HTML ze znacznikiem iframe; ta ostatnia opcja pozwala osadzić na własnej stronie WWW zawsze aktualny wycinek mapy, interaktywny jak mapa na głównej stronie projektu, z ewentualną lokalizacją zaznaczoną pinezką.
  • windowsowej aplikacji Kosmos (C#); jest wersja GUI i CL; program potrafi rendrować pojedyncze obrazki lub zbiory kafelków, a także może pełnić funkcję serwera WWW dla tych kafelków; Kosmos jest zaprojektowany do renderowania małych ilości obiektów (np. dla małego miasta), odczytuje bezpośrednio dane XML i nie ma żadnej wewnętrznej bazy danych (Uwaga: Kosmos nie jest już aktywnie wspierany i został zastąpiony przez Maperitive)
  • renderera Osmarender generującego wektorowe obrazy SVG (Uwaga: nie wspierany od marca 2012).

Osmarender nie jest programem w tradycyjnym rozumieniu tego słowa, ale arkuszem XSLT który zapuszczony na procesorze XSL przetworzy dokument XML z danymi OSM na plik SVG stosownie do zdefiniowanych w osobnym pliku reguł użytkownika. Sposób formatowania (kolory, grubość linii, przezroczystość itp.) są definiowane za pomocą arkuszy stylów CSS.

Załóżmy, że w witrynie openstreetmap.org wyeksportowaliśmy fragment planety do pliku data.osm. Instalujemy stosowne narzędzia:

    apt-get install xmlstarlet inkscape
    mkdir osmarender
    cd osmarender
    wget http://svn.openstreetmap.org/applications/rendering/osmarender/xslt/osmarender.xsl
    wget http://svn.openstreetmap.org/applications/rendering/osmarender/stylesheets/osm-map-features-z17.xml

Teraz możemy zapuścić renderer:

    xmlstarlet tr osmarender.xsl osm-map-features-z17.xml > wynik.svg

Plik wynik.svg możemy otworzyć w przeglądarce WWW lub dowolnym edytorze SVG (np. Inkscape). Plik osm-map-features-z17.xml w naszej transformacji zawiera reguły mówiące w jaki sposób formatować napotkane obiekty spełniające określone warunki, np. reguła która renderuje kawiarnie z WiFi ikonką cafe-with-wifi.svg, a pozostałe kawiarnie ikonką cafe.svg:

    <rule e="node|way" k="amenity" v="cafe">
      <rule e="node|way" k="wifi" v="yes">
        <symbol ref="cafe-with-wifi"/>
      </rule>
      <else>
        <symbol ref="cafe"/>
      </else>
    </rule>

Zaciągamy dane

Dane OSM są udostępniane na ogół w formacie XML, często spakowane. Istnieje wiele sposobów pozyskiwania danych, w zależności od wielkości obszaru, częstotliwości aktualizacji i koniecznych do wykonania przekształceń.

Pliki planety

Ze strony planet.openstreetmap.org można ściągnąć dane całej planety (jeden plik o wielkości obecnie ok. 26 GB). Nowa wersja pliku powstaje co tydzień, wraz z plikiem zmian z ostatniego tygodnia – żeby nie trzeba było co tydzień ciągnąć całej planety od nowa. Pliki z danymi mniejszych obszarów niż cała planeta (np. pojedynczy kontynent albo państwo, aktualizowane codziennie) mogą zostać ściągnięte ze strony download.geofabrik.de/osm, np. Polska to plik rozmiaru ok. 340 MB.

Ściąganie i aplikowanie zmian może zostać całkowicie zautomatyzowane za pomocą narzędzia osmosis, o czym będzie dalej.

REST API

OSM REST API pozwala na bezpośredni dostęp do bazy OSM, przy czym zapis wymaga autoryzacji. Dane wyciągnięte w ten sposób są aktualne i autorytatywne. Narzędzia takie jak edytory za pomocą tego API komunikują się z bazą. Uwaga: to API jest przeznaczone raczej dla edytorów niż dowolnych aplikacji wyciągających dane z bazy OSM, co oznacza że nadużywanie tego API może skutkować zablokowaniem dostępu bez ostrzeżenia. Z tego powodu warto rozważyć opcję stworzenia lokalnej kopii serwera OSM.

Ogólny schemat odczytu XMLa obiektu OSM jest następujący:

    http://api.openstreetmap.org/api/apiversion/type/id

Przykład: XML wierzchołka o id 3036710

    wget -O compton-node.osm http://api.openstreetmap.org/api/0.6/node/3036710

URLa można uzupełnić o dodatkowe sufiksy:

/full
Bez tego sufiksu, dla drogi zwracany jest XML z referencjami do wierzchołków drogi, ale bez samych wierzchołków; /full powoduje, że wraz z żądanym obiektem zwracane są wszystkie obiekty od niego zależne
/ways
Dla zapytania o wierzchołek, ten sufiks zwraca wszystkie drogi używające wskazanego wierzchołka
/relations
Zwraca wszystkie relacje, w skład których wchodzi wskazany obiekt
/history
Zwraca wszystkie wersje wskazanego obiektu (dla obiektu usuniętego, ostatnia wersja będzie miała atrybut visible ustawiony na false)
/2
Zwraca wersję 2 wskazanego obiektu; póki co nie ma prostego sposobu na zwrócenie właściwych wersji wierzchołków użytych w drodze o wskazanej wersji
?bbox=<left>,<bottom>,<right>,<top>
Tzw. map call. Wyciąga wszystkie obiekty z zaznaczonego obszaru, gdzie współrzędne muszą być w formacie dziesiętnym WGS84. Uwaga: obszar nie może być duży, może mieć max. 0.25 stopni kwadratowych i co najwyżej 50 tys. wierzchołków; dla większych obszarów trzeba użyć XAPI (patrz niżej)

The Extended API (XAPI)

Bardziej skomplikowane zapytania są możliwe, ale nie na głównych serwerach OSM ze względów wydajnościowych. Serwery XAPI są osobnymi maszynami, które powinny przechowywać dane aktualne z dokładnością 10 min., ale w praktyce różnie z tym jest. Większość nietrywialnych zapytań wykonuje się kilka minut lub dłużej.

Podobnie jak w przypadku REST API, każde zapytanie sprowadza się do skonstruowania odpowiedniego URLa. Prefiks jest zawsze taki sam:

  http://open.mapquestapi.com/xapi/api/0.6

Listę wszystkich serwerów można znaleźć na stronie wiki.openstreetmap.org/wiki/XAPI.

/way/39429583
Działa jak zwykłe zapytanie REST, ale z niejawnie dodanym sufiksem /full
/map?bbox=<left>,<bottom>,<right>,<top>
Zwraca wszystkie obiekty z podanego obszaru, przy czym w odróżnieniu od REST API, ograniczenie maksymalnego obszaru sięga 100 stopni kwadratowych
/*[bbox=<left>,<bottom>,<right>,<top>]
To samo, ale można łączyć z innymi parametrami
/way[highway=motorway|trunk|primary]
Zwraca obiekty o określonych wartościach wskazanej etykietki; w zapytaniu może być niestety tylko jeden filtr tego typu.
/way[nd]
Drogi które mają przynajmniej jeden wierzchołek
/way[not(nd)]
Drogi które nie mają żadnych wierzchołków
/node[not(way)]
Wierzchołki nie należące do żadnej drogi
/node[not(tag)]
Wierzchołki nie posiadające żadnych etykiet
/*[@user=paradox]
Obiekty ostatnio edytowane przez wskazanego użytkownika
/*[@uid=12345]
J.w., ale użytkownik zadany przez ID
/*[@changeset=765434567]
Obiekty modyfikowane w zadanym zestawie zmian; zwrócone wierzchołki będą ostatnimi wersjami wierzchołków, a nie wersjami z czasu przeprowadzenia zestawu zmian.

Osmosis

Osmosis to napisany w Javie 1.6+ program wiersza poleceń, nazywany często „scyzorykiem szwajcarskim OSM”, służący do manipulowania XMLowymi danymi OSM.

Argumenty Osmosis mówią jakie ma wykonać zadania (ang. tasks), które są wykonywane w potoku (ang. pipeline). W skład potoku wchodzą zadania wejściowe, opcjonalne zadania przetwarzania (ang. processing tasks) i zadania wyjściowe. Bardziej skomplikowane użycie może tworzyć kilka równoległych potoków. Przykładowo, żeby zaimportować dane z pliku do bazy, potrzebne są tylko taski wejściowy i wyjściowy; jeśli trzeba dodatkowo wyciąć z pliku planety Polskę, trzeba wstrzelić pomiędzy zadanie wycinania.

Typowe operacje odczytu i zapisu to odczyt/zapis z/do pliku XML (np. plik planety) i z/do bazy danych PostgreSQL+PostGIS. Typowe operacje przetwarzania to:

  • wycinanie prostokąta lub wielokąta o zadanych współrzędnych GPS (wielokąt jest wyraźnie wolniejszy),
  • filtrowanie danych z możliwością składania filtrów, np. tylko ścieżki rowerowe i linia brzegowa,
  • łączenie kilku plików w jeden,
  • rozbijanie jednego pliku (np. Wielkiej Brytanii) na kilka plików (np. Anglia, Szkocja, Walia, Północna Irlandia),
  • aktualizacja lokalnego pliku planety (lub zawartości bazy danych PostgreSQL) z Internetu – trzeba tą operację zapuszczać np. raz dziennie w cronie; jeśli wynik ma być w pliku, to warto mieć wielordzeniowy procesor (kompresja i dekompresja zajmują większość czasu) a nawet bardzo dużo miejsca na dysku (kilkaset GB) żeby operować na rozpakowanych plikach,
  • wyciąganie danych wskazanego obszaru z Internetu (przez REST API lub XAPI),
  • generowanie raportów o danych.

Program daje się łatwo rozbudowywać, można tworzyć własne rozszerzenia (np. obsługę nowych zadań). Szczegóły na temat używania Osmosis na stronie Osmosis Detailed Usage.

Uwaga: Plik planety jest kompresowany programem pbzip2 (pozwala przetwarzać więcej niż jeden strumień danych naraz, co skraca czas operacji), który jest bardziej zaawansowaną wersją bzip2. Osmosis nie umie dekompresować efektów pracy pbzip2.

PostgreSQL+PostGIS

Trzymanie danych planety w relacyjnej bazie danych zamiast w pliku pozwala przede wszystkim na szybszą obróbkę danych. Zasadniczo mamy trzy opcje: PostgreSQL+PostGIS, pełny serwer OSM (PostgreSQL, gdy zależy nam na łatwej modyfikacji danych za pomocą edytorów), oraz MySQL (już nie wspierane). Tutaj skupimy się na pierwszej opcji. PostGIS to rozszerzenie PostgreSQL o efektywne przechowywanie i operowanie na danych geoprzestrzennych. PostGIS może współpracować z wieloma innymi systemami GIS, jak również narzędziami wspierającymi OpenGIS Simple Features Specification for SQL.

Najlepszą wydajność osiągniemy uruchamiając Osmosis na innej maszynie niż PostgreSQL. Potrzebne będzie kilkaset GB wolnej przestrzeni (a na pewno wyraźnie ponad 100GB). W zastosowaniach produkcyjnych warto rozważyć macierze dyskowe (główny serwer OSM jest rozłożony na 10 dysków).

Uwaga: Nie da się łatwo utrzymywać aktualnego podzbioru całej planety OSM (np. tylko Polska), ponieważ aktualizacje dotyczą całej planety. Sensowne wyjście to jedna baza danych z aktualizowaną na bieżąco z Internetu całą planetą, i druga baza regularnie zasilana wycinkiem pierwszej.

        sudo apt-get install postgresql-8.4-postgis postgresql-contrib-8.4 postgis osmosis

Jeśli chcesz używać Osmosis na tej samej maszynie co PostgreSQL, to w pliku /etc/postgresql/<version>/main/pg_hba.conf zmodyfikuj wiersz:

        local   all   all   ident sameuser

na:

        local   osmosis    osmosisuser   trust

i zrestartuj serwer PostgreSQL:

        sudo /etc/init.d/postgresql-version restart

Teraz można utworzyć bazę danych:

        sudo su - postgres
        # create a database
        createdb osmosis
        createlang plpgsql osmosis
        createuser osmosisuser
        # add PostGIS extension
        psql -d osmosis -f /usr/share/postgresql/8.4/contrib/postgis.sql
        psql -d osmosis
        grant all privileges on database osmosis to osmosisuser;
        alter table geometry_columns owner to osmosisuser;
        alter table spatial_ref_sys owner to osmosisuser;
        alter role osmosisuser password 'openstreetmap';
        # create schema
        psql -d osmosis -U osmosisuser -W -f osmosis/script/pgsql_simple_schema_0.6.sql

Utwórz plik tekstowy „dbauth” z namiarami na bazę danych:

        host=localhost
        database=osmosis
        user=osmosisuser
        password=openstreetmap
        dbType=postgresql

Ładowanie danych planety do bazy:

  bzcat planet.osm.bz2 | osmosis --read-xml file=/dev/stdin --write-pgsql authFile="dbauth"

Aktualizacja bazy:

        mkdir replication
        osmosis --read-replication-interval-init workingDirectory="replication"

Teraz konieczne jest umieszczenie w katalogu replication pobranego z Internetu pliku stanu startowego (ang. starting state file), ale procedura opisana w książce jest już nieaktualna (TODO). Sama aktualizacja danych w bazie sprowadza się teraz do regularnego wykonywania polecenia:

  osmosis --read-replication-interval workingDirectory="replication" --simplify-change --write-pgsql-change authFile="dbauth"

Przyszłość

Zmiana licencji

Trwają prace nad zmianą licencji, na jakiej udostępniane mają być dane OSM. Stara Creative Commons Attribution-Share Alike 2.0 pozwala na używanie danych dla dowolnych celów, przez każdego, bez żadnego pozwolenia, „while requiring those using the data to make it available to those they distribute it to under the same or similar licensing conditions”. Ponadto, jeśli ktoś wymiesza dane OSM ze swoimi prywatnymi danymi, licencja wymusza by baza wszystkich tych danych łącznie była dostępna dla uczestników projektu OSM. Chodzi głównie o zabezpieczenie się przed komercyjnymi firmami sprzedającymi własne bazy geograficzne, które chcą tylko z OSM czerpać dane i nie dawać nic w zamian.

Z czasem stało się jasne, że nie wszystkie jurysdykcje traktują tworzenie bazy danych jako wysiłek twórczy. W rezultacie w niektórych krajach można ignorować postanowienia licencji i używać danych OSM we własnościowych bazach geograficznych. Skłoniło to fundację do poszukiwań nowej licencji, którą najprawdopodobniej zostanie Open Database Licence. Licencja wprowadza pojęcie produced work, tzn. czegoś utworzonego na podstawie danych z bazy danych (np. mapy wyrenderowanej z danych). Nowa licencja rozróżnia dane i produced work i wymaga, by dane były współdzielone, a produced work niekoniecznie.

Nigdy nikt nie będzie musiał płacić za dane OSM (choć mogą się pojawić płatne narzędzia przetwarzające te dane).

MapCSS

Każde podejście do renderowania mapy wprowadza swoje własne reguły definiowania reprezentacji graficznej poszczególnych obiektów na mapie. Łatwo zauważyć, że semantyka tych reguł jest bardzo zbliżona dla wszystkich podejść, a różni się tylko składnia. W związku z tym pomysł na zunifikowany język stylów OSM, którego mogłyby używać wszystkie narzędzia – czy to natywnie czy konwertując do własnego formatu. MapCSS opierałby się na powszechnie znanych kaskadowych arkuszach stylu CSS, lekko zmodyfikowanych na potrzeby OSM.
Przykład reguły:

    way[highway=trunk]
    {
      z-index: 8;
      color: green;
      width: 5;
      casing-color: black;
      casing-width: 7;
    }

Specjalizowane edytory

Zwraca się uwagę, że nietechniczni wolontariusze mają problemy z opanowaniem wszystkich etykietek jakie można nadawać obiektom poszczególnych typów w bazie. Pojawiła się propozycja wyspecjalizowanych edytorów, np. Mapzen POI Collector – mobilna aplikacja na iPhone’y; pozwala ona edytować mapę wyłącznie w zakresie punktów POI. Ogólny kierunek myślenia wśród decydentów rozwoju projektu jest taki, by edytory wymagały od użytkowników jak najmniej wiedzy o szczegółach bazy OSM.

Literatura

OpenStreetMap. Be your own Cartographer, J.Bennett, Packt Publishing 2010.

Share and Enjoy:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Śledzik
  • Blip
  • Blogger.com
  • Gadu-Gadu Live
  • LinkedIn
  • MySpace
  • Wykop

Zostaw komentarz

XHTML: Możesz użyć następujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>