Mehr

OpenLayers-Steuerelemente zum Messen und Zeichnen zeigen die Skizzen beim Verschieben in Touch-Geräten nicht an

OpenLayers-Steuerelemente zum Messen und Zeichnen zeigen die Skizzen beim Verschieben in Touch-Geräten nicht an


Ich habe eine GIS-API, die die Measure- und drawFeature-Steuerelemente von OpenLayers 2.13 verwendet. Aber lassen Sie uns nur über die Maßnahmensteuerung sprechen, denn die Themen hängen sicherlich zusammen.

Wie ich in diesem CodePen zeige, soll das Measure Control die Sofortmaßnahmen anzeigen, d.h. bei Mausbewegung drucken.

measureControl = new OpenLayers.Control.Measure(OpenLayers.Handler.Path, measureControlOptions); map.addControl(measureControl); measureControl.events.register('measure', measureControl, function(e) { printOutput(e); }); measureControl.events.register('measurepartial', measureControl, function(e) { printOutput(e); });

Wenn ich dieses Beispiel in einem Touch-Gerät verwende, kann ich natürlich das onmousemove-Ereignis nicht verwenden. Stattdessen ist das Verhalten wie folgt:

  • 1. Tippen Sie auf, um die Messung zu starten
  • 2. Tippen Sie auf, um die Messung zu beenden

Es zeigt die gewünschte Länge an, aber ich kann keine genaue Messung durchführen, da ich die Maße sehen möchte, während ich meinen Finger auf dem Touchscreen bewege.

Ich bin mit Berührungsereignissen nicht sehr vertraut, daher entschuldige ich mich, wenn dies eine dumme Frage ist. aber gibt es eine einfache Möglichkeit, das Mausverhalten auf dem Touch-Gerät nachzuahmen?

Das gewünschte Verhalten ist etwa:

  • unten tippen --> beginnt zu messen
  • Tippen Sie auf die Bewegung (ohne den Finger anzuheben) --> misst weiter und zeigt bei jeder Bewegung die neue Messung an
  • auf tippen --> stoppt die Messung

Ich denke, Sie müssen sich das touchmove-Ereignis anhören, haben dies jedoch noch nicht getestet.

Wenn es nicht unbedingt per touchmove sein muss, können Sie sich dieses Beispiel mit einer optimierten Messsteuerung für mobile Geräte ansehen.

http://rawgit.com/pgiraud/OL-MobileMeasure/master/examples/mobile-measure.html

UPDATE1: Habe es gerade ausprobiert und es funktioniert. Sie können den Ereignispixelwert des touchmove-Ereignisses nehmen und in Kombination mit map.getLonLatFromLayerPx(e.xy) verwenden, um einen neuen Scheitelpunkt für die Linie zu erhalten.

Hier finden Sie zwei Arbeitsbeispiele:

http://rawgit.com/neogis-de/OL_MobileMeasuring/master/index.html

http://rawgit.com/neogis-de/OL_MobileMeasuring/master/index2.html

(mit 5px-Verschiebung, damit Sie das Ende der Messlinie sehen können)


Schau das Video: Openlayers 6 Tutorial #9 - Interaction With Vector Features