OpenLayers获取接触点的坐标

OpenLayers get coordinates of touch points?

本文关键字:坐标 触点 接触 获取 OpenLayers      更新时间:2023-09-26

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

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

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

layer.events.register("touchstart", layer, function(e) {
 //e.xy is undefined
});

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

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

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

另外,我在图层类中找不到任何单击/触摸启动事件。也许您正在使用其他子类或自定义子类...

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

  1. 使用点处理程序创建绘制特征控件并侦听 FeatureAdd 事件
  2. 定义使用 OpenLayers.Handler.Click 的自定义控件(正确处理单击/触摸启动)
  3. 如果需要选择矢量要素,请使用"选择要素"控件
  4. 使用 for 循环处理"touchstart"事件,以在 touches 属性中查找 xy 坐标

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

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();

我使用 e.clientX而不是 e.x或触摸。如果你想要,请查看我的代码 在点击中.js [http://ozonforages.free.fr/mobile.html]