单击一下,选择两个地图图层

时间:2012-12-30 05:50:52

标签: google-maps-api-3 google-fusion-tables

是否可以通过单击选择两个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剧院)就是我用来测试的地方。它的中间有一个甜甜圈洞。单击外环应包括建筑物和宗地信息(它不包含)。单击中间将仅显示宗地信息。

http://fitreks.com/bdcurc/bdcurcMUmockup11.html

2 个答案:

答案 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等层相关的属性。