我们使用DIV渲染后看到的三维地球对象,我们统称为三维场景,在Mars3D中对应是mars3D.Map类,这是一切的开始,所有相关控制的起点。掌握学习好了mars3d.Map类 基本也就掌握好了Mars3D
mars3d.Map类 参数说明
- 地图类 ,这是构造三维地球的一切的开始起点。
- new mars3d.Map(id, options)
- id 地图容器的div的id options 参数集合 | 参数名 | 类型 | 参数api | 场景 | | —- | —- | —- | —- | | scene | Object | 参数链接 | 场景 | | control | Object | 参数链接 | 控件 | | terrain | Object | 参数链接 | 地形 | | basemaps | Array | 参数链接 | 底图图层 | | layers | Array | 参数链接 | 图层 |
三维场景初始化
// 创建三维地球场景var map = new mars3d.Map('mars3dContainer', {/*场景参数*/scene: {//默认视角参数center:{lat: 30.054604, //纬度值lng: 108.885436, //经度值alt: 17036414, //高度值heading: 0, //方向角度值,绕垂直于地心的轴旋转角度, 0-360pitch: -90, //俯仰角度值,绕纬度线旋转角度, 0-360roll: 0, //翻滚角度值,绕经度线旋转角度, 0-360},scene3DOnly: true,//为 true 时,每个几何实例将仅以3D渲染以节省GPU内存。highDynamicRange: true, // 是否关闭高动态范围渲染(不关闭时地图会变暗)shadows: false, //是否启用日照阴影removeDblClick: true, //是否移除Cesium默认的双击事件//以下是Cesium.Viewer所支持的options【控件相关的写在另外的control属性中】sceneMode: 3, //3等价于Cesium.SceneMode.SCENE3D, 初始场景模式 2d 3d//以下是Cesium.Scene对象相关参数showSun: true, //是否显示太阳showMoon: true, //是否显示月亮showSkyBox: true, //是否显示天空盒showSkyAtmosphere: true, //是否显示地球大气层外光圈fog: true, //是否启用雾化效果fxaa: true, //是否启用抗锯齿//以下是Cesium.Globe对象相关参数 globe地球相关参数globe: {depthTestAgainstTerrain: false, //是否启用深度监测baseColor: '#546a53', //地球默认背景色showGroundAtmosphere: true, //是否在地球上绘制的地面大气enableLighting: false //是否显示昼夜区域},//以下是Cesium.ScreenSpaceCameraController对象相关参数 相机操作相关参数cameraController: {zoomFactor: 3.0, //鼠标滚轮放大的步长参数minimumZoomDistance: 1, //地球放大的最小值(以米为单位)maximumZoomDistance: 50000000, //地球缩小的最大值(以米为单位)enableRotate: true, //2D和3D视图下,是否允许用户旋转相机enableTranslate: true, //2D和哥伦布视图下,是否允许用户平移地图enableTilt: true, // 3D和哥伦布视图下,是否允许用户倾斜相机enableZoom: true, // 是否允许 用户放大和缩小视图enableCollisionDetection: true //是否允许 地形相机的碰撞检测}},/*控件参数*/control: {baseLayerPicker: true, //basemaps底图切换按钮homeButton: true, //视角复位按钮sceneModePicker: true, //二三维切换按钮navigationHelpButton: true, //帮助按钮fullscreenButton: true, //全屏按钮},/*地形服务*/terrain: {url: 'http://data.mars3d.cn/terrain',show: true},//使用自定义的 wms 图层basemaps: [{name: 'wms图层',type: 'wms',url: baseMapUrl,layers: baseLayer,parameters: {transparent: true,format: "image/png",},alpha: 1, //透明度show: true,hasZIndex: true,zIndex: 1,}]})
地图创建好通过 map.setSceneOptions来更新场景参数
// 更新地球参数map.setSceneOptions({cameraController: {maximumZoomDistance: 500000000}})
禁止缩放
map.scene.screenSpaceCameraController.enableZoom = false;
添加网格线
map.imageryLayers.addImageryProvider(new Cesium.TileCoordinatesImageryProvider())
只让地球显示一块区域,其余裁剪
var coffeeBeltRectangle = Cesium.Rectangle.fromDegrees(-180.0, -23.43687, 180.0, 23.43687);map.scene.globe.cartographicLimitRectangle = coffeeBeltRectangle;
创建地形
map.terrainProvider 获取或设置当前的地形服务
- 通过 mars3d.LayerUtil.createTerrainProvider 创建地形服务对象,然会赋值给 map.terrainProvider
- 目前一个地球只支持一个地形服务 ```javascript map.terrainProvider = mars3d.LayerUtil.createTerrainProvider({ type: ‘arcgis’, url: ‘https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer‘, })
//关闭或开启地形,只需要修改下面属性 map.hasTerrain = false
<a name="RYqch"></a>### 创建wms瓦片底图[坐标系及坐标变换](http://mars3d.cn/dev/guide/map/crs.html)- WGS84坐标系:地球坐标系,目前国际通用的标准坐标系,通常称呼为标准无偏坐标系。- GCJ02坐标系:在我国,出于国家安全考虑,国内所有导航电子地图必须使用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密成一个不正确的经纬度坐标,我们在业内将前者称之为地球坐标,后者称之为火星坐标(GCJ-02)```javascriptlet tileLayer = new mars3d.layer.WmsLayer({url: mapUrl,layers: mapLayer,crs:'EPSG:3857',//瓦片数据的坐标系信息chinaCRS:"GCJ02",//标识瓦片的国内坐标系(用于自动纠偏或加偏)parameters: {transparent: "true",format: "image/png"},flyTo: false,//加载完瓦片地图是否飞过去})map.addLayer(tileLayer);
使用json配置文件记录参数,快速创建三维场景
- json’文件
import options from “../assets/config.json”;
"map3d":{//场景参数一致"scene":{}}
let configUrl = 'http://mars3d.cn/example/config/config.json'mars3d.Resource.fetchJson({ url: configUrl }).then(function(json) {initMap(json.map3d)//构建地图}).otherwise(function(error) {console.log('加载JSON出错', error)})// 读取到的json对象,传入 new mars3d.Map 方法创建地球function initMap(mapOptions) {//创建三维地球场景var map = new mars3d.Map('mars3dContainer', mapOptions)}
- 合并属性参数
```javascript
//合并属性参数,可覆盖config.json中的对应配置 options.map3d是配置内容
var mapOptions = mars3d.Util.merge(options.map3d, {
//map3d中数据
//合并options的这些参数
scene: {
center: {
}, }, });lat: 25.37169,lng: 119.094153,alt: 1182971,heading: 346,pitch: -60,
//创建三维地球场景 this.map = new mars3d.Map(“mars3dContainer”, mapOptions); //构建 容器 合并后的参数 ```
