如何将 bing 地图四键转换为墨卡托坐标

Posted

技术标签:

【中文标题】如何将 bing 地图四键转换为墨卡托坐标【英文标题】:How to convert a bing maps quadkey to mercator coordinates 【发布时间】:2011-04-27 14:04:08 【问题描述】:

如何将 bing 地图四键(例如“03200320023”)转换为墨卡托虚拟地球 (epsg 3857) 坐标系中的坐标?

我有一个算法可以转换为经纬度坐标(例如,上面的四键是“-84.19921875,33.7243385314941,-84.0234375,33.8704147338867”)。然后我可以将经纬度转换为墨卡托坐标,但这在处理能力上听起来太贵了。

鉴于上述四键,我正在寻找的墨卡托虚拟地球结果是:“-9373014,4011415,-9353446,4030983”

更多上下文。我正在使用 bing 地图并使用 fastcgi 从 IIS 中的 mapserver 添加我正在服务的图层。我基本上想将 256x256 瓷砖的 bing maps quadkey 请求转换为 epsg 3857 中的 mapserver wms 查询。它适用于 epsg 4326 (wgs84) 以及当我从 wgs84 转换为 epsg 3857 时。但是性能不是我想要的到两阶段转换。

我也在gis.stackexchange.com上问过这个问题,现在已经回答了

【问题讨论】:

您的算法已经将其转换为墨卡托坐标系中的坐标。你有什么问题? 算法将其转换为 wgs84 中的纬度 - 还是我弄错了? 我已将问题编辑为墨卡托虚拟地球 (epsg 3857) IMO mercantor 投影并不那么昂贵,你有从 Mercantor 转换为 quadkey 的算法吗? 没有自动迁移的选项,但您可以考虑在GIS StackExchange.上询问 【参考方案1】:

为了完整起见,这里是我用来解决这个问题的 F# 代码。

let quadKeyToVE key =
let offset,x,y =
    key
    |> Seq.fold (fun (offset,x,y) ch ->
        let x',y' = 
            match ch with
            | '0' -> x-offset,y+offset
            | '1' -> x+offset,y+offset
            | '2' -> x-offset,y-offset
            | '3' -> x+offset,y-offset
            | _ -> failwith "Invalid quadkey"
        offset/2.0,x',y'
        ) (InitialOffset,0.0,0.0)

let offset = offset * 2.0
let west = x - offset
let north = y + offset
let east = x + offset
let south = y - offset
west,south,east,north

【讨论】:

以上是关于如何将 bing 地图四键转换为墨卡托坐标的主要内容,如果未能解决你的问题,请参考以下文章

墨卡托投影地理坐标系地面分辨率地图比例尺Bing Maps Tile System

将 x,y 像素值转换为 lat 和 long

使用three.js开发3d地图初探

地图坐标系的转换

火星坐标百度坐标WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

地图坐标系之间的转换(百度地图GCJWGS84)