Tworzenie supernakładek z kafelkami gdal2

Mano Marks, Google Geo APIs Team
Wrzesień 2009

Cel

Ten samouczek przedstawia podstawy tworzenia nakładki nakładki, czyli zestawu nawierzchni, które korzystają z linków NetworkLink w poszczególnych regionach, przy użyciu narzędzi Open Asurstration Data Abstrtion Library.

Wprowadzenie

Przeglądarki takie jak Google Earth czy Mapy Google udostępniają zdjęcia satelitarne i fragmenty mapy. Czasem jednak warto użyć własnych. Dane rastrowe są dostępne w wielu formach i mają wiele zastosowań.

  • Umieszczanie zdjęć satelitarnych lub lotniczych w przeglądarce geograficznej
  • umieszczanie na mapach istniejących map, np. warstwy Rumey w Google Earth;
  • Importowanie danych GIS w formie rastrowania
  • Umieszczam zdjęcia LIDAR lub zdjęcia w podczerwieni w przeglądarce geograficznej

Jednym z problemów związanych z danymi rastrowymi o wysokiej rozdzielczości jest to, że ich wyświetlanie wymaga dużo pamięci. Jeśli rozsyłasz ją przez sieć, masz też problemy z przepustowością. Aby rozwiązać ten problem, musisz utworzyć kafelki.

Sąsiadując plik obrazu, można podzielić go na wiele różnych obrazów, które ładują się po wyświetleniu. Tworzysz jeden obraz o niskiej rozdzielczości do wyświetlenia, gdy użytkownik jest pomniejszony. Na tym samym obszarze tworzysz 4 obrazy w wyższej rozdzielczości, które są lepiej widoczne. W przypadku każdego obszaru nałożonego na obraz tworzysz 4 obrazy o większej rozdzielczości, aby przybliżyć itd. Jest to nazywane metodą kwadrat, która pokazuje ułożenie zdjęć w Google Earth i Mapach Google. Cały proces został szczegółowo wyjaśniony w przewodniku KML dla programistów dotyczącym regionów.

Można to zrobić ręcznie za pomocą aplikacji do edycji grafiki, takiej jak Adobe Photoshop lub GIMP, ale jest to skomplikowana, żmudna i podatna na błędy. Dostępnych jest też wiele dobrych aplikacji, głównie na Windows, takich jak SuperOverlay, Arc2Earth i MapCruncher w połączeniu z CrunchUp2KML.

Jeśli chcesz zautomatyzować ten proces lub dodać funkcje do swojej aplikacji, skorzystaj z GDAL zapewniającego bogaty zestaw narzędzi do pracy z danymi rastrowymi i wektorowymi. W tym artykule omawiamy opcje wiersza poleceń. Biblioteki można też łatwo włączyć do własnych aplikacji. W tym samouczku będziesz używać narzędzi gdalinfo, gdal_translate, gdalwarp i gdal2tiles. Ostateczny wynik to supernakładka.

Kroki w wierszu poleceń

Aby korzystać z GDAL w wierszu poleceń, trzeba wykonać 6 kroków.

  1. Pobierz i zainstaluj GDAL
  2. Pobieranie obrazu
  3. Użyj gdalinfo, aby określić informacje o obrazie
  4. Użyj gdal_translate, aby określić lokalizację geograficzną obrazu
  5. gdalwarp pozwala zmienić odwzorowanie obrazu
  6. Użyj gdal2tiles, aby podzielić obraz na fragmenty i utworzyć powiązany kod KML

Krok 1. Pobierz i zainstaluj GDAL

Na początek pobierz i zainstaluj GDAL zgodnie z tymi instrukcjami.

Krok 2. Pobierz obraz

Możesz użyć dowolnego obrazu. Istnieje wiele źródeł danych geograficznych. Możesz użyć dowolnego z tych elementów, ale musisz znać granice szerokości i długości geograficznej każdego z rogów obrazu. Ten samouczek wykorzystuje obraz NASA Blue Marble, który można pobrać z witryny NASA. Te zdjęcia zostały zrobione w 2004 roku i przedstawiają piękny obraz Ziemi z kosmosu. Wybierz jeden z plików w prawym dolnym rogu paska nawigacyjnego.

Jeśli używasz własnego obrazu i wiesz, że jest on już georeceptowany, możesz przejść do kroku 5. W przeciwnym razie przejdź do kroku 3.

Krok 3. Uzyskaj informacje o obrazie

Po zainstalowaniu bibliotek GDAL i wybraniu obrazu musisz uzyskać pewne informacje na jego temat, aby można było z niego korzystać w odniesieniu do lokalizacji geograficznej. W szczególności potrzebujesz lokalizacji pikseli i linii każdego rogu obrazu. Jeśli wyobrazisz obraz w formie tabeli, z kolumnami i wierszami, piksele będą kolumnami, a wiersze –.

