[OpenLayers-Users] Stop drawing when two points are close together / doubleclicking with a touch-screen

Jelmer Baas jelmerbs at xs4all.nl
Tue Jun 15 05:47:48 EDT 2010


Hi,

We are using OpenLayers for an application that will run on a laptop 
with a touchscreen. This makes double-clicking (to end drawing new 
geometry) very difficult. So instead I wanted to check (while drawing) 
if two points are very close together, and if so, stop drawing after that.

Right now I have:
myLayer.events.register('sketchmodified', myLayer, sketchModified);

function sketchModified(obj) {
  var tmp = obj.feature.geometry.components;
  var intCount = tmp[0].components.length;
   if (intCount > 4) {
    var p1 = map.getPixelFromLonLat(new 
OpenLayers.LonLat(tmp[0].components[intCount-4].x,tmp[0].components[intCount-4].y));
    var p2 = map.getPixelFromLonLat(new 
OpenLayers.LonLat(tmp[0].components[intCount-3].x,tmp[0].components[intCount-3].y));
    var x = Math.abs(p1.x - p2.x);
    var y = Math.abs(p1.y - p2.y);
    var length = Math.sqrt(x * x + y * y);
    if (length < 10) {
      alert('stop drawing here');
    }
  }
}

Although very wonky code, it actually does work. I however can't seem to 
figure out how to "submit" the geometry that has been drawn so far 
(i.e., simulate a double-click and let my control do it's save-refresh 
dance).

Anyone can help me with that?

And yes, I'm aware that the sketchmodified event is fired much more 
often than neccesary, that's not really an issue with touchscreens, 
though. Of course, better solutions (perhaps even a setting to make 
double-clicks easier? Or give double-clicks a few pixel tolerance?) are 
more than welcome!

P.S.: I also sent this same email from my work account, but somehow it 
didn't show up in the mailing list... Very odd.

Regards,
Jelmer Baas



More information about the Users mailing list