基于cesium的百度、腾讯、高德数据访问

百度

目前百度在网页版仍然使用地图瓦片,空间参考为webMecator,起始级别为3,范围为256*5,但其调整了投影参数,中央经线没在0度,因此第3级 实际有6个瓦片(最左、最右是同一个瓦片的两部分)。
请求格式为

https://ss1.bdstatic.com/8bo_dTSlR1gBo1vgoIiO_jowehsv/tile/?qt=vtile&x={x}&y={y}&z={z}&styles=pl&udt=20180810&scaler=1&showtext=1

目前经过简单计算推测其基于调整投影参数后 0级瓦片大小为 160x160 ,[0,2]级瓦片都不使用,三级进行瓦片大小调整。

腾讯

矢量地图采用矢量瓦片形式进行存储,通过请求获取相应的矢量内容,在前端进行矢量栅格化绘制
但在与影像叠加时采用了后端获取png图片的方法

https://rt3.map.gtimg.com/tile?z=4&x=13&y=10&styleid=2&version=297对应的图片内容为

qq_4_10_13.png

通过试验获取同一水平行上的影像叠加文字图片


qq_4_10_3.png

qq_4_10_8.png

qq_4_10_9.png

可以看到级别对应关系,qq使用了标准的web墨卡托投影,第4级为 16x16
对应其影像数据 4/10/13的卫星影像数据https://p2.map.gtimg.com/sateTiles/4/0/0/13_10.jpg?version=229

qq_4_10_13.jpg

使用cesiumjs进行验证,注意腾讯的行号方向是反的,需要使用{reverseY}替换

var custom = new Cesium.UrlTemplateImageryProvider({
   url : 'https://rt3.map.gtimg.com/tile?z={z}&x={x}&y={reverseY}&styleid=2&version=297'
});
qq.png
显眼的太平洋.png

太平洋这仨字太丑了。

腾讯同样不提供前三级的数据

An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 0 Level: 1.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 1 Level: 1.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 1 Level: 1.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 0 Level: 1.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 0 Level: 0.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 2 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 3 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 3 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 2 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 2 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 2 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 3 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 3 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 1 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 0 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 1 Y: 2 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 3 Level: 2.
An error occurred in "UrlTemplateImageryProvider": Failed to obtain image tile X: 0 Y: 2 Level: 2.

腾讯影像

影像的资源编码方式和叠加矢量层不同,如:

https://p2.map.gtimg.com/sateTiles/5/1/1/25_17.jpg?version=229
qq_5_1_1_25_17.jpg

这是中国南海的一块瓦片,包括越南和海南岛。

使用上方矢量的请求串,获取一下矢量https://rt3.map.gtimg.com/tile?z=5&x=25&y=17&styleid=2&version=297也是对应的,那么问题就来了,前面多出来的两个数字是干什么的。
另取一块高级别影像https://p3.map.gtimg.com/sateTiles/9/25/17/411_284.jpg?version=229

qq_9_25_17_411_284.jpg

根据码农的六感,我们可以察觉到前面的数字一定和存储组织有关,那么最简单的方式就是位运算了

10进制 25 17 411 284
hex 19 11 19B 11C

上面5级的也是如是计算,我们就知道相应的规则了。

{level}/{sx}/{sy}/{x}_{y}

下面就让球起飞吧。

var viewer = new Cesium.Viewer('cesiumContainer');
var base = new Cesium.UrlTemplateImageryProvider({
   url : 'https://p2.map.gtimg.com/sateTiles/{z}/{sx}/{sy}/{x}_{reverseY}.jpg?version=229',
    customTags : {
       sx: function(imageryProvider, x, y, level) {
           return x>>4;
       },
        sy:function(imageryProvider, x, y, level) {
           return ((1<<level)-y)>>4;
       }
   }
});
viewer.imageryLayers.addImageryProvider(base);

var custom = new Cesium.UrlTemplateImageryProvider({
   url : 'https://rt3.map.gtimg.com/tile?z={z}&x={x}&y={reverseY}&styleid=2&version=297'
});

viewer.imageryLayers.addImageryProvider(custom);
china.png

腾讯数据在线示例

高德地图

矢量地图采用矢量瓦片形式存储,且通过websocket进行数据传输。这类数据由于格式非公开,我们很难使用,就算将格式公开也需要大量额外工作才能将矢量描述转化为图片输出,因此我们跳过不处理。
我们还是看一下它的卫星图模式。
查看其中的一块海口市的图片 https://webst02.is.autonavi.com/appmaptile?style=6&x=3302&y=1815&z=12

12_1815_3302.jpg

可以看到其地址中使用的是标准的x/y/z指定的瓦片,参考上节,我们可以看到通过UrlTemplateImageryProvider可以直接访问它的数据。

var base = new Cesium.UrlTemplateImageryProvider({
    url : 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
});
//viewer.imageryLayers.addImageryProvider(base);

var viewer = new Cesium.Viewer('cesiumContainer',{
    imageryProvider:base
});



var road = new Cesium.UrlTemplateImageryProvider({
    url : 'https://wprd02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=8&ltype=11'
});

viewer.imageryLayers.addImageryProvider(road);

可以通过https://wprd02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=8&ltype=11增加道路层,但是这层里面与腾讯不同,没有文字注记。

可以看到南北极高德的数据比腾讯良心多了。


amap.png

在线示例

示完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容