赞
踩
创建一个空的HTML文件,复制以下代码即可创建你在Cesium中的Hello World应用。
注意:代码中第11行的 defaultAccessToken 是需要登陆Cesium ion账号后才能获取到的,每个人都是不一样的。
(配置Cesium本地网络服务器的过程本文就不再赘述了,网上有很多现成的教程可以参考)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="https://cesiumjs.org/releases/1.58/Build/Cesium/Cesium.js"></script>
<link href="https://cesiumjs.org/releases/1.58/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
<div id="cesiumContainer" style="width: 700px; height:400px"></div>
<script>
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4MWE0MjZhYy1jMzlhLTRkYzAtOWFlMC0zYTBmMzNjZWUwOGQiLCJpZCI6MTIxMDIsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NjAzNDM2NTR9.yNG39fq6l5JZPkgpq-jEyHmw4LpNVioa7EUxOUPKvm4';
var viewer = new Cesium.Viewer('cesiumContainer');
</script>
</body>
</html>
注意:当你登录到Cesium ion后,上述代码将自动使用你默认的访问许可(Access token)。
官网教程使用的是一种叫做 Glitch 的在线Html编辑器,能够边修改代码边预览结果,使用起来还是挺方便的。当然用Sublime、VSCode等也可以,习惯哪个用哪个。代码的运行结果如下图所示。
接下来具体分析一下Hello World中的代码是怎么回事。
1.首先,将CesiumJS库包含在HTML的 head 部分:
<script src="https://cesiumjs.org/releases/1.58/Build/Cesium/Cesium.js"></script>
<link href="https://cesiumjs.org/releases/1.58/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
2.然后创建一个HTML元素 div 来容纳CesiumJS组件:
<div id="cesiumContainer"></div>
3.此外,你的Cesium应用需要从你的ion账号中获取访问许可来访问必应影像。当你已经登陆到ion时,样例代码将使用你账户中默认的访问许可:
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4MWE0MjZhYy1jMzlhLTRkYzAtOWFlMC0zYTBmMzNjZWUwOGQiLCJpZCI6MTIxMDIsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NjAzNDM2NTR9.yNG39fq6l5JZPkgpq-jEyHmw4LpNVioa7EUxOUPKvm4';
4.最后,创建一个名为 Viewer 的顶级(top-level)Cesium组件,并告诉它使用上面所定义的HTML元素:
var viewer = new Cesium.Viewer('cesiumContainer');
Cesium世界地形是一种具有高分辨率的世界地形资源,将 Viewer 的声明部分改为如下代码,即可向你的应用中添加Cesium世界地形数据:
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
修改完成后,搜索 Grand Canyon, AZ, USA,将视点缩放至该区域,就能浏览到高分辨率的地形数据了,如下图所示。
用户也可以上传自定义数据到 ion 上,并将其转换为三维瓦片数据,这是一种开放的规范,用于流式传输大量异构的三位地理空间数据集(an open specification for streaming massive heterogeneous 3D geospatial datasets)。本教程使用了一种具有单一建筑的KML/COLLADA包作为样例数据,将其创建为三维瓦片集并添加到你的Cesium应用中,点击此处下载数据。
var tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: Cesium.IonResource.fromAssetId(your_asset_id)
})
);
viewer.zoomTo(tileset)
经过上述修改,最终的代码为:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="https://cesiumjs.org/releases/1.58/Build/Cesium/Cesium.js"></script> <link href="https://cesiumjs.org/releases/1.58/Build/Cesium/Widgets/widgets.css" rel="stylesheet"> </head> <body> <div id="cesiumContainer" style="width: 700px; height:400px"></div> <script> Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4MWE0MjZhYy1jMzlhLTRkYzAtOWFlMC0zYTBmMzNjZWUwOGQiLCJpZCI6MTIxMDIsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NjAzNDM2NTR9.yNG39fq6l5JZPkgpq-jEyHmw4LpNVioa7EUxOUPKvm4'; var viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider: Cesium.createWorldTerrain() }); var tileset = viewer.scene.primitives.add( new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(your_asset_id) }) ); viewer.zoomTo(tileset); </script> </body> </html>
我在按照教程进行的过程中,发现当 Viewer 的定义为:
var viewer = new Cesium.Viewer('cesiumContainer');
时,用户上传的数据 AGI_HQ.kmz 是能够显示出来的。
而当其定义修改为:
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
时,该数据却无法显示。不知道哪里出现的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。