Google Map API version 3 Overlay Example3
※以前別の場所で書いた文章を備忘的に書き記しておきます。
【投稿年月日】2009-11-25 【ジャンル】JavaScript
「Google Map API version 3 Overlay Example」「Google Map API version 3 Overlay Example2」の続きです。今回は、InfoWindow(吹き出し)を表示する際、選択したOverlayを強調してみます。
Google Maps API v3 Example: Overlay4
tika.tisoku.net/overlay/?id=4
追加されたのは「OverlayBackground(num)」と「OverlayBackgroundNo(num)」。zIndexで表示順を、backgroundで背景色を変更しています。
【ソース】 Google Maps API v3 Example: Overlay4
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps API version3 Example: Overlay4</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map = popup = numold = null;
var overlays = new Array(), popups = new Array();
function initialize() {
var myLatlng = new google.maps.LatLng(35.472324, 133.05052);
var myOptions = {
zoom: 10,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
AddOverlayData();
google.maps.event.addListener(map, "dragend", function() {
ClearOverlay();
AddOverlayData(1);
});
}
function AddOverlayData(ww) {
var northEast = map.getCenter();
northEast = new google.maps.LatLng(northEast.lat()+0.5, northEast.lng()+1);
var southWest = new google.maps.LatLng(northEast.lat()-1, northEast.lng()-2);
if(ww!=1) {
map.fitBounds(new google.maps.LatLngBounds(southWest, northEast));
}
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
for(var i=0; i<10; i++) {
overlays[i] = new AddOverlay(i, southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
}
}
function AddOverlay(id, lat, lng) {
this.id_ = id;
this.lat_ = MathRound(lat);
this.lng_ = MathRound(lng);
this.setMap(map);
}
AddOverlay.prototype = new google.maps.OverlayView();
AddOverlay.prototype.draw = function() {
if(!this.div_) {
this.div_ = document.createElement("div");
}
var div = this.div_;
var panes = this.getPanes();
panes.overlayLayer.appendChild(div);
var latlng = new google.maps.LatLng(this.lat_, this.lng_);
var point = this.getProjection().fromLatLngToDivPixel(latlng);
div.title = "Point" + this.id_;
div.style.position = "absolute";
div.style.left = point.x + "px";
div.style.top = point.y + "px";
div.style.fontSize = "10px";
div.style.width = "60px";
div.style.lineHeight = "1em";
div.style.border = "1px solid #666";
div.style.background = "#fffffe";
div.id = "overlay" + this.id_;
div.style.cursor = "pointer";
var id = this.id_;
div.innerHTML = "<strong>Point" + id + "</strong>";
popups[id] = new google.maps.InfoWindow({
content: "<strong>Point" + id + "</strong><br />(" + this.lat_ + " ," + this.lng_ + ")",
pixelOffset: new google.maps.Size(30, 0),
position: latlng
});
google.maps.event.addDomListener(div, "click", function() {
PopInfowidow(id);
});
};
AddOverlay.prototype.onRemove = function() {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
};
function ClearOverlay() {
if(overlays.length>0) {
for(var i=0; i<overlays.length; i++) {
overlays[i].onRemove();
}
overlays = new Array();
}
if(popup) {
popup.close();
}
}
function PopInfowidow(id) {
OverlayBackground(id);
popups[id].open(map);
if(popup) {
popup.close();
}
popup = popups[id];
}
function OverlayBackground(num) {
var dc = document.getElementById("overlay" + num).style;
dc.zIndex = 1;
dc.background = "pink";
OverlayBackgroundNo(num);
}
function OverlayBackgroundNo(num) {
if(numold) {
var dc = document.getElementById("overlay" + (numold-1)).style
dc.zIndex = "-200000";
dc.background = "#fffffe";
}
numold = Math.round(num + 1);
}
function MathRound(id) {
var s = 10000;
return Math.round(id*s)/s;
}
function addEvent(obj, evType, fn) {
if(obj.addEventListener) {
obj.addEventListener(evType, fn, false);
}else if(obj.attachEvent) {
obj.attachEvent("on" + evType, fn);
}
}
addEvent(window, "load", initialize);
</script>
</head>
<body>
<h1>Google Maps API v3 Example: Overlay4</h1>
<div id="map_canvas" style="width:600px; height:350px;"></div>
</body>
</html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps API version3 Example: Overlay4</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map = popup = numold = null;
var overlays = new Array(), popups = new Array();
function initialize() {
var myLatlng = new google.maps.LatLng(35.472324, 133.05052);
var myOptions = {
zoom: 10,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
AddOverlayData();
google.maps.event.addListener(map, "dragend", function() {
ClearOverlay();
AddOverlayData(1);
});
}
function AddOverlayData(ww) {
var northEast = map.getCenter();
northEast = new google.maps.LatLng(northEast.lat()+0.5, northEast.lng()+1);
var southWest = new google.maps.LatLng(northEast.lat()-1, northEast.lng()-2);
if(ww!=1) {
map.fitBounds(new google.maps.LatLngBounds(southWest, northEast));
}
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
for(var i=0; i<10; i++) {
overlays[i] = new AddOverlay(i, southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
}
}
function AddOverlay(id, lat, lng) {
this.id_ = id;
this.lat_ = MathRound(lat);
this.lng_ = MathRound(lng);
this.setMap(map);
}
AddOverlay.prototype = new google.maps.OverlayView();
AddOverlay.prototype.draw = function() {
if(!this.div_) {
this.div_ = document.createElement("div");
}
var div = this.div_;
var panes = this.getPanes();
panes.overlayLayer.appendChild(div);
var latlng = new google.maps.LatLng(this.lat_, this.lng_);
var point = this.getProjection().fromLatLngToDivPixel(latlng);
div.title = "Point" + this.id_;
div.style.position = "absolute";
div.style.left = point.x + "px";
div.style.top = point.y + "px";
div.style.fontSize = "10px";
div.style.width = "60px";
div.style.lineHeight = "1em";
div.style.border = "1px solid #666";
div.style.background = "#fffffe";
div.id = "overlay" + this.id_;
div.style.cursor = "pointer";
var id = this.id_;
div.innerHTML = "<strong>Point" + id + "</strong>";
popups[id] = new google.maps.InfoWindow({
content: "<strong>Point" + id + "</strong><br />(" + this.lat_ + " ," + this.lng_ + ")",
pixelOffset: new google.maps.Size(30, 0),
position: latlng
});
google.maps.event.addDomListener(div, "click", function() {
PopInfowidow(id);
});
};
AddOverlay.prototype.onRemove = function() {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
};
function ClearOverlay() {
if(overlays.length>0) {
for(var i=0; i<overlays.length; i++) {
overlays[i].onRemove();
}
overlays = new Array();
}
if(popup) {
popup.close();
}
}
function PopInfowidow(id) {
OverlayBackground(id);
popups[id].open(map);
if(popup) {
popup.close();
}
popup = popups[id];
}
function OverlayBackground(num) {
var dc = document.getElementById("overlay" + num).style;
dc.zIndex = 1;
dc.background = "pink";
OverlayBackgroundNo(num);
}
function OverlayBackgroundNo(num) {
if(numold) {
var dc = document.getElementById("overlay" + (numold-1)).style
dc.zIndex = "-200000";
dc.background = "#fffffe";
}
numold = Math.round(num + 1);
}
function MathRound(id) {
var s = 10000;
return Math.round(id*s)/s;
}
function addEvent(obj, evType, fn) {
if(obj.addEventListener) {
obj.addEventListener(evType, fn, false);
}else if(obj.attachEvent) {
obj.attachEvent("on" + evType, fn);
}
}
addEvent(window, "load", initialize);
</script>
</head>
<body>
<h1>Google Maps API v3 Example: Overlay4</h1>
<div id="map_canvas" style="width:600px; height:350px;"></div>
</body>
</html>
次に、サイドバーを付けてみることにします。
Google Maps API v3 Example: Overlay5
tika.tisoku.net/overlay/?id=5
HTMLに「id=map_sidebar」を記述した上で、「AddOverlayData()」に以下のコードを追加しています。
for(var i=0; i<10; i++) {
list.push("<li id=\"list" + i + "\"><a href=\"javascript:void(0);\" onclick=\"PopInfowidow(" + i + ")\">Point" + i + "</a></li>");
}
document.getElementById("map_sidebar").innerHTML = "<ul>" + list.join("") + "</ul>";
Google Maps API v3で、サイドバーを付けるのは、思ったよりも簡単でした。list.push("<li id=\"list" + i + "\"><a href=\"javascript:void(0);\" onclick=\"PopInfowidow(" + i + ")\">Point" + i + "</a></li>");
}
document.getElementById("map_sidebar").innerHTML = "<ul>" + list.join("") + "</ul>";
【ソース】 Google Maps API v3 Example: Overlay5
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps API version3 Example: Overlay5</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map = popup = numold = null;
var overlays = new Array(), popups = new Array();
function initialize() {
var myLatlng = new google.maps.LatLng(35.472324, 133.05052);
var myOptions = {
zoom: 10,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
AddOverlayData();
google.maps.event.addListener(map, "dragend", function() {
ClearOverlay();
AddOverlayData(1);
});
}
function AddOverlayData(ww) {
var northEast = map.getCenter();
northEast = new google.maps.LatLng(northEast.lat()+0.5, northEast.lng()+1);
var southWest = new google.maps.LatLng(northEast.lat()-1, northEast.lng()-2);
if(ww!=1) {
map.fitBounds(new google.maps.LatLngBounds(southWest, northEast));
}
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
var list = new Array();
for(var i=0; i<10; i++) {
overlays[i] = new AddOverlay(i, southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
list.push("<li id=\"list" + i + "\"><a href=\"javascript:void(0);\" onclick=\"PopInfowidow(" + i + ")\">Point" + i + "</a></li>");
}
document.getElementById("map_sidebar").innerHTML = "<ul>" + list.join("") + "</ul>";
}
function AddOverlay(id, lat, lng) {
this.id_ = id;
this.lat_ = MathRound(lat);
this.lng_ = MathRound(lng);
this.setMap(map);
}
AddOverlay.prototype = new google.maps.OverlayView();
AddOverlay.prototype.draw = function() {
if(!this.div_) {
this.div_ = document.createElement("div");
}
var div = this.div_;
var panes = this.getPanes();
panes.overlayLayer.appendChild(div);
var latlng = new google.maps.LatLng(this.lat_, this.lng_);
var point = this.getProjection().fromLatLngToDivPixel(latlng);
div.title = "Point" + this.id_;
div.style.position = "absolute";
div.style.left = point.x + "px";
div.style.top = point.y + "px";
div.style.fontSize = "10px";
div.style.width = "60px";
div.style.lineHeight = "1em";
div.style.border = "1px solid #666";
div.style.background = "#fffffe";
div.id = "overlay" + this.id_;
div.style.cursor = "pointer";
var id = this.id_;
div.innerHTML = "<strong>Point" + id + "</strong>";
popups[id] = new google.maps.InfoWindow({
content: "<strong>Point" + id + "</strong><br />(" + this.lat_ + " ," + this.lng_ + ")",
pixelOffset: new google.maps.Size(30, 0),
position: latlng
});
google.maps.event.addDomListener(div, "click", function() {
PopInfowidow(id);
});
};
AddOverlay.prototype.onRemove = function() {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
};
function ClearOverlay() {
if(overlays.length>0) {
for(var i=0; i<overlays.length; i++) {
overlays[i].onRemove();
}
overlays = new Array();
}
if(popup) {
popup.close();
}
}
function PopInfowidow(id) {
OverlayBackground(id);
popups[id].open(map);
if(popup) {
popup.close();
}
popup = popups[id];
}
function OverlayBackground(num) {
var dc = document.getElementById("overlay" + num).style;
dc.zIndex = 1;
dc.background = "pink";
var dcl = document.getElementById("list" + num).style;
dcl.background = "pink";
dcl.fontWeight = "bold";
OverlayBackgroundNo(num);
}
function OverlayBackgroundNo(num) {
if(numold) {
var dc = document.getElementById("overlay" + (numold-1)).style
dc.zIndex = "-200000";
dc.background = "#fffffe";
var dcl = document.getElementById("list" + (numold-1)).style
dcl.background = "#fffffe";
dcl.fontWeight = "normal";
}
numold = Math.round(num + 1);
}
function MathRound(id) {
var s = 10000;
return Math.round(id*s)/s;
}
function addEvent(obj, evType, fn) {
if(obj.addEventListener) {
obj.addEventListener(evType, fn, false);
}else if(obj.attachEvent) {
obj.attachEvent("on" + evType, fn);
}
}
addEvent(window, "load", initialize);
</script>
</head>
<body>
<h1>Google Maps API v3 Example: Overlay5</h1>
<div id="map_canvas" style="width:600px; height:350px; float:left;"></div>
<div id="map_sidebar" style="width:100px; height:350px; float:left;"></div>
<br style="clear:both;" />
</body>
</html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps API version3 Example: Overlay5</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map = popup = numold = null;
var overlays = new Array(), popups = new Array();
function initialize() {
var myLatlng = new google.maps.LatLng(35.472324, 133.05052);
var myOptions = {
zoom: 10,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
AddOverlayData();
google.maps.event.addListener(map, "dragend", function() {
ClearOverlay();
AddOverlayData(1);
});
}
function AddOverlayData(ww) {
var northEast = map.getCenter();
northEast = new google.maps.LatLng(northEast.lat()+0.5, northEast.lng()+1);
var southWest = new google.maps.LatLng(northEast.lat()-1, northEast.lng()-2);
if(ww!=1) {
map.fitBounds(new google.maps.LatLngBounds(southWest, northEast));
}
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
var list = new Array();
for(var i=0; i<10; i++) {
overlays[i] = new AddOverlay(i, southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
list.push("<li id=\"list" + i + "\"><a href=\"javascript:void(0);\" onclick=\"PopInfowidow(" + i + ")\">Point" + i + "</a></li>");
}
document.getElementById("map_sidebar").innerHTML = "<ul>" + list.join("") + "</ul>";
}
function AddOverlay(id, lat, lng) {
this.id_ = id;
this.lat_ = MathRound(lat);
this.lng_ = MathRound(lng);
this.setMap(map);
}
AddOverlay.prototype = new google.maps.OverlayView();
AddOverlay.prototype.draw = function() {
if(!this.div_) {
this.div_ = document.createElement("div");
}
var div = this.div_;
var panes = this.getPanes();
panes.overlayLayer.appendChild(div);
var latlng = new google.maps.LatLng(this.lat_, this.lng_);
var point = this.getProjection().fromLatLngToDivPixel(latlng);
div.title = "Point" + this.id_;
div.style.position = "absolute";
div.style.left = point.x + "px";
div.style.top = point.y + "px";
div.style.fontSize = "10px";
div.style.width = "60px";
div.style.lineHeight = "1em";
div.style.border = "1px solid #666";
div.style.background = "#fffffe";
div.id = "overlay" + this.id_;
div.style.cursor = "pointer";
var id = this.id_;
div.innerHTML = "<strong>Point" + id + "</strong>";
popups[id] = new google.maps.InfoWindow({
content: "<strong>Point" + id + "</strong><br />(" + this.lat_ + " ," + this.lng_ + ")",
pixelOffset: new google.maps.Size(30, 0),
position: latlng
});
google.maps.event.addDomListener(div, "click", function() {
PopInfowidow(id);
});
};
AddOverlay.prototype.onRemove = function() {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
};
function ClearOverlay() {
if(overlays.length>0) {
for(var i=0; i<overlays.length; i++) {
overlays[i].onRemove();
}
overlays = new Array();
}
if(popup) {
popup.close();
}
}
function PopInfowidow(id) {
OverlayBackground(id);
popups[id].open(map);
if(popup) {
popup.close();
}
popup = popups[id];
}
function OverlayBackground(num) {
var dc = document.getElementById("overlay" + num).style;
dc.zIndex = 1;
dc.background = "pink";
var dcl = document.getElementById("list" + num).style;
dcl.background = "pink";
dcl.fontWeight = "bold";
OverlayBackgroundNo(num);
}
function OverlayBackgroundNo(num) {
if(numold) {
var dc = document.getElementById("overlay" + (numold-1)).style
dc.zIndex = "-200000";
dc.background = "#fffffe";
var dcl = document.getElementById("list" + (numold-1)).style
dcl.background = "#fffffe";
dcl.fontWeight = "normal";
}
numold = Math.round(num + 1);
}
function MathRound(id) {
var s = 10000;
return Math.round(id*s)/s;
}
function addEvent(obj, evType, fn) {
if(obj.addEventListener) {
obj.addEventListener(evType, fn, false);
}else if(obj.attachEvent) {
obj.attachEvent("on" + evType, fn);
}
}
addEvent(window, "load", initialize);
</script>
</head>
<body>
<h1>Google Maps API v3 Example: Overlay5</h1>
<div id="map_canvas" style="width:600px; height:350px; float:left;"></div>
<div id="map_sidebar" style="width:100px; height:350px; float:left;"></div>
<br style="clear:both;" />
</body>
</html>
EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript