Excel に記録された座標値を地理院地図上に点としてプロットする Excel VBA を作成しました。
座標値は直接入力か、SIMA ファイルから読み込むことでリストされます。
原型は Facebook で K'z Lab さんが投稿していたExcelから地理院地図(leaflet)にダイレクトにプロットするというものです。
ソース一式を Github から zip ファイルでダウンロードできます
zip を展開して xlsm/bin
フォルダの中に Excel のファイルが入っています。
展開先の Leaflet も同じリポジトリに入れてあり、表示もできるようにしてあります。
元ネタとの違い
SIMA ファイルを読み込める
点名と座標値を直接入力する他、既存の SIMA ファイルを読み込むことができます。
座標値を GeoJSON に変換してからプロットする
SIMA の座標を GeoJSON 文字列に変換してから Leaflet に投げています。
地図を表示する Web サイトでは proj4.js
と proj4Leaflet .js
を使うことで人が XY 座標を緯度経度に変換しなくてもプロットが可能です。
ただし、proj4 で XY 座標を緯度経度に変換する場合も座標系の番号が必要なので座標値と共に入力しておく必要があります。
なお、proj4.js
では平面直角座標系の投影を持っていないので main.js
の中で19の座標系で使われるパラメータを定義しています。
GeoJSON にもエクスポート可能
せっかく GeoJSON 文字列に変換しているので、データを GeoJSON として保存することもできるようにしました。
しかし、 JSON データは原則 UTF-8
で保存する必要があり、文字列を UTF-8
で保存するために ActiveX Data Objects 6.0
を参照しています。
パソコンに ActiveX Data Objects 6.0
が入っていないとエラーが出て実行できないかもしれません。MS Office が入っていれば大丈夫だと思いますが…。
緯度経度は扱えない
平面直角座標系の XY 座標のみで緯度経度の位置情報は扱えません。
座標系の番号に「緯度経度」を追加したりすればいいのですが、とりあえずやってません。
さて
データのある行の検出がモジュールによって違っています。
最初は定数として定義
GeoJSON や SIMA を作るところでは引数で受け取る
そのほかに検索して値を取り出す関数を利用する
まとめないと改修しようとしたときに面倒ですね。