AppSheetのマップで使えるKMLを作る
AppSheetのマップビューでは実はKMLが利用できます。Google Earthで利用する為に作成されたファイル形式ですが、ピンデータだけじゃなくポリゴンやラインといったものも含められる為、地理情報に厚みを追加することができる優れた機能ですが、ちょっと制限が強めであるため、AppSheetで使えるKMLについて作成方法をまとめました。
目次
今回利用するツール
本項目では、以下のようなAppSheetで使えるKMLを作成するのを目的としていますが、かなり制約が強い為、例えばShapefileからKMLに変換して利用する「ハザードマップ」や「洪水氾濫エリアマップ」などを構築したい場合、結構苦労します。AppSheetでは以下のエントリーの項目で利用しています。
図:デジタル台風のKMLをロードしてみた
図:洪水マップデータを追加してみた
AppSheetでKMLを利用する
公開されてるKMLを読み込んでみる
自分の作ってるAppSheetアプリに対してKMLを読み込ませるのはそこまで難しいものではありません。今回は「デジタル台風」で公開されてる現在発生中の台風およびその予想ルートに関するピンデータをロードしてみたいと思います。
- デジタル台風サイトを開き、現在発生中の台風情報+静止気象衛星画像にあるアニメーション無しのKMLのURLのリンクをコピーする
- 自分のAppSheetアプリでマップビューの土台になってるテーブルを開く
- 緯度経度(LatLon型のフィールド)の左隣の鉛筆アイコンをクリックする
- Type Detailsを開く
- Optional Url for KML Fileの欄に、1.のコピーしたURLを入れる
- 上にあるDoneボタンをクリック
- 右上のSAVEをクリックして保存する。
すると、マップビューを開くと、現在のマップ上に「台風の雲の画像+現在発生中の台風のGPS情報」がマッピングされます。デジタル台風さんのオーバーレイ画像は透過率の設定がされていないので、マップ上に全面に画像が出てしまうのでアレですが、見事に画像オーバーレイとピンデータをKML経由でロードすることが出来ました。
図:このリンクのKMLが必要
図:ここから編集する
図:KMLのURLを入れる
図:オーバーレイされる
AppSheet上のKMLの制約事項
AppSheetの公式ドキュメント上にKMLの制約事項についてはまとめられているものの、自分からするとちょっと情報が薄い。自身が今回使ってみての結果を含めると制約事項は以下のようになる。
- ZIP圧縮されたKMZ形式の場合は、ファイルサイズは最大3MBまで
- 非圧縮のKML形式の場合は、ファイルサイズは最大10MBまで
- ネットワークリンクは1つのファイルの中で最大10個まで
- ただしこのネットワークリンクはマップを移動して緯度経度情報を送れないので、そういったタイプのネットワークリンクは動作しない。
- ピンの数は最大で1000個まで
- KMLの中のオーバーレイなどのレイヤ数は最大20個まで。
- この画像オーバーレイは通常の画像オーバーレイだけじゃなく、画面固定のスクリーンオーバーレイも使える(凡例などで使える)
この画像サイズを収めるというのが結構大変で、特にポリゴンデータはサイズが肥大化しがち。ハザードマップなどで公開されてるShapefileやGeoJSONファイルを加工する場合、平気で数十MB超えるのでどうにか加工しないと難しい。
KMLを作成してみる
KMLファイルを作るといっても、XML形式のこのファイルを手打ちで作成するのは非常に大変なので、今回は都道府県で公開されてるShapefileを加工して、KMLに変換して利用します。過去にGASでKMLを生成するというものは以下のエントリーで作っています。
Shapefileを手に入れる
ShapefileとはESRIというGISの大手企業が制定したファイルフォーマットで、色々なGISと呼ばれる地理情報を扱うどちらかというと土木や行政の人が使うツール用のマップデータです。世界中で利用されていて様々なShapefileが作られて公開されていたりします。このままではAppSheetでは読み込めないので、Google Earthのマップデータ形式であるKMLに変換が必要です。
今回は国土数値情報で公開されてる都道府県別最新洪水浸水想定区域データ(河川別)というものを利用します。
- ページを開くと、都道府県別のZIPで固められた一覧が出てくる
- 下の方に鹿児島県のデータがあるので今回は一番軽量な2012年(平成24年)のデータをクリックする
- Googleフォームの入力欄がでますが、下のスキップをクリックしてスルーします。
- ダウンロードしたZIPファイルを解凍する
- 中に入ってる拡張子がdbf、prj、shp、shxの4つのファイルを今回は利用します。
図:これらのファイルが重要
Shapefileを軽量化する
現時点ではshpファイルのサイズを見ると1.4MBですがKMLになった時に膨れる可能性があります。この中には浸水エリアのポリゴンデータが入ってる為です。またもともとファイルサイズが大きい場合もありえます(実際に津波浸水エリアのShapefileは30MBとか超えてたりします)。
このポリゴンデータに於いて隣接するものは結合したり、もうちょっと丸めて軽量化してくれるウェブツールがあるので、それを利用して軽量化を図ります。
- mapshaperのサイトを開く
- with advanced optionにチェックを入れる
- エリアの中にshp, dbf, shx, prjファイルの4つをまとめてドラッグアンドドロップする
- import optionを聞かれるので、encoding=sjisを入力してsubmitをクリックする
- するとポリゴンデータのみが表示される状態になります(マップなどは表示されていない。表示することもできる)
- 右上のconsoleをクリックする
- 左サイドバーにコマンド入力欄が出るので、以下の内容を入力する
12--dissolve-proj wgs84
1個目のコマンドで丸めたり結合したりします。2個目は日本測地系のファイルの場合、これで世界測地系の緯度経度情報へ変換してくれます。今回のファイルはもともと世界測地系なので、変換は不要です。日本測地系の場合左上に400m程度位置情報がズレますので必ず変換しましょう。 - 次に、右上のsimplifyをクリックします。
- なにやらオプションが色々出てきますが、ここはそのままApplyをクリックします。
- 上にスライダーが出てくるのですが、これでどれだけ適当に丸めるのか?を指定できます。数値が低いほど軽量化しますが、ポリゴンデータが崩れたりいい加減になっていきます。自分は30%〜50%の範囲で指定しています。
- 最後に右上のExportをクリックします
- ダイアログが出たら、一番上の入力欄がファイル名、次の項目がファイル形式(今回はshapefileを選択)、choose output directoryにチェックを入れて、Exportボタンをクリックする
これで、ZIPで固められた新たなShapefileがダウンロードされますので、解凍しておきましょう。
図:インポートオプションを指定する
図:コマンドで結合処理をする
図:シンプル化する
図:エクスポートオプション
Google Earthで読み込ませる
次に、Google Earth ProにてShapefileを読み込ませてKMLに変換します。今回はmacOS版で操作しています。
- Google Earth Proを起動する
- メニューよりファイル→開くをクリックし、先ほど最後に手に入れたファイルの中にあるshpファイルを指定します。
- テンプレートを適用するか?では「いいえ」で問題ないです。
- 左サイドバーの保留欄にshpが取り込まれているので、開いていって「名前なし」のファイルのチェックを入れて表示する
- 4.の名前無しのレイヤを右クリック→情報を取得をクリックする
- マルチジオメトリデータの一部に限定して編集すると警告が出てくるのでOKをクリックする
- スタイル・色のタブを開いて、ラインと範囲の色を指定します。透過率は70%程度でオッケーです。
- OKをクリックすると、色付けがなされます。
- 「名前なし」のファイルを再度右クリックして、名前をつけて場所を保存をクリック
- 拡張子はKMLを選択して保存をクリックする
これで、ShapefileがKML化されました。ここでファイルのサイズを調べて、制約条件を超えていなければオッケーです。KMZだと一度解凍して中身のKMLのファイルサイズが10MB超えてないか調べる必要があるため一手間掛かります。
また、このレイヤは複数のレイヤを1個にまとめたマルチジオメトリという形式になっています。これを個別のシングルジオメトリにGoogle Earth上で分解できるのですがめちゃくちゃ時間が掛かる上に、どれがどのエリアのポリゴンなのか?わからなくなるのでオススメしません。
図:レイヤの色を変更する作業
図:シングルに分解すると訳わからなくなる
Google Driveにアップロードする
ローカルからAppSheetはファイルは読み込めないので、これをGoogle Driveにアップロードします。この時注意しなければならない点は
- アップしたファイルはログインなしで外部から読めるように外部公開しておく必要があります。
- ファイルの共有リンクのURLのままだとAppSheetからは読み取り出来ません。
よって、アップして共有リンクのURLを取得したら、Direct Link Generatorを開いてURLを入力→Create Direct Linkをクリックし、Output LinkのURLをコピーします。
あとはこのKMLのURLをAppSheetの該当箇所に入れて保存して、ポリゴンデータが出てくれば成功です。
図:URLを直リンクに変換する
QGISで加工する手法
オープンソースのGISツールであるQGISを使って、余計なポリゴンデータを削ってから、mapshaperを使って軽量化するのも有効です。特に鹿児島県の場合、島嶼部などのデータも広く含まれていて広域な場合があり、結果ファイルサイズが肥大化してる為、必要な場所だけほしい場合には、QGISを使って不要な部分を削る必要があります
- Shapefileを右クリックして、QGISで直接開く
- ツールバーの中にある鉛筆マークの「編集モード切替」をクリックする
- メニューより編集→地物を選択をクリックする
- 不要なエリアを範囲指定する
- macの場合、この選択状態でFn+Backspaceで削除のコマンドなので実行する
- 確認のダイアログが出るので、xxxx個の地物を削除をクリックする
- これで不要なエリアを削除出来たので、左サイドバーに表示されてるレイヤを右クリック→エクスポート→新規ファイルに地物を保存をクリック
- ファイル形式はESRI Shapefileとしてファイル名を場所含めて選択。
- OKをクリックすると保存される。
この保存されたファイルをmapshaperで軽量化することになりますが、QGIS単体でもメニューのベクター→ジオメトリツール→ジオメトリを簡素化といったような軽量化のコマンドが用意されているのでこれらも活用すると尚良いでしょう。マルチパート関係の操作もGoogle Earthよりも軽量に動くのでなるべく編集はQGIS上で行うと良いでしょう。
図:選択エリアが赤い状態で選ばれました
図:shpとしてエクスポート