GIS ベクターデータを KML に変換する

Mano Marks、Google Geo API チーム
2009 年 9 月

目的

このチュートリアルでは、OGR オープンソース ライブラリを使用して GIS ベクターデータを KML に変換する基本的な方法について説明します。これらのライブラリはほとんどの GIS ファイルで使用できますが、このチュートリアルでは ESRI シェープファイルの操作に焦点を当てます。

はじめに

地理データはウェブ上のさまざまな形式で入手できます。KML は一般的なファイル形式の 1 つですが、他にもさまざまなファイル形式が使用されます。大企業、政府機関、NGO は、地理情報システムを使用して地図を作成し、特殊なファイル形式を使用します。このようなアプリケーションを使用するには、多くの場合、専門的なトレーニングや、かなりの学習時間が必要です。独自仕様では高額な場合があります。その一方で、これらは非常に強力で、プロのマッパー向けの豊富なマッピング ツールを提供しています。

多くの政府機関が、GIS データの一部を一般公開しています。Data.govマサチューセッツ地理情報システムDataSF などのポータルでは、コミュニティのデータを簡単に見つけることができます。この記事では、ポイント、ライン、ポリゴンなどの単純なジオメトリで構成されるベクターデータを KML に変換する方法について説明します。これにより、以下のようなさまざまな種類のデータにアクセスできるようになります。

  • 建物内の区画の境界を表す土地区画データ
  • 犯罪報告などのインシデント データ
  • 地方自治体、都道府県、郡などの境界の境界データ
  • 道路データ(計画された道路と既存の道路を含む)
  • 許可証が発行されたことを示す建設許可証
  • 健康に関するデータ(インフルエンザの大流行がある場所を説明するなど)

Google Earth プロshp2kmlKML2KMLArc2Earth など、データ変換に最適なアプリケーションが多数あります。この記事では、オープンソースの Geospatial Data Abstraction Library(GDAL)ユーティリティを使って、ベクター データを KML に変換して Google Earth や Google マップで使用できるようにする方法を紹介します。これらのライブラリを独自のアプリケーションに組み込むことをおすすめします。

ファイル形式に関する注意事項

この記事では、ESRI shapefiles を KML に変換する際の手順を説明しますが、GDAL ユーティリティ(特に OGR)を使用すると、CSV データベース、PostGRES/PostGIS データベース、さまざまな各種形式など、さまざまなファイル形式から変換できます。一般的なデータ形式のほとんどがサポートされています。サポートされていない形式を見つけた場合は、OGR 用のドライバを作成できます。これはオープンソース ライブラリであるためです。

シェイプファイル

ESRI では一般的な GIS ファイル形式が最も一般的な GIS データ形式の一つです。シェイプファイルは拡張子が .shp の単一のファイルですが、.shp を単独で開くことはできません。少なくとも .dbf ファイルと .shx ファイルが必要です。また、他にもさまざまな目的のためにさまざまなファイルが必要です。そのため、ほとんどの場合、シェイプファイルへの参照は複数のファイルで構成されることを意味します。通常はアーカイブしてなんらかの形に整理します。この記事ではこれ以降「シェイプファイル」という用語を使用します。

シェイプファイルには、記述された地域に関する情報が数多く含まれています。それらのファイルには、実際のジオメトリ、ジオメトリに関するメタデータ、使用した空間参照システムに関する情報など、データの多くの側面が記載されています。この記事では、ジオメトリ、メタデータ、空間参照システムについて詳細に説明します。

ジオメトリとメタデータは簡単なコンセプトです。ジオメトリはポイント、ライン、ポリゴンであり、KML で簡単に表現できます。メタデータとは、データに関するデータで、フィルタリングやクエリのためによく使用されます。たとえば、道路を表すラインには、道路の種類(市道、国道、ターンバイバイクなど)、制限速度、道路の利用者、サイズなどに関するメタデータが含まれることがあります。

空間参照システム(SRS)は、ベクトルデータの作成に使用する座標系と投影を識別するために使用されます。KML では、WGS84 座標系で緯度と経度が使用されます。ただし、地図上の座標を特定する方法は他にもあります。人気のあるシステムには、ユニバーサル横断型メルカトル図法英国国家グリッド状態プレーン システムなどがあります。データを KML に変換するには、その情報を特定しなければならない場合があります。KML は WGS84 のみに対応しています。一般的に、シェープファイルはその情報とともに .prj ファイルに保持され、OGR ではそこから検知できます。ただし、SRS の識別が必要になる場合もあります。こうしたデータソースは、ダウンロード元のページ、ダウンロードの readme ドキュメント、その他の形式で、データソースによって提供されることがあります。通常はこれで十分です。サイト Spatial Reference には SRS について詳しく記載されており、個々の参照システムを検索できるリファレンスも用意されています。

ogr2ogr

GDAL は、ベクトルデータを操作するための強力なライブラリ セットを提供しています。特に、ogr2ogr はデータ変換のための強力なユーティリティです。前述のアプリケーションを含め、多くのアプリケーションには GDAL/OGR が組み込まれています。

まず、GDAL をダウンロードしてインストールします。次に、シェイプファイルが必要です。このチュートリアルでは、DataSF のものを使用します。以下の例では realtor_neighborhoods シェイプファイルを使用しています。このライセンスは、こちらのライセンスに同意してから取得できます。ファイルをダウンロードしたら、覚えているディレクトリに解凍します。コマンドラインを開き、データが存在するディレクトリに移動します。次は、

ogr2ogr はコマンドラインから簡単に使用できます。realtor_neighborhoods をシェイプファイルから KML に変換する方法は次のとおりです。

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

コマンドの詳細は次のとおりです。

  • ogr2ogr: コアコマンド。
  • -f "KML: 出力形式を KML に設定します。
  • -where "NBRHOOD='Telegraph Hill'": SQL と同様に、オプションの where 句です。基本的には、メタデータに基づいてデータをクエリできる。クエリに対応している、シェイプファイルやその他のファイル形式で動作します。この例では、NBRHOOD フィールドをクエリし、NBRHOOD の Telegraph Hill を持つ特徴のみを選択しています。このパラメータをオフにすると、ogr2ogr がすべての周辺ポリゴンを返します。
  • realtor_neighborhoods.kml: 出力ファイル名。出力ファイル名が先頭になります。
  • realtor_neighborhoods.shp: 入力ファイル名。.shp ファイルはシェイプファイル全体を表します。

手順はこれだけです。このコマンドを実行すると、次のような KML ファイルが作成されます。

<?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>

Schema 要素と SimpleData 要素から、シェイプファイルのメタデータが保持されていることが確認できます。ExtendedData の使用とカスタムデータの保存について詳しくは、KML デベロッパー ガイドのカスタムデータの追加に関するセクションをご覧ください。

次のステップ

GDAL/OGR は莫大な電力を供給します。最も簡単な実装では、すべてのデータを KML に変換して、Google Earth、マップ、その他の KML 対応地理ブラウザで使用できます。さらに、GDAL/OGR ライブラリをアプリに組み込むことで、GIS データの KML への変換を自動化し、その変換の出力を制御できます。libkml と組み合わせて、KML 生成をプログラムでより細かく制御してみましょう。