Widok na www

Z UMP

Od grudnia 2008 r. można oglądać mapę UMP-pcPL z poziomu www.

Mapa występuje w kilku wersjach:


Spis treści

Korzystanie z mapy

Nawigacja

Podstawowym narzędziem nawigacyjnym jest myszka, którą można intuicyjnie przeciągać mapę. Mapa oferuje jednak więcej możliwości

  • myszka: przesuwanie, rolką przybliżenie lub oddalanie, podwójne kliknięcie centruje i przybliża
  • Shift + myszka: Lupa = zaznaczanie prostokątem obszaru do powiększenia
  • kontrolki nawigacyjne: przyciski w górnym lewym rogu mapy ze strzałeczkami oraz +/- i dodatkowy pasek ZoomBar do bezpośredniego przeskoku na wskazane powiększenie (może być wyłączony).
  • klawiatura: strzałki oraz Home/End/Page Up/Page Down do przesuwania, +/- do zmiany powiększenia. Opcja może być wyłączona na niektórych mapach, lub przy wejściu w pole tekstowe formularza

Permalink

W prawym dolnym rogu znajduje się link do aktualnego widoku mapy. Kliknij na "Permalink", a mapa przeładuje się, pokazując w pasku przeglądarki pełny adres bieżącego widoku, który można dodać do zakładek lub przesłać znajomym. Link taki składa się z adresu bazowego strony oraz kilku parametrów, które można wykorzystać do budowania własnych linków:

  • lat, lon: położenie środka widocznej mapy
  • zoom: poziom powiększenia, gdzie 0 jest najniższy (jeden kafelek 256x256 zawiera cały świat), a 18 to największe zbliżenie
  • layers: stan widocznych warstw i nakładek

O ile lat,lon i zoom są zrozumiałe, to ostatni parametr może być lekko zagadkowy, więc najlepiej opisać na przykładzie:

http://mapa.ump.waw.pl/ump-www/?zoom=7&lat=52.33&lon=19.9&layers=B00T

Literki B/0 określają aktywność/nieaktywność warstw podstawowych. Z powyższego linku wynika że są 3 warstwy podstawowe, z których pierwsza jest ustawiona jako aktywna. Mogą to być mapy UMP, mapy OSM lub zdjęcia Google. Następnie występują literki T/F określające widoczność/ukrycie nakładek. W przykładzie jest tylko jedna nakładka wektorowa zawierająca warstwę wyświetlającą marker i jest ona aktywna (T)

Własne ślady

Przy pomocy parametrów url strony można wyświetlić na mapie własne dane wektorowe w postaci plików gpx lub gdb i w ten sposób przykładowo wyświetlić swoją trasę na mapie w iframe na swojej stronie. Szczegóły dotyczące sposobów umieszczania śladów na tle mapy opisano w artykule Prezentacja GPX na mapie online

Warstwy

W prawym górnym rogu mapy znajduje się przycisk (+) pod którym pojawia się lista dostępnych warstw. UMP@Mapnik jest podstawową warstwą zawierającą mapę UMP-pcPL i jest wyświetlana jako domyślna. Dla porównania dostępna jest również warstwa z danymi z OpenStreetMap. Przy pomocy dodatkowej konfiguracji możliwe jest dodanie warstwy z mapami google. Inne warstwy są w celach testowych i mogą zostać usunięte.

Poza warstwami mogą wystąpić dodatkowe nakładki wektorowe. Mogą to być zbiory punktów POI lub warstwy do rysowania wielokątów/linii/punktów. Aktualnie na mapie UMP-pcPL jest aktywna na stałe warstwa do rysowania markera. W przyszłości możliwe jest wzbogacenie o dodatkowe nakładki, które mogą być włączane lub wyłączane w menu warstw poprzez odpowiednie checkboxy.

Marker

Dla celów formularza oraz możliwości generowania mapek wskazujących jakiś punkt, została utworzona wcześniej wspomniana warstwa dla markera.

O ile strona z mapą została prawidłowo przygotowana, kliknięcie na mapie powoduje dodanie markera w danym punkcie. Przy okazji mogą zostać wypełnione odpowiednie pola formularza współrzędnymi geograficznymi punktu.

Poza tworzeniem nowego punktu mapka umożliwia również linkowanie do wcześniej przygotowanego markera. Służą do tego dodatkowe parametry strony:

  • mlat, mlon: współrzędne punktu markera do wyświetlenia
  • mbody: treść dymku (w uproszczonym BBCode) markera po najechaniu myszą lub kliknięciu.

