'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 => {
|
this.addPointToMap(layerid, qindex, element);
|
});
|
|
} else if (layerid == 1005 || layerid == 100500) {
|
selectedItem.forEach(element => {
|
var path = element.shape;
|
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 != 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" ? 100 * attr[qindex] : 10 * 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" ? 100 * attr[qindex] : 10 * 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)
|