KML をシェープファイルに変換する方法(QGIS・ogr2ogr・オンライン)
KML をシェープファイルに変換するには、QGIS で KML を開き、レイヤーを右クリックして「エクスポート」>「新規ファイルに地物を保存」を選び、ESRI Shapefile を指定します。コマンドラインでは、ジオメトリの種類ごとに ogr2ogr -f "ESRI Shapefile" を実行します。FileReshape の変換ツールなら、ファイルはアップロードされずブラウザー内で変換され、ポイント、ライン、ポリゴンが分けられ、.prj と .cpg も付きます。
KML がシェープファイルになるときに変わること
Google Earth や Google マイマップの形式である KML と、シェープファイルとでは、地理データの保存のしかたが大きく異なります。どの方法で変換しても、同じ違いに対処しなければなりません。あらかじめ知っておけば、変換結果に驚かずに済みます。
ファイルごとにジオメトリの種類は1つ。KML ファイルでは、1つのフォルダーにポイント、ライン、ポリゴンを混在させられます。シェープファイルに入れられるジオメトリの種類は1つだけなので、種類が混在した KML は、種類ごとに1つずつ、複数のシェープファイルにする必要があります。
短いフィールド名。.dbf の属性テーブルではフィールド名は10文字までなので、Description は Descriptio になります。長い HTML の説明など、254文字を超えるテキストの値は切り捨てられます。
スタイルはなくなる。色、線の太さ、アイコンは KML には含まれますが、シェープファイルには含まれないため失われます。スタイルが重要な場合は、GIS ソフトで設定し直す必要があります。
座標系。KML は常に WGS84 の経度・緯度です。シェープファイルは、そのことを示す .prj ファイルを付けて WGS84 のままにすることも、距離や面積をメートルで扱う必要があれば UTM ゾーンなどの座標系に投影変換することもできます。また、シェープファイルでは .shp、.shx、.dbf の各ファイルをまとめて保管する必要があり、.cpg ファイルがソフトに文字コードを伝えます。
QGIS で KML をシェープファイルに変換する
QGIS は無料のオープンソース ソフトで、GDAL を通じて KML を読み込みます。データの確認、編集、スタイルの再設定、投影変換もあわせて行いたい場合に最適です。KML に複数のフォルダーがある場合やジオメトリの種類が混在している場合、QGIS はそれらを別々のレイヤーとして一覧表示するダイアログを出すことがあります。必要なものを追加して、それぞれをエクスポートしてください。
「ベクタレイヤを名前を付けて保存」(Save Vector Layer as)ダイアログでは、出力の座標系と文字コードも設定できます。é、ø、ü などの文字を含む名前が崩れないよう、UTF-8 を選んでください。KML にポイント、ライン、ポリゴンがあった場合は、レイヤーごとにエクスポートを繰り返します。
- QGIS を開き、.kml ファイルを地図にドラッグするか、「レイヤ」>「レイヤを追加」>「ベクタレイヤを追加」(Layer > Add Layer > Add Vector Layer)を使います。
- 「レイヤ」パネルでレイヤーを右クリックし、「エクスポート」>「新規ファイルに地物を保存」(Export > Save Features As)を選びます。
- 「形式」(Format)を ESRI Shapefile にし、ファイル名を決め、必要であれば別の座標系(CRS)を選びます。
- 「OK」をクリックし、新しいシェープファイルのレイヤーとその属性テーブルを確認します。
ogr2ogr で KML をシェープファイルに変換する
ogr2ogr は GDAL のコマンドライン変換ツールです。大きなファイル、多数の KML ファイルの一括処理、スクリプトでの利用に向いています。まず ogrinfo で KML にどのレイヤーがあるかを確認しましょう。GDAL の KML ドライバーでは、通常、KML の各フォルダーが1つのレイヤーとして読み込まれます。
シェープファイルに入れられるジオメトリの種類は1つだけなので、種類ごとに別のシェープファイルに書き出します。OGR SQL の特殊フィールド OGR_GEOMETRY を使うと、-where または -sql で種類を絞り込めます。-nlt オプションは出力レイヤーのジオメトリの種類を指定するもので、1つのレイヤーにシングルパートとマルチパートのラインやポリゴンが混在している場合は -nlt PROMOTE_TO_MULTI が便利です。絞り込みをしないと、シェープファイルは最初のフィーチャーの種類になり、ほかの種類のフィーチャーでエラーが発生します。
ExtendedData のフィールドが列になるかどうかは、お使いの GDAL ビルドの KML ドライバーによって異なります。LIBKML ドライバーはこれを読み込みます。どのドライバーがあるかは ogrinfo --formats で確認できます。ウェブサーバー上の KML を指すネットワークリンクは、先にダウンロードしてローカルの KML として保存しておくのが確実です。
# List the layers (folders) and their geometry types
ogrinfo -so -al places.kml
# One shapefile per geometry type
ogr2ogr -f "ESRI Shapefile" places_points.shp places.kml -where "OGR_GEOMETRY='POINT' OR OGR_GEOMETRY='MULTIPOINT'" -explodecollections -nlt POINT -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_lines.shp places.kml -where "OGR_GEOMETRY='LINESTRING' OR OGR_GEOMETRY='MULTILINESTRING'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_polygons.shp places.kml -where "OGR_GEOMETRY='POLYGON' OR OGR_GEOMETRY='MULTIPOLYGON'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
# Optional: reproject to UTM zone 33N instead of keeping WGS84
ogr2ogr -f "ESRI Shapefile" -t_srs EPSG:32633 places_utm.shp places_points.shpFileReshape でオンラインで KML をシェープファイルに変換する
FileReshape の「KML を SHP(シェープファイル)に変換」は、同じ作業をソフトのインストールなしにブラウザー内で行います。ウェブ用にコンパイルされた GDAL を使い、KML はお使いのディスクから読み込まれてアップロードされないため、顧客のデータにも安心して使えます。変換結果は、シェープファイルごとに .shp、.shx、.dbf、.prj、.cpg ファイルを含む .zip です。
よくある問題には、変換ツールが対処します。ポイント、ライン、ポリゴンは Sights_points.shp や Routes_lines.shp のように別々のシェープファイルに書き出され、KML の各フォルダーはフォルダー名を付けた別のシェープファイルになります。フィールド名は10文字に短縮されます。初期設定では出力は .prj ファイル付きの WGS84 のままですが、UTM ゾーンなど別の座標系も選べます。高度は 3D のシェープファイルとして保持されます。属性テーブルは UTF-8 で書き出され、対応する .cpg ファイルが付きます。
制限も知っておきましょう。色やアイコンは引き継がれません。プレイスマークの名前と説明は残りますが、KML の ExtendedData として保存された追加のフィールドは、ブラウザー版の GDAL では読み込まれません。ウェブ上のデータを指すネットワークリンクはたどらず、スキップした件数が表示されます。KMZ の場合は、先に「KMZ を KML に変換」で KML を取り出してください。サイズの上限はブラウザーのメモリで決まり、通常は 200 MB 程度までのファイルなら問題ありません。
- 「KML を SHP(シェープファイル)に変換」を開き、.kml ファイルをドロップするか、クリックして選択します。
- 必要に応じて「出力の座標系」に UTM ゾーンなどの座標系を指定します。
- 「シェープファイルに変換」をクリックしてシェープファイルを含む .zip をダウンロードし、展開して .shp ファイルを GIS ソフトに追加します。
どの方法を選べばよいか
ほかの人に送ったり別のソフトで開いたりするためにシェープファイルが1つ必要なだけなら、ブラウザーの変換ツールを使いましょう。結果を地図で確認したい、属性を編集したい、スタイルを作り直したい、ExtendedData のフィールドを残したい場合は QGIS が適しています。非常に大きなファイル、多数のファイルの一括変換、自動化したワークフローには ogr2ogr を使いましょう。受け取る側が GeoPackage でもよい場合は、そちらも検討してください。フィールド名の10文字制限がなく、1つのファイルに複数のレイヤーを入れられます。
よくある質問
1つの KML から複数のシェープファイルができるのはなぜですか?
シェープファイルに保存できるジオメトリの種類は1つだけです。KML にポイント、ライン、ポリゴンが混在している場合や、複数のフォルダーがある場合は、データが失われないよう、種類やフォルダーごとに別のシェープファイルになります。
Google Earth の色やアイコンは残りますか?
いいえ。シェープファイルにはスタイルを保存する場所がないため、どの方法でも色、線の太さ、アイコンは失われます。QGIS などの GIS ソフトでレイヤーのスタイルを設定し直してください。
KMZ ファイルをシェープファイルに変換できますか?
はい。KMZ は KML を zip 圧縮したものです。QGIS と ogr2ogr は通常そのまま読み込めます。FileReshape では、先に「KMZ を KML に変換」を使い、その KML をシェープファイルに変換してください。
FileReshape でオンライン変換すると、KML はアップロードされますか?
いいえ。変換はブラウザー内で行われ、ファイルはお使いのパソコンから出ません。
Description フィールドが Descriptio になるのはなぜですか?
シェープファイルのフィールド名は .dbf 形式によって10文字に制限されているため、長い名前は切り詰められます。変換前にフィールド名を変更するか、長い名前が重要な場合は GeoPackage を使ってください。