将瓦片的xyz坐标转换为经度/纬度

问题描述:

我想使用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

我不这么认为。让我们看看其他人说的,同时我的猜测是你重新思考你的用例。 –

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]}} –