OpenLayers获得接触点的坐标?

时间:2016-02-01 15:27:04

标签: javascript touch coordinates openlayers

我正在地图上注册“点击”事件,以获得鼠标点击的Lon和Lat,如下所示:

public class ComplexityOrder {    
    public static void main(String[] args) {    
        ComplexityOrder co = new ComplexityOrder();
        co.Order(1000);   
    }

    public double Order(int n) {
        int[] a = new int[10];
        a[0] = Fact(n);
        System.out.println("Factorial " + a[0]);
        return a[0];    
    }

    public static int Fact(int n) {
        if (n == 0 || n ==1) {
            return 1;
        } else {
            return n * Fact(n - 1);
        }
    }    
}

这在我的电脑上工作正常(点击),但不会在我的Android平板电脑上触发(触摸)。所以它会在点击时触发,但不会触摸。我必须将事件注册到我的图层,以便触摸它(https://gis.stackexchange.com/q/20859),如下所示:

map.events.register("click", map, function(e) {
   var lonlat = map.getLonLatFromPixel(e.xy);
});

这会被触发,但由于某种原因,event.xy未定义?

如何在平板电脑上使用触控时获取触控坐标?

3 个答案:

答案 0 :(得分:0)

从touchstart事件中获取坐标并不容易。 Touchstart事件附带一个触摸数组,每个数组包含一些坐标,但使用不同的属性。 OpenLayers规范化OpenLayers.Event类方法getTouchClientXY中的touchstart事件。

另外,我无法在图层类中找到任何click / touchstart事件。也许你正在使用其他一些子类或自定义的子类......

但是,根据您的需要,您可以

  1. 使用点处理程序创建drawfeature控件并收听featureadded事件
  2. 定义一个使用OpenLayers.Handler.Click的自定义控件(正确处理click / touchstart)
  3. 如果需要选择矢量要素,请使用SelectFeature控件
  4. 处理" touchstart"使用for循环在touches属性中找到xy坐标的事件

答案 1 :(得分:0)

我找到了一个适合我的解决方案。这也会触发点击事件:

OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {                
            defaultHandlerOptions: {
                'single': true,
                'double': false,
                'pixelTolerance': 0,
                'stopSingle': false,
                'stopDouble': false
            },

            initialize: function(options) {
                this.handlerOptions = OpenLayers.Util.extend(
                    {}, this.defaultHandlerOptions
                );
                OpenLayers.Control.prototype.initialize.apply(
                    this, arguments
                ); 
                this.handler = new OpenLayers.Handler.Click(
                    this, {
                        'click': this.trigger
                    }, this.handlerOptions
                );
            }, 

            trigger: function(e) {
                var coordinates = map.getLonLatFromViewPortPx(e.xy);
            }

        });

 var click = new OpenLayers.Control.Click();
                map.addControl(click);
                click.activate();

答案 2 :(得分:0)

我用了     e.clientX 代替     e.x 或触摸。 如果你想要在taphold.js看看我的代码         [http://ozonforages.free.fr/mobile.html]