2 Stimmen

Wählen Sie mit einem Klick zwei Kartenlayer aus

Ist es möglich, zwei Google Maps-Polygon-Ebenen mit einem Klick auszuwählen. Ich kann zwei Ebenen hinzufügen: Gebäude und Parzellen. Ich kann auf jede Ebene einzeln zugreifen, aber wenn ich auf die Karte klicke, wo das Gebäude über der Parzellen-Ebene liegt, wird nur die Gebäudeebene abgerufen.

Skript zum Hinzufügen von Ebenen:

 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
  });

Ich versuche, das infoWindoHtml von beiden Ebenen mit einem Klick abzurufen. Dies funktioniert für Gebäude und Parzellen separat, aber nicht, wenn eins über dem anderen liegt. Hier ist mein letzter Versuch, dies zu tun. Die erste Listener-Funktion funktioniert nicht richtig, wenn ich auf ein Gebäude mit einer Parzelle klicke. Die zweite Listener-Funktion funktioniert ordnungsgemäß.

 google.maps.event.addListener(otrBuilding , 'click', function(e) {
    var  infoBubble = new InfoBubble({
      maxWidth: 300
    });
    infoBubble.addTab('Gebäude', 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('Parzelle', layer.infoWindowHtml);  

    infoBubble.addTab('Kontakt', 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('Parzelle', e.infoWindowHtml);
    infoBubble.addTab('Kontakt', contacInfo() );
    if (!infoBubble.isOpen()) {
      infoBubble.setPosition(e.latLng);
      infoBubble.open(map);
    };
  });

Hier ist ein Link zur Seite, die ich teste. Wenn die Karte geladen wird, ist das Gebäude unten rechts (Emery Theater) das, was ich für den Test verwende. Es hat ein Donutloch in der Mitte. Ein Klick auf den äußeren Ring sollte die Gebäude- und Parzelleninformationen enthalten (was es nicht tut). Ein Klick in die Mitte zeigt nur die Parzelleninformationen an.

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

0voto

geocodezip Punkte 153867

Eine Möglichkeit wäre, {clickable: false} für beide Layer festzulegen. Verwenden Sie dann einen Kartenklick-Listener, um beide Tabellen abzufragen, um die Daten für das InfoBubble zu füllen (anstatt die verfügbaren Daten im FusionTablesLayer-Klick-Listener zu verwenden) und das InfoBubble mit den Daten aus den Rückruffunktionen beider Abfragen zu füllen (falls zutreffend). Sie könnten erwägen, ein einzelnes InfoBubble zu verwenden, anstatt mehrere geöffnet zu lassen.

0voto

Dr.Molle Punkte 115139

Sie können das Klick-Ereignis auf der darunterliegenden Ebene auslösen.

Vergessen Sie nicht, das e-Argument als drittes Argument für das Auslösen zu verwenden, da das Ereignis-Argument sonst im Callback nicht verfügbar ist.


bearbeiten:

Beispiel: Aktuell befindet sich die Ebene otrBuilding oben, daher müssen Sie dort das Klick-Ereignis für die otrParcel-Ebene auslösen:

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

   //Setzen Sie Ihren Code fort
});

Aber es scheint besser zu sein, wenn Sie die Paket-Ebene nach oben bringen und das Ereignis für die Gebäude-Ebene auslösen, wenn auf die Paket-Ebene geklickt wurde:

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

   //Setzen Sie Ihren Code fort
});

Bitte beachten Sie: Das e-Argument enthält das Ereignis-Objekt für den Klick auf der obersten Ebene. Dies ist kein Problem, wenn Sie nur auf Lat und Lng des Ereignisses zugreifen, aber Sie können das Ereignis nicht verwenden, um auf Eigenschaften der Ebene wie e.row zuzugreifen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X