Przykładowy link zawierający definicję punktu do narysowania po otworzeniu strony:

http://mapa.ump.waw.pl/ump-www/?zoom=7&lat=52.33&lon=19.9&layers=B00T&mlat=52.25609&mlon=20.96567&mbody=test%5bbr%5dmarkera

Bardziej złożony przykład

W mbody można użyć kilku predefiniowanych kodów BBCode, aby sformatować zawartość:

  • [br] - nowa linia
  • [b]tekst[/b] - pogrubienie
  • [i]tekst[/i] - pochylonym tekstem (italic)
  • [img]url_obrazka[/img] - obrazek
  • [url=www.*]tresc[/url], [url]http://ump.waw.pl[/url] - link
  • [email]mail@domena[/email] - link do wysłania maila

Dodatkowe ozdobniki

W pełnej wersji na mapie poza kontrolką nawigacyjną, przyciskiem warstw oraz permalinkiem znajdują się dodatkowe kontrolki. W lewym dolnym rogu znajduje się link do strony domowej UMP (Data by...) oraz status aktualności wyświetlanych danych mapowych. W prawym dolnym rogu kolejno od dołu widoczne są:

  • pozycja wskazywana przez kursor myszy
  • Permalink
  • orientacyjna skala aktualnego powiększenia

Opisy i linki do stron www punktu

Działają od sierpnia 2011. W "dymkach" wskazujących wyszukany punkt pokazują się komentarze umieszczone w źródłach danego punktu, oraz link do strony www punktu (o ile wpisany, oczywiście). Umieszczone w komentarzach linki do Flyspray (o formacie "FS#[numer]") oraz linki http:// będą działały w odpowiedni sposób. Opis składni plików źródłowych PNT i sposób wpisywania danych na stronie opisu formatu plików PNT. Nie są pokazywane "zakomentowane komentarze" czyli linijki zaczynające się podwójnym średnikiem. W rezultacie przykładowy punkt

;; KINA
; tanie bilety z kartą stałego klienta - FS#99999 nieczyne do końca roku
  51.00000, 21.00000, 0,Promyk,Krótka;9;+48115552233;url=http://promyk.miasto.pl/,Miasto,KINO

dostanie w "dymku" zachętę o tanich biletach i informację o remoncie, oraz link do swojej strony - ale nie będzie wypisana nazwa "sekcji" KINA.

Eksport widoku

Na razie tylko ręcznie, przykładowe linki:

http://mapa.ump.waw.pl/ump-www/cgi/export.cgi?bbox=20.847,52.18,21.16,52.335&scale=120000&format=pdf
http://mapa.ump.waw.pl/ump-www/cgi/export.cgi?bbox=21.00735,52.24677,21.01496,52.24916&scale=3386&format=png

Parametr scale zgodnie z tym co się prezentuje w prawym dolnym rogu mapy (1:54k itp), obsługiwane wartości formatów: png, jpeg, pdf, svg, ps. Uwaga: svg, tym bardziej ps potrafi być dość duży przy większych wartościach scale, gdyż dane wektorowe nie są upraszczane.

Mapa UMP-pcPL na Twojej stronie

Do wyświetlania mapy w przeglądarce WWW wykorzystana została biblioteka OpenLayers, jednak można użyć dowolnej biblioteki tego rodzaju (np Google API). Kafelki mają odwzorowanie i numerację taką samą jak mapy Google czy OSM, więc programy innych firm wykorzystują także UMP, lub można je łatwo dostosować:

Dla ułatwienia umieszczania mapki na stronach przygotowany został kod javascript, który powinien ułatwić wstępną konfigurację. Nic jednak nie przeszkadza, aby zrobić po swojemu, wykorzystując jedynie adresy kafelków. W przygotowanej wersji wystarczy jednak umieścić minimalną ilość dodatkowych elementów, by cieszyć się mapą na swojej stronie.

TODO...

Wersja najprostsza

  • W części <head> strony dodanie skryptów:
 <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
 <script src="http://mapa.ump.waw.pl/ump-www/lib/layers.js"></script>
 <script src="http://mapa.ump.waw.pl/ump-www/lib/map.js"></script>
  • W wybranym miejscu strony dodać div o id="map" i stylu wg. potrzeb:
 <div style="width:450px; height:350px; float:right" id="map"></div>
  • dodać do body w zdarzeniu onload wywołanie funkcji konfigurującej mapę:
 <body onload="initUMP();">

