Projekt OpenStreetMap - zmapuj swój ogródek na wolnej WikiMapie
Pingwinaria 2010 - Konferencja użytkowników Linuksa

Andrzej Zaborowski

1.	Cel projektu
OpenStreetMap to projekt społecznościowy, stworzenia mapy świata na licencji zgodnej z Definicją Wiedzy Otwartej.  Powstał bo większość map które uważamy za swobodne w rzeczywistości zawiera ograniczenia prawne lub techniczne, lub jedne i drugie, które nie pozwalają na wiele innowacyjnych i pomysłowych zastosowań.  Najłatwiej zrozumieć sens projektu za pomocą określenia Wikipedia map, mimo że nie ma on bezpośredniego związku z Wikipedią.  Oznacza to że wszystkie dane geoprzestrzenne widniejące na mapie projektu (oraz wiele więcej) mogą zostać pobrane w oryginalnej postaci i wykorzystane przez każdego do dowolnego celu.  Podobnie jak w Wikipedii, każdy może uczestniczyć.
2.	Zbieranie danych
Dane w projekcie pochodzą z najróżniejszych źródeł, w pierwszej kolejności są to dane zebrane przez uczestników -- mapowiczów -- za pomocą urządzeń GPS lub wyrysowane na podstawie zdjęć lotniczych lub satelitarnych, ale jest też wiele innych metod zbierania danych.  Duża część danych pochodzi również z importów z istniejących baz danych których właściciele zdecydowali sie "uwolnić" swoje dane, zarówno rządowych jak i komercyjnych.
3.	Architektura
Wszystkie informacje na mapie OSM (przez geografów nazywane wyróżnieniami, ang. features) mają formę jednego się z trzech typów obiektów: węzłów, dróg i relacji.  Węzeł posiada położenie określone przez dwie współrzędne: długość i szerokość geograficzną w układzie odniesienia WGS-84.  Droga jest listą (uporządkowanym zbiorem) węzłów a relacja listą dowolnych obiektów, czyli węzłów, dróg i relacji.  Wnym wnioskiem jest więc że wszystkie te dane mogą być traktowane jak grafy, w związku z czym można zastosować na nich dowolny znany algorytm grafowy.

Dodatkowo każdy z tych trzech typów obiektów może mieć przypisaną dowolną liczbę tagów, inaczej etykiet.  Tag składa się z nazwy i wartości, obydwa elementy są dowolnymi ciągami znaków.  Tagi określają właściwości wyróżnień, ich funkcje, własności fizyczne lub administracyjne, modyfikują / uszczególniają znaczenie innego tagu i spełniają wiele innych funkcji.
4.	Tagi
Życie całego projektu toczy się wokół nich.

Nazwy i wartości podstawowych tagów zostały ustalone przez pierwszych uczestników projektu, np. tag o nazwie "highway" stosuje się do dróg jeśli dana droga symbolizuje przebieg rzeczywistej drogi do ruchu samochodów lub pieszych, gdzie wartość tagu określa jej klasę ("primary", "secondary"...).  Ustalone wartości tagów są koniecznością jeśli powstała baza danych ma być przydatna do automatycznego przetwarzania w zastosowaniach takich jak nawigacja samochodowa lub piesza, drukowanie map, itd.  Najczęściej używane z nich można znaleść na stronie o nazwie "Map Features" wiki tego projektu i jest ich ponad 150 bo zmapować można praktycznie wszystko.  Zaczynając na ulicach, jak w nazwie projektu, i ich najbardziej oczywistych właściwościach takich jak nazwa (oficjalna, potoczna, poprzednia z czasów PRL oraz w innych językach...), szerokość, ograniczenia (wyprzedzania, prędkości, wysokości, ciężaru na oś, jednokierunkowość...), nawierzchnię, kąt nachylenia, itd., poprzez punkty dostępu WiFi, aż po pomnik gigantycznej truskawki w stanie Massachussetts oraz nawiedzone domy w Szkocji.  Żeby ułatwić zadanie wyboru tagu w sprzedaży jest nawet kubek-ściągawka.

Ponieważ jednak projekt został rozpoczęty w Wielkiej Brytanii to większość tagów jest słowami w języku angielskim, w związku z czym dziś kiedy ma już ponad 200 tys. zarejestrowanych uczestników, nad znaczeniami tych słów, podtekstami, ortografią, semantyką i logiką, zwłaszcza kiedy przychodzi potrzeba ustanowienia nowej nazwy lub wartości do określania nowego typu obiektu, toczą się niekończące się debaty, głeboko przypominające debaty na temat wyższości pewnego edytora tekstu nad innym.

Na temat ustalania wartości tagów krążą plotki i wielkie teorie spiskowe, według niektórych z nich ostateczne wartości są dyktowane przez tajne zgromadzenia małej grupy u władzy projektu, której przewodzi sam założyciel projektu, SteveC, który to w nocy przeradza się w okropnego dinozauro-małpo-pająka.

