ユーザーがマップ上の任意の場所をクリックしたときに特定のインフォボックスを表示し、ユーザーがOverlayView内をクリックしたときに別のインフォボックスを表示したいと思います。
マップオブジェクトのクリックイベントにリスナーを追加していますが、このイベントはlatLongパラメータのみを提供し、OverlayViewがヒットしたかどうかを判断するには不十分と思われます。
google.maps.event.addDomListener(map, 'click', function(param) {
// if( an OverlayView was clicked)
// showInfoboxForOverlayView();
// else
// showStandarInfobox();
});
OverlayViewオブジェクトに個別のリスナーを追加できることはわかっていますが、これを行うと、両方のイベントが発生します(OverlayViewオブジェクトからのイベントとmapオブジェクトからのイベント)。
これが、OverlayViewオブジェクトを作成する方法です。
var overlay = new google.maps.OverlayView();
overlay.onAdd = function () {
var layer = d3.select(this.getPanes().overlayMouseTarget).append("div").attr("class", "SvgOverlay");
var svg = layer.append("svg");
var adminDivisions = svg.append("g").attr("class", "AdminDivisions");
overlay.draw = function () {
var markerOverlay = this;
var overlayProjection = markerOverlay.getProjection();
// Turn the overlay projection into a d3 projection
var googleMapProjection = function (coordinates) {
var googleCoordinates = new google.maps.LatLng(coordinates[1] + 0.0005, coordinates[0] - 0.0006);
var pixelCoordinates = overlayProjection.fromLatLngToDivPixel(googleCoordinates);
return [pixelCoordinates.x + 4000, pixelCoordinates.y + 4000];
}
path = d3.geo.path().projection(googleMapProjection);
adminDivisions.selectAll("path")
.data(geoJson.features)
.attr("d", path) // update existing paths
.enter().append("svg:path")
.attr("d", path);;
};
};
何か案は?