2016-02-01 97 views
0

我註冊在地圖上的「click」事件讓鼠標單擊這樣的經度和緯度:OpenLayers獲取觸點的座標?

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

這在我的電腦上工作正常(點擊),但沒有得到觸發我的Android平板電腦(觸摸)。所以它會在點擊時觸發,但不會觸動。我要註冊事件到我的層得到它的觸發觸摸(https://gis.stackexchange.com/q/20859)是這樣的:

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

這被觸發,但由於某種原因event.xy是不確定的?

如何在平板電腦上使用觸摸時獲得觸摸座標?

回答

0

從touchstart事件中獲取座標並不那麼容易。 Touchstart事件帶有一個觸摸數組,每個數組都包含一些座標,但使用不同的屬性。 OpenLayers在OpenLayers.Event類方法getTouchClientXY中標準化touchstart事件。

此外,我無法在圖層類中找到任何點擊/觸摸啓動事件。也許你正在使用一些其他子類或者自定義...

但是,根據您的需求,您可以

  1. 創建drawfeature控制,具有點的處理程序,並聽取了featureadded事件
  2. 定義使用OpenLayers.Handler.Click自定義控制(即處理點擊/正確touchstart)
  3. ,如果你需要選擇一個載體功能,使用SelectFeature控制
  4. 處理「touchstart」事件中使用一個for循環在中找到xy座標觸及財產
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();