我正在地图上注册“点击”事件,以获得鼠标点击的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未定义?
如何在平板电脑上使用触控时获取触控坐标?
答案 0 :(得分:0)
从touchstart事件中获取坐标并不容易。 Touchstart事件附带一个触摸数组,每个数组包含一些坐标,但使用不同的属性。 OpenLayers规范化OpenLayers.Event类方法getTouchClientXY中的touchstart事件。
另外,我无法在图层类中找到任何click / touchstart事件。也许你正在使用其他一些子类或自定义的子类......
但是,根据您的需要,您可以
答案 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)