5 Stimmen

Snap zur nächstgelegenen Straße

Ihr habt mir in letzter Zeit geholfen, einige meiner Probleme mit einer Google-Karte zu lösen, und dafür danke ich euch.

Ich bin damit fast fertig - es gibt nur noch ein Problem. Wenn ich die erste Markierung auf der Karte platziere, rastet sie an der nächstgelegenen Straße ein (was in Ordnung ist!), aber wenn ich die erste Markierung an einen anderen Ort ziehe, kommen die Richtungen plötzlich durcheinander. Und die Markierungen werden vermischt.

Ein Beispiel finden Sie unter http://dev.korebogen.dk/gmap/

Ich muss es möglich machen, den ersten Marker zu verschieben (immer noch einrastend) und wenn ich den zweiten Marker platziere, werden die Richtungen zuerst geladen. Aber um die erste Markierung wieder einrasten zu lassen, muss ich die Wegbeschreibung laden.

Ich hoffe, einige von Ihnen haben eine Lösung. Vielen Dank im Voraus.

5voto

Das Javascript-Team der Blackpool Community Church hat ein ein hervorragendes Beispiel für genau dies ( direkter Link zum vierten Beispiel ). Sehen Sie sich auch ihre anderen Beispiele an.

(Haftungsausschluss: Ich bin nicht mit ihnen verbunden, habe aber durch ihre Beispiele viel über GMaps gelernt)

Bearbeiten: Ich vermute, dass die Kartenereignisse in etwa so ablaufen (Pseudocode, für echte Ereignisnamen usw. siehe GMaps-Dokumente):

  • Kartenklick: Mousedown, Mouseup, Klick:{rote Markierung setzen}
  • Rote Markierung ziehen: Mousedown, Dragstart{rote Markierung}, Mouseup, Klick:{Markierung b setzen} (Mousedown+Mouseup), Dragend
  • beide Marker gesetzt sind? Ja, erhalten Sie eine Wegbeschreibung

Was ich vorschlagen würde: in den Dragstart-Funktionen für den roten Marker und den Marker-A ein Flag "Ziehen eines Markers" setzen und in der Dragend-Funktion wieder zurücksetzen; in der Funktion "Marker B setzen" nur dann einen Marker setzen, wenn gerade NICHT gezogen wird (Flag ist nicht gesetzt).

2voto

Chris B Punkte 15124

Der Code, den ich Ihnen zuvor gegeben habe, hörte auf die ersten beiden Klicks und fügte für jeden einen Marker hinzu. Das Problem ist, dass, wenn Sie die erste Markierung ziehen, es das "Klick"-Ereignis erneut aufruft - und somit eine weitere Markierung an der gleichen Stelle hinzufügen.

Glücklicherweise ist die Klick-Ereignis lässt Sie wissen, ob ein Overlay angeklickt wurde. Führen Sie also nur den Code aus, der eine neue Markierung hinzufügt, wenn overlay null ist. Beachten Sie, dass Overlay kein Boolescher Wert ist.

var listener = GEvent.addListener(map, "click", function(overlay, latlng) {
  if (overlay == null) {
    // code to add new marker
  }
});

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