5.	Linked data
Linked data to termin stworzony niedawno przez Tima Bernersa-Lee uważanego za wynalazcę www, którym określa się sposób udostępniania, etykietowania, współdzielenia danych w Internecie opatrując je jednoznacznymi, uniwersalnymi identyfikatorami np. stosując adresy URI lub inne identyfikatory dla każdego obiektu w naszej bazie danych.  Pozwala to innym bazom danych odwoływać się to dowolnego obiektu w naszej bazie przez taki identyfikator jako klucz zewnętrzny.  Podając odwołania do innych baz danych w wartościach tagów w OpenStreetMap możemy połączyć dany obiekt semantycznie z rekordem istniejącym gdzieś indziej, np. konkretnym artykułem Wikipedii.  Ważnym faktem jest że każdy taki link jest równocześnie powiązaniem w przeciną stronę, który czytelnikowi Wikipedii (człowiekowi lub programowi) strony takiej jak strona o ulicy Aleje Jerozolimskie w Warszawie pozwala za pomocą odpowiedniej wyszukiwarki dotrzeć do jej przebiegu w OpenStreetMap i innych własności tam zapisanych.  Relacja tych powiązań jest dodatkowo przechodnia więc powiązanie rekordów w bazach A i B oraz B i C tworzy powiązanie między bazami A i C.  W ten sposób powstaje wielka uporządkowana sieć informacji o obiektach.

6.	Ciekawe zastosowania OSM
Najczęściej kojarzony z projektem jest rendering zbioru danych OpenStreetMap (czyli zamiana danych wektorowych które zapisane są w bazie, na bitmapy) widoczny na stronie głównej projektu (osm.org), jest on jednak tylko pewnym ułatwieniem dla samych mapowiczów którzy w ten sposób mogą sprawdzić że ich dane zostały wprowadzone poprawnie, i zawiera tylko małą częśc tego co jest rzeczywiście w bazie.  Prawdziwe i praktyczne zastosowania tego zbioru danych znajdziemy w innych miejscach w sieci takich jak opencyclemap.org - mapy dla rowerzystów, openorienteeringmap.org - mapy do biegów na orientację, openseamap.org - nawigacja morska, öpnvkarte.org - mapa środkow transportu publicznego itd. a także strona change.gov rządu amerykańskiego, lub mapy na stronie flickr.org w niektórych częściach świata i wiele innych.  Mapy OpenStreetMap były stosowane na odbiornikach GPS po konfliktach w strefie Gazy bo były wtedy jedynymi aktualnymi mapami oraz bardzo szeroko stosowane na Haiti po trzęsieniu ziemii z 12 stycznia, gdzie za pomocą zdjęć lotniczych o ogromnej dokładności udało się oznaczyć ogromną liczbę zburzonych budynków, nieprzejezdnych dróg i obozów dla uchodźców.
7.	Wykorzystanie w programach
Ogromną popularność wśród nowoczesnych systemów, zwłaszcza tych które instalujemy na urządzeniach przenośnych takich jak netbooki zyskuje oprogramowanie location-aware, czyli takie które dostosowuje się do tego gdzie użytkownik się znajduje, w którą stronę się porusza i gdzie znajdują się inni użytkownicy, w szczególności jego znajomi na serwisach społecznościowych, i podejmuje na tej podstawie jakieś decyzje lub po prostu wizualizuje tę informacje.  Jakie to są decyzje i co z tymi informacjami robi oprogramowanie zależy tylko od kreatywności programisty, ale znacznie mogą w tym pomóc gotowe biblioteki dostępne programom linuksowym.

W tym momencie skupiają się one na wyświetlaniu mapy i zaznaczaniu na tej mapie jakiś konkretnych lokacji lub tras, ale są w ciągłym rozwoju i ich możliwości się zwiększają.  Jeśli piszemy programy z interfejsem graficznym korzystając z biblioteki Gtk+ lub clutter to możemy użyć do wyświetlania map opartych na OpenStreetMap gotowej kontrolki jaką daje biblioteka libchamplain z projektu GNOME.  Biblioteka może być używana z poziomu języka C ale ma także dowiązania dla pythona, perla i Mono.  Wystarczy zaledwie kilka linii kodu żeby zwizualizować jakąś pozycję w programie za pomocą libchamplain.

Podobną funkcjonalność programom w Javie daje biblioteka JMapViewer, a w aplikacjach webowych można wykorzystać bibliotekę OpenLayers, ZoomZoomZoomMap lub Google maps do pokazywania map z OSM.
8.	Przydatne adresy
1.	http://www.openstreetmap.org/ Strona główna projektu
2.	http://wiki.openstreetmap.org/ Strona wiki projektu
3.	http://www.openstreetmap.pl/ Polska strona projektu
4.	http://projects.gnome.org/libchamplain/ Strona biblioteki libchamplain
5.	http://www.openlayers.org/ Strona główna projektu OpenLayers