Widok na www
Z UMP
d (dodanie parametru enableGoogle) |
d (→Dostosowanie konfiguracji mapy: zamiana escape na encodeURIComponent) |
||
Linia 120: | Linia 120: | ||
* lat,lon,zoom - domyślne położenie mapy, gdy nie podane w url'u | * lat,lon,zoom - domyślne położenie mapy, gdy nie podane w url'u | ||
* mlat,mlon - położenie początkowe markera | * mlat,mlon - położenie początkowe markera | ||
- | * mbody: treść dymku markera po najechaniu myszą lub kliknięciu. Format taki sam jak [[#Marker|dla parametru mbody w url'u]]. Honorowane jest kodowanie %xx znaków specjalnych (funkcja | + | * mbody: treść dymku markera po najechaniu myszą lub kliknięciu. Format taki sam jak [[#Marker|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ą | * 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: | * 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: | ||
<pre><script src="http://maps.google.com/maps?file=api&v=2&key=KLUCZ_GOOGLE_API" type="text/javascript"></script></pre> | <pre><script src="http://maps.google.com/maps?file=api&v=2&key=KLUCZ_GOOGLE_API" type="text/javascript"></script></pre> | ||
- | |||
=== Własna mapa od podstaw === | === Własna mapa od podstaw === |
Wersja z dnia 19:15, 26 sty 2009
Od grudnia 2008 r. można oglądać mapę UMP-pcPL z poziomu www.
Mapa występuje w kilku wersjach:
- http://mapa.ump.waw.pl/ump-www/ - mapka z średnim okienku i opcją zaznaczania punktu
- http://mapa.ump.waw.pl/ump-www/form.html - formularz wysyłania uwag do mapy
- http://mapa.ump.waw.pl/ump-www/iframe.html - mapka samo-dopasowująca się do widocznego obszaru, którą można wykorzystać w iframe lub po prostu otworzyć, aby mieć mapę na pełne okno przeglądarki WWW.
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
- kontrolki nawigacyjne: przyciski na tle mapy ze strzałeczkami oraz +/- Dodatkowo 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, 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)
- 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. 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)
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:
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
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 nie powinno być problemu z użyciem innych programów korzystających z tych źródeł.
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
...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 :) .