W dzisiejszej notce o tym, jak przy pomocy darmowego programu GDAL stworzyć duuużą (rzędu 10 000 x 10 000 px lub więcej) mapę ze zdjęć lotniczych z
serwera WMS Geoportalu.
Na początku należy
pobrać (najlepiej razem z pakietem
FWTools) i zainstalować GDAL.
(Tutaj małe ostrzeżenie: program nie posiada żadnego GUI, wszystko odbywa się w konsoli/linii poleceń.)
Po instalacji trzeba ustawić zmienne środowiskowe poleceniem
setfw.bat, dla pewności można jeszcze wpisać
gdalinfo --formats i sprawdzić czy na liście obsługiwanych formatów znajduje się WMS.
Teraz można przystąpić do tworzenia XML z parametrami geoportalowego WMSa: szablon takiego pliku znajduje się na stronie
GDAL, pola oznaczone jako optional można pominąć, wartości pól w większości uzupełnia się na podstawie informacji z
GetCapabilities Geoportalu. (Kilka wyjaśnień dot. XML na dole; tutaj gotowe pliki:
geop2180.xml,
geop4326.xml)
Po stworzeniu pliku pozostaje jedynie wpisanie odpowiedniej komendy i... chwila cierpliwości (lub dwie - zależy od szybkości łącza i rozmiaru tworzonej mapy :).
- Ogólnie:
gdal_translate -of [format pliku] -projwin [bounding box danego obszaru] -outsize [rozmiar x i y pliku wyj.] [plik.xml] [plik.wynikowy] - przykład dla układu 1992 (EPSG:2180), plik jpeg 10000x10000px, obszar Warszawy:
gdal_translate -of JPEG -projwin 630000 500000 650000 480000 -outsize 10000 10000 tmp\geop2180.xml tmp\wwa4.jpg - współrzędne geograficzne (EPSG:4326), 1000x1000px, Warszawa:
gdal_translate -of JPEG -projwin 20.909 52.451 21.194 52.166 -outsize 1000 1000 tmp\geop4326.xml tmp\wwa.jpg

BBox (
projwin) wpisywać należy albo w stopniach (długość, szerokość geograf.), albo we współrzędnych metrowych (X i Y), w zależności od układu zdefiniowanego w pliku XML (Geoportal udostępnia dwa: EPSG:4326 i 2180 czyli PUWG1992). Rozmiar pliku wyjściowego można podać w pikselach albo procentach (np.
-outsize 10% 10%), ważne aby proporcje między bokami
projwin i
outsize były takie same. (100% oznacza stworzenie obrazu w pełnej rozdzielczości np. dla 0,25m/px i obszaru 1x1km powstanie obraz 4000x4000px, przy 10% będzie to 400px.)
Ścieżki do pliku xml i wynikowego można podać też w postaci bezwzględnej np.
"C:\Program Files\FWTools\bin\gdal_geop.xml"W podobny sposób można tworzyć mapy z danych znajdujących się nie tylko na WMSach, ale także na serwerach World Wind czy TMS (czyli np. usługa ARS w Geoportalu).
[EDIT: Więcej o pobieraniu map z ARS w tym poście]Na koniec kilka wyjaśnień związanych z plikiem XML:
- DataWindow
UpperLeftX/Y, LowerRightX/Y można rozumieć jako BBox zestawu danych na serwerze Geoportal (~obszar Polski) i nie należy go mylić z BBox tworzonej mapy czyli projwin; w przypadku EPSG:4326 można to całkowicie pominąć, bo GDAL domyślnie przyjmie -180, 90, 180 i -90 stopni, natomiast dla układu 1992 konieczne jest już wpisanie odpowiednich współrzędnych metrowych (na podstawie GetCapabilities, jednak dobrze jest podać wartości zaokrąglone np. do dziesiątek tysięcy) - SizeX i SizeY jest to rozmiar obrazu (jako całości, z której wycinana będzie potem mapa) w pikselach, trzeba go ustalić na podstawie przewidywanej rozdzielczości zdjęć na serwerze oraz wpisanych wcześniej wartości UpperLeft i LowerRight - zakładając np. 0,25m/px oraz X od -180 do 180 stopni (co odpowiada 40 000 000m na równiku) dostaje się SizeX równy 160 000 000 [px], natomiast dla układu 1992, tej samej rozdzielczości i różnicy między right i left X wynoszącej 1 000 000m SizeX wyniesie 4 000 000 (analogicznie dla Y)
- Cache domyślnie jest wyłączony, jednak warto dodać to pole, aby za każdym razem nie ściągać danych od nowa
- BlockSizeX/Y rozmiar pojedynczego obrazka (tile), z których sklejana będzie potem gotowa mapa - im większy, tym logo dodawane przez Geoportal będzie relatywnie mniejsze, z drugiej strony (przy mapach niewiele większych od pojedynczej cegiełki) wiąże się to ze ściąganiem wiekszej ilości niepotrzebnych danych
- BandsCount liczba kanałów w obrazie - dla JPG wartość ta to 3 (składowe RGB), PNG - 4 (RGB + kanał alpha)