Personalizacja wtyczki OpenLayers

Wtyczka OpenLayers do QGIS pozwala dodawać podkłady mapowe z kilku popularnych serwisów m.in. Google Maps i OpenStreetMap. Jej opis można znaleźć w dziale QGIS wtyczki. Domyślnie użytkownik ma dostęp do 11 rodzajów map. W prosty sposób można jednak zmienić standardowe ustawienia usuwając nieużywane oraz dodając nowe podkłady.

Wtyczka OpenLayers opiera się na wykorzystaniu prerenderowanych kafelków pobieranych z serwerów. Za pomocą biblioteki OpenLayers i udostępnianych przez twórców serwisów mapowych API umożliwia pobieranie odpowiednich kafli znajdujących się w zasięgu widoku i wyświetlanie ich w oknie QGIS. Zazwyczaj twórcy udostępniają kilkanaście/kilkadziesiąt poziomów skalowych przedstawiających różny stopień szczegółowości. Minusem tego rozwiązania jest to, że mapy najlepiej są wyświetlane w konkretnych skalach poza którymi podkłady mogą być przesunięte względem innych warstw. Mapy wyświetlane w ten sposób określa się jako slippy maps, wykorzystywane są m.in. na stronie OpenStreetMap. Więcej o tematyce kafelkowania można znaleźć we wpisie TileCache – przyspieszenie dla WMS.

[important]Do poprawnego wyświetlania warstw przez wtyczkę OpenLayers koniecznym jest, aby kafelki były serwowane w układzie Google Mercator (EPSG: 900913)[/important]

Usuwanie widoków

W celu usunięcia nieużywanych widoków należy zmienić nieco kod źródłowy wtyczki. Katalog instalacyjny to standardowo:

  • C:\Documents and Settings\user\.qgis\python\plugins\openlayers w Windows XP,
  • C:\users\user\.qgis\python\plugins\openlayers w Windows XP w Windows Vista i 7,
  • /home/user/.qgis/python/plugins/openlayers w systemach z rodziny Linux

, gdzie user należy zamienić na swoją nazwę użytkownika. Otwieramy plik openlayers_plugin.py. Rejestrowanie serwisów odbywa się podczas tworzenia instancji klasy OpenlayersPlugin (metoda __init__()), są one widoczne  na liście wyboru w menu i oknie głównym wtyczki. Jeśli chcemy usunąć wybrane widoki należy usunąć odpowiednią linię lub na jej początku  dodać znak # – będzie ona traktowana jako komentarz, np. zmiana:

self.olLayerTypeRegistry.add( OlLayerType(self, 'Google Satellite', 'google_icon.png', 'google_satellite.html') )
self.olLayerTypeRegistry.add( OlLayerType(self, 'Google Streets', 'google_icon.png', 'google_streets.html') )
#self.olLayerTypeRegistry.add( OlLayerType(self, 'Google Hybrid', 'google_icon.png', 'google_hybrid.html') )
self.olLayerTypeRegistry.add( OlLayerType(self, 'Google Physical', 'google_icon.png', 'google_physical.html') )

spowoduje usunięcie z listy warstwy Google Hybrid. Można również usunąć niechciane linijki, ale jeśli po pewnym czasie będziemy chcieli przywrócić dany serwis to łatwiej jest usunąć znak # niż ponownie wpisywać całą linijkę lub instalować wtyczkę od nowa. Kolejne parametry metody klasy OlLayerType określają: instancję wtyczki (zawsze self), wyświetlaną nazwę, plik z ikoną oraz plik HTML do pobierania danych. Można również zmienić kolejność widoków na liście wyboru aby najczęściej używane serwisy znalazły się na górze.

Dodawanie widoków

W sieci można znaleźć adresy serwerów oferujących usługę pobierania prerenderowanych map, głównie opartych na danych OpenStreetMap. Są to m.in. (kliknij żeby zobaczyć przykładowy widok):

Powyższe adresy można wykorzystać przy wyświetlaniu widoków innych niż standardowo dostarczone przez Twórcę wtyczki OpenLayers. Przykładowo, jeśli chcemy dodać podkłady ‘Uzupełniająca Mapa Polski’ i ‘OpenCycleMap’ musimy dodać dwie linijki w pliku openlayers_plugin.py (w miejscu, gdzie wcześniej usuwaliśmy widoki):

self.olLayerTypeRegistry.add( OlLayerType(self, 'Uzupelniajaca Mapa Polski', 'ump_icon.png', 'ump.html', True) )
self.olLayerTypeRegistry.add( OlLayerType(self, 'OpenCycleMap', 'ocm_icon.png', 'ocm.html', True) )

Uzupelniajaca Mapa Polski (bez polskich liter!) i OpenCycleMap to wyświetlane nazwy, natomiast ump.html i ocm.html to pliki HTML, które należy stworzyć. Wykorzystamy w tym celu istniejący plik osm.html znajdujący się w folderze html w katalogu wtyczki. Należy stworzyć dwie kopie pliku i nazwać je tak jak przy rejestracji. Teraz należy zmienić linijkę 33 w każdym z nich wpisując adres serwera, w naszym przykładzie odpowiednio:

  •   http://tiles.ump.waw.pl/ump_tiles/${Z}/${X}/${Y}.png
  •   {z}/${x}/${y}.png

Po zapisaniu zmian uruchamiamy QGIS i sprawdzamy czy serwisy zostały prawidłowo dodane do listy:

Tutaj dostępna jest wersja wtyczki zawierająca dodatkowe podkłady mapowe.

[notice]Szybkość wczytywania kafelków zależy w dużej mierze od serwerów na których się one zajmują. W niektórych przypadkach wczytywanie map może być bardzo wolne.[/notice]

Własne podkłady

Istnieje możliwość serwowania własnych usług WMS opartych na kafelkach i dodawanie ich do wtyczki OpenLayers. Więcej o tym jak korzystać z kafelków można znaleźć tutaj.

Jeśli nie mamy dostępu do serwera możemy wykorzystać specjalne serwisy. Przykładem może być Cloudmade wykorzystujący dane OpenStreetMap, który pozwala stworzyć własny styl i udostępnić go w sieci. Link, który należy umieścić w pliku HTML, ma postać:

http://tile.cloudmade.com/klucz_api/id_stylu/256/${Z}/${X}/${Y}.png

Klucz API można uzyskać po rejestracji w serwisie, natomiast jako indeks stylu można podać numer ID stworzonego przez siebie lub innego użytkownika stylu (w serwisie można je przeglądać w specjalnej przeglądarce).

Styl NoName (ID stylu 3) stworzony w serwisie Cloudmade wyróżnia na czerwono drogi nie posiadające nazwy.

Przydatne linki:

wykorzystujący dane OpenStreetMap, który pozwala stworzyć własny styl i udostępnić go w sieci. Link, który należy umieścić w pliku HTML, ma postać: