Konwertowanie danych wektorowych GIS do formatu KML

Mano Marks, Google Geo APIs Team
Wrzesień 2009

Cel

Ten samouczek opisuje podstawy konwertowania danych wektorowych GIS na format KML za pomocą biblioteki open source OGR. Wprawdzie biblioteki te można stosować z większością plików GIS, ale w tym samouczku skupimy się na pracy z plikami kształtowymi ESRI.

Wprowadzenie

Dane geograficzne są dostępne w wielu postaci internetowych. KML to jeden z najpopularniejszych formatów plików, ale wykorzystujemy też wiele innych jego typów. Duże firmy, rządy i organizacje pozarządowe do tworzenia map przy użyciu systemów informacji geograficznych oraz specjalistycznych formatów plików. Te aplikacje często wymagają specjalistycznego szkolenia lub przynajmniej dużej ilości czasu na naukę. Te zastrzeżone mogą być dość kosztowne. Z drugiej strony są one bardzo wydajne i zapewniają bogaty zestaw narzędzi do tworzenia map dla profesjonalnych twórców map.

Wiele instytucji państwowych udostępnia część swoich danych GIS do użytku publicznego. Portale takie jak Data.gov, Massachusetts Geographic Information System czy DataSF ułatwiają znajdowanie danych dotyczących społeczności. W tym artykule opisano, jak konwertować dane wektorowe, tzn. złożone z prostych obiektów geometrycznych, takich jak punkty, linie czy wielokąty, do formatu KML. Zapewnia to dostęp do różnych typów danych, w tym:

  • Dane o punktach reprezentujące granice działek budowlanych
  • Dane dotyczące incydentów, np. raporty o przestępczości
  • Dane o granicach gmin, województw, hrabstw, prowincji itp.
  • Dane o drogach, w tym o planowanych i istniejących drogach
  • Pozwolenia na budowę, wraz ze zgodą na lokalizację
  • Dane zdrowotne, na przykład opis miejsca, w którym występują przypadki grypy

Istnieje wiele doskonałych aplikacji do konwersji danych, np. Google Earth Pro, shp2api, KML2KML, Arc2Earth i wiele innych. W tym artykule skupiono się na przekonwertowaniu danych wektorowych na format KML do użycia w Google Earth lub Mapach Google przy użyciu narzędzi open source Biblioteki danych absorpcyjnych geoprzestrzennych(GDAL) z poziomu wiersza poleceń. Być może zainspirowasz ich do wdrożenia tych bibliotek w swoich aplikacjach.

Uwaga dotycząca typów plików

W tym artykule opisujemy krok po kroku, jak konwertować kształty ESRI na pliki KML, ale możesz używać narzędzi GDAL (w szczególności OGR) do konwertowania plików różnych typów, w tym baz danych CSV i PostGRES/PostGIS oraz różnych innych formatów. Obsługiwane są większość głównych formatów danych. Jeśli znajdziesz format, który nie jest obsługiwany, możesz napisać sterownik OGR, ponieważ jest to biblioteka typu open source.

Pliki kształtów

Format ESRI jest jednym z najpopularniejszych formatów danych GIS. Choć z technicznego punktu widzenia plik .shp jest pojedynczym plikiem, nie można otworzyć samego pliku .shp. Wymaga on przynajmniej plików .dbf i .shx, a do różnych celów są też potrzebne inne pliki. Gdy oznaczamy odwołanie do pliku kształtu, prawie zawsze jest to zbiór plików, które zwykle są spakowane w archiwum. W dalszej części tego artykułu będziemy używać terminu shapefile.

Zawierają dużo informacji o regionach geograficznych, które opisują. Opisują one rzeczywistą geometrię, metadane geometrii oraz informacje o używanym systemie przestrzennym, a także o wielu innych aspektach danych. W tym artykule skupimy się na geometrii, metadanych i systemie referencyjnym przestrzennym.

Geometria i metadane to proste pojęcia. Geometria to punkty, linie i wielokąty, które można łatwo wyrazić w plikach KML. Metadane to dane o danych, często używane do filtrowania lub tworzenia zapytań. Na przykład linia opisująca drogę może zawierać metadane dotyczące jej typu (ulica miejska, droga krajowa, zakręt itp.), ograniczenia prędkości, jej właściciela, rozmiaru itp.

Systemy odniesień przestrzennych (SRS) służą do identyfikowania układów i odwzorowań używanych do tworzenia danych wektorowych. W plikach KML stosuje się szerokość i długość geograficzną w systemie WRS84. Są jednak inne sposoby na określenie współrzędnych na mapie. Do popularnych modeli należą m.in. Universal Merverseor, Brytyjska siatka sieciowa i samolot stanowy. Do przekonwertowania danych na format KML może być konieczne rozpoznanie tych informacji. KML obsługuje tylko standard WGS84. Zwykle pliki kształtów mają te informacje wraz z plikami, często w formacie .prj, a system OGR może je wykryć. Czasami jednak konieczne jest określenie identyfikatora SRS. Czasami są one przekazywane w jakimś formacie przez źródło danych: na stronie, z której je pobierasz, w dokumencie Readme z plikiem pobranym lub w innym formacie. W zupełności wystarczy. W witrynie Materiały referencyjne znajdują się dodatkowe informacje o RSD, a także plik referencyjny umożliwiający wyszukiwanie poszczególnych systemów referencyjnych.

