複数のGoogle Mapsをジオコーディングして貼り付けるメモ
・head部分でGoogle Maps APIとGoogle AJAX Search APIのスクリプトをインクルード。
・地図を貼り付けたい部分に<div id=”sample1″></div>のようなタグを書く。
・次のようなJavaScriptを外部ファイルに記述してhead部分でインクルード。
var GEOCODING = function(){};
GEOCODING.prototype.zoom = 15;
GEOCODING.prototype.map = "";
GEOCODING.prototype.options = {};
GEOCODING.prototype.init = function(id, width, height, text, address) {
var self = this;
self.options.size = new GSize(width, height);
self.map = new GMap2(document.getElementById(id), self.options);
self.map.addControl(new GSmallMapControl());
self.map.addControl(new GMapTypeControl());
self.geocoding(text, address);
}
GEOCODING.prototype.geocoding = function(text, address) {
var self = this;
var glocal = new GlocalSearch();
if (self.map.isLoaded()) {glocal.setCenterPoint(self.map);}
glocal.setSearchCompleteCallback(null, function() {
if (glocal.results.length > 0) {
var lat = parseFloat(glocal.results[0].lat);
var lng = parseFloat(glocal.results[0].lng);
self.map.setCenter(new GLatLng(lat, lng), self.zoom);
var marker = new GMarker(new GPoint(lng, lat));
self.map.addOverlay(marker);
marker.openInfoWindow(document.createTextNode(text));
}
});
glocal.execute(address);
}
・</body>タグの直前(もしくはprototype.jsのEvent.observe(window, “load”, funtion(){…})を使ってもよい)で読み込むJavaScriptファイルを用意し、以下のような処理を書く。
// 配列にしておけば同一ページに複数の地図を埋め込める
var geo_id = [];
var geo_width = [];
var geo_height = [];
var geo_text = [];
var geo_address = [];
geo_id.push("sample1");
geo_width.push(350);
geo_height.push(280);
geo_text.push("サンプルです");
geo_address.push("甲子園");
geo_id.push("sample2");
geo_width.push(300);
geo_height.push(300);
geo_text.push("これもサンプルです");
geo_address.push("六本木ヒルズ");
if (geo_id.length > 0) {
for (var i = 0; i < geo_id.length; i++) {
if (document.getElementById(geo_id[i])) {
var geocoding = new GEOCODING();
geocoding.init(geo_id[i], geo_width[i], geo_height[i], geo_text[i], geo_address[i]);
}
}
}
・地図を追加したいときは、id付きのdivタグをページに埋め込んで、geo_idなどの配列にデータをpushするだけ。
ただ、マーカーの吹き出しが1個しか開かない場合がある。原因不明。
コメントを残す