... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Koordinaten aus der Karte übernehmen
#1
Hallo Christian,

wie besprochen Fortsetzung als eigener Thread:

In einem der Beispiele habe ich fast genau das gefunden, was wir brauchen: Man klickt in die Karte (nicht zu lange, sonst wird es ein map drag) und erhält die Geokoordinaten:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Google Maps JavaScript API Example:     Reverse Geocoder</title>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA"
            type="text/javascript"></script>
    <script type="text/javascript">

    var map;
    var geocoder;
    var address;

    function initialize() {
      map = new GMap2(document.getElementById("map_canvas"));
      map.setCenter(new GLatLng(48.211874,11.316919), 15);
      map.setUIToDefault();
      GEvent.addListener(map, "click", getAddress);
      geocoder = new GClientGeocoder();
    }
    
    function getAddress(overlay, latlng) {
      if (latlng != null) {
        address = latlng;
        geocoder.getLocations(latlng, showAddress);
      }
    }

    function showAddress(response) {
      map.clearOverlays();
      if (!response || response.Status.code != 200) {
        alert("Status Code:" + response.Status.code);
      } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
        marker = new GMarker(point);
        map.addOverlay(marker);
        marker.openInfoWindowHtml('<b>latitude longitude:</b>' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '<br>');
      }
    }


    </script>
  </head>

  <body onload="initialize()">
    <div id="map_canvas" style="width: 500px; height: 400px"></div>
  </body>
</html>

Nun ist in unserem Fall ja bereits ein Punkt in die Karte eingezeichnet. Ob zu testen ob der Klick bei einem solchen Punkt auch funktioniert, müßte ich wissen, wie man so einen Punkt einzeichnen läßt.

Ich hoffe, Du weißt, wie Du die Javascriptvariablen place.Point.coordinates[1] in Dein Javaprogramm reinbekommst, damit Du dann den passenden Positionspunkt markieren kannst.

Im Fall des schon vorhandenen Punktes ist die Frage, ob das Ergebnis solange exakt die Koordinaten des Punktes sind, solange man sich mit der Maus innerhalb des Kreises mit dem Punkt befindet, oder ob Du dann mit einer Toleranz in der Positionsliste suchen mußt.

Ooops, jetzt sehe ich grade, dass diese Aufrufe noch der API V2 angehören und die wohl demnächst nicht mehr unterstützt werden.

Bin auf der Suche nach den entsprechenden V3 Aufrufen. Vielleicht gibt es die Beispiele auch in V3.

Das Beispiel https://code.google.com/intl/en/apis/map...imple.html könnte bis auf die nicht unbedingt gewünschte Gall-Peters Projektion noch besser passen, ist zumindest schon V3.

Bis dahin kannst Du mir ja sagen, ob Dir das schon was hilft.
Gruß, onurbi
Reply
#2
(17.08.2010, 20:23)onurbi Wrote: In einem der Beispiele habe ich fast genau das gefunden, was wir brauchen: Man klickt in die Karte (nicht zu lange, sonst wird es ein map drag) und erhält die Geokoordinaten:

Eigentlich will man doch eine Fläche aufspannen, in der alle Positionen markiert werden, oder? D.h. Maustaste drücken, Maus bewegen, Maustaste loslassen?

(17.08.2010, 20:23)onurbi Wrote: Nun ist in unserem Fall ja bereits ein Punkt in die Karte eingezeichnet. Ob zu testen ob der Klick bei einem solchen Punkt auch funktioniert, müßte ich wissen, wie man so einen Punkt einzeichnen läßt.

Ich verwende GMarker für die Markierung von Positionen. Und auf denen kann ich auch dann per rechter Maustaste das "Remove" auswerten und auslösen. Bloß umgekehrt geht es nicht, weil man die Koordinaten der Position beim Klicken nie auch nur annähernd trifft.

