• Cesium加载天地图三维地形和注记


    效果图

     

    实现代码

    目前经测试仅支持1.58、1.63.1版本

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <title>天地图插件调用示例</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
        <meta name="renderer" content="webkit" />
        <meta http-equiv="Pragma" content="no-cache" />
        <meta http-equiv="Cache-Control" content="no-cache" />
        <meta http-equiv="Expires" content="0" />
        <script src="cesium/Cesium.js"></script>
        <link rel="stylesheet" type="text/css" href="cesium/Widgets/widgets.css" />
    
        <!--天地图插件-->
        <script src="https://api.tianditu.gov.cn/cdn/plugins/cesium/cesiumTdt.js"></script>
    
        <style>
          html,
          body {
             100%;
            height: 100%;
            margin: 0;
            padding: 0;
            overflow: hidden;
          }
    
          #cesiumContainer {
             100%;
            height: 100%;
          }
    
          #cesiumContainer .cesium-viewer-bottom {
            display: none;
          }
        </style>
      </head>
      <body>
        <div id="cesiumContainer"></div>
        <script>
          var token = '在天地图官网申请的token'
          // 服务域名
          var tdtUrl = 'https://t{s}.tianditu.gov.cn/'
          // 服务负载子域
          var subdomains = ['0', '1', '2', '3', '4', '5', '6', '7']
          var imgMap = new Cesium.UrlTemplateImageryProvider({
            url: tdtUrl + 'DataServer?T=img_w&x={x}&y={y}&l={z}&tk=' + token,
            subdomains: subdomains,
            tilingScheme: new Cesium.WebMercatorTilingScheme(),
            maximumLevel: 18,
          })
          // cesium 初始化
          var viewer = new Cesium.Viewer('cesiumContainer', {
            shouldAnimate: true,
            selectionIndicator: true,
            infoBox: false,
            imageryProvider: imgMap,
          })
    
          // 抗锯齿
          viewer.scene.postProcessStages.fxaa.enabled = false
          // 水雾特效
          viewer.scene.globe.showGroundAtmosphere = true
          // 设置最大俯仰角,[-90,0]区间内,默认为-30,单位弧度
          viewer.scene.screenSpaceCameraController.constrainedPitch = Cesium.Math.toRadians(
            -20
          )
          // 取消默认的双击事件
          viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(
            Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK
          )
    
          // 叠加影像服务
    
          //viewer.imageryLayers.addImageryProvider(imgMap)
    
          // 叠加国界服务
          var iboMap = new Cesium.UrlTemplateImageryProvider({
            url: tdtUrl + 'DataServer?T=ibo_w&x={x}&y={y}&l={z}&tk=' + token,
            subdomains: subdomains,
            tilingScheme: new Cesium.WebMercatorTilingScheme(),
            maximumLevel: 10,
          })
          viewer.imageryLayers.addImageryProvider(iboMap)
    
          // 叠加地形服务
          var terrainUrls = new Array()
    
          for (var i = 0; i < subdomains.length; i++) {
            var url =
              tdtUrl.replace('{s}', subdomains[i]) +
              'DataServer?T=elv_c&tk=' +
              token
            terrainUrls.push(url)
          }
    
          var provider = new Cesium.GeoTerrainProvider({
            urls: terrainUrls,
          })
    
          viewer.terrainProvider = provider
    
          // 将三维球定位到中国
          viewer.camera.flyTo({
            destination: Cesium.Cartesian3.fromDegrees(103.84, 31.15, 17850000),
            orientation: {
              heading: Cesium.Math.toRadians(348.4202942851978),
              pitch: Cesium.Math.toRadians(-89.74026687972041),
              roll: Cesium.Math.toRadians(0),
            },
            complete: function callback() {
              // 定位完成之后的回调函数
            },
          })
    
          // 叠加三维地名服务
          var wtfs = new Cesium.GeoWTFS({
            viewer,
            //三维地名服务,使用wtfs服务
            subdomains: subdomains,
            metadata: {
              boundBox: {
                minX: -180,
                minY: -90,
                maxX: 180,
                maxY: 90,
              },
              minLevel: 1,
              maxLevel: 20,
            },
            aotuCollide: true, //是否开启避让
            collisionPadding: [5, 10, 8, 5], //开启避让时,标注碰撞增加内边距,上、右、下、左
            serverFirstStyle: true, //服务端样式优先
            labelGraphics: {
              font: '28px sans-serif',
              fontSize: 28,
              fillColor: Cesium.Color.WHITE,
              scale: 0.5,
              outlineColor: Cesium.Color.BLACK,
              outlineWidth: 5,
              style: Cesium.LabelStyle.FILL_AND_OUTLINE,
              showBackground: false,
              backgroundColor: Cesium.Color.RED,
              backgroundPadding: new Cesium.Cartesian2(10, 10),
              horizontalOrigin: Cesium.HorizontalOrigin.MIDDLE,
              verticalOrigin: Cesium.VerticalOrigin.TOP,
              eyeOffset: Cesium.Cartesian3.ZERO,
              pixelOffset: new Cesium.Cartesian2(0, 8),
            },
            billboardGraphics: {
              horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
              verticalOrigin: Cesium.VerticalOrigin.CENTER,
              eyeOffset: Cesium.Cartesian3.ZERO,
              pixelOffset: Cesium.Cartesian2.ZERO,
              alignedAxis: Cesium.Cartesian3.ZERO,
              color: Cesium.Color.WHITE,
              rotation: 0,
              scale: 1,
               18,
              height: 18,
            },
          })
    
          //三维地名服务,使用wtfs服务
          wtfs.getTileUrl = function () {
            return tdtUrl + 'mapservice/GetTiles?lxys={z},{x},{y}&tk=' + token
          }
    
          wtfs.getIcoUrl = function () {
            return tdtUrl + 'mapservice/GetIcon?id={id}&tk=' + token
          }
    
          wtfs.initTDT([
            {
              x: 6,
              y: 1,
              level: 2,
              boundBox: { minX: 90, minY: 0, maxX: 135, maxY: 45 },
            },
            {
              x: 7,
              y: 1,
              level: 2,
              boundBox: { minX: 135, minY: 0, maxX: 180, maxY: 45 },
            },
            {
              x: 6,
              y: 0,
              level: 2,
              boundBox: { minX: 90, minY: 45, maxX: 135, maxY: 90 },
            },
            {
              x: 7,
              y: 0,
              level: 2,
              boundBox: { minX: 135, minY: 45, maxX: 180, maxY: 90 },
            },
            {
              x: 5,
              y: 1,
              level: 2,
              boundBox: { minX: 45, minY: 0, maxX: 90, maxY: 45 },
            },
            {
              x: 4,
              y: 1,
              level: 2,
              boundBox: { minX: 0, minY: 0, maxX: 45, maxY: 45 },
            },
            {
              x: 5,
              y: 0,
              level: 2,
              boundBox: { minX: 45, minY: 45, maxX: 90, maxY: 90 },
            },
            {
              x: 4,
              y: 0,
              level: 2,
              boundBox: { minX: 0, minY: 45, maxX: 45, maxY: 90 },
            },
            {
              x: 6,
              y: 2,
              level: 2,
              boundBox: { minX: 90, minY: -45, maxX: 135, maxY: 0 },
            },
            {
              x: 6,
              y: 3,
              level: 2,
              boundBox: { minX: 90, minY: -90, maxX: 135, maxY: -45 },
            },
            {
              x: 7,
              y: 2,
              level: 2,
              boundBox: { minX: 135, minY: -45, maxX: 180, maxY: 0 },
            },
            {
              x: 5,
              y: 2,
              level: 2,
              boundBox: { minX: 45, minY: -45, maxX: 90, maxY: 0 },
            },
            {
              x: 4,
              y: 2,
              level: 2,
              boundBox: { minX: 0, minY: -45, maxX: 45, maxY: 0 },
            },
            {
              x: 3,
              y: 1,
              level: 2,
              boundBox: { minX: -45, minY: 0, maxX: 0, maxY: 45 },
            },
            {
              x: 3,
              y: 0,
              level: 2,
              boundBox: { minX: -45, minY: 45, maxX: 0, maxY: 90 },
            },
            {
              x: 2,
              y: 0,
              level: 2,
              boundBox: { minX: -90, minY: 45, maxX: -45, maxY: 90 },
            },
            {
              x: 0,
              y: 1,
              level: 2,
              boundBox: { minX: -180, minY: 0, maxX: -135, maxY: 45 },
            },
            {
              x: 1,
              y: 0,
              level: 2,
              boundBox: { minX: -135, minY: 45, maxX: -90, maxY: 90 },
            },
            {
              x: 0,
              y: 0,
              level: 2,
              boundBox: { minX: -180, minY: 45, maxX: -135, maxY: 90 },
            },
          ])
        </script>
      </body>
    </html>
    

      

  • 相关阅读:
    Real-time 3D face tracking and reconstruction from 2D video
    Matlab Multiple View Geometry
    Multi-View 3D Reconstruction
    Scene Reconstruction
    OpenCV C++ Stereo Fisheye Calibration
    史上最全的Matlab资源电子书教程和视频下载合集
    CF-Based-Recommendation
    语种识别工具
    gdb调试
    C语言常见的函数调用
  • 原文地址:https://www.cnblogs.com/nodegis/p/12987661.html
Copyright © 2020-2023  润新知