//模块: xjsdk.widget.bindClass(xjsdk.widget.BaseWidget.extend({ options: { resources: [ "./lib/cesiumjs/plugins/class/GaodeRoute.js",//高德路径查询 "./lib/cesiumjs/plugins/class/GaodePOI.js" //高德poi查询 ], //弹窗 view: { type: "window", url: "view.html", windowOptions: { width: 350 } }, }, //初始化[仅执行1次] create: function () { }, viewWindow: null, //每个窗口创建完成后调用 winCreateOK: function (opt, result) { this.viewWindow = result; }, //打开激活 gaodeRoute: null, gaodePOI: null, activate: function () { this.gaodeRoute = new GaodeRoute(); this.gaodePOI = new GaodePOI(); }, //关闭释放 disable: function () { this.gaodeRoute = null; this.startLnglat = null; this.endLnglat = null; if (this.startPoint) { this.viewer.xjsdk.draw.deleteEntity(this.startPoint); this.viewer.entities.remove(this.startPoint); this.startPoint = null; } if (this.endPoint) { this.viewer.xjsdk.draw.deleteEntity(this.endPoint); this.viewer.entities.remove(this.endPoint); this.endPoint = null; } this.alreadyCompute = false; this.gaodePOI = null; this.gaodeRoute = null; this.startLnglat = null; this.startPoint = null; this.endLnglat = null; this.endPoint = null; this.clearCoumpute(); }, //===========gaodePOI 通过输入名称选点 ============ queryPOI: function (text, type) { if (!text || !type) return; var arg = {}; arg.success = function (res) { this.viewWindow.setHtmlInMCXD(res, type); //展示搜索结果 } arg.error = function (msg) { window.toastr.error(msg); haoutil.loading.close(); } arg.text = text; if (this.gaodePOI) this.gaodePOI.queryText(arg); }, //=======================起点=============================== //绘制起点 startLnglat: null, startPoint: null, drawStartPoint: function (callback) { var that = this; that.viewer.xjsdk.draw.startDraw({ type: "billboard", style: { image: this.path + "img/start.png" }, success: function (entity) { var currentTime = that.viewer.clock.currentTime; var cartesian = entity.position.getValue(currentTime); var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var jd = Number(Cesium.Math.toDegrees(cartographic.longitude).toFixed(6)); var wd = Number(Cesium.Math.toDegrees(cartographic.latitude).toFixed(6)); if (callback) callback(jd + "," + wd); that.startLnglat = [jd, wd]; if (that.startPoint) { that.viewer.xjsdk.draw.deleteEntity(entity); that.startPoint.position.setValue(cartesian); } else { that.startPoint = entity; } that.startCompute(); } }); }, //输入起点坐标 inputStartPoint: function (jd, wd) { if (!jd || !wd) return; if (this.startPoint) { this.viewer.xjsdk.draw.deleteEntity(this.startPoint); this.viewer.entities.remove(this.startPoint); } this.startLnglat = [jd, wd]; var cartesian = Cesium.Cartesian3.fromDegrees(jd, wd); var entity = this.viewer.entities.add({ position: cartesian, billboard: { image: this.path + "img/start.png", horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scale: 1, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); this.startPoint = entity; this.locateByJWD({ jd: jd, wd: wd }); this.startCompute(); }, //查询起点坐标 queryStartPoint: function (text) { if (!text) { window.toastr.error("请输入查询条件!"); return; } this.queryPOI(text, "start"); }, //=======================终点=============================== //绘制终点 endPoint: null, endLnglat: null, drawEndPoint: function (callback) { var that = this; that.viewer.xjsdk.draw.startDraw({ type: "billboard", style: { image: this.path + "img/end.png" }, success: function (entity) { var currentTime = that.viewer.clock.currentTime; var cartesian = entity.position.getValue(currentTime); var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var jd = Number(Cesium.Math.toDegrees(cartographic.longitude).toFixed(6)); var wd = Number(Cesium.Math.toDegrees(cartographic.latitude).toFixed(6)); if (callback) callback(jd + "," + wd); that.endLnglat = [jd, wd]; if (that.endPoint) { that.viewer.xjsdk.draw.deleteEntity(entity); that.endPoint.position.setValue(cartesian); } else { that.endPoint = entity; } that.startCompute(); } }); }, //输入终点坐标 inputEndPoint: function (jd, wd) { if (!jd || !wd) return; if (this.endPoint) { this.viewer.xjsdk.draw.deleteEntity(this.endPoint); this.viewer.entities.remove(this.endPoint); } this.endLnglat = [jd, wd]; var cartesian = Cesium.Cartesian3.fromDegrees(jd, wd); var entity = this.viewer.entities.add({ position: cartesian, billboard: { image: this.path + "img/end.png", horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scale: 1, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); this.endPoint = entity; this.locateByJWD({ jd: jd, wd: wd }); this.startCompute(); }, //查询终点坐标 queryEndPoint: function (text) { if (!text) { window.toastr.error("请输入查询条件!"); return; } this.queryPOI(text, "end"); }, //===================开始计算路线======================== //清除计算的结果 clearCoumpute: function () { this.colorStep = 0; //清除路线 for (var i = 0; i < this.routeArr.length; i++) { var line = this.routeArr[i]; if (line) this.viewer.entities.remove(line); } this.routeArr = []; this.viewWindow.clearRouteContent(); //清除页面搜索结果 //清除漫游的数组 for (var index = 0; index < this.flyLineArr.length; index++) { var flyline = this.flyLineArr[index]; if (flyline) flyline.destroy(); } this.flyLineArr = []; //取消当前的视角跟随 this.removeTrack(); if (this.nowFline) { this.nowFline.destroy(); this.nowFline = null; } $("#mapDH_speed").remove(); }, //开始计算 alreadyCompute: false, //是否已计算过 startCompute: function () { if (!this.startLnglat || this.startLnglat.length == 0) return; if (!this.endLnglat || this.endLnglat.length == 0) return; if (this.alreadyCompute) { //清除上一次的计算结果 this.clearCoumpute(); } //当两点存在时 自动计算 var that = this; this.gaodeRoute.query({ type: 3, points: [this.startLnglat, this.endLnglat], extensions: "all", strategy: 11, success: function (data) { that.alreadyCompute = true; that.viewWindow.startCompute(); if (!data || data.paths.length < 1) return; that.viewWindow.showRouteBox(true); //添加速度控制面板 for (var i = 0; i < data.paths.length; i++) { var line = that.addRouteLine(data.paths[i]); if (!line) return; that.routeArr.push(line); //展示路径信息 that.viewWindow.showRouteInfo(line); //计算漫游路线 that.computeFlyline(line); } } }); }, //添加路径 //设置路线随机色 randomColor: [ new Cesium.Color.fromCssColorString("#eaf731").withAlpha(0.8), new Cesium.Color.fromCssColorString("#57f72e").withAlpha(0.8), new Cesium.Color.fromCssColorString("#2effd2").withAlpha(0.8), new Cesium.Color.fromCssColorString("#cc6e26").withAlpha(0.8), new Cesium.Color.fromCssColorString("#ff2ec7").withAlpha(0.8), ], colorStep: 0, routeArr: [], //保存路径 addRouteLine: function (path) { var steps = path.steps; var points = path.points; if (!steps || steps.length < 1 || !points || points.length < 1) return; if (this.colorStep > this.randomColor.length - 1) { this.colorStep = 0; } var material = this.randomColor[this.colorStep] var cartesians = xjsdk.pointconvert.lonlats2cartesians(points); var line = this.viewer.entities.add({ polyline: { positions: cartesians, clampToGround: true, material: material, width: 3 } }); line.attr = path; this.colorStep++; return line; }, //============= 计算漫游路线 ====================== flyLineArr: [], computeFlyline: function (line) { if (!line || !line.attr) return; var lnglats = line.attr.points; var flydata = { "name": "贴地路线", "camera": { "type": "" }, "points": lnglats, "speed": 200, "model": { "uri": serverURL_gltf + "/xjsdk/qiche.gltf", "scale": 0.3, "minimumPixelSize": 30, "clampToGround":true, "show": true, } }; var flyLine = new xjsdk.FlyLine(this.viewer, flydata); flyLine.lineId = line.id; this.flyLineArr.push(flyLine); // var that = this; // haoutil.loading.show("正在计算路径!"); // flyLine.clampToGround(function () { //异步计算完成贴地后再启动 // haoutil.loading.hide(); // flyLine.popup = { // id: Number((new Date()).getTime() + "" + Number(Math.random() * 1000).toFixed(0)), // anchor: [0, -20], //左右、上下的偏移像素值。 // timeRender: true, //实时更新html // html: function () { // var params = flyLine.timeinfo; // if (!params) return "即将开始漫游"; // var html = '