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

6
我想使用openlayers制作地图,但是需要以一种独特的方式居中。例如,我有一个12/2045/-1362的z/x/y坐标,如何将其转换为经度/纬度?这与以下链接的情况完全相反:如何通过在Leaflet地图上单击来获取瓦片的X Y Z坐标 我很难理解上面链接的逻辑并进行反演。我希望在座的各位中有人拥有这方面的经验或者已有的公式。谢谢。
稍后,我将用这种方式在我的地图中心呈现:
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
          });

希望我的问题被更好地理解,谢谢。 编辑:已添加代码

对我来说,不太清楚,你是在寻找永久链接吗? - Jonatas Walker
我已经阅读了链接,抱歉。不,你需要使用我创建的链接中的现有代码,并根据瓦片值12/2045/-1362将中心值转换为纬度/经度进行更改。这可行吗? - The Bassman
我不这么认为。让我们看看别人怎么说,同时我猜你需要重新考虑你的使用情况。 - Jonatas Walker
你是从哪里/怎么得到这个 12/2045/-1362 的? - Jonatas Walker
那个例子中的坐标是什么意思?请给我解释一下。我不是GIS专家,只是从那里获取了信息。如果我的信息有误,也许你可以帮助我理解实际的xyz坐标是什么。 - The Bassman
显示剩余3条评论
1个回答

7
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瓦片坐标(原点在左上角)


@AlvinLindstam,你能帮我回答这个问题吗:http://gis.stackexchange.com/questions/173646/calculate-tiles-x-y-z-for-current-view-or-extent-in-openlayers 谢谢! - John Smith
@Alvin Lindstam... 点击时获取结果的代替方法是,是否可以注册生成的瓦片并将所有结果保存在某种文本文件中,最好是geojson格式:{"type": "Feature", "properties": {"tile": "10, 510, -341"}, "geometry": {"type": "Point", "coordinates": [-58703.63772301562, 6711782.579664757]}}。 - newbie_girl
@Alvin Lindstam 或 csv:10,510,-341,-78271.51696402207,6692214.700423751,-39135.75848200917, 6731350.458905762,58703.63772301562, 6711782.579664757(z,x,y,瓦片左下角,瓦片右上角,x中心,y中心) - newbie_girl
@newbie_girl:当然,但这与本问题无关。如果您找不到解决方案,请发布一个新问题。 - Alvin Lindstam
@AlvinLindstam 感谢您的快速回复...请看一下这个问题:http://stackoverflow.com/questions/40344476/how-to-register-coordinates-of-all-produced-custom-tiles-and-save-them-as-a-text - newbie_girl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接