エクセル表からGoogleMap用のKMLファイルを作成する

6,521 views
Skip to first unread message

YON

unread,
Jul 29, 2008, 3:25:52 AM7/29/08
to Google-Maps-API-Japan
GoogleMapに自分の持っている情報を表示するには、DBやXMLファイル等に保存した情報を取り出すためのプログラムを、JAVA
SCRIPTやPHP等で作り、GoogleMap APIを使ってmapに加えますが、エクセル表からXMLを介して出来ないかなと思案していまし
た。
最近、GoogleMapのMymapから、「Google Earthで表示」のリンクを使ってkmlを取得する手法をやってみました。
これ↓
http://groups.google.co.jp/group/Google-Maps-JP-How-Do-I/browse_thread/thread/06a65dad326b2d47#

この方法で、得たURIを
  var geoXml = new GGeoXml("URI",function(){
map.addOverlay(geoXml);
で、そのままGoogleMapに取り込めました。

そこで、要はこの仕様のKMLファイルを作ればよいという事です。このKMLのスキーマ定義がどこかにあるのかもしれませんが、とりあえずエクセルの
VBマクロを使ってKMLをDOMに取り込みエクセルシートへ各行主要素毎に子要素を横展開するマクロを作ってみました。
これ↓
http://yoneyone.my-sv.net/ExcelData/parseKML.bas

この逆を作れば、エクセルシートに配置した情報からKMLを作れるはず?
と思ったけれど、作り始めると面倒な割りに利用価値がなさそうなので、止めました。エクセルシートから、セル内容をCSVやJSONでTEXTファイル
に外出して、PHPやJAVA SCRIPTで処理した方がずっと簡単だと気付きました。
(以上)

Mitu-Koike

unread,
Jul 30, 2008, 9:36:06 PM7/30/08
to Google-Maps-API-Japan
> このKMLのスキーマ定義がどこかにあるのかもしれませんが
-----------------------------------------------------------------------------------------
KML2.1チュートリアル:http://earth.google.co.jp/kml/kml_21tutorial.html
KML2.1リファレンス:http://earth.google.co.jp/kml/kml_tags_21.html
KML2.1スキーマ:http://code.google.com/apis/kml/schema/kml21.xsd
-----------------------------------------------------------------------------------------


以下ひとりごと。(「Excelファイルから地図上にマッピングする方法」と、勘違いしてしまった方のために)


クラインアントからの要望で「Excelファイルの住所をGoogleMapに表示したい」とよく言われます。要望は「あくまで要望だよね?ねっ?」と
か言いながら聞き流してますが・・・
こんな要望をくれるのは、ほとんどが中小企業のオッチャン達なので操作性がとっても重要だし・・・。

ちゃんと作るんだったらマクロではなく単体のアプリケーションとして開発し、
  Excelファイル読み込み → 住所列指定 → KML生成 → GoogleMapsかGoogleEarthで表示
がいいのかなーとか思ってます。

YONさんのお話は、Excelファイルの段階で緯度経度が入っている前提かな?でも、顧客台帳とは名ばかりの住所録っぽいデータがほとんどで、
「Excelファイルには住所しか入力されていない」とかよくありますよね・・・。

住所列を指定して読み込んだ後 → データクレンジング → 住所正規化 → ジオコーディング → KML

1件1件MapsAPIのGeocodingAPIに読みに行かなきゃだよねー・・・
 ↓
要望は要望として聞き流s・・・(無限ループ)


住所の正規化まではある程度なんとかなりそうかもです。住所正規表現リンク集↓
-----------------------------------------------------------------------------------------
http://nonn-et-twk.net/twk/node/51
http://d.hatena.ne.jp/shinichitomita/20060713/1152800000
-----------------------------------------------------------------------------------------

また、ExcelのVBAを使ってGMapsを表示するマクロの制作例がありましたので紹介までに
-----------------------------------------------------------------------------------------
日経BP(Excelでできるマッシュアップ)
http://pc.nikkeibp.co.jp/article/NPC/20070905/281199/
http://pc.nikkeibp.co.jp/article/NPC/20070920/282539/
-----------------------------------------------------------------------------------------

YON

unread,
Jul 31, 2008, 9:18:31 PM7/31/08
to Google-Maps-API-Japan
エクセルにある住所から、GeoCodingやZip-GeoCodingして、
GoogleMapに表示させるについては、私もサンプルを作ってみた事が
あります。↓
http://yoneyone.my-sv.net/vbsample.htm
 技術的な問題より、GoogleMapの利用規約にふれないかが心配です。
商用利用(有償で配付)しない事、Web公開している事、大量データを処理しない事
を守ればOKだと自己解釈しています。

 本来はエクセルからXMLでデータを出力させ、Webページ側はアップロードされたXMLを取り込めるように作る方がより汎用的になるのでベターです
が、私は以下の
ようにお手軽にやりました。

<エクセル側>
-Geocoding
GeoCodingのApiサービスにHTTPリクエストの結果をMSXML2.DOMDocumentに
取り込んで、パースする。(住所はURLエンコードしておく)
-GoogleMapへの連携(簡易方法)
IEブラウザーをOBJECTとして扱い、VBで操作します。
データはJSON形式を作って、JAVASCRIPTに渡します。
こんな感じ
parm = "Jsondata=" & "{" & Chr(34) _
& "point" & Chr(34) & ":{" & Chr(34) _
& "lat" & Chr(34) & ":" _
& Cells(i, 5).Value & "," & Chr(34) _
& "lng" & Chr(34) & ":" _
& Cells(i, 6).Value & "," & Chr(34) _
& "dosu" & Chr(34) & ":" & Chr(34) _
& data_icontype & Chr(34) _
& "}}"
objIE.document.parentWindow.execScript parm, "javascript"
objIE.document.parentWindow.execScript "data_points_set();",
"javascript"
<Webページ側>
データを投入可能な、汎用的なMAPを作っておく。
こんな感じ
var Jsondata;
var DATA_POINTS=[];
---
function data_points_set(){
var data = [];
data["lat"] = Jsondata.point.lat;
data["lng"] = Jsondata.point.lng;
data["dosu"] = Jsondata.point.dosu;
DATA_POINTS.push(data);
}

(です。)
Reply all
Reply to author
Forward
0 new messages