(17.08.2010, 20:23)onurbi Wrote: Im Fall des schon vorhandenen Punktes ist die Frage, ob das Ergebnis solange exakt die Koordinaten des Punktes sind, solange man sich mit der Maus innerhalb des Kreises mit dem Punkt befindet, oder ob Du dann mit einer Toleranz in der Positionsliste suchen mußt.

Ok, ich hätte weiterlesen sollen. Bevor man mit so etwas wie Toleranzbereichen arbeitet könnte man es auch mit dem von mir oben vorgeschlagenen Selektionsrechteck versuchen, da dies nachvollziehbarer arbeitet und mehrere Positionen markieren kann.

(17.08.2010, 20:23)onurbi Wrote: Ooops, jetzt sehe ich grade, dass diese Aufrufe noch der API V2 angehören und die wohl demnächst nicht mehr unterstützt werden.

3 Jahr dauert es noch, bis V2 entfernt wird, darum habe ich es nicht so eilig auf V3 umzusteigen. Das V3 Interface ist kleiner als das V2, irgendwann im nächsten Jahr müßte ich/irgendwer man versuchen, alles JavaScript auf V3 zu portieren und zu schauen, was dann nicht mehr funktioniert.

(17.08.2010, 20:23)onurbi Wrote: Bin auf der Suche nach den entsprechenden V3 Aufrufen. Vielleicht gibt es die Beispiele auch in V3.

Suche bei V2.

(17.08.2010, 20:23)onurbi Wrote: Bis dahin kannst Du mir ja sagen, ob Dir das schon was hilft.

Toleranzbereich oder Selektionsbereich? Vielleicht geht bei letzterem doch etwas, ohne, daß man gleich ins Draggen kommt?
--
Christian
Reply
#3
Quote:Eigentlich will man doch eine Fläche aufspannen, in der alle Positionen markiert werden, oder? D.h. Maustaste drücken, Maus bewegen, Maustaste loslassen?

Vom GUI her nicht nur. Ich suche aber auch einen Weg, der genauso aussieht wie wenn ich die Tropfenmarker verschiebe. Es hat schon was einen einzelnen Punkt auswählen zu können.

Ich fürchte aber, dass es nur mit Aufziehrechteck geht.

Wie ich den Eindruck von den Beispielen gewonnen habe, unterstützt die API es nicht, in der Nähe von Markern (GMark) die genauen Koordinaten der Marke zu liefern, solange die Maus sich innerhalb des Kreises befindet.

Quote:3 Jahr dauert es noch, bis V2 entfernt wird, darum habe ich es nicht so eilig auf V3 umzusteigen.

Ok, hab nicht gesehen, das läßt einem noch Luft.

Quote:Toleranzbereich oder Selektionsbereich? Vielleicht geht bei letzterem doch etwas, ohne, daß man gleich ins Draggen kommt?

Gut, Problem erkannt.

Mit der neuen Zoomfunktion, die maps anbietet, geht es. Da muß man rechts oben erst auswählen, dass man die verwenden möchte, dann ist der Drag-Mode für ein einziges Rechteck abgeschaltet. Aber dafür ist m.E. kein Beispiel zu finden.

Aber über das dortige Forum müßte man die Frage stellen können, ob die schon verraten, wie die Methode heißt, den Dragmode abzustellen. Ich frage da mal nach.
Gruß, onurbi
Reply
#4
(19.08.2010, 07:16)onurbi Wrote: Wie ich den Eindruck von den Beispielen gewonnen habe, unterstützt die API es nicht, in der Nähe von Markern (GMark) die genauen Koordinaten der Marke zu liefern, solange die Maus sich innerhalb des Kreises befindet.

Nein, ich fürchte, man muß die Koordinaten von Mausklicks/Mausbewegungen nutzen - hat man die von 2 Ecken kann ich im Java-Teil die enthaltenen Positionen bestimmen, markieren und die Tropfen sind auf der Karte.

