'use script'; //开发环境建议开启严格模式 //MULTILINESTRING((121.442366232 30.9993324020001,121.432115747 31.0180369600001,121.425361897 31.033267139,121.400904977 31.0866703300001),(121.400938813 31.086461206,121.398898303 31.0910476290001,121.394856812 31.1020265970001,121.39172779 31.107931819,121.388063749 31.1137217880001)) MULTILINESTRING((121.442366232 30.9993324020001, 121.432115747 31.0180369600001, 121.425361897 31.033267139, 121.400904977 31.0866703300001), (121.400938813 31.086461206, 121.398898303 31.0910476290001, 121.394856812 31.1020265970001, 121.39172779 31.107931819, 121.388063749 31.1137217880001)) 沪金高速(奉贤区-南桥镇) 121.388063749 30.9993324020001 MULTILINESTRING((121.442366232 30.9993324020001, 121.432115747 31.0180369600001, 121.425361897 31.033267139, 121.400904977 31.0866703300001), (121.400938813 31.086461206, 121.398898303 31.0910476290001, 121.394856812 31.1020265970001, 121.39172779 31.107931819, 121.388063749 31.1137217880001)) 奉贤区 //LINESTRING(121.466190372 30.915914146,121.467249117 30.9123925970001,121.468322938 30.9086812570001) function getPositionFromLonLat(in_json_string) { let postion = []; var points = in_json_string.split(","); points.forEach(element => { var tmplon_lat = element.split(" "); postion[postion.length] = [tmplon_lat[0], tmplon_lat[1], 1]; }); return postion; } function getClass(o) { //判断数据类型 return Object.prototype.toString.call(o).slice(8, -1); } function deepCopy(obj) { var result, oClass = getClass(obj); if (oClass == "Object") result = {}; //判断传入的如果是对象,继续遍历 else if (oClass == "Array") result = []; //判断传入的如果是数组,继续遍历 else return obj; //如果是基本数据类型就直接返回 for (var i in obj) { var copy = obj[i]; if (getClass(copy) == "Object") result[i] = deepCopy(copy); //递归方法 ,如果对象继续变量obj[i],下一级还是对象,就obj[i][i] else if (getClass(copy) == "Array") result[i] = deepCopy(copy); //递归方法 ,如果对象继续数组obj[i],下一级还是数组,就obj[i][i] else result[i] = copy; //基本数据类型则赋值给属性 } return result; } (function (window, mars3d) { //创建widget类,需要继承BaseWidget class MyWidget extends mars3d.widget.BaseWidget { get view() { return { type: 'window', url: 'view.html', windowOptions: { width: 434, position: { top: 170, left: 5, bottom: 100 }, }, } } //初始化[仅执行1次] create() { this.nodejs_url_predix = mars3d.global_variables.nodejs_url_predix; this.userid = mars3d.global_variables.userid; this.datatype = mars3d.global_variables.queryDataType; this.datatime = mars3d.global_variables.queryDataTStart; } reloadData(params) { this.datatype = mars3d.global_variables.queryDataType; this.datatime = mars3d.global_variables.queryDataTStart; this.winPage.reloadData(); } locateAndHighlight(lon, lat) { this.map.flyToPoint(Cesium.Cartesian3.fromDegrees(lon, lat, 0.2)); } HighlightMulti(layerid, qindex, selectedItem) { mars3d.global_variables.tmpHighlightGraphicLayer.clear(true); if (layerid == 1001 || layerid == 1002 || layerid == 1003 || layerid == 1004) { selectedItem.forEach(element => { // console.log(element) if(element.lon == "/" || element.lat == "/"){ return; } this.addPointToMap(layerid, qindex, element); }); } else if (layerid == 1005 || layerid == 100500) { selectedItem.forEach(element => { var path = element.shape; if(path == "/" ){ return; } if (path.substring(0, 1) == "M") { var paths = (path.substring(17, path.length - 2)).split("),("); paths.forEach(element_path => { var positions = getPositionFromLonLat(element_path) var tmpAttr = deepCopy(element); delete tmpAttr['shape']; this.addPathToMap(layerid, qindex, positions, tmpAttr); }); } else { var positions = getPositionFromLonLat(path.substring(11, path.length - 1)) var tmpAttr = deepCopy(element); delete tmpAttr['shape']; this.addPathToMap(layerid, qindex, positions, tmpAttr); } }); } else if (layerid == 100500) { } else if (layerid == 1006) { selectedItem.forEach(element => { var path = element.shape; if(path == "/" ){ return; } // if(path == null && path == "null" && path == undefined){ // return; // } if (path.substring(0, 1) == "M") { var paths = (path.substring(15, path.length - 3)).split(")),(("); paths.forEach(element_path => { var positions = getPositionFromLonLat(element_path) var tmpAttr = deepCopy(element); delete tmpAttr['shape']; this.addPolygonToMap(layerid, qindex, positions, tmpAttr); }); } else { var positions = getPositionFromLonLat(path.substring(9, path.length - 2)); var tmpAttr = deepCopy(element); delete tmpAttr['shape']; this.addPolygonToMap(layerid, qindex, positions, tmpAttr); } // if (path != null && path != "null" && path != undefined) { // var positions = getPositionFromLonLat(path.substring(9, path.length - 2)) // var tmpAttr = deepCopy(element); // delete tmpAttr['shape']; // this.addPolygonToMap(layerid, qindex, positions, tmpAttr); // } }); } } addPolygonToMap(layerid, qindex, positions, attr) { var primitive = new mars3d.graphic.PolygonEntity({ positions: positions, style: { height: 50, diffHeight: 200, materialType: mars3d.MaterialType.PolyGradient, color: this.winPage.getLayerPointColorByQindexandValue(layerid, qindex, attr[qindex]), alphaPower: 1.5, //高亮时的样式(默认为鼠标移入,也可以指定type:'click'单击高亮),构造后也可以openHighlight、closeHighlight方法来手动调用 highlight: { color: "#ff0000", }, }, attr: attr }); mars3d.global_variables.tmpHighlightGraphicLayer.addGraphic(primitive); } addPointToMap(layerid, qindex, attr) { //立体围墙扩散效果,圆状 var circleDiffuseWallGlow = new mars3d.graphic.DiffuseWall({ position: Cesium.Cartesian3.fromDegrees(attr["lon"], attr["lat"], 20), //圆中心点 style: { diffHeight: qindex == "co" ? 10 * attr[qindex] : attr[qindex], //高度 radius: 200, //半径 color: this.winPage.getLayerPointColorByQindexandValue(layerid, qindex, attr[qindex]), speed: 10, //速度 }, attr: attr }); mars3d.global_variables.tmpHighlightGraphicLayer.addGraphic(circleDiffuseWallGlow); } addPathToMap(layerid, qindex, positions, attr) { var road = new mars3d.graphic.WallPrimitive({ positions: positions, style: { closure: true, diffHeight: qindex == "co" ? 10 * attr[qindex] : attr[qindex], //高度 material: mars3d.MaterialUtil.createMaterial(mars3d.MaterialType.LineFlow, { //动画线材质 image: "img/textures/fence.png", axisY: true, color: this.winPage.getLayerPointColorByQindexandValue(layerid, qindex, attr[qindex]), speed: 10, //速度,建议取值范围1-100 }), }, attr: attr }); mars3d.global_variables.tmpHighlightGraphicLayer.addGraphic(road); } showDetailedWindow(params) { if (mars3d.widget.isActivate("widgetsTS/widget_detail/widget.js")) { var detailWiget = mars3d.widget.getClass("widgetsTS/widget_detail/widget.js"); detailWiget.reloadData(params); } else { mars3d.widget.activate({ uri: "widgetsTS/widget_detail/widget.js", disableOther: false, params: params }); } } //每个窗口创建完成后调用 winCreateOK(opt, result) { this.winPage = result; this.winPage.setTopNname(mars3d.global_variables.summary_topN_count); } //打开激活 activate() { } //关闭释放 disable() { } } //注册到widget管理器中。 mars3d.widget.bindClass(MyWidget) //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 })(window, mars3d)