OpenLayers获取接触点的坐标
OpenLayers get coordinates of touch points?
我正在地图上注册"点击"事件,以获得鼠标点击的 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 事件。
另外,我在图层类中找不到任何单击/触摸启动事件。也许您正在使用其他子类或自定义子类...
但是,根据您的需要,您可以
- 使用点处理程序创建绘制特征控件并侦听 FeatureAdd 事件
- 定义使用 OpenLayers.Handler.Click 的自定义控件(正确处理单击/触摸启动)
- 如果需要选择矢量要素,请使用"选择要素"控件
- 使用 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]
相关文章:
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- 查找带有边框的HTML5 Canvas(点击)事件的坐标
- 在坐标上模拟点击坐标js/jQuery
- ChartJS v2:点击坐标的比例值(时间比例)
- 通过鼠标点击获取X和Y坐标(javascript)
- 谷歌地图:获取点击或标记(x,y)像素坐标内的标记点击侦听器
- 获取在谷歌地图上点击的任何点的坐标
- 高图表散点图:点击事件时的警报坐标
- 检查坐标存在于直线的两个点之间
- 使用jquery获取相对于图片的点击坐标
- 通过“更改谷歌地图坐标”;点击”;
- 点击量角器中元素的给定坐标
- Phonegap IOS应用程序图像缩放多点触控
- 获取每次点击的鼠标坐标
- HTML 5 画布:如何检查所有线点坐标
- 将球体上的 3d 点转换为 UV 坐标
- 使用 d3 获取鼠标点击 svg 的坐标
- ngCordova触点在角度控制器内不可用
- 为ios、android等平台开发游戏是否需要触点启动和触点结束?
- 触点端再次触点启动