• 3.加载天地图


    愿你出走半生,归来仍是少年!

            上一篇文章构建出来基础的白球,现在需要给它添加底图啦。先上最常用的天地图。

    1.天地图

            天地图做过Gis开发的应该都知道,需要先申请key然后才能使用。然后天地图是基于XYZ的标准进行切片的,所以直接使用OSGEarth中的XYZImageLayer进行加载。

    2.代码

            此处封装了一个静态函数,方便后期使用。

    1. ///
    2. /// 创建天地图图层
    3. ///
    4. /// 天地图key
    5. /// 是否是矢量图层
    6. /// 天地图瓦片图层
    7. osgEarth::XYZImageLayer* Cv::LayerFactory::CreateTdtTileLayer(std::string key, bool isVector)
    8. {
    9. osgEarth::URIContext context;
    10. context.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/"
    11. "*;q=0.8,application/signed-exchange;v=b3;q=0.9");
    12. context.addHeader("Accept-Encoding", "gzip, deflate");
    13. context.addHeader("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6");
    14. context.addHeader("Cache-Control", "max-age=0");
    15. context.addHeader("Connection", "keep-alive");
    16. context.addHeader("Upgrade-Insecure-Requests", "1");
    17. context.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    18. "Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39");
    19. std::string lySourceName = isVector ? "vec_w" : "img_w";
    20. std::string lyName = isVector ? "天地图矢量" : "天地图影像";
    21. osgEarth::URI imgUri("http://t[01234567].tianditu.com/DataServer?T="+ lySourceName +"&tk="+ key +"&l={z}&x={x}&y={y}",
    22. context);
    23. osgEarth::XYZImageLayer* imgLy = new osgEarth::XYZImageLayer();
    24. imgLy->setURL(imgUri);
    25. imgLy->setProfile(osgEarth::Profile::create("spherical-mercator"));
    26. imgLy->setName(lyName);
    27. imgLy->setOpacity(1);
    28. return imgLy;
    29. }
    30. ///
    31. /// 创建天地图注记瓦片图层
    32. ///
    33. /// 天地图key
    34. /// 是否是矢量图层
    35. ///
    36. osgEarth::XYZImageLayer* Cv::LayerFactory::CreateTdtRemarkTileLayer(std::string key, bool isVector)
    37. {
    38. osgEarth::URIContext context;
    39. context.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/"
    40. "*;q=0.8,application/signed-exchange;v=b3;q=0.9");
    41. context.addHeader("Accept-Encoding", "gzip, deflate");
    42. context.addHeader("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6");
    43. context.addHeader("Cache-Control", "max-age=0");
    44. context.addHeader("Connection", "keep-alive");
    45. context.addHeader("Upgrade-Insecure-Requests", "1");
    46. context.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    47. "Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39");
    48. std::string lySourceName = isVector ? "cva_w" : "cia_w";
    49. std::string lyName = isVector ? "天地图矢量注记" : "天地图影像注记";
    50. osgEarth::URI imgUri("http://t[01234567].tianditu.com/DataServer?T=" + lySourceName + "&tk=" + key + "&l={z}&x={x}&y={y}",
    51. context);
    52. osgEarth::XYZImageLayer* imgLy = new osgEarth::XYZImageLayer();
    53. imgLy->setURL(imgUri);
    54. imgLy->setName(lyName);
    55. imgLy->setOpacity(1);
    56. imgLy->setProfile(osgEarth::Profile::create("spherical-mercator"));
    57. return imgLy;
    58. }

    3.效果

            通过osgEarth::Map的addLayer添加图层即可完成天地图的加载。

    天地图矢量
    天地图影像

    4.参考

    osgearth 加载天地图(亲测可行)_osgearth 天地图_祝太勇的博客-CSDN博客

  • 相关阅读:
    创建和销毁对象:用静态工厂方法代替构造器
    Python爬虫——Selenium 定位节点及获取节点信息
    UE4 第一人称角色模板 添加生命值和调试伤害
    指针笔试题(带解析版)
    计算机网络 期末复习(谢希仁版本)第6章
    优思学院|2022年获美质协ASQ和ILSSI奖项的《精益六西格玛的十条戒律》
    【计算机毕业设计】基于微信小程序的电影院票务系统
    引入嵌入和向量搜索时的三个错误
    “国防七校”之一西工大遭境外网络攻击
    Iceberg学习笔记(1)—— 基础知识
  • 原文地址:https://blog.csdn.net/weixin_41012454/article/details/134085979