2012年09月30日

基盤地図対応GDAL/OGRの使い方

FaceBookで質問を受けたけど、自分でも忘れていたのでメモ。

OsGeo.jpのWebサイトで、基盤地図情報を扱えるGDAL/OGRのバイナリが公開されています。
http://www.osgeo.jp/foss4g-mext/
このシステムを使用すると、基盤地図情報のJPGIS形式のXMLファイルを一括でShapefileやGeotiffに変換したり、QGISで直接基盤地図情報が読み込めたりします。

使い方は、「基盤地図対応GDAL/OGR」の「バイナリ」をクリックし、Zipファイルをダウンロードします。
解凍した「mext_gdal」フォルダをCドライブの直下に置くだけです。

しかし、このままだと使い方がよくわかりませんね。
なので、こちらのサイトが参考になります。
このサイトはOpenStreetMapの作成に基盤地図情報を利用するための解説ページですが、こちらも「基盤地図対応GDAL/OGR」を使用しています。

ページ中段の「GDAL/OGRのダウンロード」で「QGIS_MEXT.zip」をダウンロードし、解凍した「QGIS_MEXT」フォルダをCドライブの直下に置きます。
Image 2012_09_29_234708.jpg
なぜCドライブの直下に置くかというと、処理を実行するためのバッチファイル(.bat)の中に記載されているシステムの場所が、「C:\QGIS_MEXT\mext_gdal」となっているためです。

「QGIS_MEXT」フォルダの中には、「road2shp2tiff_wgs84.bat」と「xml2tif.bat」の2つのバッチファイルが入っています。
下画像のリンクをクリックし、「road2shp2tiff_wgs84.bat」をダウンロードして、「QGIS_MEXT」のフォルダに移動します。
Image 2012_10_06_213055.jpg

「road2shp2tiff_wgs84.bat」は、基盤地図情報のXMLファイルをShapefileに変換します。そしてGeoTiffファイルも作成します。
「xml2tif.bat」は基盤地図情報の標高DEMをGeoTiffファイルに変換します。

このまま使うと、ものすごい時間がかかる場合があるので、すこし編集します。
バッチファイルを右クリックし、「編集」でテキストエディタで開きます。
Geotiffファイルを作る命令の「gdal_rasterize -tr 0.00001 0.00001 -ot byte -burn 0 -init 255 shp1.shp shp1.tif」の「0.00001 0.00001」を「100 100」に変更します。
Image 2012_09_30_000647.jpg
この部分は、tiffファイルの1ピクセルを何mにするかの設定です。ちなみに北海道の行政界を1ピクセル=100mで作成すると、14MB程度でした。
この部分は、地図の大きさによって、適宜調整してください。

基盤地図情報を「JPGIS形式」でダウンロードし、1つのShapefileにしたい場合は、1つのフォルダにまとめます。
(「JPGIS(GML)形式は変換できませんので、必ず「JPGIS形式」で行なってください。)
ベクタデータの場合は、「road2shp2tiff_wgs84.bat」のバッチファイルを、まとめたXMLファイルと同じフォルダにコピーし、ダブルクリックで変換が始まります。

変換されたShapefileとGeotiffファイルをQGISなどで開いて確認してみてください。

<バッチファイルの中身の説明>
バッチファイルの中身は、次のような命令が記載されています。

set ROOTDIR=C:\QGIS_MEXT\mext_gdal
↑ここはGDALシステムのあるフォルダを指定しています。
set GDAL_DATA=%ROOTDIR%\bin\data
set PATH=%ROOTDIR%\lib;%ROOTDIR%\bin;%PATH%
↑ここは特にイジる必要はありません。

for %%i in (*.xml) do ogr2ogr -f "ESRI Shapefile" -lco "ENCODING=UTF-8" -t_srs "EPSG:4326" %%i.shp %%i
↑ここは、フォルダ内のXMLファイルをすべてShapeFileに変換する命令です。
「ENCODING=CP932」とすると、属性データの文字コードがShift-JISになります。
「EPSG:」で変換後の測地系を設定できます。例えば平面直角座標系JGD2000の12系なら「EPSG:2454」とします。これはQGISの座標参照系と同じですので、番号はQGISで確認するといいと思います。

for %%i in (*.shp) do ogr2ogr -append shp1.shp %%i
↑一つ上の命令で作成した個別のShapefileを結合して、「Shp1.shp」として保存します。
ファイル名は自由に設定できます。

gdal_rasterize -tr 100 100 -ot byte -burn 0 -init 255 shp1.shp shp1.tif
↑作成した「Shp1.shp」を「Shp1.tif」というGeotiffファイルで保存します。
「-tr」のあとの数字は、1ピクセルを何mにするかという設定です。あまり小さくすると、ものすごい大きなファイルができるので注意してください。
Geotiffファイルを作成する必要がない場合には、命令の先頭に「#」を入力するとコメントになりますので、命令が実行されません。
たまにtiffファイルが作成されない場合があります。(原因不明)

例えば、文字コードShift-JISで、平面直角座標系JGD200の12系でShapefileを作成し、Geotiffファイルが不要な場合には、次のように命令を記載します。
set ROOTDIR=C:\QGIS_MEXT\mext_gdal
set GDAL_DATA=%ROOTDIR%\bin\data
set PATH=%ROOTDIR%\lib;%ROOTDIR%\bin;%PATH%

for %%i in (*.xml) do ogr2ogr -f "ESRI Shapefile" -lco "ENCODING=CP932" -t_srs "EPSG:2454" %%i.shp %%i
for %%i in (*.shp) do ogr2ogr -append shp1_JGD2000_12.shp %%i
#gdal_rasterize -tr 50 50 -ot byte -burn 0 -init 255 shp1_JGD2000_12.shp shp1_JGD2000_12.tif


=====================================
また、このパッケージには、基盤地図情報を直接読み込めるQGISも付属しています。
「C:\QGIS_MEXT\mext_gdal」の中の「qgis1.9.bat」をダブルクリックすると、QGISが開きます。
開かない場合には、バッチファイルの中のシステムフォルダの場所が「set ROOTDIR=C:\QGIS_MEXT\mext_gdal」となっているか確認してください。

QGISで基盤地図情報を直接読み込むと、処理が遅いのであまり実用的ではないなという感想です。
パワーのあるパソコンならいいのかもしれません。
posted by kouichi at 00:32| Comment(1) | GISその他 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
こんにちは。わかりやすい解説を作って頂き,ありがとうございます!

kitaさんはおわかりだと思うのですが,ちょっとコメントを。

「gdal_rasterize -tr 0.00001 0.00001」の「0.00001 0.00001」はご指摘の通り作成したGeoTiff画像の解像度です。このバッチプログラム,初期の設定では変換後の座標系が「EPSG:4326」つまりWGS84の緯度経度になっているので,解像度も度で計算されています。つまる,「0.00001」度で,およそ南北方向で1mぐらいになります。

解説にあるように,ogr2ogr の「-t_srs "EPSG:4326" 」を「EPSG:2454」に変えて頂くと,平面直行座標系(単位がメートル)になるので,「-tr 100 100」とすると解像度100mのGeoTiff画像ができる事になります。

もしもEPSG:4326のままshpに変換し,「-tr 100 100」にすると解像度が100mではなく100度の画像ができる事になります。

参考までに。
Posted by いわさき at 2012年10月08日 12:50
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: