06 Cesium—基于Cesium ion的添加地形

2023-10-27

文章中所有操作均是在 Cesium 1.91 版本下进行的,其它版本差异请自行适配

Cesium ion

Cesium ion 是一个提供瓦片图和3D地理空间数据的平台,Cesium ion 支持把数据添加到用户自己的 CesiumJS 应用中。

地形(Terrain)

Cesium 支持流式的、可视化的全球高程投影地形地势、水形数据,包括海洋、湖泊、河流、山峰、峡谷和其他能够被三维展示出来的且效果比二维好的地形数据。像图层数据一样,Cesium 引擎会从一个服务器上请求流式地形数据,仅请求那些基于当前相机能看到的需要绘制的图层上的数据。

Cesium 提供了一些地形数据集的例子,以及如何配置这些参数。一些样例代码如下:

Cesium 支持的地形数据格式:

  1. Quantized-mesh, Cesium 团队自己开源的一种格式
  2. Heightmap
  3. Google Earth Enterprise
  4. 等等

注意,不同的地形数据需要不同的认证,需要确保自己能够有权限访问到这些数据源,有时候需要注册特定的认证才可以。

针对Cesium ion中的地形数据源进行添加地形

作者手里也没有相关的地形数据,所以还是利用 Cesium ion 提供的地形数据为基础进行演示。Cesium 需要您自己创建 ion account 然后生成一个 access key 用于访问地形数据,在我之前的文章中有介绍,点击[Cesium ion介绍](Cesium ion介绍.md)查看。

为了添加地形数据,我们需要创建一个 CesiumTerrainProvider,提供一个 url 和一些配置想,然后将这个 provider 赋值给 viewer.terrainProvider即可。

接下来我们就使用 Cesium ion 中提供的 Cesium World Terrain 地形进行演示:

  1. Cesium ion 页面, Cesium World Terrain 地形默认的就在个人用户中的 asset 列表(My Assets)中,不需要格外配置。具体如下:

  2. 我们可以用 createWorldTerrainhelper 函数创建一个由 Cesium ion 提供服务的 Cesium WorldTerrian。具体如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="CesiumUnminified/Cesium.js"></script>
        <style>
            @import url(CesiumUnminified/Widgets/widgets.css);
            html, body, #cesiumContainer {
                width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
            }
        </style>
    </head>
    
    <body>
        <div id="cesiumContainer"></div>
    
    <script>
        //初始化Cesium.Ion申请的token
        Cesium.Ion.defaultAccessToken = "您自己申请的access token";
    
        const viewer = new Cesium.Viewer('cesiumContainer', {
            geocoder: false,                //隐藏查找控件
            homeButton: false,              //隐藏视角返回初始位置按钮
            sceneModePicker: false,         //隐藏视角模式3D 2D CV
            baseLayerPicker: false,         //隐藏图层选择
            navigationHelpButton: false,    //隐藏帮助
            animation: false,               //隐藏动画控件
            timeline: false,                //隐藏时间线控件
            fullscreenButton: false,        //隐藏全屏
        });
        // 隐藏版权信息
        viewer._cesiumWidget._creditContainer.style.display = "none";
    
        // 通过createWorldTerrainhelper创建
        viewer.terrainProvider = Cesium.createWorldTerrain({
            requestWaterMask: true,        // 开启水光效果
            requestVertexNormals: true     // 开启地形光照
        });
    
        // 开始高程遮挡效果 
        viewer.scene.globe.depthTestAgainstTerrain = true;
    </script>
    </body>
    </html>
    

    我们可以拉近喜马拉山那块,明显的有地形展示,然后将地形代码屏蔽掉对比一下,能看到有地形效果。

最后

我们平时添加地形,并不是非要用 Cesium ion 提供的地形数据。这里是作者并没有现成的地形数据,所以选用了 Cesium ion 中的地形数据源进行演示。

当然,你可以添加任何数据源地形数据,只要 Cesium 支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