Dodatkowe elementy mapy

Prezentację śladów na tle mapy UMP opisano tutaj.

...TODO

  • toolbox
  • pola tekstowe
  • permalink z markerem

Dostosowanie konfiguracji mapy

Funkcja initUMP(divID,{klucz:wartosc,...}) przyjmuje dodatkowo dwa parametry, pozwalając łatwo dostosować zawartość mapy:

  • id div'a zawierającego mapę (domyślnie "map")
  • dodatkowa lista parametrów konfiguracyjnych

Bardziej złożony przykład wyglądałby więc tak:

 <html><head>
 <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
 <script src="http://mapa.ump.waw.pl/ump-www/lib/layers.js"></script>
 <script src="http://mapa.ump.waw.pl/ump-www/lib/map.js"></script>
 </head>
 <body onload="initUMP('mapUMP', {simpleZoom:true, disableKeyboard:true,
           zoom:12, lat:52.24453, lon:21.00275, 
           mlat:52.24999, mlon:20.98318,mbody:'Przykładowy marker[br]wielolinijkowy'});">
 <div style="width:450px; height:350px; float:right" id="mapUMP"></div>
 </body></html>

Liczba dostępnych opcji powinna wzrastać w miarę rosnących potrzeb, jednak już teraz dostępne są:

  • disableControls:true - wyłączenie wszystkich kontrolek (tryb czystej mapy UMP)
  • simpleZoom:true - strzałeczki i uproszczona kontrolka zoom, bez podziałki (ZoomBar)
  • simpliesZoom:true - tylko +/-, globus, bez strzałek (działa również gdy disableControls:true)
  • disableKeyboard:true - wyłączenie obsługi klawiatury, aby uniknąć zmiany mapy przy edycji formularzy i pól tekstowych
  • lat,lon,zoom - domyślne położenie mapy, gdy nie podane w url'u
  • mlat,mlon - położenie początkowe markera
  • mbody: treść dymku markera po najechaniu myszą lub kliknięciu. Format taki sam jak dla parametru mbody w url'u. Honorowane jest kodowanie %xx znaków specjalnych (funkcja encodeURIComponent/decodeURIComponent w javascript).
  • permBase:'http://mapa.ump.waw.pl/ump-www/' - ustawienie części niezmiennej adresu url permlinka na wskazaną
  • enableGoogle:true - włączenie do wyboru warstw google (ulice, sat, hybryda). Wymaga dodania odpowiedniego pliku wpisu z właściwym kluczem dla Google API w sekcji head:
<script src="http://maps.google.com/maps?file=api&v=2&key=KLUCZ_GOOGLE_API" type="text/javascript"></script>

Własna mapa od podstaw

...TODO

OpenLayers

...TODO

Google API