(19.08.2010, 07:16)onurbi Wrote: Mit der neuen Zoomfunktion, die maps anbietet, geht es.

Ich finde die nicht. Wo ist die versteckt?

(19.08.2010, 07:16)onurbi Wrote: Aber über das dortige Forum müßte man die Frage stellen können, ob die schon verraten, wie die Methode heißt, den Dragmode abzustellen. Ich frage da mal nach.

http://code.google.com/intl/en/apis/maps...leDragging - könnte man z.B. mit der rechten Maustaste anstoßen, man muß dann ein Rechteck auf der Karte malen abhängig von der Start und der aktuellen Positionen. Dann beim 2. Mausklick hat man die Koordinaten?
--
Christian
Reply
#5
Quote:Nein, ich fürchte, man muß die Koordinaten von Mausklicks/Mausbewegungen nutzen - hat man die von 2 Ecken kann ich im Java-Teil die enthaltenen Positionen bestimmen, markieren und die Tropfen sind auf der Karte.

Meinst Du mit "Positionen bestimmen", aus Screen-Korrdinaten Geokoordinaten auszurechnen?

Die Tropfen werden dann auch mit GMark gesetzt?

Quote:Ich finde die nicht. Wo ist die versteckt?

Hab eine Bilderserie angehängt.

Quote:http://code.google.com/intl/en/apis/maps...leDragging

Ich habe den Aufruf mal in das erste Beispiel von gestern eingebaut: Kein Unterschied zu ohne. Das Dragen ist noch immer aktiv.

Quote: - könnte man z.B. mit der rechten Maustaste anstoßen, man muß dann ein Rechteck auf der Karte malen abhängig von der Start und der aktuellen Positionen. Dann beim 2. Mausklick hat man die Koordinaten?

Wenn wir dazu einen Weg fänden wäre es super!


Attached Files Thumbnail(s)
           
Gruß, onurbi
Reply
#6
(19.08.2010, 20:25)onurbi Wrote: Meinst Du mit "Positionen bestimmen", aus Screen-Korrdinaten Geokoordinaten auszurechnen?

Die Mousevents enthalten Geokoordinate.

(19.08.2010, 20:25)onurbi Wrote: Die Tropfen werden dann auch mit GMark gesetzt?

Ja, das sind GMarker.

(19.08.2010, 20:25)onurbi Wrote:
Quote:Ich finde die nicht. Wo ist die versteckt?

Hab eine Bilderserie angehängt.

Ok, ein Google Labs Feature.
--
Christian
Reply
#7
Quote:Ich habe den Aufruf mal in das erste Beispiel von gestern eingebaut: Kein Unterschied zu ohne. Das Dragen ist noch immer aktiv.

War mein Fehler, hatte nicht "map." vor das disableDragging() geschrieben.

Das Dragen ist damit gestoppt. Jetzt suche ich noch nach einem Weg ein Rechteck aufzuziehen und die Eckpunkte als Event zu bekommen.
Gruß, onurbi
Reply
#8
(19.08.2010, 21:07)onurbi Wrote: Das Dragen ist damit gestoppt.

Gut!
--
Christian
Reply
#9
Es gibt da ein Projekt für gzoom:

http://earthcode.com/blog/2006/07/gzoom.html

Und

http://gmaps-utility-library-dev.googlec...mples.html

Man müßte dies näher anschauen. Das aufgezogene Rechteck müßte ja relevante Daten liefern, um den Zoom berechnen zu können.

Die Analyse schaffe ich aber heute nicht mehr. Eher ein Wochenendprojekt...
Gruß, onurbi
Reply
#10
Hallo Christian,

hab mir DragZoom mal angeschaut.

Sorry, da müßte ich mich in Javascript einarbeiten. Das kriege ich zeitlich nicht hin.

Wenn Du wieder Zeit hast, fuxt Du Dich sicher leichter rein.
Gruß, onurbi
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)