我们使用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-360
pitch: -90, //俯仰角度值,绕纬度线旋转角度, 0-360
roll: 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)
```javascript
let 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); //构建 容器 合并后的参数 ```