2

是否可以一键选择两个 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
  });

我正在尝试通过 1 单击从两个图层中检索 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);
    };
  });

这是我正在测试的页面的链接。加载地图时,我正在使用右下角的建筑物(金刚砂剧院)进行测试。它的中间有一个甜甜圈洞。单击外环应包括建筑物和地块信息(它没有)。点击中间只会显示包裹信息。

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

4

2 回答 2

0

您可以在底层触发点击事件。

不要忘记使用 e-argument 作为 trigger 的第三个参数,否则 event-argument 在回调中不可用。


编辑:

示例:当前图层 otrBuilding 位于顶部,因此您必须在单击时触发 otrParcel 图层的点击事件:

google.maps.event.addListener(otrBuilding , 'click', function(e) {
   google.maps.event.trigger(otrParcel , 'click',e);

   //continue with your code
});

但是看起来会更好,当您将地块层放在顶部时,在单击地块层时触发建筑物层的事件:

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.

于 2012-12-30T22:28:33.497 回答
0

一种选择是在两个图层上设置 {clickable: false}。然后使用地图点击侦听器查询两个表的数据以填充 InfoBubble(而不是使用 FusionTablesLayer 点击侦听器中的可用数据)并使用来自两个查询的回调函数的数据(如果适用)填充 InfoBubble。您可能需要考虑使用单个 InfoBubble,而不是让多个 InfoBubble 保持打开状态。

于 2012-12-30T13:21:47.620 回答