ogr2ogr

GDAL oferuje potężny zestaw bibliotek do pracy z danymi wektorowymi. ogr2ogr to zaawansowane narzędzie, które służy do konwersji danych. Wiele z nich, w tym wspomniane powyżej, obsługuje GDAL/OGR.

Na początek pobierz i zainstaluj GDAL. Potrzebujesz pliku kształt. Na potrzeby tego samouczka spróbuj użyć kodu z DataSF. W przykładzie poniżej użyto pliku kształtu realtor_neighborhoods, który można uzyskać po zaakceptowaniu licencji, tutaj. Po pobraniu pliku rozpakuj go do katalogu, który łatwo zapamiętasz. Otwórz wiersz poleceń i przejdź do katalogu, w którym znajdują się dane. Teraz zaczyna się najciekawsza część.

Polecenia ogr2ogr można łatwo używać z poziomu wiersza poleceń. Oto jak przekonwertować plik realtor_neighborhoods z pliku kształtu na format KML:

ogr2ogr -f "KML" -where "NBRHOOD='Telegraph Hill'" realtor_neighborhoods.kml realtor_neighborhoods.shp

Oto zestawienie tych poleceń:

  • ogr2ogr: jest to podstawowe polecenie.
  • -f "KML: ustawia format wyjściowy na KML.
  • -where "NBRHOOD='Telegraph Hill'": jest to opcjonalna klauzula where, jak w SQL. Zasadniczo pozwala tworzyć zapytania dotyczące danych na podstawie metadanych. Współpracuje z plikami kształtów i innymi typami plików, które obsługują zapytania. W tym przypadku wysyłasz zapytanie o pole NBRHOOD i wybierasz tylko te funkcje, które mają wartość NBRHOOD firmy Telegraph Hill. Jeśli pozostawisz ten parametr wyłączony, ogr2ogr wyświetli każdy wielokąt dzielnicy.
  • realtor_neighborhoods.kml: jest to nazwa pliku wyjściowego. Nazwa pliku wyjściowego jest na początku.
  • realtor_neighborhoods.shp: jest to nazwa pliku wejściowego. Plik .shp reprezentuje cały plik kształtu.

To wszystko. To polecenie zapisuje plik KML, który wygląda tak:

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document><Folder><name>realtor_neighborhoods</name>
    <Schema name="realtor_neighborhoods" id="realtor_neighborhoods">
      <SimpleField name="Name" type="string"></SimpleField>
      <SimpleField name="Description" type="string"></SimpleField>
      <SimpleField name="OBJECTID" type="float"></SimpleField>
      <SimpleField name="NBRHOOD" type="string"></SimpleField>
      <SimpleField name="SFAR_DISTR" type="string"></SimpleField>
    </Schema>
    <Placemark>
      <ExtendedData><SchemaData schemaUrl="#realtor_neighborhoods">
        <SimpleData name="OBJECTID">81</SimpleData>
        <SimpleData name="NBRHOOD">Telegraph Hill</SimpleData>
        <SimpleData name="SFAR_DISTR">District 8 - Northeast</SimpleData>
      </SchemaData></ExtendedData>
      <Polygon><outerBoundaryIs><LinearRing><coordinates>-122.41041847319012,37.805924016582715,0 -122.407203813674,37.806324902060979,0 -122.40667792852096,37.803710121958744,0 -122.40348255423899,37.804117462290641,0 -122.40237202127015,37.798540648764529,0 -122.40876046662795,37.797723222540775,0 -122.41041847319012,37.805924016582715,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
      <Style><LineStyle><color>ff0000ff</color></LineStyle>  <PolyStyle><fill>0</fill></PolyStyle></Style>
    </Placemark>
  </Folder></Document></kml>

Widać, że metadane z pliku kształtu zostały zachowane w elementach Schema i SimpleData. Aby dowiedzieć się więcej o korzystaniu z ExtendedData i zachowaniu danych niestandardowych, przeczytaj sekcję w podręczniku programisty KML o dodawaniu danych niestandardowych.

Co dalej?

GDAL/OGR daje ogromne możliwości. Najprostsza implementacja pozwala teraz przekonwertować wszystkie dane na format KML w celu użycia w programie Google Earth, Mapach Google lub dowolnej innej przeglądarce geograficznej obsługującej format KML. Co więcej, możesz stosować w swoich aplikacjach biblioteki GDAL/OGR, automatyzując konwertowanie danych GIS na format KML i kontrolując dane wyjściowe tych konwersji. Połącz go z narzędziem lib KML, aby uzyskać jeszcze większą kontrolę nad generowaniem plików KML.