Możliwe, że zostanie dodane jakieś ułatwienie typu initUMP dla google, tymczasem przykładowe użycie UMP-pcPL przy pomocy GoogleAPI (potrzebny klucz do wpisania zamiast KLUCZ_GOOGLE_API)

 <html><head>
 <script src="http://maps.google.com/maps?file=api&v=2&key=KLUCZ_GOOGLE_API" type="text/javascript"></script>
  <script type="text/javascript">
  //<![CDATA[ //<>
  function load()
  {
    var lat=52.29;
    var lon=20.72;
    var zoom=7;
    if (!GBrowserIsCompatible())
        return;
    var copyOSM = new GCopyrightCollection("<a href=\"http://ump.waw.pl/\">UMP-PcPL</a>");
    var copyOSM2 = new GCopyrightCollection("<a href=\"http://www.openstreetmap.org/\">OpenStreetMaps</a>");
    copyOSM.addCopyright(new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, " "));
    copyOSM2.addCopyright(new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, " "));
    var tilesMapnik     = new GTileLayer(copyOSM, 1, 18, {tileUrlTemplate: 'http://tiles.ump.waw.pl/ump_tiles/{Z}/{X}/{Y}.png'});
    var tilesOSM     = new GTileLayer(copyOSM2, 1, 18, {tileUrlTemplate: 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png'});
    var mapMapnik     = new GMapType([tilesMapnik],     G_NORMAL_MAP.getProjection(), "Mapnik");
    var mapOSM     = new GMapType([tilesOSM],     	G_NORMAL_MAP.getProjection(), "OSM");
    var map           = new GMap2(document.getElementById("map"), { mapTypes: [mapMapnik,mapOSM] });
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.enableScrollWheelZoom();
    map.setCenter( new GLatLng(lat, lon), parseInt(zoom));
    new GKeyboardHandler(map);
    map.enableContinuousZoom();
  }
  //]]>
  </script>
 </head>
 <body onload="load()" onunload="GUnload()">
 <div id="map" style="width:800px; height:600px; border:1px solid gray"></div>
 </body></html>

Szczegóły techniczne renderingu

Przygotowanie pliku importu *.osm.gz

Mapa generowana jest na podstawie tych samych źródeł, z których powstają wersje na odbiorniki Garmin. Plik w formacie polskim (*.mp) jest wstępnie przygotowywany, a następnie konwertowany do pośredniego formatu xml zgodnego z OSM.

Ze względu na wiele różnic pomiędzy używanymi typami i konwencjami w UMP oraz OSM, otrzymywany plik jest uproszczoną wersją dostosowaną dla celów rysowania. W związku z tym niektóre dane nie są w nim zawarte oraz może zawierać dodatkowe modyfikacje, które pozwoliły zamaskować różnice między formatami. Przykładowo OSM zawiera zaledwie kilka typów określających miasto, tymczasem w UMP jest ich kilkanaście w zależności od wielkości.

Do konwersji użyty został programik oparty o źródła pobrane z http://code.google.com/p/mp2osm/. Modyfikacje konwertera obejmowały zarówno zmiany kodu jak i definicji reguł konwersji.

Aktualnie wygenerowany plik ump.osm.gz (po spakowaniu) zajmuje ok 100MB i stanowi podstawę do renderingu kafelków wyświetlanych w przeglądarce WWW.

Renderowanie: Mapnik

Dalej, uzyskany plik xml jest przetwarzany tak samo jak w przypadku OpenStreetMap, co zostało opisane dokładnie na właściwym Wiki:

http://wiki.openstreetmap.org/wiki/Deploying_your_own_Slippy_Map

Oprogramowanie serwera renderującego obejmuje:

  • Mapnik - silnik renderujący kafelki
  • Postgresql + PostGIS - baza danych przestrzennych, do której importowane są dane
  • osm2plsql - importer danych z OSM do bazy postgis
  • apache2 + mod_tile - moduł apache2 wykorzystujący Mapnik'a do dynamicznego generowania kafelków i obsługi cache

Modyfikacje tego etapu polegały jedynie na dostosowaniu definicji styli dla specyficznych warunków UMP-pcPL oraz poprawione zostały niektóre parametry odpowiedzialne za poziom wyświetlania oraz grubość dróg. Różnice można zaobserwować porównując warstwę UMP i OSM.

Ponieważ liczba kafelków obejmujących samą Polskę, nie wspominając o Europie, przekracza kilka milionów, tylko część z nich jest wstępnie wygenerowana, reszta tworzona jest dynamicznie na żądania. W momencie update'u istniejące kafelki są ponownie odrysowywane równolegle z obsługą zapytań WWW.

Przebiega to podobnie jak w przypadku OSM: http://wiki.openstreetmap.org/wiki/Slippy_Map

Podsumowanie

Większość wiedzy potrzebnej do przygotowania wersji WWW map UMP-pcPL zaczerpnąłem ze stron:

http://wiki.openstreetmap.org/wiki/Main_Page

gdzie praktycznie krok po kroku zostało opisane jak przygotować własną mapę WWW. Głównym problemem było więc przeniesienie kodów z formatu *.mp do *.osm oraz przystosowanie konwencji UMP-pcPL do Mapika, którego gotowa konfiguracja zoptymalizowana była mocno pod kątem OpenStreetMap. Przez wykorzystanie gotowych komponentów możliwe było bardzo szybkie przygotowanie mapy online UMP (w weekendy i w wolnych chwilach przez 1-2 miesięce), a efektem ubocznym jest duże podobieństwo wyglądu do map OSM :) .

Pomysły na przyszłość

legenda

czyli okienko z opisami co znaczą jakie kolory / elementy

drobne błędy

nazwa terenu przemysłowego się nie wyświetla

Marcin Rudowski