06 Cesium—基于Cesium ion的添加地形 的相关文章

  • 基于 geom_map 或 ggplot2 中的列联表 (2x2) 创建唯一的图例?

    我该如何根据这个列联表来做到这一点 我不完全确定如何根据我制作的指标表 犯罪 在 R 中创建自定义图例 R 中的可重现代码 require maps set seed 123 randomly assign 2 variables to e
  • 由于地理单位不同,我在向 ggmap 添加 shapefile 时遇到问题

    我正在尝试将 ESRI shapefile shp 添加到北卡罗来纳州的 ggmap 图中 其中包含以下代码 x lt get map location North Carolina zoom 6 maptype terrain ggmap
  • 州/省的地理边界 -> Google 地图多边形

    我正在构建一个 Web 应用程序 它将根据按钮和点击事件在 Google 地图上动态突出显示某些美国州和加拿大省份 计划 A 多边形 我的主要想法是绘制多边形 为此 我需要所有州和省轮廓 顺时针或逆时针 的坐标 纬度 经度 列表 在政府网站
  • 如何在 php 中添加形状文件 (.shp) 并在 php 文件中使用该形状文件数据?

    我必须在 php 中开发一个项目 并且必须包含形状文件 并且该形状文件需要转换为 kml 文件 我知道如何将形状文件转换为 kml 文件 但我不知道如何将形状文件导入 导入到 php 项目中 我还有包含更多信息的形状文件的支持文件 其中一些
  • Google 街景中像素距地面的高度/标高

    我正在寻找谷歌街景中每个像素距地面的高度 我知道可以计算的几件事是 像素间距 https stackoverflow com questions 21591462 get heading and pitch from pixels on s
  • 使用行/列索引对栅格进行子集化

    当对矩阵或 DF 进行子集化时 可以引用行列 例如df1 1 5 3 10 or df3 2 4 有没有办法用光栅来做到这一点 也就是说 我可以只剪辑第 500 700 行 例如从光栅对象中剪辑吗 我尝试过使用rasterFromCells
  • python 中的测地线缓冲

    给定土地多边形作为Shapely https pypi python org pypi Shapely MultiPolygon 我想找到代表例如的 多 多边形海岸线周围12海里缓冲区 使用匀称buffer方法不起作用 因为它使用欧几里德计
  • 在 R SF 中交叉大型空间数据集

    我有两个空间数据集 一个数据集包含许多多边形 总共超过 150k 指定不同的特征 如河流 植被 另一个数据集包含更少的指定不同区域的多边形 500 我需要将这两个数据集相交以获得不同区域的特征 我可以根据不同的特征对第一个数据集进行子集化
  • 如何有效地将纬度/经度地理编码反转为行政区

    我正在处理纽约市出租车数据集 该数据集的列包括日期时间 接送纬度 经度 下车纬度 经度等 现在我想对纬度 经度进行反向地理编码以找到行政区 社区 我碰到geopy并发现这样的事情完美地工作 from geopy geocoders impo
  • 删除传单地图上的图例

    我有一个传单地图 设置为当用户单击按钮时根据类别更改样式 实时地图 http maneesha github io test map html http maneesha github io test map html 源代码 https
  • 如何使用 Openlayers 文本图层编辑弹出窗口

    我正在使用 Openlayers 创建一个包含大约 1000 多个点的地图 目前 当我单击一个点的图标时 该点的描述会显示在弹出窗口中 要退出弹出窗口 我需要再次单击同一点的图标 有没有办法修改此代码 以便我可以按关闭按钮或单击地图上的任意
  • 如何使用 GDAL 从 tiff 和 4 个角纬度和经度创建 geotiff [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一张没有 TIFF 格式地理数据的图像 地图 我需要从我的图像中获取 GeoTIFF 文件 我的地
  • 将多边形转换为网格

    我有很多多边形 理想情况下 所有多边形不得相互重叠 但它们可以彼此相邻 但实际上 我必须考虑到slight多边形重叠 由一定的公差定义 因为所有这些多边形都是从用户手绘输入获得的 这并不像我希望的那样机器精确 我的问题是 是否有任何软件库组
  • 原则 2 的 GIS 扩展

    我想为我的 Doctrine 2 项目编写一个 GIS 地理空间数据 扩展 我知道如何编写简单的自定义函数和类型 为了适应MySQL特殊的存储格式 我在检索 存储数据时需要使用一些SQL函数 GeomFromWKB 和AsBinary 我找
  • 如何从 NoSQL DBMS(如 DynamoDB)存储 GPS 坐标并搜索半径范围内的地点

    我的团队需要像 DynamoDB 这样的 DBMS 来存储大量数据 主要是位置和坐标 我考虑过使用一些基于 GIS 的 DBMS 例如 PostGIS 并在 POINT 上建立索引 但 DynamoDB 似乎非常适合我们的使用 存储坐标并快
  • GeoAlchemy2:获取某个点的经纬度

    考虑以下SQLAalchemy http www sqlalchemy org GeoAlchemy2 http geoalchemy 2 readthedocs org en 0 2 6 index html具有几何字段的 ORM fro
  • 查找信标的两个地理位置之间的点

    假设我们有两个beacons放置在道路两侧 我们知道他们的latitude and longitude它们所在的位置 我们将它们视为一个位置 我们还知道distance两者之间以米为单位beacons 使用半正矢公式测量 我们的设备正在这两
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 地图路由,像谷歌地图一样吗?

    我一直对地图路由很感兴趣 但我从未找到任何好的入门 甚至高级 级别的教程 有人有任何指示 提示等吗 Update 我主要寻找有关如何实现地图系统 数据结构 算法等 的指导 看看开放街道地图项目 http www openstreetmap
  • SQLite + SpatiaLite 问题

    我正在尝试使用 System Data SQLite 提供程序从 C 访问 SpatiaLite 当我尝试加载 SpatiaLite 扩展时 我总是得到 System Data SQLite SQLiteException SQLite e

随机推荐