2015-08-17 192 views
1

我想使用openlayers製作地圖,但以一種獨特的方式爲中心。例如,我有一個12/2045/-1362的z/x/y座標,我如何將它轉換爲經度/緯度?這是相反的極端:How to get X Y Z coordinates of tile by click on Leaflet map將瓦片的xyz座標轉換爲經度/緯度

這對我來說很難得到上述鏈接的邏輯並將其反轉。我希望這裏有人有這方面的經驗或現成的公式。由於

後來我將在渲染我的地圖像這樣的中心:

var z = 12; 
var x = 2045; 
var y = -1362; 

function convertXYZtoCoor(z, x, y) { 
    // code here 
    return [lng, lat]; 
} 

var coor = convertXYZtoCoor(z, x, y); 
var view = new ol.View({ 
        center: ol.proj.transform(
         [coor[0], coor[1]], 'EPSG:4326', 'EPSG:3857'), 
        zoom: z 
      }); 

var map = new ol.Map({ 
       layers: [ 
        new ol.layer.Tile({ 
         source: new ol.source.OSM() 
        }) 
       ], 
       target: 'map', 
       view: view 
      }); 

希望我的問題是瞭解更多的感謝。

編輯:添加代碼

+0

對我而言,目前還不清楚,你在找[永久鏈接](http://openlayers.org/en/v3.8.2/examples /permalink.ht毫升#地圖= 2/0/0/0)? –

+0

我看了鏈接抱歉。不,您從我創建的鏈接中獲取現有代碼,只需將基於瓦片值12/2045/-1362的中心值轉換爲lat/lng即可更改中心值。這可能嗎? –

+0

我不這麼認爲。讓我們看看其他人說的,同時我的猜測是你重新思考你的用例。 –

回答

3
var tileExtent = function(tileCoord){ 
    var z = tileCoord[0]; 
    var x = tileCoord[1]; 
    var y = tileCoord[2]; 
    var tileGridOrigin = tileGrid.getOrigin(z); 
    var tileSizeAtResolution = tileGrid.getTileSize(z) * tileGrid.getResolution(z); 
    return [ 
     tileGridOrigin[0] + tileSizeAtResolution * x, 
     tileGridOrigin[1] + tileSizeAtResolution * y, 
     tileGridOrigin[0] + tileSizeAtResolution * (x + 1), 
     tileGridOrigin[1] + tileSizeAtResolution * (y + 1) 
    ]; 
} 

您可以測試/驗證在http://jsfiddle.net/eurx57s7/

注(從OL3例如被盜,但在這裏也適用於): 瓦片座標OL3標準化瓦座標(原點左下),而不是OSM瓦片座標(原點左上角)

+0

謝謝!!這是一個很好的解決方案!正是我需要的 –

+0

@AlvinLindstam你能否幫我解決這個問題:http://gis.stackexchange.com/questions/173646/calculate-tiles-xyz-for-current-view-or-extent-in-openlayers謝謝! –

+0

@Alvin Lindstam ...而不是在點擊時獲得結果,是否可以註冊生成的圖塊並將所有結果保存在某種文本文件中,最好是geojson:{「type」:「Feature」,「properties」: {「tile」:「10,510,-341」},「geometry」:{「type」:「Point」,「coordinates」:[-58703.63772301562,6711782.579664757]}} –