2015-11-06 53 views
2

座標錯了,我用的OpenLayers 3.10.1以下代碼:map.on(「點擊」)在Firefox

map.on('click', function (map, evt) { 
    var mouseCoords = [evt.originalEvent.offsetX, evt.originalEvent.offsetY]; 

    alert(mouseCoords); 
}); 

當我點擊儘可能靠近我可以在地圖的左上角在IE或Chrome瀏覽器中,我會從地圖div左上角的鼠標座標偏移得到一個警告,即[3,4]這樣的明智之舉。

但是,當我嘗試相同的東西,我得到的鼠標座標相對於瀏覽器窗口,而不是地圖股利。有人知道爲什麼嗎?我是否使用過時的方式來查找鼠標座標(最終我可以計算哪個功能被點擊)?

+0

也許我沒有得到你想要的。 –

+0

沒有,這正是我想要的東西,謝謝! –

+0

好啊,不客氣! –

回答

3

一些替代方案:

map.on('click', function(evt){ 
    console.info(evt.pixel); 
    console.info(map.getPixelFromCoordinate(evt.coordinate)); 
}); 
+0

謝謝,我剛剛在這裏玩了幾件事,'evt.pixel'似乎給出了相對於左上角地圖視口的正確值。 –

+0

我還將事件類型更改爲「singleclick」,以便更具體。 –

0

下面的代碼對我的作品(openlayer 4.4,角4+)

_initMap() { 
    console.info("_initMap"); 
    this.mapW = new ol.Map({ 
     layers: [ 
     new ol.layer.Tile({ 
      source: new ol.source.OSM() 
     }) 
     ], 
     target: 'myMapDiv', 
     controls: ol.control.defaults({ 
      attributionOptions: /** @type {olx.control.AttributionOptions} */ ({ 
      collapsible: false 
      }) 
     }), 
     view: new ol.View({ 
      center: ol.proj.fromLonLat([this.lon, this.lat]);, 
      zoom: 12 
     }) 
    }); 
    const theMap = this.mapW; 
    // display on click 
    this.mapW.on('click', function(evt) { 
    /* // you want to detect feature click 
    var feature = theMap.forEachFeatureAtPixel(evt.pixel, 
     function(feature, layer) { 
      return feature; 
     }); 
    if (feature) { 
     var fname = feature.getProperties().name; 
     console.info("feature clicked:" + fname); 
     return; 
    } 
    */ 
    console.info(evt.coordinate); 
    console.info(ol.proj.toLonLat(evt.coordinate)); // <=== coordinate projection 
    }); 

JS控制檯結果(點擊接近格勒諾布爾在法國時):

(2) [637000.3050167585, 5652336.68427412] 
(2) [5.722271099853512, 45.19540527485873]