Technologie Map Cyfrowych Laboratorium 1 GDAL Geospatial Data Abstraction Library
Wstęp GDAL jest biblioteką translacyjną dla rastrowych danych geoprzestrzennych. Rozpowszechniana na licencji Open source (X/MIT) przez Open Source Geospatial Foundation. Biblioteka GDAL dostarcza wspólny model abstrakcji dla danych w wielu wspieranych formatach. Razem z biblioteką dostarczony jest zbiór narzędzi linii poleceń umożliwiających konwersję oraz przetwarzanie danych przestrzennych. Podstawowym założeniem, a zarazem atutem biblioteki jest jednolita reprezentacja różnych danych przestrzennych o charakterze rastrowym bez względu na fizyczny format zbioru danych, jak również duży poziom modularności skutkujący obsługą wielu formatów i stosunkowo prostą rozszerzalnością. Podczas ćwiczeń laboratoryjnych należy przetestować kompilację FWTools biblioteki GDAL. Materiały laboratoryjne przechowywać w katalogu D:\TMC\Imie_Nazwisko Zadanie 1 Użycie z poziomu C/C++ W pierwszym zadaniu należy utworzyć w środowisku Visual Studio aplikację konsolową (Win32 Console Application), która otwiera wybrany plik GeoTiff (test1.tiff, utm.tif) oraz wyświetla podstawowe informacje na jego temat. W szczególności należy wyświetlić informację na temat rozmiaru, liczby kanałów/pasm, projekcji pliku rastrowego, parametrów transformacji afinicznej oraz nazwy sterownika użytego do otworzenia pliku. Należy odpowiednio ustawić we właściwościach projektu: Ścieżkę do plików nagłówkowych: Additional Include Directories :
Ścieżkę do bibliotek statycznych Additional Library Directories : Wskazać bibliotekę statyczną gdal_i.lib, Additional Dependencies :
Aby Należy ponadto zadbać aby aplikacja miała dostęp do bibliotek dynamicznych z katalogu FWTools\bin (np. przekopiować pliki dll do katalogu roboczego lub dodać katalog bin do zmiennej środowiskowej PATH). W programie w języku C/C++ \ korzystając z narzędzi GDALa należy włączyć potrzebne pliki nagłówkowe: #include "gdal_priv.h" // plik #include "cpl_conv.h" // for CPLMalloc() Konieczne jest również użycie struktury danych odpowiedzialnej za obsługę różnych formatów danych GDALa: GDALDataset *podataset; Bezpośrednio przed pracą z danymi przestrzennymi konieczna jest rejestracja sterowników poszczególnych formatów w ramach GDALa: GDALAllRegister(); Otwarcie do odczytu plików rastrowych GeoTiff: podataset = (GDALDataset *) GDALOpen( "utm.tif", GA_ReadOnly ); Na wypadek niepowodzenia należy sprawdzić wartość zwracaną przez GDALOpen: if( podataset == NULL ) W przypadku sukcesu można korzystać z obiektu wskazywanego przez podataset. Niezbędne informacje można wydobyć wykorzystując odpowiednią metodę z klasy GDALDataset. Materiały: http://www.gdal.org/classgdaldataset.html - Pod adresem znajduje się przyzwoity opis klasy GDALDataset.
Zadanie 2 odczyt danych Po odczytaniu podstawowych informacji na temat pliku znamy parametry transformacji afinicznej, która wiąże poszczególne piksele obrazu rastrowego ze współrzędnymi w układzie odniesienia związanym z projekcją obrazka. Transformacja afiniczna (ang. general affine transformation) jest to przekształcenia reprezentujące przesunięcie, obrót i skalowanie. Z matematycznego punktu widzenia jest to jednoznaczne przekształcenie płaszczyzny lub przestrzeni na siebie, zachowujące współliniowość punktów. Jak w poniższym opisie: CPLErr GDALDataset::GetGeoTransform (double * padftransform ) Fetch the affine transformation coefficients. Fetches the coefficients for transforming between pixel/line (P,L) raster space, and projection coordinates (Xp,Yp) space. Xp = padftransform[0] + P*padfTransform[1] + L*padfTransform[2]; Yp = padftransform[3] + P*padfTransform[4] + L*padfTransform[5]; Zaimplementować mechanizm, który korzystając z pobranych parametrów transformacji wyświetli informacje na temat punktu w obrazie rastrowym (współrzędne w pikselach oraz wartość). Współrzędne punktu w obrazie rastrowym użytkownik podaje w przestrzeni związanej z projekcją obrazka. Wskazówka: Należy zastosować wzory z ramki w postaci odwróconej. Czyli wyznaczyć P oraz L względem odczytanych parametrów transformacji afinicznej oraz zmiennych zadawanych przez użytkownika Xp Yp. Do odczytu lub zapisu wartości pojedynczych pikseli najlepiej wykorzystać metodę RasterIO z klasy GDALRasterBand. Uwaga: Pobierając z GDALDataset::GetRasterBand(int) poszczególne kanały/pasma należy zwrócić uwagę, że numerujemy od 1 do GDALDataset::GetRasterCount(). Materiały: http://www.gdal.org/classgdalrasterband.html - przyzwoity opis klasy GDALRasterBand, w szczególności metody RasterIO.