是否可以通过单击选择两个Google地图多边形图层。我可以添加两层:建筑物和包裹。我可以单独访问每个图层,但是如果我单击建筑物位于宗地图层顶部的地图上,则只检索建筑图层。
添加图层的脚本:
var otrParcel = new google.maps.FusionTablesLayer({
query: {
select: "'Geometry'",
from: otrParcLayer
},
suppressInfoWindows: true,
map: map
});
var otrBuilding = new google.maps.FusionTablesLayer({
query: {
select: "'Geometry'",
from: otrBldgLayer
},
suppressInfoWindows: true,
map: map
});
我试图通过一次点击从两个图层中检索infoWindoHtml。这适用于建筑物和包裹分开,但不是当1在另一个上面时。附件是我尝试这样做的最新尝试。单击包含建筑物的建筑物时,第一个侦听器功能无法正常工作。第二个监听器功能正常工作。
google.maps.event.addListener(otrBuilding , 'click', function(e) {
var infoBubble = new InfoBubble({
maxWidth: 300
});
infoBubble.addTab('Building', e.infoWindowHtml );
var layer = new google.maps.FusionTablesLayer({
query: {
select: "'geometry'",
from: otrParcLayer,
where: "ST_INTERSECTS('geometry', CIRCLE(LATLNG(e.latLng), 0.001))",
limit:1
}
});
infoBubble.addTab('Parcel', layer.infoWindowHtml);
infoBubble.addTab('Contact', contacInfo() );
if (!infoBubble.isOpen()) {
infoBubble.setPosition(e.latLng);
infoBubble.open(map);
};
});
google.maps.event.addListener(otrParcel , 'click', function(e) {
var infoBubble = new InfoBubble({
maxWidth: 300
});
infoBubble.addTab('Parcel', e.infoWindowHtml);
infoBubble.addTab('Contact', contacInfo() );
if (!infoBubble.isOpen()) {
infoBubble.setPosition(e.latLng);
infoBubble.open(map);
};
});
这是我正在测试的页面的链接。当地图加载时,右下方的建筑物(Emery剧院)就是我用来测试的地方。它的中间有一个甜甜圈洞。单击外环应包括建筑物和宗地信息(它不包含)。单击中间将仅显示宗地信息。
答案 0 :(得分:0)
一个选项是在两个图层上设置{clickable:false}。然后使用地图单击侦听器查询两个表以填充InfoBubble(而不是使用FusionTablesLayer单击侦听器中可用的数据),并使用两个查询的回调函数(如果适用)中的数据弹出InfoBubble。您可能需要考虑使用单个InfoBubble,而不是让多个InfoBubble保持打开状态。
答案 1 :(得分:0)
您可以触发底层图层上的点击事件。
不要忘记使用e-argument作为触发器的第三个参数,否则在回调中不能使用event-argument。
示例:当前图层otrBuilding位于顶部,因此您必须触发点击otrParcel层的click事件:
google.maps.event.addListener(otrBuilding , 'click', function(e) {
google.maps.event.trigger(otrParcel , 'click',e);
//continue with your code
});
但是当你将parcel-layer放在最上面时,看起来会更好,当点击parcel-layer时触发建筑层的事件:
google.maps.event.addListener(otrParcel , 'click', function(e) {
google.maps.event.trigger(otrBuilding , 'click',e);
//continue with your code
});
请注意:e-argument包含顶层点击的事件对象。当您只访问事件的lat和lng时,这不是问题,但您将无法使用该事件来访问与e.row
等层相关的属性。