GDAL to przydatne narzędzie do zbierania tych informacji, gdalinfo. W wierszu poleceń wpisz gdalinfo filename, zastępując filename ścieżką do pliku. Dane wyjściowe powinny wyglądać tak:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

Ważne informacje w tym samouczku to linie w lewym górnym rogu, w lewym dolnym rogu, w prawym górnym rogu i w prawym dolnym rogu. Są to wartości pikseli i linii każdego rogu. W lewym górnym rogu znajduje się wartość 0,0, a prawy dolny – 21600 10800.

Krok 4. Dodaj geograficznie obraz

W tym przypadku tworzenie georeferencji oznacza tworzenie metadanych opisujących położenie geograficzne każdego z rogów obrazu. Na podstawie informacji uzyskanych w kroku 3 i gdal_translate możesz przypisać do pliku informacje georeferencyjne. Spowoduje to utworzenie pliku VRT z obrazu world_200401.jpg (bluemarble1.vrt). Pliki VRT to pliki XML zawierające informacje o konkretnej przekształceniu, w tym przypadku o kroku gdal_translate. Użyjesz go ponownie w następnym kroku, aby utworzyć końcowy zestaw kafelków. gdal_translate umożliwia wydawanie wielu typów plików wyjściowych, w tym głównych formatów plików graficznych. Użycie danych wyjściowych VRT pozwala odłożyć tworzenie plików wyjściowych do ostatniego kroku. Zwiększa to wydajność i skraca czas oczekiwania na poszczególne kroki, jeśli wykonujesz wiersz poleceń. Oto polecenie, które należy uruchomić:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

W tym wierszu znajduje się wiele informacji, więc zostanie przedstawiony w następującym rozdziale:

  • -of to format wyjściowy, w tym przypadku VRT.
  • -a_srs przypisuje do pliku system plików przestrzennych. Dzięki temu każda aplikacja korzystająca z koordynatora może zostać użyta. W tym przypadku jest to adres EPSG:4326, taki sam jak WGS84 – układ współrzędnych używany przez Google Earth.
  • -gcp (punkt kontrolny na poziomie terenu) przypisuje współrzędne do pozycji w pliku. W tym przypadku potrzebujesz tylko 3 punktów, ponieważ obraz jest prostokątny, więc 4 punkt można łatwo rozpoznać. W przypadku -gcp zdefiniuj GCP, ustawiając piksel, potem numer wiersza, a następnie długość i szerokość geograficzną. Każda z nich jest oddzielona spacją.
  • Ostatnie 2 parametry to plik źródłowy i docelowy.

Krok 5. Zwijaj obraz

Oryginalny obraz nie został utworzony dla okrągłej kuli ziemskiej, ale wygląda na płaską. W GIS jest to projekcja, co oznacza, że jest to dwuwymiarowe przedstawienie obiektu trójwymiarowego. Odwzorowanie wymaga zniekształcenia obrazu, tak aby wyglądał on tak, jak można oczekiwać płaskiego obrazu Ziemi.

Aby uzyskać prawidłowy wygląd, musisz zdjąć obraz, aby pasował do kuli ziemskiej. Na szczęście GDAL świetnie się do tego nadaje. Po prostu wpisz gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt. Spowoduje to utworzenie nowego pliku bluemarble2.vrt, który zawiera metadane dotyczące procesu zwijania.

Krok 6. Utwórz kafelki

Już prawie gotowe, ale ten czas potrwa dłużej. Aby utworzyć kafelki, wpisz gdal2tiles.py -p geodetic -k bluemarble2.vrt. Pole -k wymusza użycie danych wyjściowych w formacie KML. W ten sposób utworzysz strukturę katalogu z nakładką. Ponieważ każdy z tych plików trzeba utworzyć osobno, może to trochę potrwać. W przypadku dużych zdjęć możesz jeść, napić się kawy, wziąć drzemkę albo zamówić lekki posiłek. Gdy skończysz, otwórz doc.kml i obserwuj wyniki.

Podsumowanie

Ten samouczek pokazuje tylko możliwości GDAL, ale zapewnia wygodny mechanizm generowania kafelków. Podstawowe biblioteki GDAL są napisane w języku C++, ale zawierają powiązania dla Perl, Python, VB6, R, Ruby, Java oraz C#/.NET, co oznacza, że możesz łatwo umieścić GDAL we własnych aplikacjach. Poza tym wiele narzędzi, w tym gdal2tiles, jest napisanych w języku Python, co ułatwia ich integrację z aplikacjami w tym języku. gdal2tiles może też generować strony interfejsu API Map Google i Openwarstw.