Cesium三维开发笔记(一、加载三维地球)

  • Post author:
  • Post category:其他


目前WebGIS的方向逐渐在从二维地球像三维地球转变,作为一个GISer,三维开发技术也是必须要掌握的一门技术了,Cesium是一个开源的三维地图开发包,是目前市面上用的非常多的一个包,接下来我们就一起学习如何使用Cesium进行三维GIS的开发,本章要讲的就是如何最简单的把Cesium三维地球加载出来!

一、系统搭建

系统整体结构如下图所示:

先来给大家解释一下我为什么分了这么多层结构。我们在开发过程中一直强组件化、模块化,这里我们虽然是用原生的js来写的,但是我们也要注重代码的条理性、模块性。我们把GIS相关地图接口放到interface和mapInit这两个js文件里面去写,interface.js文件主要写我们的地图相关接口方法,mapInit.js文件主要写我们的地图初始化相关接口方法。这样开发的好处就是我们的GIS相关代码和我们的前端界面代码分离的比较好,代码的可维护性很强!这里我把我的Cesium包放一个百度云链接吧,需要的同学可以自行去下载:链接:https://pan.baidu.com/s/1NDQYFsuMTiIaTYXKvE9W4w

提取码:d1wl

二、index.html文件代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>cesium</title>
    	<script type="text/javascript" src="js/Cesium/Cesium.js"></script>  	
    <style>
        @import url(js/Cesium/Widgets/widgets.css);
    </style>
	</head>
	<body>
		<div id="cesiumContainer"></div>
    	<script src="js/map/interface.js"></script>
		<script src="js/map/mapInit.js"></script>	
	</body>
</html>

大家可以看到,我们的前端html代码非常简介,引入了我们的cesium的js文件和对应的css样式文件以及哦我们的地图初始化js文件mapInit.js和地图接口方法js文件interface.js。

三、地图初始化文件mapInit,js文件代码


var mapApp = new Object();
mapApp.loadMap = function () {
    mapApp.viewer = new Cesium.Viewer('cesiumContainer', {
        imageryProviderViewModels:[],
        shouldAnimate: false,
        //控制视图动画播放速度
        animation: false,
        vrButton: false,
        //搜索按钮
        geocoder: false,
        //视角返回初始位置
        homeButton: false,
        //二三维视角选择
        sceneModePicker: false,
        //时间线,允许用户选择
        timeline: false,
        //导航帮助按钮
        navigationHelpButton: false,
        navigationInstructionsInitiallyVisible: false,
         baseLayerPicker: false,
        fullscreenButton: false,
        selectionIndicator: false,
        
        imageryProvider: new Cesium.ArcGisMapServerImageryProvider({
            url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
        }),
       
    });
    mapApp.viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(113, 20, 5000000),
        orientation: {
            heading: Cesium.Math.toRadians(0.0),
            pitch: Cesium.Math.toRadians(-90.0),
            roll: 0.0
        }
    });   
}
mapApp.loadMap();

这段代码稍长一点,但是主要是因为我在这段代码中给大家添加了一些cesium的常用控件的注释,为了界面简洁,我把这些控件都设置成了false,大家感兴趣的可以去设置成true看一看效果。另外我们的地图底图使用的是arcgis的在线服务,这个后面如果需要用到别的地图服务,我们是可以替换的!

四:interface.js文件

为了能使用到该文件,我们来实现一个简单的三维小功能,在地图上画一个长方体,代码如下:

function drawBox(){
	var viewer=mapApp.viewer;
	var redBox=viewer.entities.add({
		position: Cesium.Cartesian3.fromDegrees(113.0, 20.0,30000),
    	name : '红箱子',
    	box : {
        	dimensions : new Cesium.Cartesian3(400000,300000,500000),
        	material : Cesium.Color.RED.withAlpha(1)
    	}
	});
	viewer.zoomTo(viewer.entities);
}

然后我们要去调用这个方法,可以在mapInit.js文件中直接调用该方法如下图所示:

然后我们保存项目,启动index.html页面看一下效果:

可以看到我们不仅把三维地球加载了出来,并且把我们的长40000,宽30000,高50000的长方体也加了出来!

并且我们后面再开发一些GIS功能时,直接把GIS 地图接口写到interface.js文件中即可,然后我们的前端调用interface.js中相应的地图接口方法完成相应的地图功能!

本章就先写到这儿了,后面我们会进行更多Cesium三维GIS功能的开发,大家加油!



版权声明:本文为MagicMHD原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。