"use script"; //开发环境建议开启严格模式
//系统 功能入口
function getDefaultDateTime() {
var date = new Date;
date.setHours(date.getHours() - 2);
var year = date.getFullYear();//年
var month = date.getMonth();//月
var day = date.getDate();//日
var hours = date.getHours();//时
return year + "-" +
((month + 1) > 9 ? (month + 1) : "0" + (month + 1)) + "-" +
(day > 9 ? day : ("0" + day)) + " " +
(hours > 9 ? hours : ("0" + hours)) + ":00:00";
}
function getDefaultDateTimeGeo() {
var date = new Date;
date.setHours(date.getHours() - 2);
var year = date.getFullYear();//年
var month = date.getMonth();//月
var day = date.getDate();//日
var hours = date.getHours();//时
return year +
((month + 1) > 9 ? (month + 1) : "0" + (month + 1)) +
(day > 9 ? day : ("0" + day)) +
(hours > 9 ? hours : ("0" + hours)) + "0000";
}
mars3d.global_variables = { geoserver_url_predix: 'http://58.246.27.194:7011/', nodejs_url_predix: 'http://58.246.27.194:7012/', userid: 2, queryDataType: 'hour' };
mars3d.global_variables.queryDataTStart = getDefaultDateTime();
mars3d.global_variables.queryDataTStartGeo = getDefaultDateTimeGeo();
mars3d.global_variables.queryDataTEnd = getDefaultDateTime();
function initLayersByUserid() {
//addMaskShanghai();
addTDTAnnoLayer();
//TODO
$.getJSON("data/getLayerListByUserid.json", { userid: mars3d.global_variables.userid }, (result) => {
result.data.forEach((item) => {
if ([item['type']] == 'wms') {
addWMSLayer(item);
} else if ([item['type']] == 'wind') {
addWindLayer(item);
} else if ([item['type']] == 'graphic') {
//addGuokongLayer(item);
addGuokongLayerDIV(item)
} else if ([item['type']] == 'taxi') {
addTaxiLayer(item);
}
});
});
}
function addWMSLayer(item) {
var wmsLyer = new mars3d.layer.WmsLayer({
id: item.id,
pid: item.pid,
name: item.name,
type: "wms",
url: mars3d.global_variables.geoserver_url_predix + "/geoserver/konglu_58/wms",
layers: "konglu_58:" + item.geoname_prefix + mars3d.global_variables.queryDataType,
crs: "EPSG:4326",
parameters: {
"styles": item.style_prefix + item.styleoptions[0],
"transparent": "true",
"format": "image/png",
"viewparams": "userid:" + mars3d.global_variables.userid + ";datatime:" + mars3d.global_variables.queryDataTStartGeo
},
center: { "lat": 30.487351, "lng": 121.613269, "alt": 54033, "heading": 359, "pitch": -40 },
noCenter: true,
getFeatureInfoParameters: {
feature_count: 10
},
//单击高亮及其样式
highlight: {
type: "wallP",
diffHeight: 300,
material: mars3d.MaterialUtil.createMaterial(mars3d.MaterialType.LineFlow, {
image: "img/textures/fence.png",
color: "#ffff00",
speed: 10, //速度,建议取值范围1-100
axisY: true,
}),
},
popup: "all",
show: item.show,
geoname_prefix: item.geoname_prefix,
style_prefix: item.style_prefix,
style_options: item.styleoptions,
flyTo: false
});
//单击事件
wmsLyer.on(mars3d.EventType.click, function (event) {
console.log("单击了矢量数据,共" + event.features.length + "条", event);
});
map.addLayer(wmsLyer);
}
function addMaskShanghai() {
//geojson 合肥边界线
geoJsonLayer = new mars3d.layer.GeoJsonLayer({
url: "//data.mars3d.cn/file/geojson/areas/340100.json",
mask: true, //标识为遮罩层【重点参数】
symbol: {
styleOptions: {
fill: true,
color: "rgb(2,26,79)",
opacity: 0.9,
outline: false,
outlineColor: "#39E09B",
outlineWidth: 8,
outlineOpacity: 0.8,
arcType: Cesium.ArcType.GEODESIC,
clampToGround: true,
},
},
});
}
function addGuokongLayerDIV(item) {
var guokongLayer = new mars3d.layer.DivLayer({
id: item.id,
pid: item.pid, //图层管理 中使用,父节点id
name: item.name,
style_options: item.styleoptions
});
map.addLayer(guokongLayer);
guokongLayer.on(mars3d.EventType.click, function (event) {
console.log("监听layer,单击了矢量对象", event);
console.log(event.graphic?.attr)
var item = event.graphic?.attr;
//haoutil.msg('单击了:' + item['高校名称'])
});
guokongLayer.bindPopup(function (event) {
let item = event.graphic?.attr;
var html =
"站点名称:" +
item["SiteName"] +
"
分区:" +
item["RegionName"] +
"
AQI:" +
item["AQI"] +
"
PM25:" +
item["PM25"] + "ug/m3" +
"
SO2:" +
item["SO2"] + "ug/m3" +
"
O3:" +
item["O31"] + "ug/m3" +
"
详细信息
";
return html;
});
guokongLayer.reloadGuokongDian = function (){
guokongLayer.removeALL // 类似
$.getJSON("http://58.246.27.194:7012/dataapi/Bdata?bid=get_1001_list_hour&datatime=2021-09-06%2012:00:00&qindex=pm25", (result) => {
var pointColorArr = ["#f33349", "#fff000", "#33347f"];
for (var i = 0, len = result.data.result.length; i < len; i++) {
var item = result.data.result[i];
var jd = result.data.result[i].Longitude;
var wd = result.data.result[i].Latitude;
var clr = pointColorArr[i % pointColorArr.length];
var graphic = new mars3d.graphic.DivLightPoint({
position: Cesium.Cartesian3.fromDegrees(jd, wd),
style: {
color: clr,
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
highlight: {
type: "divLightPoint",
diffHeight: 600,
material: mars3d.MaterialUtil.createMaterialProperty(mars3d.MaterialType.CircleWave, {
color: "#ffff00",
count: 3,
speed: 20,
}),
},
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 200000), //按视距距离显示
},
show: true,
attr: item,
});
guokongLayer.addGraphic(graphic);
}
});
};
// add 国控点
$.getJSON("http://58.246.27.194:7012/dataapi/Bdata?bid=get_1001_list_hour&datatime=2021-09-06%2012:00:00&qindex=pm25", (result) => {
var pointColorArr = ["#f33349", "#fff000", "#33347f"];
for (var i = 0, len = result.data.result.length; i < len; i++) {
var item = result.data.result[i];
var jd = result.data.result[i].Longitude;
var wd = result.data.result[i].Latitude;
var clr = pointColorArr[i % pointColorArr.length];
var graphic = new mars3d.graphic.DivLightPoint({
position: Cesium.Cartesian3.fromDegrees(jd, wd),
style: {
color: clr,
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
highlight: {
type: "divLightPoint",
diffHeight: 600,
material: mars3d.MaterialUtil.createMaterialProperty(mars3d.MaterialType.CircleWave, {
color: "#ffff00",
count: 3,
speed: 20,
}),
},
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 200000), //按视距距离显示
},
show: true,
attr: item,
});
guokongLayer.addGraphic(graphic);
}
});
}
function addWindLayer(item) {
$.getJSON("data/getWindParametersByTime.json", { datatype: mars3d.global_variables.queryDataType, datatime: mars3d.global_variables.queryDataTStart }, (result) => {
console.log(result);
var layer_wind = new mars3d.layer.CanvasWindLayer({
id: item.id,
pid: item.pid,
name: item.name,
color: item.color,
frameRate: 20, //每秒刷新次数
speedRate: 60, //风前进速率
particlesNumber: 1000,
maxAge: 60,
lineWidth: 1,
reverseY: true
});
layer_wind.show = item.show;
map.addLayer(layer_wind);
layer_wind.data = convertWindData(result.data);
});
}
function convertWindData(arr) {
var arrU = [];
var arrV = [];
var xmin = arr[0].x;
var xmax = arr[0].x;
var ymin = arr[0].y;
var ymax = arr[0].y;
// 风向是以y轴正方向为零度顺时针转,0度表示北风。90度表示东风。
// u表示经度方向上的风,u为正,表示西风,从西边吹来的风。
// v表示纬度方向上的风,v为正,表示南风,从南边吹来的风。
for (let i = 0, len = arr.length; i < len; i++) {
const item = arr[i];
if (xmin > item.x) {
xmin = item.x;
}
if (xmax < item.x) {
xmax = item.x;
}
if (ymin > item.y) {
ymin = item.y;
}
if (ymax < item.y) {
ymax = item.y;
}
var u = mars3d.WindUtil.getU(item.speed, item.dir);
arrU.push(u);
var v = mars3d.WindUtil.getV(item.speed, item.dir);
arrV.push(v);
}
var rows = getKeyNumCount(arr, "y"); //计算 行数
var cols = getKeyNumCount(arr, "x"); //计算 列数
return {
xmin: xmin,
xmax: xmax,
ymax: ymax,
ymin: ymin,
rows: rows,
cols: cols,
udata: arrU, //横向风速
vdata: arrV, //纵向风速
};
}
function getKeyNumCount(arr, key) {
var obj = {};
arr.forEach((item) => {
obj[item[key]] = true;
});
var count = 0;
for (let col in obj) {
count++;
}
return count;
}
function addTaxiLayer(item) {
map.clock.shouldAnimate = true;
map.clock.startTime = Cesium.JulianDate.fromDate(new Date("2021-07-01 10:00:00"));
map.clock.currentTime = Cesium.JulianDate.fromDate(new Date("2021-07-01 10:00:00"));
map.clock.stopTime = Cesium.JulianDate.fromDate(new Date("2021-07-01 10:15:00"));
map.clock.multiplier = 5.0;
map.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
var taxi_layer = new mars3d.layer.GraphicLayer({
id: item.id,
name: item.name,
pid: item.pid, //图层管理 中使用,父节点id
center: { "lat": 30.62156, "lng": 121.44918, "alt": 48716, "heading": 359, "pitch": -40 },
noCenter: true,
show: true,
onWidget: "widgetsTS/taxi_layer_setting/widget.js",
});
map.addLayer(taxi_layer);
taxi_layer.on(mars3d.EventType.click, function (event) {
console.log("监听layer,单击了矢量对象", event);
var item = event.graphic?.attr;
});
taxi_layer.bindPopup(function (event) {
let item = event.graphic?.attr;
var html =
"
类型: " +
item["code"].substring(0, 2) == "BS" ? "公交车" : "出租车" +
"
车辆编号: " +
item["code"] +
"
数据时间: " +
item["datatime"] +
"
瞬时车速: " +
item["speed"] + " (km/h)" +
"
粉尘PM2.5: " +
item["pm25"] + " (ug/m3)" +
"
粉尘PM10: " +
item["pm10"] + " (ug/m3)" +
"
NO浓度: " +
item["no"] + " (ug/m3)" +
"
NO2浓度: " +
item["no2"] + " (ug/m3)" +
"
NO+NO2浓度: " +
item["nox"] + " (ug/m3)" +
"
CO浓度值: " +
item["co"] + " (mg/m3)" +
"
历史轨迹回放
";
return html;
});
$.getJSON("http://58.246.27.194:7012/dataapi/Bdata?bid=get_1004_list_by_userid&userid=2", (result) => {
for (var i = 0, len = result.data.result.length; i < len; i++) {
let item = result.data.result[i];
addItemToLayer(item, taxi_layer);
}
});
}
function addItemToLayer(item, target_layer) {
$.getJSON("http://58.246.27.194:7012/dataapi/Bdata?bid=get_1004_single_path&siteid=" + item["code"], {
datatime1: "2021-07-01 10:00:00",
datatime2: "2021-07-01 10:15:00"
}, (result) => {
if (result.data.result.length > 0) {
var tmpPositionProperty = new Cesium.SampledPositionProperty();
for (var i = 0, len = result.data.result.length; i < len; i++) {
let item = result.data.result[i];
//console.log(item);
tmpPositionProperty.addSample(Cesium.JulianDate.fromDate(new Date(item["datatime"])), Cesium.Cartesian3.fromDegrees(item["lon"], item["lat"], 0.2))
}
let graphic = new mars3d.graphic.ModelEntity({
attr: result.data.result[0],
style: {
url: "gltf/" + (item["code"]).substring(0, 2) + ".gltf",
scale: 0.5,
minimumPixelSize: 20,
highlight: {
type: mars3d.EventType.click,
silhouette: true,
silhouetteColor: "#ff0000",
silhouetteSize: 4,
},
label: {
//不需要文字时,去掉label配置即可
text: item["code"],
font_size: 16,
// TODO need to be changed according to qindex color.
color: "#ff00ff",
outline: true,
outlineColor: "#000000",
pixelOffsetY: -20,
distanceDisplayCondition: true,
distanceDisplayCondition_far: 50000,
distanceDisplayCondition_near: 0,
},
},
});
graphic.position = tmpPositionProperty;
target_layer.addGraphic(graphic);
}
});
}
function reLoadLayers() {
var layers = map.getLayers({ layers: true });
layers.forEach((layer) => {
console.log(layer.name+":"+layer.type);
if ([layer.type] == 'wms') {
layer.options.layers = "konglu_58:" + layer.options.geoname_prefix + mars3d.global_variables.queryDataType;
layer.options.parameters.viewparams = "userid:" + mars3d.global_variables.userid + ";datatime:" + mars3d.global_variables.queryDataTStartGeo;
layer.reload();
}
});
}
function refreshWidgets() {
}
function addTDTAnnoLayer() {
Img_annoTileLayer = new mars3d.layer.TdtLayer({
name: "影像注记",
layer: "img_z",
key: mars3d.Token.tiandituArr,
});
Img_annoTileLayer.show = false;
Img_annoTileLayer.pid = 50;
map.addLayer(Img_annoTileLayer);
Vec_annoTileLayer = new mars3d.layer.TdtLayer({
name: "矢量图注记",
layer: "vec_z",
key: mars3d.Token.tiandituArr,
});
Vec_annoTileLayer.show = false;
Vec_annoTileLayer.pid = 50;
map.addLayer(Vec_annoTileLayer);
}
function showDetail(layerid, itemCode) {
haoutil.msg('单击了:' + layerid + ',' + itemCode);
if (mars3d.widget.isActivate("widgetsTS/qyDetailsView/widget.js")) {
var detailWiget = mars3d.widget.getClass("widgetsTS/qyDetailsView/widget.js");
detailWiget.showSPJK();
} else {
mars3d.widget.activate({
uri: "widgetsTS/qyDetailsView/widget.js",
dataQy: itemCode,
});
}
}