Oczywiście GDAL nie jest jedynym programem, który pozwala na ściągnięcie map w kafelkach z serwerów OpenStreetMap lub ARS Geoportalu - istnieje przecież szereg innych rozwiązań. Nie jest też pewnie najbardziej przyjaznym dla zwykłego użytkownika - większość z nich preferuje jednak standardowy interfejs okienkowy i klikanie niż własnoręczne wpisywanie komend do linii poleceń i tworzenie plików xml.
Przewaga GDAL tkwi w jego uniwersalności. Nie jest to jedynie zbiór programików, to przede wszystkim biblioteka programistyczna, dzięki której zestaw funkcji GDAL może być wykorzystany w innych aplikacjach. Takich programów, które opierają się w mniejszym lub większym stopniu na bibliotece, jest całkiem sporo: GRASS, Mapserver, QGIS, a nawet Google Earth i ArcGIS.
W przypadku integracji GDAL i Mapservera możliwe jest np. użycie serwera ARS Geoportalu jako źródła danych rastrowych, a następnie stworzenia własnego WMS. Po co jednak ktoś chciałby rezygnować z szybkiego dostępu do kafelków na rzecz powolnego WMS? Powodów może być wiele: nasz program może nie posiadać obsługi TMS, chcielibyśmy mieć mapy w innym odwzorowaniu itp.
Tyle tytułem wstępu. Teraz czas na praktyczne wykorzystanie :)
Potrzebne będą:
Nie będę opisywał procesu instalacji i konfiguracji jednego i drugiego oprogramowania - jest zbyt dużo możliwości i platform (FWTools, Osgeo4W dla Windows, pobieranie z paczek lub kompilacja w systemach Linux). W każdym razie na Windowsach powinno być łatwiej (dziwnym nie jest...), bo jak wspomniano FWTools ma już wersję 1.7. Natomiast w przypadku Linux konieczna będzie kompilacja ze źródeł - w repozytoriach leżą jakieś przestarzałe pakiety sprzed dwóch lat (tak, to jest właśnie jedna z wielu ZaletLinuksa™).
Zakładając, że GDAL i Mapserver są w najnowszej wersji i działają jak należy, można przystąpić do właściwego działania:
Potrzebny jest plik xml z konfiguracją serwera. Zasady są identyczne jak w notce o pobieraniu map z serwerów ARS Geoportalu. Należy pamiętać o dodaniu do pliku tagu <Cache>, dzięki czemu unikniemy za każdym razem ściągania danych od nowa, co przełoży się na wiekszą szybkość i mniejsze obciążenie serwerów.
Gotowe konfiguracje: Geoportal (BDO), UMP, OSM.
Tworzymy nowy plik map dla Mapservera i dodajemy warstwę rastrową, a jako źródło danych (DATA) podajemy lokalizację pliku xml.
Nie będę się wdawał w szczegóły dot. tego jak stworzyć plik map i co znaczą poszczególne opcje - tutaj jest przykładowy plik dla OSM. Kilka rzeczy na które warto zwrócić uwagę:
- PROJECTION to odwzorowanie danych źródłowych (czyli EPSG:900913 dla UMP i OSM, 2180 dla Geoportalu)
- wms_srs to odwzorowania w jakich mapy będzie udostępniał Mapserver
- PROCESSING "RESAMPLE=AVERAGE" - włączenie resamplingu (dostępny jest również BILINEAR), domyślnie używany jest NEAREST, który jest szybki, ale daje kiepską jakość
- MAXSCALE, MINSCALE - przedział widoczności danej warstwy (dla warstw UMP i OSM nie trzeba go podawać, ale w przypadku np. TBD z Geoportalu, które pojawia się dopiero od pewnego przybliżenia, a pierwszy poziom składa się z 1536x1024 kafelków, konieczne jest wpisanie MAXSCALE - w przeciwnym wypadku ogólny widok Polski w oddaleniu powodowałby próbę ściągnięcia wszystkich(!) plików z pierwszego poziomu)
- CONFIG "PROJ_LIB" to lokalizacja pliku z definicjami kodów EPSG odwzorowań - 900913 nie jest standardowym kodem, więc Mapserver może go nie rozpoznać - należy podać ścieżkę do pliku, w którym dodany jest ten kod (można też spróbować oficjalnego, choć nie tak znanego, EPSG:3857, który opisuje to samo odwzorowanie "sferycznego Merkatora" co 900913)
Taki url wystarczy dodać teraz np. do QGIS:
Ale, ale... ktoś mógłby zapytać czy skoro QGIS również oparty jest na GDALu, to czy nie można by w nim bezpośrednio podpiąć TMS, bez przechodzenia przez Mapserver?
Owszem, można. Wystarczy z menu Warstwa wybrać Dodaj warstwę rastrową i wskazać odpowiedni plik xml. Wydaje się proste, tyle że potrzebny jest QGIS skompilowany w oparciu o GDAL 1.7, a najnowsza stabilna wersja QGIS wykorzystuje 1.6.1 (próba otworzenia takiego xml zakończy się wyskoczeniem błędu GDALWMS: No mini-driver registered for 'TMS'; zadziała natomiast xml dla WMS).
Zatem należy czekać na kolejną wersję oficjalną QGIS 1.5 (kilka miesięcy?) lub korzystać z Osgeo4W i rozwojowych buildów (tam pewnie pojawi się wcześniej), zaś niecierpliwym pozostaje samodzielna kompilacja...
8 komentarzy:
Może da się coś zrobić z takim adresem:
http://www.jaworzno.pl/mapa/advMapsGetImgMaps.php?logo=off&p=plan_05&scale_bar=off&m_x=6590785&m_y=5563656&m_w=200&i_w=1100&i_h=800&cs=POL.2000.18&scale=1000&l=wladanie
Jakie parametry powinien mieć plik xml do programu gdal, żeby przy założeniach
1. mapa z geoportalu w ARS o współrzędnych: X: 445672.93, Y: 685928.64
(To jest środek tego co mnie interesuje, a chciałbym mieć tak ze 2km w każdą stronę)
2. Skala w geoportalu to: 1:10614
utworzył mi się pojedynczy plik z mapa rastrową.
będę wdzięczny za pomoc.
Plik xml jest zawsze taki sam (dla danej warstwy), zmieniają się jedynie parametry podawane przy wywołaniu komendy gdal_translate (przykłady są w notce http://terraobserver.blogspot.com/2009/07/pobieranie-map-z-serwerow-ars.html).
Witam,
a ja mam takie pytanie... jak rozwiązać problem polskich znaków w nazwie warstwy? Używając FWTools program nie rozpoznaje ich i tym samym z zasobu odpadają nam dość istotne informacje... Czy jest jakiś sposób na to?
pozdrawiam,
Dawid
Hm, dobre pytanie. Strzelam: spróbować rożnych kodowań w pliku XML, zobaczyć najnowszą wersję GDAL?
Kodowanie nie pomogło. Korzystam z narzędzia FWTools, niestety nie wiem jak zaktualizować GDAL do nowszej wersji w tym pakiecie. Jakieś propozycje?
pozdrawiam,
Dawid
To jeszcze taka rzecz mi przyszła teraz do głowy: przepuść nazwę warstwy przez jakiś url enkoder i tak przerobioną wstaw do xml-a.
Celny strzał- działa. Nie dla wszystkich serwerów, ale większości. Dziękuję,
Dawid
Prześlij komentarz