GoogleMaps-API: LonLat ermitteln?
split.s
- javascript
Habe folgendes Mini-Map gebastelt:
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.setUIToDefault();
GEvent.addListener(map, 'click', function () {
alert("
});
}
}
Nun will ich in diesem alert() die LonLat-Koordinaten des Klicks ermitteln und anzeigen!
Weiss jemand wie ich sowas anstelle?
ich bin mit der Doku leider etwas überfordert :-(
Hello,
es gibt ein Beispiel von exakt dem, was du suchst. Schau in den Quelltext der Seite, dort findest du den entsprechenden Eventhandler.
MfG
Rouven
DANKE!
Allerdings stimmen die Daten dort absolut nicht mit denen von der openDeoDB überein!
Was ich suche ist eigentlich etwas anderes.
Ich will, dass die Leute auf der Karte eines dieser roten Icon-Markierungen plazieren können. Anschließend will ich per AJAX die GeoKoordinaten, also Lon und Lat, an meinen Server übertragen. Dadurch soll eine Umkreissuche realisierbar werden.
Serverseitig ist alles fertig. Aber ich komme absolut nicht mit Javascript zurecht, dabei brauche ich nur diese eine Funktion.
Hallo split.s,
hast du dir das Beispiel denn mal angesehen: hier wird bei Klick der Wert von "map.fromLatLngToDivPixel(latlng)" im Infofenster ausgegeben, also die Pixelkoordinaten im angezeigten Kartenfenster. Lass dir mal "latlng" direkt ausgeben, dann siehst du, dass es die Geokoordinaten sind.
Gruß, Jürgen
Verstehe, hab ich genacht und funktionieren tut es auch.
Wie bekomme ich denn dieses komische infofenster durch diesen roten Marker ersetzt? Es gibt ja diese roten Tropfenförmigen Teile die man irgendwo reinstellen kann.
Hallo split.s,
in diesem Beispiel werden Marker gesetzt. Du musst in dem anderen Beispiel nur das Infofenster durch die Marker ersetzen:
map.openInfoWindow(latlng, myHtml); // Infofenster
map.addOverlay(new GMarker(latlng)); // Marker
Gruß, Jürgen
Danke!
Aber jetzt bleibt überall wo ich mal geklickt habe ein Marker zurück! Ich will doch nur den Marker dort haben wo ich zuletzt geklickt habe.
Ich brauche für eine Umkreissuche nur die Koordinaten des Klicks. Aber wenn er falsch geklickt hat und nochmal klickt, stehen dort zwei von den Dingern rum!
Hello,
Aber jetzt bleibt überall wo ich mal geklickt habe ein Marker zurück! Ich will doch nur den Marker dort haben wo ich zuletzt geklickt habe.
du hättest es gerne mundgerecht serviert habe ich den Eindruck...ist es nicht schneller, das selbst aus den Beispielen bzw. der API herauszufischen?
GMap2.removeOverlay
MfG
Rouven
Und wie setze ich ein? Auf removeOverlay bin ich auch schon gestoßen. Soll ich das jetzt da rein schreiben oder wie?
map.removeOverlay();
map.addOverlay(new GMarker(latlng));
???
Hello,
map.removeOverlay();
hast du das mal in DER VON MIR VERLINKTEN(!) Seite nachgeschlagen? Die Methode kriegt einen Parameter. Oh Wunder, den des Overlays das entfernt werden soll. Was willst du entfernen? Deinen vorherigen Marker. Merk ihn dir, übergib ihn ihr.
MfG
Rouven
Doch klar! Aber da steht ja null praxiswissen.
Was hat denn z.B. removeOverlay überhaupt mit meinem Problem zu tun?
Mal ein beispiel:
...
var marker new GMarker(latlng);
map.addOverlay(marker);
...
Das löschen muss doch bereits erfolgen, BEVOR dieser neuer marker überhaupt hinzugefügt wird.
Das heisst "marker" existiert ja zu dem Zeitpunkt noch garnicht, weil den letzten Marker will ich ja garnicht löschen! Im Gegenteil: Der letzte ist der einzige der mich interessiert!
Meine Frage ist folgende: Auf welches Element/Objekt muss ich removeOverlay() anwenden?
Hello,
var marker new GMarker(latlng);
Dann deklariere deine Variable marker global.
BEVOR du nun den bestehenden marker mit dem neuen überschreibst entfernst du den im vorherigen Schritt gemerkten.
falls (marker existiert)
entferne marker
marker = erstelle neuen marker
fuege marker der map hinzu
MfG
Rouven
Ah jetz hab ich verstanden! Funktioniert sogar ;)
Danke und schönes Wochenende!
Da hab ich noch ne Frage!
addListener gibt ja die Variable (?) latlng zurück.
Wenn ich jetzt latlng.match() ausführen will sagt er mir, dass latlng.match() keine Funktion ist!
Verstehe das nicht! Kann es sein, dass latlng kein String ist? Aber was bitte ist denn (7.993828193,38.3827737) sonst wenn kein String?
Hello,
addListener gibt ja die Variable (?) latlng zurück.
Nein, nein, nein,...
Bei addListener bewegst du dich im Umfeld von GEvent und bekommst einen GEventListener, mit dem du allerdings wenig anfangen kannst, aber in Wahrheit auch nicht willst, latlng ist schließlich nur ein Parameter für diesen Listener.
Wie du der Referenz von GMap, Abschnitt Coordinate Transformations, entnehmen kannst, arbeitest du an dieser Stelle mit einem GLatLng bzw. unter Umständen mit einem GPoint. Für beide existieren hervorragende getter/setter/toString-Methoden.
MfG
Rouven
Hallo split.s,
also ich würde auch sagen: den Steigbügel haben wir dir gehalten, aufsteigen musst du schon selbst.
Gruß, Jürgen