[Instrukcja (w budowie)] QGIS MapServer i nietypowe mapy

JOSM oraz inne edytory nie obsługują wielu formatów map, przez co tracimy możliwość wykorzystywania niektórych ciekawych podkładów. QGIS, potężny kombajn do GIS-u, wprawdzie posiada obsługę edytowania OSM, ale bardzo szczątkową (i komu chciałoby sie uczyć obsługi kolejnego programu?). Na szczęście ten sam QGIS, a dokładniej jego MapServer, może przetłumaczyć nam dowolną mapę (obsługiwaną przez Qgisa, czyli praktycznie wszystkie) na format WMS zrozumiały przez JOSM i inne szanujące się edytory OSM.

W tej instrukcji weźmiemy na warsztat mapę ISOK_Cien z Geoportalu, dostępną w formacie WMTS, bardzo przydatną — zwłaszcza w lasach! — w rysowaniu dróg, rowów, wałów, strumieni, jezior i innych elementów terenowych.
Pierwsza wersja instrukcji zakłada, że używanym systemem jest Linux (dokładniej Debian, lub któraś z jego pochodnych, np. Ubuntu lub Mint; w przypadku innych dystrybucji nazwy pakietów i ścieżki mogą być inne, ale zasada działania ta sama). Później postaram się też zrobić ją dla Windowsa.

Potrzebne nam będą:

  • QGIS oraz QGIS MapServer,
  • serwer HTTP z obsługą FCGI (tutaj skorzystam z Apache, teoretycznie może być inny),
  • edytor JOSM.

Oczywiście testy i konstruktywna krytyka mile widziane.

1. Instalujemy programy QGIS i QGIS MapServer.

W Debianie i pochodnych to pakiety:

qgis qgis-mapserver

2. Uruchamiamy QGIS i tworzymy nowy projekt.

W górnym menu wybieramy „Warstwa » Dodaj warstwę WMS/WMTS…” — otworzy się nowe okno, gdzie musimy najpierw dodać źródło mapy: klikamy „Nowa”, po czym nadajemy warstwie nazwę (np. „ISOK Cieniowanie”) oraz podajemy URL:

http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/ISOK_CIEN?REQUEST=GetCapabilities&SERVICE=WMTS

po czym kilkamy OK i wracamy wcześniejszego okna. Na rozwijanej liście wybieramy dodaną właśnie warstwę (później oczywiście nie trzeba jej dodawać) i klikamy „Połącz”.

Pojawi się lista dostępnych warstw, w tym wypadku tylko ISOK_Cien — zaznaczamy ją i klikamy „Dodaj”, a następnie „Zamknij”. W głównym oknie Qgisa powinna być widoczna dodana właśnie mapa.

Zapisujemy projekt jako plik *.qgs i zamykamy program.

3. Instalujemy serwer Apache i konfigurujemy FCGI.

Do obsługi MapServera potrzebny będzie serwer HTTP z FCGI, wykorzystamy w tym celu Apache’a. W Debianie i pochodnych instalujemy pakiety:

apache2 libapache2-mod-fcgid

następnie włączamy obsługę fcgi i restartujemy serwer:

a2enmod cgid
/etc/init.d/apache2 restart

4. Magia :wink:

Zapisany wcześniej plik *.qgs umieszczamy w katalogu, w którym znajduje się plik qgis_mapserv.fcgi (w Debianie i pochodnych to /usr/lib/cgi-bin/), a następnie sprawdzamy czy wszystko działa — w przeglądarce WWW wchodzimy pod adres http://localhost/cgi-bin/qgis_mapserv.fcgi. Powinien nam się pojawić podobny komunikat WMS:

<ServiceExceptionReport version="1.3.0" xmlns="http://www.opengis.net/ogc">
 <ServiceException code="ServiceNotSpecified">Service not specified. The SERVICE parameter is mandatory</ServiceException>
</ServiceExceptionReport>

Jeśli tak — działa!

5. Dodanie własnej warstwy w JOSM

W górnym menu edytora klikamy na „Podkład mapy » Konfiguracja”, następnie w ustawieniach na ikonkę dodania warstwy WMS („WMS” z plusem po prawej stronie). Wklejamy adres usługi http://localhost/cgi-bin/qgis_mapserv.fcgi i klikamy „Pobierz warstwy”. Na liście wybieramy „ISOK_Cien”, dodatkowo można wybrać format grafik oraz nadać nazwę warstwie w JOSM. Zatwierdzamy wybór i już możemy korzystać z nowego podkładu.

TODO:

  • wersja dla Windows,
  • zbadać możliwość wykorzystania mniej kobylastych serwerów HTTP (nginx? lighttpd?),
  • dodać cache kafelków po drodze aby przyspieszyć (?) działanie,

Mogę potwierdzić działanie pod lighttpd.

Dodam, że wraz z nadejściem QGIS 2.6 pakiet qgis-mapserver został przemianowany na qgis-server. A istnienia WMSa z cieniem nie byłem świadom, przyda się.

Dzięki za uwagi.

Jeśli chodzi o instalację na Windows, znalazłem taką instrukcję: http://anitagraser.com/2012/04/06/qgis-server-on-windows7-step-by-step/
Wygląda na to, że należy skorzystać z OSGeo4W.

Udało mi się połączyć TileCache do MapServera.

W Debianie i pochodnych instalujemy pakiet tilecache i w pliku konfiguracyjnym /etc/tilecache.cfg dodajemy:

[ISOK_Cien]
type=WMS
url=http://localhost/cgi-bin/qgis_mapserv.fcgi
extension=jpg
srs=EPSG:3857
spherical_mercator=true
tms_type=google
metatile=yes

Teraz mamy kilka sposobów na uruchomienie TileCache’a. Na początek skorzystamy z wbudowanego serwera HTTP — po prostu uruchamiamy:

tilecache_http_server

i serwer tilecache działa na porcie 8080 (domyślnie, można oczywiście zmienić).

W JOSM można się już podłączyć przez TMS:

tms:http://localhost:8080/1.0.0/ISOK_Cien/{zoom}/{x}/{y}.jpg

Później jeszcze rozpracuję uruchamianie przez FCGI, wbudowany serwer z definicji nie jest zbyt wydajny (choć na potrzeby domowe powinien wystarczyć).