GDALを使ってGoogle Fusion Tablesにshpファイルを保存する方法

gdal1.9devでgoogle fusion tables(GFT)を使えるようになったようです。→http://www.gdal.org/ogr/drv_gft.html
ただ、OSGeo4Wでは、まだgdal1.9devを使えないので、自分でgdal1.9devをコンパイルする方法と、そのGDALを使って、GFTにshpファイルを保存する方法を紹介します。

「本データの作成に当たっては、ESRIジャパン株式会社の全国市区町村界データを使用しました。本データの著作権ESRIジャパン株式会社に帰属します。」

1.subversionでgdal1.9devを取ってくる

svn checkout https://svn.osgeo.org/gdal/trunk/gdal gdal

2.curlを取ってくる

curlは、google fusion tables APIhttpsで利用するときにgdal(ogr)内で使用されます。
http://curl.haxx.se/download/libcurl-7.19.3-win32-ssl-msvc.zip
解凍してC:\curl-7.19.3に入れる

3.libiconvを取ってくる

libiconvは、shpファイルなどの属性がSJISなのを、UTF-8に変換するときにgdal(ogr)内で使用されます。
http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/libiconv-1.9.2-1-lib.zip/download?use_mirror=jaist&download=

解凍してC:\Program Files\GnuWin32に入れる

4.gdalのnmake.optの編集

gdal\nmake.optを以下のように変更

# Uncomment to use libcurl (DLL by default)
# The cURL library is used for WCS, WMS, GeoJSON, SRS call importFromUrl(), etc.
CURL_DIR=C:\curl-7.19.3
CURL_INC = -I$(CURL_DIR)/include
# Uncoment following line to use libcurl as dynamic library
CURL_LIB = $(CURL_DIR)/libcurl_imp.lib wsock32.lib wldap32.lib winmm.lib
# Uncoment following two lines to use libcurl as static library
#CURL_LIB = $(CURL_DIR)/libcurl.lib wsock32.lib wldap32.lib winmm.lib
#CURL_CFLAGS = -DCURL_STATICLIB
# Uncomment to build with libiconv library to support extended character
# recoding capabilities. GDAL's internal stub implementation supports
# latin1<->utf-8 translations only.
# Depending on your libiconv build you may need to set ICONV_CONST macro to
# const or leave it empty. Take a look on your iconv() declaration in iconv.h.
# If the second parameter declared as const char** then you need to define
# ICONV_CONST=const otherwise leave it empty.
LIBICONV_DIR = "C:\Program Files\GnuWin32"
LIBICONV_INCLUDE = -I$(LIBICONV_DIR)\include
LIBICONV_LIBRARY = $(LIBICONV_DIR)\lib\libiconv.lib
LIBICONV_CFLAGS = -DICONV_CONST=const

5.gdalのコンパイル&インストール

私の場合はVC .NET 2003を使用

nmake -f makefile.vc
nmake -f makefile.vc install

6.curlのdllをコピー

C:\curl-7.19.3\curllib.dll,openldap.dllをC:\warmerda\bld\binにコピー

7.libiconvのdllをコピー

http://gnuwin32.sourceforge.net/downlinks/libiconv-bin-zip.php
解凍して、libiconv2.dllをC:\warmerda\bld\binにコピー

8.projをダウンロード

projを取ってきて、proj.dllをC:\warmerda\bld\binにコピー
http://download.osgeo.org/proj/proj446_win32_bin.zip

9.GDAL_DATAをセット

コマンドプロンプト

set GDAL_DATA=C:\warmerda\bld\data

10.動作確認

ogrinfo -ro "GFT:email=hogehoge@gmail.com password=hogehoge"

shpファイルをgoogle fusion tablesに保存してみる

日本地図のデータを取ってきて、http://www.okada.jp.org/RWiki/?ShapeFile%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA
以下コマンド

ogr2ogr epsg:4326 -f GFT "GFT:email=hogehoge@gmail.com password=hogehoge" japank.shp

出来上がり↓
http://www.google.com/fusiontables/DataSource?snapid=S190141TGCX
「本データの作成に当たっては、ESRIジャパン株式会社の全国市区町村界データを使用しました。本データの著作権ESRIジャパン株式会社に帰属します。」

補足

データが多すぎで、↓のエラーが出る場合は、kmlに変換してからgoogle fusion tablesで直接インポート

ERROR 1: HTTP error code : 500
ERROR 1: HTML error page returned by server
ERROR 1: CommitTransaction failed
ogr2ogr -f KML japank.kml japank.shp

感想ほか

  • google fusion tables(GFT)をPostGIS的に利用できるのかも。
  • 使い道の可能性が、結構あるよう気がする、、、でも、思った程、無いような気もする。←どっち?
  • GFTにポリゴンデータを入れて地図表示させると、しばらく変換作業が行われる。

(サーバー側で、ラスターに変換(タイル化)してるっぽいけど、さすがgoogleマシンは早い!)

  • 地図に重ねて見るだけだったら、kmlに変換してgoogle earthで見た方が楽だったり。
  • GFTをiphoneアプリのためのジオデータベースに利用できるといいな。