ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

osgEarth3.0 加载天地图

2021-02-18 19:33:34  阅读:288  来源: 互联网

标签:osgEarth3.0 请求 OE 地图 发送 osm 图层 代码 加载


2.8版本里面有个xyz图层的例子,稍作修改就可以加载天地图的影像图层。在3.0版本中,XYZ , bing 等图层已经被移植到内核中。所以我们直接用XYZ图层来加载天地图即可

    XYZImageLayer* osm = new XYZImageLayer();
    osgEarth::URI uri("http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=yourkey");
    osm->setURL(uri);
    osm->setProfile(Profile::create("spherical-mercator"));
    osm->setOpacity(0.5f);
    map->addLayer(osm);

需要自己申请key. 把 url里面的tk=yourkey. 中的yourkey替换掉即可。

坑1:以上代码发出的请求,很快被服务器端forbidden.

出现这个错误,而且没有充分的提示。为了查找被服务器拒绝的原因,我们用edge,chrome等浏览器发送Get请求到服务器,结果发现这两种浏览器均能接收正常的消息,如下图所示:

TMS分块图像

 这表明,只要在发送的Get请求中,正确设置了tk=参数,就能获取到相应的切片图像。既然问题没有出现在服务器端,那么我们可以通过比较osgEarth发送的请求和浏览器发送请求的格式有何异同,从而找到问题所在。我们祭出神器wireshark, 对edge, chrome等发送的http内容进行分析:

HTTPClient利用curl发送远程请求,通过wireshark抓包显示,curl发送的Http header缺少上述截图中的内容。我们对上述代码进行修改,添加上述的header内容后,再次发送请求休息,服务器能够正常返回200代码,而且发送了JPG格式的图片给osgEarth.

坑2:OE无法读取JPG图像,出现白色地球

通过wireshark抓包发现,即使给客户端发送了200返回码,而且curl接收了jpg图片,但是OE无法找到合适的Plugin来读取图片,反复查看osgPlugin3.6中的插件,我确认并不缺少动态库及其依赖。跟踪代码发现OE中的reponse返回mime类型跟预期中的不一样,导致OE无法找到相应的reader.  修改HTTPClient.cpp后,终于可正常显示天地图的影像。

 

完整代码已经上次到百度盘: 链接:https://pan.baidu.com/s/1Y3hjpJ65pnbW5DLCfJJucw 

 

 

标签:osgEarth3.0,请求,OE,地图,发送,osm,图层,代码,加载
来源: https://blog.csdn.net/wh_xiexing/article/details/113816142

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有