bei meinen aufgezeichneten Tracks kommt es immer wieder ab und an vor, dass Teile des Tracks verschoben sind. Das passiert in der Regel nach dem verlassen von Gebäuden, Tunneln usw.
Der Track ist dann in sich zwar stimmig (die Punkte relativ zueinander), aber eben nicht die absolute Position.
Im Moment verschiebe ich die Punkte dann von Hand (meist so 20), bis die Aufzeichnung wieder eine korrekte Absolutposition hat (was nicht schleichend passiert, sondern als harter Sprung).
Daher die Frage: Gibt es einen Weg, wie man mehrere Punkte ohne großen Aufwand verschieben kann und deren relative Position zueinander beibehält ?
(28.09.2011, 05:08)lundefugl Wrote: Daher die Frage: Gibt es einen Weg, wie man mehrere Punkte ohne großen Aufwand verschieben kann und deren relative Position zueinander beibehält ?
Nein, man kann mehrere Punkte in der Positionsliste rechts einfach per Drag-and-drop verschieben doch auf der Karte links sendet das Google Maps API nur 1 Event, wenn man eine der routen Blasen anklickt und verschiebt.
Wenn es sich um eine Straße handelt, könntest Du die Punkte löschen, den ersten und den letzten vor der Löschung markieren und durch Position/Zwischenpositionen einfügen... zumindest Positionen auf der Straße erhalten.
(28.09.2011, 08:07)routeconverter Wrote: Nein, man kann mehrere Punkte in der Positionsliste rechts einfach per Drag-and-drop verschieben doch auf der Karte links sendet das Google Maps API nur 1 Event, wenn man eine der routen Blasen anklickt und verschiebt.
Theoretisch würde mir da schon was einfallen, wie man das Problem evtl. lösen könnte. Allerdings weiß ich nicht, ob ich der Einzige mit dem Problem bin, oder ob es einen Benefit für Andere bringen würde.
Meine Idee wäre, dass man einfach mehrere Punkte in der Liste markiert, und dann beim Verschieben des Bubbles im Google-Fenster eine Taste (z.B. Ctrl oder Shift) drückt. Da der RouteConverter von der Selektion weiß, könnte er dann einfach alle Deltas auf die anderen selektierten Punkte übernehmen - ohne dass die Google-API das mitteilen muss.
(28.09.2011, 08:07)routeconverter Wrote: Wenn es sich um eine Straße handelt, ...
(28.09.2011, 08:07)routeconverter Wrote: Nein, man kann mehrere Punkte in der Positionsliste rechts einfach per Drag-and-drop verschieben doch auf der Karte links sendet das Google Maps API nur 1 Event, wenn man eine der routen Blasen anklickt und verschiebt.
Theoretisch würde mir da schon was einfallen, wie man das Problem evtl. lösen könnte. Allerdings weiß ich nicht, ob ich der Einzige mit dem Problem bin, oder ob es einen Benefit für Andere bringen würde.
Meine Idee wäre, dass man einfach mehrere Punkte in der Liste markiert, und dann beim Verschieben des Bubbles im Google-Fenster eine Taste (z.B. Ctrl oder Shift) drückt. Da der RouteConverter von der Selektion weiß, könnte er dann einfach alle Deltas auf die anderen selektierten Punkte übernehmen - ohne dass die Google-API das mitteilen muss.
Die Selektion bleibt beim Verschieben erhalten. Wenn man sich den Ausgangspunkt des Verschiebens merk, so kann man den Deltavektor bestimmen und auf die anderen Punkte anwenden. Was natürlich die Sache erst schick macht, ist das alle anderen Punkte gleichzeitig verschoben werden (sichtbar ).
(29.09.2011, 17:53)lundefugl Wrote: Allerdings weiß ich nicht, ob ich der Einzige mit dem Problem bin, oder ob es einen Benefit für Andere bringen würde.
Oder ob die Einschränkungen, die dadurch entstehen, für die anderen Nutzer akzeptabel sind weil sie sie fast nicht bemerken.
(29.09.2011, 17:53)lundefugl Wrote: Meine Idee wäre, dass man einfach mehrere Punkte in der Liste markiert, und dann beim Verschieben des Bubbles im Google-Fenster eine Taste (z.B. Ctrl oder Shift) drückt.
Ich habe nichts in der Google Maps API gefunden, um gedrückte Tasten während eines "dragend" Callbacks auszulesen.
(29.09.2011, 17:53)lundefugl Wrote: Da der RouteConverter von der Selektion weiß, könnte er dann einfach alle Deltas auf die anderen selektierten Punkte übernehmen - ohne dass die Google-API das mitteilen muss.
Das stimmt, doch wie sieht das für den Nutzer aus? Er hat eine einzige Position aus einer Menge von markierten Positionen ausgewählt, verschiebt nur die eine Position - erhält keine optische Rückmeldung, welche Positionen wirklich von der Verschiebung betroffen sind - und nachher sind alle markierten Positionen verschoben.
Wäre der Code in BaseMapView#movePosition() einfacher, könnte man das mal kurz ausprobieren. Damit das mit Tracks mit ein paar Hunderttausend Positionen auch funktioniert, ist das recht gut optimiert.
(30.09.2011, 10:06)routeconverter Wrote: Ich habe nichts in der Google Maps API gefunden, um gedrückte Tasten während eines "dragend" Callbacks auszulesen.
(29.09.2011, 17:53)lundefugl Wrote: Da der RouteConverter von der Selektion weiß, könnte er dann einfach alle Deltas auf die anderen selektierten Punkte übernehmen - ohne dass die Google-API das mitteilen muss.
Das stimmt, doch wie sieht das für den Nutzer aus? Er hat eine einzige Position aus einer Menge von markierten Positionen ausgewählt, verschiebt nur die eine Position - erhält keine optische Rückmeldung, welche Positionen wirklich von der Verschiebung betroffen sind - und nachher sind alle markierten Positionen verschoben.
Wenn ich dich richtig verstanden habe, scheitert es eigentlich an der Tasten-Erkennung. Dann gäbs keine Überraschungen für den Benutzer, denn er hat die Taste ja bewusst gedrückt.
Da ich die Google-API und vor allem deren Komponente nicht kenne, eine Frage.
Wenn man per "java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(..., AWTEvent.KEY_EVENT_MASK)" einen globalen Listener anmeldet, löst der auch aus, wenn sich der Focus bei Google befindet ? Wenn ja, so könnte man sich über die Key-Up/Down-Events den aktuellen Zustand der Taste merken und diesen im Callback von Google abfragen.
03.10.2011, 10:27 (This post was last modified: 03.10.2011, 10:27 by routeconverter.)
(03.10.2011, 05:44)lundefugl Wrote: Wenn ich dich richtig verstanden habe, scheitert es eigentlich an der Tasten-Erkennung.
Jein - Shift ist in den Vorabversionen bereits belegt, um die Selektion auf der Karte zu erweitern.
(03.10.2011, 05:44)lundefugl Wrote: Wenn man per "java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(..., AWTEvent.KEY_EVENT_MASK)" einen globalen Listener anmeldet, löst der auch aus, wenn sich der Focus bei Google befindet ? Wenn ja, so könnte man sich über die Key-Up/Down-Events den aktuellen Zustand der Taste merken und diesen im Callback von Google abfragen.
So einfach ist es leider nicht: die Karte wird durch einen komplett eigenständigen Prozeß dargestellt. RouteConverter sieht nur optisch wie ein Programm aus, in Wahrheit sind es zwei: RouteConverter mit Menüs, Positionsliste, Dateien lesen/schreiben und ein Webbrowser, der die Karte darstellt. Technisch anspruchsvoll ;-) Das heißt, der RouteConverter-Prozeß sieht die Tastendrücke des Webbrowsers nicht, denn der Teil des Bildschirms gehört dem Webbrowser. Und der wird eher so programmiert:
Code:
function addListener(marker) {
google.maps.event.addListener(marker, "dragend", function() {
var position = marker.getPosition();
var index = marker.index_;
callJava("move-position/" + index + "/" + position.lat() + "/" + position.lng());
});
}
31.12.2011, 12:10 (This post was last modified: 31.12.2011, 12:11 by lundefugl.)
Hallo Christian,
evtl. hätte ich auch hier einen Lösungsansatz. Bei Mousmove erhält man den Status von Ctrl, Alt und Shift mit.
Da beim Verschieben von Markern wohl meist die Maus bewegt wird, könnte man sich den Status einfach vorher merken.
Eine bisher nicht verwendete Kombination (z.B. Alt+Ctrl ??) müsste sich doch für den Multi-Move finden lassen - oder ?
Natürlich weiss ich nicht, was die ganzen Browser dazu sagen, da ich den Code aus dem Internet habe. Dort war von Firefox und dem IE die Rede. Chrome, Safari, Opera usw. wäre wohl wieder erst zu testen...
Anbei mal ein Experimentalcode von mir, der auf alle 3 Tasten reagiert.
evtl. hätte ich auch hier einen Lösungsansatz. Bei Mousmove erhält man den Status von Ctrl, Alt und Shift mit.
Da beim Verschieben von Markern wohl meist die Maus bewegt wird, könnte man sich den Status einfach vorher merken.
Eine bisher nicht verwendete Kombination (z.B. Alt+Ctrl ??) müsste sich doch für den Multi-Move finden lassen - oder ?
Natürlich weiss ich nicht, was die ganzen Browser dazu sagen, da ich den Code aus dem Internet habe. Dort war von Firefox und dem IE die Rede. Chrome, Safari, Opera usw. wäre wohl wieder erst zu testen...
Anbei mal ein Experimentalcode von mir, der auf alle 3 Tasten reagiert.
Gruß
Thomas
Die Ctrl Taste ist für Mac schon belegt.
Code:
/**
* @name KeyDragZoom for V3
* @version 2.0.5 [December 8, 2010]
* @author: Nianwei Liu [nianwei at gmail dot com] & Gary Little [gary at luxcentral dot com]
* @fileoverview This library adds a drag zoom capability to a V3 Google map.
* When drag zoom is enabled, holding down a designated hot key <code>(shift | ctrl | alt)</code>
* while dragging a box around an area of interest will zoom the map in to that area when
* the mouse button is released. Optionally, a visual control can also be supplied for turning
* a drag zoom operation on and off.
* Only one line of code is needed: <code>google.maps.Map.enableKeyDragZoom();</code>
* <p>
* NOTE: Do not use Ctrl as the hot key with Google Maps JavaScript API V3 since, unlike with V2,
* it causes a context menu to appear when running on the Macintosh.
(31.12.2011, 12:10)lundefugl Wrote: Eine bisher nicht verwendete Kombination (z.B. Alt+Ctrl ??) müsste sich doch für den Multi-Move finden lassen - oder ?
Das ist wohl das Problem. Ctrl, Alt+Ctrl sind schon belegt. Wahrscheinlich klappt noch nichteinmal das auf dem Mac, aber entsprechende Berichte habe ich noch nicht erhalten.
(31.12.2011, 12:10)lundefugl Wrote: Natürlich weiss ich nicht, was die ganzen Browser dazu sagen, da ich den Code aus dem Internet habe. Dort war von Firefox und dem IE die Rede. Chrome, Safari, Opera usw. wäre wohl wieder erst zu testen...
Wichtig sind nur Internet Explorer 6-9 unter Windows und WebKit 1.2 unter Mac OS X und Linux. Details dazu in der Eclipse SWT FAQ.