'use script' //开发环境建议开启严格模式
|
//系统主入口
|
|
var map //地球对象
|
var request //传入的get参数
|
var useid = "admin" ;
|
|
var currentDataType = 'hour';
|
var currentDataTime = getDefaultDataTime();
|
|
|
|
function getDefaultDataTime(){
|
|
var now = new Date();
|
//TODO
|
|
return "2021-08-23 13:00:00";
|
|
}
|
|
|
//地图
|
$(document).ready(function() {
|
//判断webgl支持
|
if (!mars3d.Util.webglreport()) {
|
mars3d.Util.webglerror()
|
}
|
|
//记录url传入参数
|
request = haoutil.system.getRequest()
|
if (window.top) {
|
//有父级
|
request = $.extend(request, haoutil.system.getRequest(window.top))
|
}
|
|
if (request.userid !=null){
|
useid = request.userid;
|
console.log(useid);
|
|
}
|
|
var configfile = 'config/config.json' //默认地址
|
if (request.config) {
|
//url传入地址
|
configfile = request.config
|
}
|
|
haoutil.loading.show()
|
|
$.ajax({
|
type: 'get',
|
dataType: 'json',
|
url: configfile,
|
timeout: 0,
|
success: function(data) {
|
haoutil.loading.hide()
|
|
//构建地图
|
initMap(data.map3d)
|
|
setTimeout(removeMask, 3000) //欢迎UI关闭处理
|
},
|
error: function(request, textStatus) {
|
removeMask()
|
haoutil.loading.hide()
|
haoutil.alert('1.请检查文件内 json 语法是否存在问题。<br />2.请在浏览器输入文件url测试是否可以访问。', configfile + ' 文件加载失败')
|
console.log(textStatus, request)
|
},
|
})
|
|
initUI()
|
})
|
|
function removeMask() {
|
$('#mask').remove()
|
}
|
|
//UI界面相关
|
function initUI() {
|
haoutil.oneMsg('首次访问系统无缓存会略慢,请耐心等待!', 'load3d_tip')
|
}
|
|
//初始化地图
|
function initMap(mapOptions) {
|
//合并属性参数,可覆盖config.json中的对应配置
|
// mapOptions = mars3d.Util.merge(mapOptions, {})
|
|
//创建三维地球场景
|
console.log(mapOptions);
|
|
// array[] ;
|
|
|
map = new mars3d.Map('mars3dContainer', mapOptions)
|
|
//构造widget
|
initWidget(map)
|
|
//如果有xyz传参,进行定位
|
if (haoutil.isutil.isNotNull(request.x) && haoutil.isutil.isNotNull(request.y)) {
|
map.setCameraView(request, { duration: 0, isWgs84: true })
|
}
|
|
//开场动画
|
map.openFlyAnimation()
|
|
//针对不同终端的优化配置
|
if (haoutil.system.isPCBroswer()) {
|
// Cesium 1.61以后会默认关闭反走样,对于桌面端而言还是开启得好,
|
map.scene.postProcessStages.fxaa.enabled = true
|
|
//鼠标滚轮放大的步长参数
|
map.scene.screenSpaceCameraController._zoomFactor = 2.0
|
|
//IE浏览器优化
|
if (window.navigator.userAgent.toLowerCase().indexOf('msie') >= 0) {
|
map.viewer.targetFrameRate = 20 //限制帧率
|
map.viewer.requestRenderMode = true //取消实时渲染
|
}
|
} else {
|
//鼠标滚轮放大的步长参数
|
map.scene.screenSpaceCameraController._zoomFactor = 5.0
|
|
//移动设备上禁掉以下几个选项,可以相对更加流畅
|
map.viewer.requestRenderMode = true //取消实时渲染
|
map.scene.fog.enabled = false
|
map.scene.skyAtmosphere.show = false
|
map.scene.globe.showGroundAtmosphere = false
|
}
|
|
//二三维切换不用动画
|
if (map.sceneModePicker) {
|
map.sceneModePicker.viewModel.duration = 0.0
|
}
|
|
//webgl渲染失败后,刷新页面
|
map.scene.renderError.addEventListener(function (scene, error) {
|
window.location.reload();
|
});
|
|
//绑定单击显示BIM的构件树
|
bindShowTilesParts()
|
|
//下面可以继续加项目相关的其他代码
|
// 监测点指标 分区间
|
|
|
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.tsp < 0.02) { return { image: "img/marker/jiance1ji.png" }; }
|
else if (attr.tsp > 0.02 && attr.tsp < 0.06) { return { image: "img/marker/jiance2ji.png" }; }
|
else { return { image: "img/marker/jiance3ji.png" }; }
|
}
|
|
var Layer = map.getLayer("监测点每时数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.tsp < 0.02) { return { image: "img/marker/jiance1ji.png" }; }
|
else if (attr.tsp > 0.02 && attr.tsp < 0.06) { return { image: "img/marker/jiance2ji.png" }; }
|
else { return { image: "img/marker/jiance3ji.png" }; }
|
}
|
|
var Layer = map.getLayer("监测点每天数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.tsp < 0.02) { return { image: "img/marker/jiance1ji.png" }; }
|
else if (attr.tsp > 0.02 && attr.tsp < 0.06) { return { image: "img/marker/jiance2ji.png" }; }
|
else { return { image: "img/marker/jiance3ji.png" }; }
|
}
|
|
//微站指标 分区间
|
var Layer = map.getLayer("微站每分数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.pm25 < 5) { return { image: "img/marker/weizhan1j.png" }; }
|
else if (attr.pm25 > 5 && attr.pm25 < 7) { return { image: "img/marker/weizhan2j.png" }; }
|
else if (attr.pm25 > 7 && attr.pm25 < 9) { return { image: "img/marker/weizhan3ji.png" }; } else { return { image: "img/marker/weizhan4ji.png" }; }
|
}
|
|
var Layer = map.getLayer("微站每时数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.pm25 < 5) { return { image: "img/marker/weizhan1j.png" }; }
|
else if (attr.pm25 > 5 && attr.pm25 < 7) { return { image: "img/marker/weizhan2j.png" }; }
|
else if (attr.pm25 > 7 && attr.pm25 < 9) { return { image: "img/marker/weizhan3ji.png" }; } else { return { image: "img/marker/weizhan4ji.png" }; }
|
}
|
|
|
|
var Layer = map.getLayer("微站每天数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.pm25 < 5) { return { image: "img/marker/weizhan1j.png" }; }
|
else if (attr.pm25 > 5 && attr.pm25 < 7) { return { image: "img/marker/weizhan2j.png" }; }
|
else if (attr.pm25 > 7 && attr.pm25 < 9) { return { image: "img/marker/weizhan3ji.png" }; } else { return { image: "img/marker/weizhan4ji.png" }; }
|
}
|
|
//国控点指标 分区间
|
|
var Layer = map.getLayer("国控点每分数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.pm25 < 15) { return { image: "img/marker/guokong1ji.png" }; }
|
else if (attr.pm25 > 15 && attr.pm25 < 35) { return { image: "img/marker/guokong2ji.png" }; }
|
else if (attr.pm25 > 50 && attr.pm25 < 75) { return { image: "img/marker/guokong3ji.png" }; } else { return { image: "img/marker/guokong4ji.png" }; }
|
}
|
|
|
var Layer = map.getLayer("国控点每时数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.pm25 < 15) { return { image: "img/marker/guokong1ji.png" }; }
|
else if (attr.pm25 > 15 && attr.pm25 < 35) { return { image: "img/marker/guokong2ji.png" }; }
|
else if (attr.pm25 > 50 && attr.pm25 < 75) { return { image: "img/marker/guokong3ji.png" }; } else { return { image: "img/marker/guokong4ji.png" }; }
|
}
|
|
var Layer = map.getLayer("国控点每天数据-WFS");
|
var symbol = Layer.options.symbol;
|
symbol.callback = function(attr, styleOpt) {
|
if (attr.pm25 < 15) { return { image: "img/marker/guokong1ji.png" }; }
|
else if (attr.pm25 > 15 && attr.pm25 < 35) { return { image: "img/marker/guokong2ji.png" }; }
|
else if (attr.pm25 > 50 && attr.pm25 < 75) { return { image: "img/marker/guokong3ji.png" }; } else { return { image: "img/marker/guokong4ji.png" }; }
|
}
|
|
|
//////////////////////////////////////////////////////////////////
|
|
//创建矢量数据图层
|
var graphicLayer = new mars3d.layer.GraphicLayer({ name: "出租车" })
|
map.addLayer(graphicLayer)
|
|
|
//图层管理的相关处理,代码在\js\graphicManager.js
|
//initLayerManager(graphicLayer)
|
|
//加一些演示数据
|
for (let i = 0; i < 20; i++) {
|
let graphic = new mars3d.graphic.ModelEntity({
|
style: {
|
url: 'http://data.marsgis.cn/gltf/mars/qiche.gltf',
|
scale: 0.6,
|
minimumPixelSize: 30,
|
|
},
|
})
|
graphicLayer.addGraphic(graphic)
|
}
|
|
|
|
//设置动态位置
|
graphicLayer.eachGraphic((graphic) => {
|
graphic.addDynamicPosition(randomPoint())
|
})
|
graphicLayer.eachGraphic((graphic) => {
|
graphic.addDynamicPosition(randomPoint(), 500)
|
})
|
|
//定时更新动态位置(setInterval为演示)
|
setInterval(() => {
|
graphicLayer.eachGraphic((graphic) => {
|
graphic.addDynamicPosition(randomPoint(), 500)
|
})
|
}, 10000)
|
}
|
|
//取区域内的随机图标
|
function randomPoint() {
|
var jd = haoutil.math.random(121.068909 * 1000, 121.666411 * 1000) / 1000
|
var wd = haoutil.math.random(30.977126 * 1000, 31.368503 * 1000) / 1000
|
return Cesium.Cartesian3.fromDegrees(jd, wd, 30)
|
}
|
|
|
//初始化widget相关
|
function initWidget(map) {
|
haoutil.loading.show()
|
|
$.ajax({
|
type: 'get',
|
dataType: 'json',
|
url: 'config/widget.json',
|
timeout: 0,
|
success: function(widgetCfg) {
|
haoutil.loading.hide()
|
|
//url如果有传参时的处理
|
if (haoutil.isutil.isNotNull(request.widget)) {
|
if (request.onlyStart) {
|
widgetCfg.openAtStart = []
|
}
|
widgetCfg.openAtStart.push({
|
uri: request.widget,
|
name: request.name || '',
|
windowOptions: {
|
closeBtn: !request.onlyStart,
|
},
|
request: request,
|
})
|
map.flyHome({ duration: 0 })
|
}
|
|
//初始化widget管理器
|
mars3d.widget.init(map, widgetCfg, './') //tip: 第3个参数支持定义widget目录的相对路径。
|
|
if (window.lastWidgetItem) {
|
activateWidget(lastWidgetItem)
|
lastWidgetItem = null
|
}
|
},
|
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
haoutil.loading.hide()
|
haoutil.alert('config/widget.json文件加载失败!')
|
},
|
})
|
|
//widget相关事件监听
|
// mars3d.widget.on(mars3d.widget.EventType.load, function (event) {
|
// console.log("引入加载了widget的js", event);
|
// })
|
// mars3d.widget.on(mars3d.widget.EventType.created, function (event) {
|
// console.log("创建了widet", event);
|
// })
|
mars3d.widget.on(mars3d.widget.EventType.activated, function(event) {
|
console.log('激活了widget', event)
|
})
|
mars3d.widget.on(mars3d.widget.EventType.disabled, function(event) {
|
console.log('释放了widget', event)
|
})
|
}
|
|
//bim构件的处理
|
function bindShowTilesParts() {
|
//单击地图事件
|
map.on(mars3d.EventType.clickGraphic, function(event) {
|
if (!(event.pickedObject instanceof Cesium.Cesium3DTileFeature)) {
|
//不是BIM数据时跳出
|
return
|
}
|
|
let layer = event.layer
|
if (!layer.options.scenetree) {
|
//未配置scenetree时跳出
|
return
|
}
|
|
var tilesParts = 'widgets/tilesParts/widget.js'
|
|
if (mars3d.widget.isActivate(tilesParts)) {
|
var parts = mars3d.widget.getClass(tilesParts)
|
if (parts.config.layerCfg == layer.options) {
|
//当前已激活,并且单击了相同模型时跳出
|
return
|
}
|
}
|
|
mars3d.widget.activate({
|
name: layer.name + ' 构件',
|
uri: tilesParts,
|
layerCfg: layer.options,
|
disableOther: false,
|
})
|
})
|
}
|
|
//外部页面调用
|
var lastWidgetItem
|
|
function activateWidget(item) {
|
if (!map) {
|
lastWidgetItem = item
|
return
|
}
|
mars3d.widget.activate(item)
|
}
|
|
function disableWidget(item) {
|
mars3d.widget.disable(item)
|
}
|
|
function activateFunByMenu(fun) {
|
eval(fun)
|
}
|
|
function goHome() {
|
mars3d.widget.disableAll()
|
map.flyHome()
|
}
|
|
function activateWidget(uri) {
|
|
// console.log('单击了工具栏:' + uri);
|
|
if (mars3d.widget.isActivate(uri)) {
|
mars3d.widget.disable(uri)
|
} else {
|
var opt = {
|
uri: uri,
|
}
|
mars3d.widget.activate(opt)
|
}
|
}
|