"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, }); } }