我正在使用地图编程页面,我需要在地图上捕获点击/单击的位置并存储坐标。我正在使用 OpenLayers js。在桌面浏览器(IE/FF/Chrome)上,这工作正常。在移动设备上,点击在默认的 Android 浏览器上被正确捕获(在真实设备和模拟器中)。
然而,在移动 webkit 浏览器(iPhone Safari 和 Android Chrome Beta)上,我们遇到了一个问题,即在实际点击高几个像素(朝北)处捕获点击。该错误未修复(因此,我不能只在事件的 xy 上添加 100 来重新校准顶部。)
这是我用作点击处理程序的代码:
OpenLayers.Control.ClickHandler = 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) {
that.inputLonLat_EPSG4326 = null;
var lonlat = that.inputMap.getLonLatFromViewPortPx(e.xy);
that.logMessage("XY " + e.xy);
that.logMessage("LonLoat " + lonlat);
that.inputMarkers.clearMarkers();
that.inputMarkers.addMarker(new OpenLayers.Marker(lonlat,that.icons["green"].clone()));
lonlat.transform(that.inputMap.getProjectionObject(), new OpenLayers.Projection("EPSG:4326"));
that.inputLonLat_EPSG4326 = lonlat;
// For the moderation sections
$('#alertLatitude').val(that.inputLonLat_EPSG4326.lat);
$('#alertLongitude').val(that.inputLonLat_EPSG4326.lon);
//lonLat2.transform(that.inputMap.getProjectionObject(), new OpenLayers.Projection("EPSG:4326"));
that.logMessage("Stored lat " + that.inputLonLat_EPSG4326.lat);
that.logMessage("Stored lon " + that.inputLonLat_EPSG4326.lon);
that.callFunction(that.inputMapListener, e);
}
});
我应该做些不同的事情吗?有没有其他人在使用 OpenLayers 时看到移动 webkit 浏览器上的不准确问题?