| | |
| | | "use script"; //开发环境建议开启严格模式 |
| | | //系统主入口 |
| | | |
| | | |
| | | var map; //地球对象 |
| | | var request; //传入的get参数 |
| | | var geoJsonLayer; |
| | | |
| | | |
| | | //地图 |
| | | $(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)); |
| | | } |
| | | |
| | | // try { |
| | | // var jwtstr = request.JWT; |
| | | // var strs_ = jwtstr.split('.'); |
| | | // var jwt_header_ = new buffer.Buffer(strs_[0].toString('base64'), 'base64').toString(); |
| | | // var jwt_payload_ = new buffer.Buffer(strs_[1].toString('base64'), 'base64').toString(); |
| | | // var payload_ = JSON.parse(jwt_payload_); |
| | | // mars3d.global_variables.userid = payload_.userid; |
| | | // mars3d.global_variables.regionCode = payload_.divcode; |
| | | // var hash = CryptoJS.HmacSHA256(strs_[0] + '.' + strs_[1], "sxyd"); |
| | | // var hashInBase64 = base64UrlEncode(hash); |
| | | |
| | | // var reg = RegExp(strs_[2]); |
| | | // if (!reg.exec(hashInBase64)) { |
| | | // // verification failed, go back |
| | | // window.top.location = mars3d.global_variables.un_authorization_url; |
| | | // } |
| | | // payload_ = JSON.parse(jwt_payload_); |
| | | // if (!payload_ || !payload_.expires) { |
| | | // // verification error ,go back |
| | | // window.top.location = mars3d.global_variables.un_authorization_url; |
| | | // } |
| | | // var date1 = new Date(payload_.expires); |
| | | // var date2 = new Date(); |
| | | // if (date1 < date2) { |
| | | // // expire, go back |
| | | // window.top.location = mars3d.global_variables.un_authorization_url; |
| | | // } |
| | | // } |
| | | // catch (err) { |
| | | // window.top.location = mars3d.global_variables.un_authorization_url; |
| | | // } |
| | | |
| | | mars3d.global_variables.userid = request?.userid || 2; |
| | | |
| | | try { |
| | | var jwtstr = request.JWT; |
| | | var strs_ = jwtstr.split('.'); |
| | | var jwt_header_ = new buffer.Buffer(strs_[0].toString('base64'), 'base64').toString(); |
| | | var jwt_payload_ = new buffer.Buffer(strs_[1].toString('base64'), 'base64').toString(); |
| | | var payload_ = JSON.parse(jwt_payload_); |
| | | mars3d.global_variables.userid = payload_.userid; |
| | | mars3d.global_variables.regionCode = payload_.divcode; |
| | | var hash = CryptoJS.HmacSHA256(strs_[0] + '.' + strs_[1], "sxyd"); |
| | | var hashInBase64 = base64UrlEncode(hash); |
| | | |
| | | var reg = RegExp(strs_[2]); |
| | | if (!reg.exec(hashInBase64)) { |
| | | // verification failed, go back |
| | | window.top.location = mars3d.global_variables.un_authorization_url; |
| | | } |
| | | payload_ = JSON.parse(jwt_payload_); |
| | | if (!payload_ || !payload_.expires) { |
| | | // verification error ,go back |
| | | window.top.location = mars3d.global_variables.un_authorization_url; |
| | | } |
| | | var date1 = new Date(payload_.expires); |
| | | var date2 = new Date(); |
| | | if (date1 < date2) { |
| | | // expire, go back |
| | | window.top.location = mars3d.global_variables.un_authorization_url; |
| | | } |
| | | } |
| | | catch (err) { |
| | | window.top.location = mars3d.global_variables.un_authorization_url; |
| | | } |
| | | |
| | | if(!mars3d.global_variables.userid) { |
| | | mars3d.global_variables.userid = 2; |
| | | } |
| | | regionCode = mars3d.global_variables.regionCode |
| | | |
| | | |
| | | var configfile = "config/config.json"; //默认地址 |
| | | if (request.config) { |
| | | //url传入地址 |
| | | configfile = request.config; |
| | | } |
| | | |
| | | |
| | | haoutil.loading.show(); |
| | | |
| | | |
| | | $.ajax({ |
| | | type: "get", |
| | | dataType: "json", |
| | |
| | | timeout: 0, |
| | | success: function (data) { |
| | | haoutil.loading.hide(); |
| | | |
| | | |
| | | //构建地图 |
| | | initMap(data.map3d); |
| | | |
| | | |
| | | setTimeout(removeMask, 3000); //欢迎UI关闭处理 |
| | | }, |
| | | error: function (request, textStatus) { |
| | |
| | | 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, {}) |
| | | |
| | | |
| | | //创建三维地球场景 |
| | | map = new mars3d.Map("mars3dContainer", mapOptions); |
| | | |
| | | |
| | | |
| | | |
| | | //构造widget |
| | | initWidget(map); |
| | | |
| | | |
| | | initLayersByUserid(); |
| | | |
| | | |
| | | |
| | | |
| | | //如果有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; //限制帧率 |
| | |
| | | } 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.on(mars3d.EventType.renderError, function (scene, error) { |
| | | // window.location.reload(); |
| | | // }); |
| | | |
| | | |
| | | //绑定单击显示BIM的构件树 |
| | | bindShowTilesParts(); |
| | | |
| | | |
| | | //下面可以继续加项目相关的其他代码 |
| | | } |
| | | |
| | | |
| | | //初始化widget相关 |
| | | function initWidget(map) { |
| | | haoutil.loading.show(); |
| | | |
| | | |
| | | $.ajax({ |
| | | type: "get", |
| | | dataType: "json", |
| | |
| | | timeout: 0, |
| | | success: function (widgetCfg) { |
| | | haoutil.loading.hide(); |
| | | |
| | | |
| | | //url如果有传参时的处理 |
| | | if (haoutil.isutil.isNotNull(request.widget)) { |
| | | if (request.onlyStart) { |
| | |
| | | }); |
| | | map.flyHome({ duration: 0 }); |
| | | } |
| | | |
| | | |
| | | //初始化widget管理器 |
| | | mars3d.widget.init(map, widgetCfg, "./"); //tip: 第3个参数支持定义widget目录的相对路径。 |
| | | |
| | | |
| | | if (window.lastWidgetItem) { |
| | | activateWidget(lastWidgetItem); |
| | | lastWidgetItem = null; |
| | |
| | | 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.beforeCreate, function (event) { |
| | | // console.log("不创建widet", event); |
| | | // }) |
| | | |
| | | |
| | | mars3d.widget.on(mars3d.widget.EventType.activated, function (event) { |
| | | console.log("激活了widget", event); |
| | | }); |
| | |
| | | console.log("释放了widget", event); |
| | | }); |
| | | } |
| | | |
| | | |
| | | //bim构件的处理 |
| | | function bindShowTilesParts() { |
| | | //单击地图事件 |
| | |
| | | //不是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, |
| | |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | |
| | | //外部页面调用 |
| | | var lastWidgetItem; |
| | | function activateWidget(item) { |
| | |
| | | function activateFunByMenu(fun) { |
| | | eval(fun); |
| | | } |
| | | |
| | | |
| | | function goHome() { |
| | | mars3d.widget.disableAll(); |
| | | map.flyHome(); |
| | | } |
| | | |
| | | |
| | | function base64UrlEncode(str) { |
| | | var encodedSource = CryptoJS.enc.Base64.stringify(str); |
| | | var reg = new RegExp('/', 'g'); |
| | | encodedSource = encodedSource.replace(/=+$/,'').replace(/\+/g,'-').replace(reg,'_'); |
| | | return encodedSource; |
| | | } |
| | | } |