2

1回のクリックで2つのGoogleマップポリゴンレイヤーを選択できますか. 建物と区画の 2 つのレイヤーを追加できます。各レイヤーに個別にアクセスできますが、建物が区画レイヤーの上にあるマップをクリックすると、建物レイヤーのみが取得されます。

レイヤーを追加するスクリプト:

 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 を取得しようとしています。これは、建物と区画が別々に機能しますが、一方が他方の上にある場合は機能しません。添付されているのは、これを実行しようとする私の最新の試みです。区画のある建物をクリックすると、最初のリスナー関数が正しく機能しません。2 番目のリスナー関数は正常に動作しています。

  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

4

2 に答える 2

0

基になるレイヤーでクリックイベントをトリガーできます。

トリガーの3番目の引数としてe-argumentを使用することを忘れないでください。そうしないと、コールバック内でevent-argumentを使用できません。


編集:

例:現在、レイヤーotrBuildingが一番上にあるため、otrParcel-layerのクリックイベントをクリックしてトリガーする必要があります。

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引数には、最上層をクリックするためのイベントオブジェクトが含まれています。これは、イベントのlatとlngにのみアクセスする場合は問題ありませんが、イベントを使用して、などのレイヤーに関連するプロパティにアクセスすることはできませんe.row

于 2012-12-30T22:28:33.497 に答える
0

1 つのオプションは、両方のレイヤーで {clickable: false} を設定することです。次に、(FusionTablesLayer クリック リスナーで使用可能なデータを使用するのではなく) マップ クリック リスナーを使用して両方のテーブルをクエリし、InfoBubble に入力するデータを取得し、両方のクエリのコールバック関数からのデータを InfoBubble に入力します (該当する場合)。複数の InfoBubble を開いたままにするのではなく、1 つの InfoBubble を使用することを検討してください。

于 2012-12-30T13:21:47.620 に答える