From d41024c55f6b7515d3880457d83be99fbbcf6622 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 06 Feb 2023 10:46:44 +0800
Subject: [PATCH] 水文水环境分析-洪水淹没:画线进行分析修改为画多边形进行分析
---
widgets/FloodAnalysis/Widget.html | 34
/dev/null | 165 ---
widgets/FloodAnalysis/data.json | 226 ++++
widgets/FloodAnalysis/css/style.css | 202 +++
widgets/FloodAnalysis/Widget copy.html | 75
widgets/FloodAnalysis/Widget.js | 1448 +++++++++++++++++------------
corelib/common/popup/css/style.css | 2
widgets/FloodAnalysis/Widget copy.js | 469 +++++++--
widgets/FloodAnalysis/css/style copy.css | 225 ++--
9 files changed, 1,759 insertions(+), 1,087 deletions(-)
diff --git a/corelib/common/popup/css/style.css b/corelib/common/popup/css/style.css
index 9730dc2..c7016c9 100644
--- a/corelib/common/popup/css/style.css
+++ b/corelib/common/popup/css/style.css
@@ -818,7 +818,7 @@
.evaluate-box-middle{
width: 96%;
- height: 425px;
+ height: 650px;
border: 1px solid black;
padding: 0px 10px 0px 10px;
}
diff --git a/widgets/FloodAnalysis/Widget copy.html b/widgets/FloodAnalysis/Widget copy.html
index d164228..591d661 100644
--- a/widgets/FloodAnalysis/Widget copy.html
+++ b/widgets/FloodAnalysis/Widget copy.html
@@ -1,43 +1,46 @@
<div>
-
- <div class="dynamicriver-main">
- <div class="dynamicriver-header">
- <i></i> 水面线分析
- <div class="close-dynamicriver">×</div>
- </div>
- <!--<div>
- <span>请选择水面线:</span><select id="flightRoute"></select>
- </div>-->
- <div class="water-analysis">
- <ul class="water-analysis-content">
-
- </ul>
- </div>
+ <div class="flood-analysis-header">
+ <i></i> 洪水淹没分析
</div>
-
- <div class="dynamicriver-result">
- <div>
- 数据信息
- <div class="close-dynamicriver-result">×</div>
- </div>
+ <!--<div>
+ <span>请选择水面线:</span><select id="flightRoute"></select>
+ </div>-->
+ <div class="flood-water-analysis">
<ul>
- <li>
- <span class="dynamicriver-result-name">录入人</span>
- <span class="dynamicriver-result-sname"></span>
- </li>
- <li>
- <span class="dynamicriver-result-name">采集时间</span>
- <span class="dynamicriver-result-ctime"></span>
- </li>
- <li>
- <span class="dynamicriver-result-name">录入时间</span>
- <span class="dynamicriver-result-ltime"></span>
- </li>
+ <li><span>水位(m):</span><input id="flood_analysis_sw_headtab" type="text" value="200" /></li>
</ul>
- </div>
- <div id="aooaa">
-
+ <div class="flood-water-analysis-new">
+ <div>
+ <input type="button" id="flood_hzsm_headtab" value="绘制水面线" />
+ <input type="button" id='flood_qcsmx_headtab' value="清除">
+ </div>
+<!-- <div>-->
+<!-- <input type="button" id="thematic_smsz_headtab" value="水面上涨" />-->
+<!-- <input type="button" id="thematic_smxj_headtab" value="水面下降" />-->
+<!-- </div>-->
+ </div>
</div>
+ <div class="flood-detail">
+ <div class="flood-detail-header">
+ <i></i> 洪水淹没详情
+ </div>
-</div>
\ No newline at end of file
+ <div class="flood-detail-content">
+ <div class="flood-detail-text">
+ <div>
+ <span>0-3m淹没面积:</span><span>10km²</span>
+ </div>
+ <div>
+ <span>1-2m淹没面积:</span><span>20km²</span>
+ </div>
+ <div>
+ <span>>3m淹没面积:</span><span>22km²</span>
+ </div>
+ </div>
+ <div class="flood-detail-button">
+ <input type="button" id="flood-detail-ksfx" value="开始分析" />
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/widgets/FloodAnalysis/Widget copy.js b/widgets/FloodAnalysis/Widget copy.js
index f33de68..4762816 100644
--- a/widgets/FloodAnalysis/Widget copy.js
+++ b/widgets/FloodAnalysis/Widget copy.js
@@ -1,6 +1,6 @@
///////////////////////////////////////////////////////////////////////////
-// Copyright © 2020 zhongsong. All Rights Reserved.
-// 模块描述:河流水面线分析
+// Copyright © 2022 guoshilong. All Rights Reserved.
+// 模块描述:洪水淹没分析
///////////////////////////////////////////////////////////////////////////
define([
'dojo/_base/declare',
@@ -10,19 +10,25 @@
'dojo/topic',
'jimu/BaseWidget',
'./Tooltip-div',
- './DynamicDraw'
+ './FloodAnalysis',
+ 'libs/layer/layer.js',
+ 'libs/turf/turf.min.js'
],
function (declare,
lang,
array,
html,
topic,
- BaseWidget
+ BaseWidget,
+ tooltip,
+ flood,
+ layer,
+ turf,
) {
return declare([BaseWidget], {
- baseClass: 'jimu-widget-DynamicRiver',
- name: 'DynamicRiver',
- riverWidth: 200,
+ baseClass: 'jimu-widget-FloodAnalysis',
+ name: 'FloodAnalysis',
+ riverWidth: 300,
riverHeight: 10,
speed: 10,
positions: [],
@@ -30,8 +36,13 @@
riverPrimitive: null,
material: null,
drawingPolyline: null,
- // 增加waterData 用来存放列表数据
- waterData: null,
+ //绘制的多边形数组
+ polygonCartesianArray:[],
+ //canvas转换后的图片
+ canvasImage:null,
+ //房屋人口
+ peoplePositionArray:[],
+ myWaterPrimitive:null,
startup: function () {
this.inherited(arguments);
var self = this;
@@ -39,106 +50,82 @@
this.map.scene.globe.depthTestAgainstTerrain = true;
//取消双击事件
this.map.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
-
-
- // 点击地图上绘制水面线,并且显示水面线详细数据
- $('.water-analysis-content').on('click', '.content-right', function (e) {
-
- var dataIndex = $(e.target).parent().index();
- var cartesians = [];
-
- self.map.camera.flyTo({
- destination: Cesium.Cartesian3.fromDegrees(Number(self.waterData[dataIndex].zb[0].jd), Number(self.waterData[dataIndex].zb[0].wd), 5000),
- easingFunction: Cesium.EasingFunction.QUADRACTIC_IN_OUT
+ //绘制水面事件
+ $("#flood_hzsm_headtab").click(function () {
+ DrawDynamicClampGround.startDrawingPolyline(self.map, function (cartesians) {
+ if (self.drawingPolyline != undefined)
+ self.map.entities.remove(self.drawingPolyline);
+ var lineOpts = {
+ polyline: {
+ positions: cartesians,
+ clampToGround: true,
+ width: 3,
+ color: "#279a9a"
+ }
+ };
+ self.drawingPolyline = self.map.entities.add(lineOpts);
+ cartesians.splice(cartesians.length - 1, cartesians.length);
+ self.drawLines(cartesians);
+ self.movehandLer()
+ self.showDetail(true)
});
+ });
- $('.dynamicriver-result-sname').text(self.waterData[dataIndex].sname);
- $('.dynamicriver-result-ctime').text(self.waterData[dataIndex].ctime.substring(0, 10));
- $('.dynamicriver-result-ltime').text(self.waterData[dataIndex].ltime.substring(0, 10));
-
- if (e.target.nodeName == 'SPAN') {
- $('.dynamicriver-result').stop().show();
- $('.dynamicriver-main').stop().hide();
- }
-
-
- // $('.jimu-widget-DynamicRiver .dynamicriver-result').fadeIn();
- self.waterData[dataIndex].zb.forEach(function (item, index) {
- cartesians.push(Cesium.Cartesian3.fromDegrees(item.jd, item.wd, item.elevation))
- })
- // self.drawLines(cartesians);
- // DrawDynamicClampGround.startDrawingPolyline(self.map, function (cartesians) {
- if (self.drawingPolyline != undefined)
- self.map.entities.remove(self.drawingPolyline);
- var lineOpts = {
- polyline: {
- positions: cartesians,
- clampToGround: true,
- width: 3,
- color: "#279a9a"
- }
- };
- self.drawingPolyline = self.map.entities.add(lineOpts);
- cartesians.splice(cartesians.length - 1, cartesians.length);
- self.drawLines(cartesians);
- // });
-
- })
-
-
- $('.close-dynamicriver').click(function () {
- $('.jimu-widget-DynamicRiver').stop().hide();
- })
-
- // 关闭详细信息事件
- $('.close-dynamicriver-result').click(function () {
- $('.dynamicriver-result').stop().hide();
- $('.dynamicriver-main').stop().show();
-
+ $('#flood_qcsmx_headtab').click(function () {
self.map.entities.remove(self.drawingPolyline);
self.map.scene.primitives.remove(self.riverPrimitive);
-
- self.map.camera.flyTo({
- destination: Cesium.Cartesian3.fromDegrees(115.257787, 25.885506, 549263.35),
- easingFunction: Cesium.EasingFunction.QUADRACTIC_IN_OUT
- });
+ self.showDetail(false)
})
+ // $("#thematic_hlkd_headtab").change(function (e) {
+ // self.riverWidth = Number($(this).val());
+ // self.resetPos();
+ // });
+ $("#flood_analysis_sw_headtab").change(function (e) {
+ self.riverHeight = Number($(this).val());
+ self.resetPos();
+ });
+ // $("#thematic_sls_headtab").change(function (e) {
+ // self.speed = Number($(this).val());
+ // self.resetPos();
+ // });
+ //
+ // $("#thematic_smsz_headtab").click(function () {
+ // self.offsetHeight(Number($("#thematic_bhz_headtab").val()), 5);
+ // });
+ //
+ // $("#thematic_smxj_headtab").click(function () {
+ // self.offsetHeight(-Number($("#thematic_bhz_headtab").val()), 5);
+ // });
+ $('#flood-detail-ksfx').click(function () {
+ self.floodAnalysisPopup()
+ })
-
- /*for(var e = [
- [115.907543, 30.441563, 541.47],
- [115.904337, 30.439412, 491.79],
- [115.900612, 30.438483, 449.11],
- [115.896375, 30.439377, 388.29],
- [115.890586, 30.442215, 345.94],
- [115.876946, 30.444641, 292.73]
- ], r = [], i = 0; i < e.length; i++) r.push(Cesium.Cartesian3.fromDegrees(e[i][0], e[i][1], e[i][2]));
-
- this.positions = r;
-
- this.init();*/
},
+
init: function () {
this.prepareVertex();
if (this.sideRes) {
this.material = this.prepareMaterial();
this.riverPrimitive && this.map.scene.primitives.remove(this.riverPrimitive);
this.riverPrimitive = this.createPrimitive();
- this.map.scene.primitives.add(this.riverPrimitive);
+ this.myWaterPrimitive = this.map.scene.primitives.add(this.riverPrimitive);
}
},
+
prepareVertex: function () {
if (this.positions.length > 0) {
this.sideRes = this._lines2Plane(this.positions, this.riverWidth, this.riverHeight);
}
},
+
setPositions: function (e) {
this.positions = e;
this.init();
},
+
resetPos: function () {
this.sideRes = this._lines2Plane(this.positions, this.riverWidth, this.riverHeight);
if (this.sideRes) {
@@ -148,14 +135,16 @@
this.map.scene.primitives.add(this.riverPrimitive);
}
},
+
drawLines: function (r) {
this.setPositions(r);
},
+
prepareMaterial: function () {
var e = new Cesium.Material({
fabric: {
uniforms: {
- image: "widgets/DynamicRiver/images/movingRiver.png",
+ image: "widgets/ThematicDynamicRiver/images/movingRiver.png",
alpha: 0.5,
moveVar: new Cesium.Cartesian3(50, 1, 100),
reflux: -1,
@@ -168,6 +157,7 @@
});
return e
},
+
createPrimitive: function () {
var t = new Float64Array(this.sideRes.vertexs),
i = new Cesium.GeometryAttributes;
@@ -201,9 +191,11 @@
})
})
},
+
offsetHeight: function (height, time) {
this.startDH(height, time)
},
+
startDH: function (height, time) {
if (height && time && this.riverPrimitive) {
for (var i = this, r = 0, n = height / (20 * time), o = this.sideRes.self, s = new Cesium.Cartesian3, l = 0, u = o.length; l < u; l++) {
@@ -221,6 +213,7 @@
}, this.map.clock.onTick.addEventListener(this.dhEvent)
}
},
+
//水面线转成水面
_lines2Plane: function (positions, width, height) {
function n(point, height) {
@@ -302,6 +295,17 @@
D.push(v[H].x), D.push(v[H].y), D.push(v[H].z), k.push(B.high.x), k.push(B.high.y), k.push(B.high.z), A.push(B.low.x), A.push(B.low.y), A.push(B.low.z), O.push(0, 0)
}
+ this.polygonCartesianArray = []
+ for (let i = 0; i < y.length; i++) {
+ this.polygonCartesianArray.push(y[i])
+ }
+ for (let i = 0; i < v.length; i++) {
+ this.polygonCartesianArray.push(v[i])
+ }
+ //计算polygon面积
+ this.getPolygonArea(this.getPositionArray(this.polygonCartesianArray),this.polygonCartesianArray)
+
+
return {
left: v,
right: y,
@@ -313,34 +317,29 @@
uvs: new Float32Array(O)
}
},
+
onOpen: function () {
//面板打开的时候触发 (when open this panel trigger)
+ this.map.scene.globe.baseColor = Cesium.Color.BLACK;
+ //初始化点
+ this.addPoint()
+ //切换底图
+ $($('div.cesium-viewer').find('.cesium-baseLayerPicker-choices')[0]).children('div:eq(0)').trigger('click');
+ $($('div.cesium-viewer').find('.cesium-baseLayerPicker-choices')[1]).children('div:eq(2)').trigger('click');
- // 发送请求获得到水面线列表基本数据
- var self = this;
- $.ajax({
- url: 'http://localhost:82/blade-ycreal/waterline/querylist',
- dataType: 'json',
- type: 'get',
- success: function (data) {
- self.waterData = data.data;
- var lidom = null;
- var contentLeft = null;
- var contentRight = null;
- for (var i = 0; i < data.data.length; i++) {
- lidom = $('<li> </li>');
- contentLeft = $("<span class='content-left'></span>").text(data.data[i].sname);
- contentRight = $("<span class='content-right'></span>");
- lidom.prepend(contentLeft);
- lidom.append(contentRight);
- $('.water-analysis-content').append(lidom);
- }
- }
- })
+ this.map.camera.setView({
+ destination: Cesium.Cartesian3.fromDegrees(116.016905,25.884684, 10000),
+ });
+
+ this.showDetail(false)
+
},
onClose: function () {
//面板关闭的时候触发 (when this panel is closed trigger)
+ this.map.entities.remove(this.drawingPolyline);
+ this.map.scene.primitives.remove(this.riverPrimitive);
+ this.map.entities.removeAll()
},
onMinimize: function () {
@@ -360,7 +359,269 @@
//todo
//do something before this func
this.inherited(arguments);
+ },
+
+ //Cartesian3转换为经纬度
+ getPositionArray:function (cartesiansArray){
+ var positionArray = []
+
+ if (cartesiansArray.length>0){
+ for (let i = 0; i < cartesiansArray.length; i++) {
+ //获取的对象中的经纬度为弧度
+ let cartographic= Cesium.Cartographic.fromCartesian(cartesiansArray[i])
+ //弧度转换
+ let longitude = Cesium.Math.toDegrees(cartographic.longitude)
+ let latitude = Cesium.Math.toDegrees(cartographic.latitude)
+ let height = cartographic.height
+ positionArray.push({
+ lon:longitude,
+ lat:latitude,
+ hei:height,
+ })
+ }
+ }
+ return positionArray
+ },
+
+ //获取多边形面积
+ getPolygonArea:function (points,positions){
+ let radiansPerDegree = Math.PI / 180.0;//角度转化为弧度(rad)
+ let degreesPerRadian = 180.0 / Math.PI;//弧度转化为角度
+
+ //计算多边形面积
+ function getArea(points) {
+ let res = 0;
+ //拆分三角曲面
+
+ for (let i = 0; i < points.length - 2; i++) {
+ let j = (i + 1) % points.length;
+ let k = (i + 2) % points.length;
+ let totalAngle = Angle(points[i], points[j], points[k]);
+ let dis_temp1 = distance(positions[i], positions[j]);
+ let dis_temp2 = distance(positions[j], positions[k]);
+ res += dis_temp1 * dis_temp2 * Math.abs(Math.sin(totalAngle)) ;
+ }
+
+
+ return (res/1000000.0).toFixed(4);
+ }
+
+ /*角度*/
+ function Angle(p1, p2, p3) {
+ let bearing21 = Bearing(p2, p1);
+ let bearing23 = Bearing(p2, p3);
+ let angle = bearing21 - bearing23;
+ if (angle < 0) {
+ angle += 360;
+ }
+ return angle;
+ }
+ /*方向*/
+ function Bearing(from, to) {
+ let lat1 = from.lat * radiansPerDegree;
+ let lon1 = from.lon * radiansPerDegree;
+ let lat2 = to.lat * radiansPerDegree;
+ let lon2 = to.lon * radiansPerDegree;
+ let angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
+ if (angle < 0) {
+ angle += Math.PI * 2.0;
+ }
+ angle = angle * degreesPerRadian;//角度
+ return angle;
+ }
+
+ //计算距离
+ function distance(point1,point2){
+ let point1cartographic = Cesium.Cartographic.fromCartesian(point1);
+ let point2cartographic = Cesium.Cartographic.fromCartesian(point2);
+ /**根据经纬度计算出距离**/
+ let geodesic = new Cesium.EllipsoidGeodesic();
+ geodesic.setEndPoints(point1cartographic, point2cartographic);
+ let s = geodesic.surfaceDistance;
+ //console.log(Math.sqrt(Math.pow(distance, 2) + Math.pow(endheight, 2)));
+ //返回两点之间的距离
+ s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2));
+ return s;
+ }
+
+ console.log(getArea(points)+"平方公里","777")
+
+ },
+
+ //鼠标事件
+ movehandLer: function movehandLer() {
+ // 取消默认双击事件
+ this.map.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
+ // 获取鼠标事件
+ this.mountainHandler = new Cesium.ScreenSpaceEventHandler(this.map.scene.canvas);
+ // 给鼠标左键添加事件函数
+ // this.mountainHandler.setInputAction(lang.hitch(this, this.clickHand), Cesium.ScreenSpaceEventType.LEFT_CLICK);
+ },
+
+ //点击事件
+ clickHand:function (click){
+ var pickedObjects = this.map.scene.pick(click.position);
+ if (pickedObjects && pickedObjects.primitive instanceof Cesium.Primitive) {
+ // this.canvasToImage()
+ this.floodAnalysisPopup()
+ }
+ },
+
+ //洪水分析弹窗
+ floodAnalysisPopup:function (){
+ var self = this
+ var inPolygon = []
+ for (let i = 0; i < this.peoplePositionArray.length; i++) {
+ let isIn = this.isPointInPolygon(this.peoplePositionArray[i])
+ if (isIn){
+ inPolygon.push(this.peoplePositionArray[i])
+ }
+ }
+ var jsonStr = JSON.stringify(inPolygon)
+
+ var url = './corelib/common/popup/floodAnalysis.html';
+ var urlEvaluate = './corelib/common/popup/evaluateAnalysis.html'
+ var top = ($(window).height() - 600) / 2;
+ var left = ($(window).width() - 1300 - 340) / 2 + 340;
+ layer.open({
+ title:'评估分析',
+ type: 2,
+ maxmin: false, //开启最大化最小化按钮
+ area: ['1100px', '600px'],
+ skin: 'floodAnalysis',
+ offset: [top, left],
+ content: urlEvaluate + "?data=" + encodeURIComponent(jsonStr),//使用encodeURIComponent转码,避免中文字符乱码,避免url截取错误
+ id: "floodAnalysisLayer",
+ closeBtn: 1,
+ //把父页面数据传递给子弹窗并渲染
+ success: function(layero, index) {
+ //绑定父子之间的关系,用于数据传递,缺少则无法传递
+ var body = layer.getChildFrame("body",index);
+ //得到iframe页的窗口对象
+ var iframeWin = window[layero.find('iframe')[0]['name']];
+ // //渲染子页面中的img
+ // iframeWin.$('#canvasImage')[0].src = self.canvasImage;
+ var table = ""
+ var house = 0
+ var people = 0
+ var area = 0
+ var money = 0
+ for (let i = 0; i < inPolygon.length; i++) {
+ table += '<tr>'+
+ '<td><div>' + inPolygon[i].name + '</div></td>' +
+ '<td><div>' + inPolygon[i].house + '</div></td>' +
+ '<td><div>' + inPolygon[i].people + '</div></td>' +
+ '<td><div>' + inPolygon[i].area + '</div></td>' +
+ '<td><div>' + inPolygon[i].money + '</div></td>' +
+ '</tr>'
+
+ house += inPolygon[i].house
+ people += inPolygon[i].people
+ area += inPolygon[i].area
+ money += inPolygon[i].money
+ }
+ iframeWin.$('#evaluate-tbody').html(table)
+
+ iframeWin.$(".house").html(house + '户')
+ iframeWin.$(".people").html(people + '人')
+ iframeWin.$(".area").html(area + 'km²')
+ iframeWin.$(".money").html(money + '万元')
+
+ },
+ });
+ },
+
+ //添加点
+ addPoint:function (){
+ const url = './widgets/FloodAnalysis/data.json'
+ this.getJsonUrl(url)
+ },
+
+ showDetail:function(show){
+ //显示详情
+ if (show){
+ $('.flood-detail').show()
+ }else {
+ $('.flood-detail').hide()
+ }
+ },
+
+ //判断点是否在多边形内部
+ isPointInPolygon : function (point){
+ //获取经纬度
+ var polygonPosition = this.getPositionArray(this.polygonCartesianArray)
+ //turf要求首尾闭合
+ var turfPolygon = []
+ polygonPosition.forEach(e=>{
+ var temp = [e.lon,e.lat]
+ turfPolygon.push(temp)
+ })
+ turfPolygon.push([polygonPosition[0].lon,polygonPosition[0].lat])
+
+ var poly= turf.polygon([turfPolygon])
+ var pt = turf.point([point.LGTD,point.LTTD])
+ return turf.booleanPointInPolygon(pt,poly)
+ },
+
+ //获取json对象,测试用
+ getJsonUrl: function getJsonUrl(url) {
+ var self = this;
+ $.ajax({
+ url: url,
+ dataType: 'json',
+ type: 'get',
+ success: function success(data) {
+ const viewer = self.map
+ var dataArray = data.data
+ dataArray.forEach(e=>{
+ e.house = Number(e.house)
+ e.people = Number(e.people)
+ e.area = Number(e.area)
+ e.money = Number(e.money)
+ })
+ self.peoplePositionArray = []
+ self.peoplePositionArray = dataArray
+ for (let i = 0; i < dataArray.length; i++) {
+ var temp = viewer.entities.add({
+ position: Cesium.Cartesian3.fromDegrees(dataArray[i].LGTD, dataArray[i].LTTD),
+ point: {
+ color: Cesium.Color.RED,
+ pixelSize: 16,
+ //防止地形遮挡住点
+ disableDepthTestDistance: Number.POSITIVE_INFINITY
+ },
+ });
+ }
+ }
+ });
+ },
+
+ //canvas转换为image
+ canvasToImage:function (){
+ var canvas = this.map.scene.canvas
+ let image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
+ this.canvasImage = image
+ // //导出看效果
+ // let link = document.createElement("a");
+ // let blob = this.dataURLtoBlob(image);
+ // let objurl = URL.createObjectURL(blob);
+ // link.download = "scene.png";
+ // link.href = objurl;
+ // link.click();
+ },
+
+ dataURLtoBlob:function (dataurl) {
+ let arr = dataurl.split(','),
+ mime = arr[0].match(/:(.*?);/)[1],
+ bstr = atob(arr[1]),
+ n = bstr.length,
+ u8arr = new Uint8Array(n);
+ while (n--) {
+ u8arr[n] = bstr.charCodeAt(n);
}
+ return new Blob([u8arr], { type: mime });
+ },
+
});
});
diff --git a/widgets/FloodAnalysis/Widget.html b/widgets/FloodAnalysis/Widget.html
index 591d661..fd92e4c 100644
--- a/widgets/FloodAnalysis/Widget.html
+++ b/widgets/FloodAnalysis/Widget.html
@@ -1,26 +1,28 @@
<div>
- <div class="flood-analysis-header">
+ <div class="analysis-header">
<i></i> 洪水淹没分析
</div>
- <!--<div>
- <span>请选择水面线:</span><select id="flightRoute"></select>
- </div>-->
- <div class="flood-water-analysis">
+ <div class="dong">
<ul>
- <li><span>水位(m):</span><input id="flood_analysis_sw_headtab" type="text" value="200" /></li>
+ <li><span>分析区域:</span><input id="dong_draw" type="button" value="绘制区域"></li>
+ <li><span>最低海拔(米):</span><input type="text" id="dong_min_height"></li>
+ <li><span>最高海拔(米):</span><input type="text" id="dong_max_height"></li>
+ <li><span>淹没速度(米/秒):</span><input type="text" id='dong_time' value='0.5'></li>
+ <li><input id='dong_start' type="button" value="开始分析"><input id='dong_delet' type="button" value="清除"></li>
</ul>
- <div class="flood-water-analysis-new">
- <div>
- <input type="button" id="flood_hzsm_headtab" value="绘制水面线" />
- <input type="button" id='flood_qcsmx_headtab' value="清除">
- </div>
-<!-- <div>-->
-<!-- <input type="button" id="thematic_smsz_headtab" value="水面上涨" />-->
-<!-- <input type="button" id="thematic_smxj_headtab" value="水面下降" />-->
-<!-- </div>-->
- </div>
</div>
+ <p>what why no sea</p>
+ <div class="dong-echarts" id='dong_echarts'>
+ </div>
+ <div class='dong-progress'>
+ <h2>分析结果中,请稍等...</h2>
+ <span class="container">
+ <span id="progress_bar" class="h-100P bar"></span>
+ </span>
+ </div>
+ <div class="storage-capacity-curve" id="storage_echarts">
+ </div>
<div class="flood-detail">
<div class="flood-detail-header">
<i></i> 洪水淹没详情
diff --git a/widgets/FloodAnalysis/Widget.js b/widgets/FloodAnalysis/Widget.js
index 91f7f5d..9f14bdb 100644
--- a/widgets/FloodAnalysis/Widget.js
+++ b/widgets/FloodAnalysis/Widget.js
@@ -2,615 +2,875 @@
// Copyright © 2022 guoshilong. All Rights Reserved.
// 模块描述:洪水淹没分析
///////////////////////////////////////////////////////////////////////////
-define([
- 'dojo/_base/declare',
- 'dojo/_base/lang',
- 'dojo/_base/array',
- 'dojo/_base/html',
- 'dojo/topic',
- 'jimu/BaseWidget',
- './Tooltip-div',
- './FloodAnalysis',
- 'libs/layer/layer.js',
- 'libs/turf/turf.min.js'
-],
- function (declare,
- lang,
- array,
- html,
- topic,
- BaseWidget,
- tooltip,
- flood,
- layer,
- turf,
- ) {
- return declare([BaseWidget], {
- baseClass: 'jimu-widget-FloodAnalysis',
- name: 'FloodAnalysis',
- riverWidth: 300,
- riverHeight: 10,
- speed: 10,
- positions: [],
- sideRes: null,
- riverPrimitive: null,
- material: null,
- drawingPolyline: null,
- //绘制的多边形数组
- polygonCartesianArray:[],
- //canvas转换后的图片
- canvasImage:null,
- //房屋人口
- peoplePositionArray:[],
- myWaterPrimitive:null,
- startup: function () {
- this.inherited(arguments);
- var self = this;
+define(['dojo/_base/declare', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/_base/html', "dojo/topic", 'jimu/BaseWidget', 'dojo/on', 'dstore/Memory', 'dstore/Trackable', 'dgrid/Grid', 'dgrid/Keyboard', 'dgrid/Selection', 'dstore/RequestMemory', 'dgrid/test/data/createSyncStore', "libs/echarts/v4/echarts.min", 'libs/layer/layer.js','libs/turf/turf.min.js'], function (declare, lang, array, html, topic, BaseWidget, on, Memory, Trackable, Grid, Keyboard, Selection, RequestMemory, createSyncStore, echarts, layer,turf) {
+ return declare([BaseWidget], {
+ baseClass: 'jimu-widget-FloodAnalysis',
+ name: 'FloodAnalysis',
+ //人员数据点位
+ peoplePositionArray:[],
+ //绘制多边形的顶点经纬度
+ polygonPositionArray:[],
+ startup: function startup() {
+ // 数组用于存放添加点的Id删除实体点的时候会用到
+ var pointId = [];
- this.map.scene.globe.depthTestAgainstTerrain = true;
- //取消双击事件
- this.map.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
- //绘制水面事件
- $("#flood_hzsm_headtab").click(function () {
- DrawDynamicClampGround.startDrawingPolyline(self.map, function (cartesians) {
- if (self.drawingPolyline != undefined)
- self.map.entities.remove(self.drawingPolyline);
- var lineOpts = {
- polyline: {
- positions: cartesians,
- clampToGround: true,
- width: 3,
- color: "#279a9a"
+ // 鼠标事件
+ var waterEntity;
+ // 点击绘制按钮开始绘制
+ var that = this;
+ var yanmo;
+ var flag = false;
+ var flagScend = false;
+ // 海拔
+ var altitude = [];
+ var drawingMode = 'polygon';
+ var activeShape;
+ var boildOne = null;
+ var boildTwo = null;
+ var boildThree = null;
+ // 向三维场景中添加的点的集合
+ var tempPoints = [];
+
+ var positions = [];
+ var handler = new Cesium.ScreenSpaceEventHandler(that.map.scene.canvas);
+
+ var shape;
+
+ $('#dong_draw').click(function () {
+ that.deleteEntitys(that, pointId, shape, boildOne, boildTwo, boildThree, waterEntity);
+ //隐藏详情框
+ that.showDetail(false)
+ $('#dong_time').val(0.5);
+ $('.dong-progress .container #progress_bar').width(0);
+ $('.dong-progress').stop().hide();
+ $('#dong_echarts').stop().hide();
+ $('.jimu-widget-AnalysisOfBarrierLake p').stop().hide();
+ //if (handler != null) handler.destroy();
+ handler = new Cesium.ScreenSpaceEventHandler(that.map.scene.canvas);
+ function drawShape(positionData) {
+ if (drawingMode == 'polygon') {
+ shape = that.map.entities.add({
+ polygon: {
+ hierarchy: positionData,
+ material: Cesium.Color.fromBytes(252, 193, 10, 130)
+ }
+ });
+ }
+ that.fixedShape = shape;
+
+ return shape;
+ }
+ clearInterval(yanmo);
+ yanmo = null;
+ positions = [];
+ var polygon = null;
+ var cartesian = null;
+ var floatingPoint; //浮动点
+ var activeShapePoints = [];
+ var active = null;
+ tempPoints = [];
+ altitude = [];
+ that.map.scene.globe.depthTestAgainstTerrain = false;
+
+ // handler = new Cesium.ScreenSpaceEventHandler(that.map.scene.canvas);
+ // 取消双击事件-追踪该位置
+ that.map.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
+
+ // 鼠标左键点击事件
+ handler.setInputAction(function (movement) {
+ // 给鼠标点击增加的点添加随机的ID便于删除
+ var randomId = Math.random() * 100 + 8 + (Math.random() * 500 + 102);
+
+ var ray = that.map.camera.getPickRay(movement.position);
+ cartesian = that.map.scene.globe.pick(ray, that.map.scene);
+ if (positions.length == 0) {
+ positions.push(cartesian.clone());
+ flagScend = true;
+ }
+ // positions.pop();
+ positions.push(cartesian);
+ // 向三维场景中添加点
+ var cartographic = Cesium.Cartographic.fromCartesian(positions[positions.length - 1]);
+ var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
+ var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
+ var heightString = cartographic.height;
+ tempPoints.push({
+ lon: longitudeString,
+ lat: latitudeString,
+ hei: heightString
+ });
+ altitude.push(Math.round(cartographic.height));
+ if (Cesium.defined(cartesian)) {
+ if (activeShapePoints.length === 0) {
+ floatingPoint = that.map.entities.add({
+ // 给实体点添加ID
+ id: '1a-2b-3c',
+ name: '多边形面积',
+ position: positions[positions.length - 1],
+ point: {
+ pixelSize: 6,
+ color: Cesium.Color.RED,
+ heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
+ }
+ });
+ pointId.push('1a-2b-3c');
+
+ activeShapePoints.push(cartesian);
+ var dynamicPositions = new Cesium.CallbackProperty(function () {
+ if (drawingMode === 'polygon') {
+ return new Cesium.PolygonHierarchy(activeShapePoints);
+ }
+ return activeShapePoints;
+ }, false);
+ active = drawShape(dynamicPositions); //绘制动态图
+ }
+ activeShapePoints.push(cartesian);
+ floatingPoint = that.map.entities.add({
+ // 给实体点添加ID
+ id: randomId,
+ name: '多边形面积',
+ position: positions[positions.length - 1],
+ point: {
+ pixelSize: 6,
+ color: Cesium.Color.RED,
+ heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
+ }
+ });
+
+ pointId.push(randomId);
+ }
+ }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+
+ // 鼠标移动事件
+ handler.setInputAction(function (event) {
+ if (positions.length == 0) {
+ that.map.entities.remove(boildOne);
+ var pick1 = new Cesium.Cartesian2(event.endPosition.x, event.endPosition.y);
+ var newPosition = that.map.scene.globe.pick(viewer.camera.getPickRay(pick1), that.map.scene);
+ boildOne = that.map.entities.add({
+ position: newPosition,
+ label: {
+ show: true,
+ text: '单击开始绘制',
+ font: '16px',
+ pixelOffset: new Cesium.Cartesian2(80, 0),
+ showBackground: true,
+ backgroundColor: Cesium.Color.fromBytes(126, 126, 126, 210)
+ }
+ });
+ }
+ if (positions.length == 2) {
+ that.map.entities.remove(boildOne);
+ that.map.entities.remove(boildTwo);
+ var pick1 = new Cesium.Cartesian2(event.endPosition.x, event.endPosition.y);
+ var newPosition = that.map.scene.globe.pick(viewer.camera.getPickRay(pick1), that.map.scene);
+ boildTwo = that.map.entities.add({
+ position: newPosition,
+ label: {
+ show: true,
+ text: '单击增加点',
+ font: '16px',
+ pixelOffset: new Cesium.Cartesian2(80, 0),
+ showBackground: true,
+ backgroundColor: Cesium.Color.fromBytes(126, 126, 126, 210)
+ }
+ });
+ }
+ if (positions.length > 2) {
+ that.map.entities.remove(boildOne);
+ that.map.entities.remove(boildTwo);
+ that.map.entities.remove(boildThree);
+ var pick1 = new Cesium.Cartesian2(event.endPosition.x, event.endPosition.y);
+ var newPosition = that.map.scene.globe.pick(viewer.camera.getPickRay(pick1), that.map.scene);
+ boildThree = that.map.entities.add({
+ position: newPosition,
+ label: {
+ show: true,
+ text: '单击增加点,右键点击完成绘制',
+ font: '16px',
+ pixelOffset: new Cesium.Cartesian2(120, 0),
+ showBackground: true,
+ backgroundColor: Cesium.Color.fromBytes(126, 126, 126, 210)
+ }
+ });
+ }
+
+ if (Cesium.defined(floatingPoint)) {
+ var pick1 = new Cesium.Cartesian2(event.endPosition.x, event.endPosition.y);
+ var newPosition = that.map.scene.globe.pick(viewer.camera.getPickRay(pick1), that.map.scene);
+ if (Cesium.defined(newPosition)) {
+ floatingPoint.position.setValue(newPosition);
+ activeShapePoints.pop();
+ activeShapePoints.push(newPosition);
+ }
+ }
+ }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
+
+ // 鼠标右键点击事件
+ handler.setInputAction(function (movement) {
+ var cartographic = Cesium.Cartographic.fromCartesian(that.map.scene.globe.pick(that.map.camera.getPickRay(movement.position), that.map.scene));
+ // 向三维场景中添加点
+ var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
+ var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
+ var heightString = cartographic.height;
+ tempPoints.push({
+ lon: longitudeString,
+ lat: latitudeString,
+ hei: heightString
+ });
+ that.polygonPositionArray = tempPoints
+ positions.push(activeShapePoints[activeShapePoints.length - 1]);
+ if (positions.length >= 2) {
+ if (!Cesium.defined(polygon)) {
+ polygon = new PolygonPrimitive(positions);
+ } else {
+ positions.pop();
+ positions.push(cartesian);
+ }
+ }
+ if (activeShapePoints.length) {
+ activeShape = drawShape(activeShapePoints); //绘制最终图
+ }
+ // that.map.entities.remove(floatingPoint);
+ that.map.entities.remove(active);
+ that.map.entities.remove(boildOne);
+ that.map.entities.remove(boildTwo);
+ that.map.entities.remove(boildThree);
+ if (!flagScend) return;
+ flagScend = false;
+ altitude.push(Math.round(cartographic.height));
+ altitude.sort(function (a, b) {
+ if (a > b) return 1;else if (a < b) return -1;else return 0;
+ });
+ $('#dong_max_height').val(altitude[altitude.length - 1]);
+ $('#dong_min_height').val(altitude[0]);
+ handler.destroy();
+ flag = true;
+ return;
+ }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
+
+ var PolygonPrimitive = function () {
+ function _(positions) {
+ this.options = {
+ name: '多边形',
+ polygon: {
+ hierarchy: [],
+ material: Cesium.Color.WHITE.withAlpha(0)
}
};
- self.drawingPolyline = self.map.entities.add(lineOpts);
- cartesians.splice(cartesians.length - 1, cartesians.length);
- self.drawLines(cartesians);
- self.movehandLer()
- self.showDetail(true)
+
+ this.positions = positions;
+ this._init();
+ }
+ _.prototype._init = function () {
+ var _self = this;
+ //实时更新polygon.hierarchy
+ this.options.polygon.hierarchy = new Cesium.CallbackProperty(function () {
+ return new Cesium.PolygonHierarchy(positions);
+ }, false);
+ waterEntity = that.map.entities.add(this.options);
+ that.fixedWaterEntity = waterEntity;
+ };
+ return _;
+ }();
+ });
+
+ // 点击开始分析按钮,开始分析
+ $('#dong_start').click(function () {
+ //宽度设置为0 隐藏进度条
+ $('.dong-progress .container #progress_bar').width(0);
+ //隐藏div
+ $('.dong-progress').stop().hide();
+ $('#dong_echarts').stop().hide();
+ $('.jimu-widget-AnalysisOfBarrierLake p').stop().hide();
+ if (flag != true) {
+ if (yanmo != null) {
+ layer.msg('请等待绘制完成', {
+
+ time: 1000
+ });
+ return;
+ }
+ layer.msg('请先选择绘制区域', {
+
+ time: 1000
});
+ return;
+ };
+ // 提取坐标信息
+ var list = waterEntity.polygon.hierarchy.getValue().positions;
+ // 存放坐标信息,做请求数据使用
+ var echartRings = [[]];
+
+ // 处理坐标信息,将世界坐标转换成经纬度
+ for (var i = 1; i < list.length; i++) {
+ var cartographic = Cesium.Cartographic.fromCartesian(list[i]);
+ var lat = Cesium.Math.toDegrees(cartographic.latitude);
+ var lng = Cesium.Math.toDegrees(cartographic.longitude);
+ echartRings[0].push([lng, lat]);
+ }
+
+ // // 发请求数据
+ // var enenen = {
+ // "displayFieldName": "",
+ // "geometryType": "esriGeometryPolygon",
+ // "spatialReference": {
+ // "wkid": 4490,
+ // "latestWkid": 4490
+ // },
+ // "fields": [{
+ // "name": "OBJECTID",
+ // "type": "esriFieldTypeOID",
+ // "alias": "OBJECTID"
+ // }, {
+ // "name": "SHAPE_Length",
+ // "type": "esriFieldTypeDouble",
+ // "alias": "SHAPE_Length"
+ // }, {
+ // "name": "SHAPE_Area",
+ // "type": "esriFieldTypeDouble",
+ // "alias": "SHAPE_Area"
+ // }],
+ // "features": [{
+ // "geometry": {
+ // "rings": echartRings,
+ // "spatialReference": {
+ // "wkid": 4490,
+ // "latestWkid": 4490
+ // }
+ // },
+ // "symbol": null,
+ // "attributes": {
+ // "OBJECTID": 1163
+ // }
+ // }],
+ // "exceededTransferLimit": false
+ // // 数据转换格式
+ // };enenen = JSON.stringify(enenen);
+
+ that.map.entities.remove(activeShape);
+ // 最高海拔
+ var maxHet = Number($('#dong_max_height').val());
+ // 最低海拔
+ var minHet = Number($('#dong_min_height').val());
+ // 每秒上升海拔
+ var time = Number($('#dong_time').val());
+ // 动态获取最低海拔
+ $('#dong_min_height').change(function () {
+ minHet = $(this).val();
});
- $('#flood_qcsmx_headtab').click(function () {
- self.map.entities.remove(self.drawingPolyline);
- self.map.scene.primitives.remove(self.riverPrimitive);
- self.showDetail(false)
- })
+ // 总淹没体积
+ var textArea = parseInt(getArea(tempPoints) * (maxHet - minHet) / 100000);
+ var seriesData = [];
+ var altitude = (maxHet - minHet) / 20;
+ var altitudeHet = 0;
+
+ // 1秒后开始进入淹没分析
+ setTimeout(function () {
+ flag = false;
+ if (waterEntity) {
+ that.map.scene.globe.depthTestAgainstTerrain = true;
+ waterEntity.polygon.perPositionHeight = true, waterEntity.polygon.material = Cesium.Color.fromBytes(33, 122, 193, 220);
+ var h = minHet - 50 || altitude[0] - 50;
+ waterEntity.polygon.extrudedHeight = minHet - 50 || altitude[0] - 50; //需要提前设置 不然会全部出现
+ yanmo = setInterval(function () {
+ h = h + time || 1;
+ if (h >= (maxHet || altitude[altitude.length - 1])) {
+ h = maxHet || altitude[altitude.length - 1]; //给个最大值
+ waterEntity.polygon.extrudedHeight = h;
+ clearTimeout(yanmo);
+ flag = true;
- // $("#thematic_hlkd_headtab").change(function (e) {
- // self.riverWidth = Number($(this).val());
- // self.resetPos();
- // });
- $("#flood_analysis_sw_headtab").change(function (e) {
- self.riverHeight = Number($(this).val());
- self.resetPos();
- });
- // $("#thematic_sls_headtab").change(function (e) {
- // self.speed = Number($(this).val());
- // self.resetPos();
- // });
- //
- // $("#thematic_smsz_headtab").click(function () {
- // self.offsetHeight(Number($("#thematic_bhz_headtab").val()), 5);
- // });
- //
- // $("#thematic_smxj_headtab").click(function () {
- // self.offsetHeight(-Number($("#thematic_bhz_headtab").val()), 5);
- // });
- $('#flood-detail-ksfx').click(function () {
- self.floodAnalysisPopup()
- })
+ // //显示div
+ // $('.dong-progress').stop().show();
+ // // 总长度
+ // var totalWidth = $('.dong-progress .container').width();
+ // // 过度长度
+ // var excessiveWidth = totalWidth / 100;
+ // var watchWidth = 0;
+ // // 进度条的定时器
+ // var proTime = setInterval(function () {
+ // watchWidth += excessiveWidth;
+ // if (watchWidth > totalWidth) {
+ // watchWidth = totalWidth;
+ // }
+ // $('.dong-progress .container #progress_bar').width(watchWidth);
+ // }, 22);
+
+ // $.ajax({
+ // url: 'http://171.35.109.175:18080/arcgis/rest/services/GZSW/%E5%8F%A0%E5%8A%A0%E5%88%86%E6%9E%90/GPServer/%E5%8F%A0%E5%8A%A0%E5%88%86%E6%9E%90/submitJob',
+ // type: 'post',
+ // dataType: 'json',
+ // data: {
+ // f: 'pjson',
+ // fxfw: enenen
+ // },
+ // success: function success(result) {
+ // troubleshooting(0);
+ //
+ // function troubleshooting(i) {
+ // $.ajax({
+ // url: 'http://171.35.109.175:18080/arcgis/rest/services/GZSW/%E5%8F%A0%E5%8A%A0%E5%88%86%E6%9E%90/GPServer/%E5%8F%A0%E5%8A%A0%E5%88%86%E6%9E%90/jobs/' + result.jobId + '?f=pjson',
+ // type: 'get',
+ // dataType: 'json',
+ // data: {},
+ // success: function success(data) {
+ // if (data.jobStatus == 'esriJobSucceeded') {
+ // var perurl = data.results.fxfw_Intersect_Statistics.paramUrl;
+ // $.ajax({
+ // url: 'http://171.35.109.175:18080/arcgis/rest/services/GZSW/%E5%8F%A0%E5%8A%A0%E5%88%86%E6%9E%90/GPServer/%E5%8F%A0%E5%8A%A0%E5%88%86%E6%9E%90/jobs/' + result.jobId + '/' + perurl,
+ // type: 'post',
+ // dataType: 'json',
+ // data: {
+ // f: 'pjson'
+ // },
+ // success: function success(message) {
+ // if (watchWidth < totalWidth) {
+ // watchWidth = totalWidth;
+ // }
+ // clearInterval(proTime);
+ // // 在此处创建库容曲线
+ // var storageLine = echarts.init(document.getElementById('storage_echarts'));
+ // var storageOptions = {
+ // title: {
+ // text: '库容曲线'
+ // },
+ // tooltip: {
+ // trigger: 'axis'
+ // },
+ // gird: {
+ // top: '20px'
+ // },
+ // legend: {
+ // data: ['最大淹没体积']
+ // },
+ // xAxis: {
+ // type: 'value',
+ // min: 0,
+ // max: textArea,
+ // splitNumber: 10
+ // },
+ // yAxis: {
+ // name: '水位(m)',
+ // nameTextStyle: {
+ // color: 'rgba(40, 37, 161, 0.849)'
+ // },
+ // type: 'value',
+ // min: 0,
+ // max: maxHet,
+ // splitNumber: 10,
+ // axisLabel: {
+ // formatter: '{value}'
+ // }
+ // },
+ // series: [{
+ // name: '最大淹没体积',
+ // type: 'line',
+ // data: [],
+ // smooth: true
+ // }]
+ // };
+ // storageOptions.series[0].data = seriesData;
+ // storageLine.setOption(storageOptions);
+ //
+ // var features = message.value.features;
+ // if (features == false) {
+ // layer.msg('此处不在可分析范围内', {
+ //
+ // time: 1000
+ // });
+ // $('.dong-progress .container #progress_bar').width(0);
+ // $('.dong-progress').stop().hide();
+ // return;
+ // }
+ // $('.dong-progress .container #progress_bar').width(totalWidth);
+ // var echartsResult = [];
+ // var subTitle = '';
+ // // 淹没总面积
+ // var shapeAreas = 0;
+ // var echartsName = null;
+ // var echartsColor = null;
+ // for (var j = 0; j < features.length; j++) {
+ // shapeAreas += features[j].attributes.SUM_Shape_Area;
+ // }
+ // for (var i = 0; i < features.length; i++) {
+ // if (features[i].attributes.gridcode == 1) {
+ // echartsName = '城镇';
+ // echartsColor = '#B56DD1';
+ // } else if (features[i].attributes.gridcode == 2) {
+ // echartsName = '植被';
+ // echartsColor = '#5F8812';
+ // } else if (features[i].attributes.gridcode == 3) {
+ // echartsName = '水域';
+ // echartsColor = '#0B6FC5';
+ // } else if (features[i].attributes.gridcode == 4) {
+ // echartsName = '裸地';
+ // echartsColor = '#CE8B44';
+ // } else if (features[i].attributes.gridcode == 5) {
+ // echartsName = '农业用地';
+ // echartsColor = '#B5D874';
+ // }
+ // echartsResult.push({
+ // value: (features[i].attributes.SUM_Shape_Area / 1000000).toFixed(2),
+ // name: echartsName,
+ // itemStyle: {
+ // color: echartsColor
+ // }
+ // });
+ // subTitle += echartsName + '淹没面积为' + (features[i].attributes.SUM_Shape_Area / 1000000).toFixed(2) + 'km²,占比为' + (features[i].attributes.SUM_Shape_Area / shapeAreas * 100).toFixed(2) + '%;';
+ // }
+ // var textSub = '\u6DF9\u6CA1\u6D77\u62D4\u9AD8\u5EA6\u4E3A' + maxHet + 'm\uFF0C\u6DF9\u6CA1\u603B\u9762\u79EF\u4E3A' + (shapeAreas / 1000000).toFixed(2) + 'km\xB2\u3002\u5176\u4E2D';
+ // textSub += subTitle;
+ // $('.jimu-widget-AnalysisOfBarrierLake p').text(textSub);
+ // var echartsData = echarts.init(document.getElementById('dong_echarts'));
+ // var options = {
+ // title: {
+ // text: '淹没分析结果',
+ // left: '41%',
+ // textStyle: {
+ // color: '#5DBFFF',
+ // fontSize: 26
+ // },
+ // top: 14
+ // },
+ // tooltip: {
+ // trigger: 'item',
+ // formatter: '{b} <br/>面积 : {c} km² ({d}%)',
+ // position: 'right'
+ // },
+ // legend: {
+ // orient: 'vertical',
+ // // top: 'middle',
+ // right: 4,
+ // bottom: 2,
+ // textStyle: { //图例文字的样式
+ // color: '#fff',
+ // fontSize: 14
+ // },
+ // data: ['城镇', '植被', '水域', '裸地', '农业用地']
+ // },
+ // series: [{
+ // type: 'pie',
+ // radius: '80%',
+ // center: ['55%', '56%'],
+ // selectedMode: 'single',
+ // label: {
+ // normal: {
+ // position: 'inner',
+ // show: false
+ // }
+ // },
+ // data: echartsResult,
+ // emphasis: {
+ // itemStyle: {
+ // shadowBlur: 10,
+ // shadowOffsetX: 0,
+ // shadowColor: 'rgba(0, 0, 0, 0.5)'
+ // }
+ // }
+ // }]
+ // };
+ // echartsData.setOption(options);
+ // $('.dong-progress .container #progress_bar').width(0);
+ // $('.dong-progress').stop().hide();
+ // $('#dong_echarts').stop().show();
+ // $('.jimu-widget-AnalysisOfBarrierLake p').stop().show();
+ // }
+ // });
+ // return;
+ // } else {
+ // troubleshooting(i + 1);
+ // }
+ // }
+ // });
+ // }
+ // }
+ // });
- },
- init: function () {
- this.prepareVertex();
- if (this.sideRes) {
- this.material = this.prepareMaterial();
- this.riverPrimitive && this.map.scene.primitives.remove(this.riverPrimitive);
- this.riverPrimitive = this.createPrimitive();
- this.myWaterPrimitive = this.map.scene.primitives.add(this.riverPrimitive);
- }
- },
- prepareVertex: function () {
- if (this.positions.length > 0) {
- this.sideRes = this._lines2Plane(this.positions, this.riverWidth, this.riverHeight);
- }
- },
- setPositions: function (e) {
- this.positions = e;
- this.init();
- },
- resetPos: function () {
- this.sideRes = this._lines2Plane(this.positions, this.riverWidth, this.riverHeight);
- if (this.sideRes) {
- this.material = this.prepareMaterial();
- this.riverPrimitive && this.map.scene.primitives.remove(this.riverPrimitive);
- this.riverPrimitive = this.createPrimitive();
- this.map.scene.primitives.add(this.riverPrimitive);
- }
- },
- drawLines: function (r) {
- this.setPositions(r);
- },
- prepareMaterial: function () {
- var e = new Cesium.Material({
- fabric: {
- uniforms: {
- image: "widgets/ThematicDynamicRiver/images/movingRiver.png",
- alpha: 0.5,
- moveVar: new Cesium.Cartesian3(50, 1, 100),
- reflux: -1,
- speed: this.speed,
- move: true,
- flipY: false
- },
- source: "czm_material czm_getMaterial(czm_materialInput materialInput) { \n czm_material material = czm_getDefaultMaterial(materialInput); \n vec2 st = materialInput.st;\n if(move){\n float r = sqrt((st.x-0.8)*(st.x-0.8) + (st.y-0.8)*(st.y-0.8));\n float r2 = sqrt((st.x-0.2)*(st.x-0.2) + (st.y-0.2)*(st.y-0.2));\n float z = cos(moveVar.x*r + czm_frameNumber/100.0*moveVar.y)/moveVar.z;\n float z2 = cos(moveVar.x*r2 + czm_frameNumber/100.0*moveVar.y)/moveVar.z;\n st += sqrt(z*z+z2*z2);\n st.s += reflux * czm_frameNumber/1000.0 * speed;\n st.s = mod(st.s,1.0);\n }\n if(flipY){\n st = vec2(st.t,st.s);\n }\n vec4 colorImage = texture2D(image, st);\n material.alpha = alpha;\n material.diffuse = colorImage.rgb; \n return material; \n }"
+ return;
+ }
+ waterEntity.polygon.extrudedHeight = h;
+
+ that.showDetail(true)
+ }, 100);
}
- });
- return e
- },
- createPrimitive: function () {
- var t = new Float64Array(this.sideRes.vertexs),
- i = new Cesium.GeometryAttributes;
- i.position = new Cesium.GeometryAttribute({
- componentDatatype: Cesium.ComponentDatatype.DOUBLE,
- componentsPerAttribute: 3,
- values: t
- }),
- i.st = new Cesium.GeometryAttribute({
- componentDatatype: Cesium.ComponentDatatype.FLOAT,
- componentsPerAttribute: 2,
- values: this.sideRes.uvs
- });
- var r = new Cesium.Geometry({
- attributes: i,
- indices: this.sideRes.indexs,
- primitiveType: Cesium.PrimitiveType.TRIANGLES,
- boundingSphere: Cesium.BoundingSphere.fromVertices(t)
- }),
- n = new Cesium.GeometryInstance({
- geometry: r
- }),
- o = new Cesium.RenderState;
- return o.depthTest.enabled = !0, new Cesium.Primitive({
- geometryInstances: n,
- appearance: new Cesium.Appearance({
- material: this.material,
- renderState: o,
- vertexShaderSource: "attribute vec3 position3DHigh;\n attribute vec3 position3DLow;\n attribute vec2 st;\n attribute float batchId;\n \n varying vec3 v_positionMC;\n varying vec3 v_positionEC;\n varying vec2 v_st;\n \n void main()\n {\n vec4 p = czm_computePosition();\n \n v_positionMC = position3DHigh + position3DLow; // position in model coordinates\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\n v_st = st;\n \n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n }\n ",
- fragmentShaderSource: "varying vec3 v_positionMC;\n varying vec3 v_positionEC;\n varying vec2 v_st;\n \n void main()\n {\n czm_materialInput materialInput;\n \n vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));\n #ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n #endif\n \n materialInput.s = v_st.s;\n materialInput.st = v_st;\n materialInput.str = vec3(v_st, 0.0);\n \n // Convert tangent space material normal to eye space\n materialInput.normalEC = normalEC;\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);\n \n // Convert view vector to world space\n vec3 positionToEyeEC = -v_positionEC;\n materialInput.positionToEyeEC = positionToEyeEC;\n \n czm_material material = czm_getMaterial(materialInput);\n \n #ifdef FLAT\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n #else\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material,czm_lightDirectionEC);\n #endif\n }\n "
- })
- })
- },
- offsetHeight: function (height, time) {
- this.startDH(height, time)
- },
- startDH: function (height, time) {
- if (height && time && this.riverPrimitive) {
- for (var i = this, r = 0, n = height / (20 * time), o = this.sideRes.self, s = new Cesium.Cartesian3, l = 0, u = o.length; l < u; l++) {
- var c = Cesium.Cartesian3.normalize(o[l], new Cesium.Cartesian3);
- Cesium.Cartesian3.add(s, c, s)
- }
- Cesium.Cartesian3.normalize(s, s);
- var h = Cesium.clone(this.riverPrimitive.modelMatrix);
- this.dhEvent = function () {
- if (Math.abs(r) <= Math.abs(height)) {
- var t = Cesium.Cartesian3.multiplyByScalar(s, r, new Cesium.Cartesian3);
- i.riverPrimitive.modelMatrix = Cesium.Matrix4.multiplyByTranslation(h, t, new Cesium.Matrix4)
- } else i.map.clock.onTick.removeEventListener(i.dhEvent);
- r += n
- }, this.map.clock.onTick.addEventListener(this.dhEvent)
- }
- },
- //水面线转成水面
- _lines2Plane: function (positions, width, height) {
- function n(point, height) {
- if (!(point instanceof Cesium.Cartesian3)) return void console.log("请确认点是Cartesian3类型!");
- if (!height || 0 == height) return void console.log("请确认高度是非零数值!");
- var i = Cesium.Cartesian3.normalize(point, new Cesium.Cartesian3),
- r = new Cesium.Ray(point, i);//射线
- return Cesium.Ray.getPoint(r, height)
+ }, 1000);
+
+ });
+
+ $('#dong_delet').click(function () {
+ that.showDetail(false)
+ that.deleteEntitys(that, pointId, shape, boildOne, boildTwo, boildThree, waterEntity);
+
+ handler.destroy();
+ $('.dong-progress .container #progress_bar').width(0);
+ $('.dong-progress').stop().hide();
+ $('#dong_echarts').stop().hide();
+ $('.jimu-widget-AnalysisOfBarrierLake p').stop().hide();
+ clearInterval(yanmo);
+ yanmo = null;
+ });
+
+ $('#flood-detail-ksfx').click(function () {
+ that.floodAnalysisPopup()
+ })
+
+ var radiansPerDegree = Math.PI / 180.0; //角度转化为弧度(rad)
+ var degreesPerRadian = 180.0 / Math.PI; //弧度转化为角度
+ function getArea(points) {
+ var res = 0;
+ //拆分三角曲面
+ for (var i = 0; i < points.length - 2; i++) {
+ var j = (i + 1) % points.length;
+ var k = (i + 2) % points.length;
+ var totalAngle = Angle(points[i], points[j], points[k]);
+
+ var dis_temp1 = distance(positions[i], positions[j]);
+ var dis_temp2 = distance(positions[j], positions[k]);
+ res += dis_temp1 * dis_temp2 * Math.abs(Math.sin(totalAngle));
}
- function o(point, point1, height) {
- var r = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(point1, point, new Cesium.Cartesian3), new Cesium.Cartesian3),
- n = Cesium.Cartesian3.normalize(point, new Cesium.Cartesian3),
- o = Cesium.Cartesian3.cross(n, r, new Cesium.Cartesian3),
- a = Cesium.Cartesian3.cross(r, n, new Cesium.Cartesian3),
- l = new Cesium.Ray(point, o),
- u = new Cesium.Ray(point, a);
- return {
- left: Cesium.Ray.getPoint(l, height),
- right: Cesium.Ray.getPoint(u, height)
- }
- }
-
- if (!positions || positions.length <= 1 || !width || 0 == width) return void console.log("请确认参数符合规则:数组长度大于1,宽高不能为0!");
- for (var r = positions.length, a = [], l = [], u = width / 2, c = 0; c < r; c++) {
- var h = void 0,
- d = void 0,
- f = void 0,
- p = void 0,
- m = void 0;
- if (0 == c ? (h = positions[c], d = positions[c], f = positions[c + 1]) : c == r - 1 ? (h = positions[c - 1], d = positions[c], f = positions[c - 1]) : (h = positions[c - 1], d = positions[c], f = positions[c + 1]), 0 != height && (h = n(h, height), d = n(d, height), f = n(f, height)), h && d && f) {
- var g = o(d, f, u);
- if (p = g.left, m = g.right, 0 == c) {
- a.push(p), l.push(m), a.push(p), l.push(m);
- continue
- }
- if (!(c < r - 1)) {
- a.push(m), l.push(p), a.push(m), l.push(p);
- continue
- }
- a.push(p), l.push(m), g = o(d, h, u), p = g.left, m = g.right, a.push(m), l.push(p)
- }
- }
-
- var v = [],
- y = [];
- if (a.length != 2 * r) return void console.log("计算左右侧点出问题!");
- for (var _ = 0; _ < r; _++) {
- var w = positions[_],
- b = a[2 * _ + 0],
- C = a[2 * _ + 1],
- x = Cesium.Cartesian3.subtract(b, w, new Cesium.Cartesian3),
- P = Cesium.Cartesian3.subtract(C, w, new Cesium.Cartesian3),
- M = Cesium.Cartesian3.add(x, P, new Cesium.Cartesian3),
- E = Cesium.Cartesian3.add(w, M, new Cesium.Cartesian3);
- v.push(Cesium.clone(E));
- var T = l[2 * _ + 0],
- S = l[2 * _ + 1];
- x = Cesium.Cartesian3.subtract(T, w, new Cesium.Cartesian3), P = Cesium.Cartesian3.subtract(S, w, new Cesium.Cartesian3), M = Cesium.Cartesian3.add(x, P, new Cesium.Cartesian3), E = Cesium.Cartesian3.add(w, M, new Cesium.Cartesian3), y.push(Cesium.clone(E))
- }
-
- for (var O = [], D = [], k = [], A = [], R = [], F = 0; F < r; F++) {
- var L = Cesium.EncodedCartesian3.fromCartesian(y[F]);
- D.push(y[F].x), D.push(y[F].y), D.push(y[F].z), k.push(L.high.x), k.push(L.high.y), k.push(L.high.z), A.push(L.low.x), A.push(L.low.y), A.push(L.low.z), O.push(1, 1), F < r - 1 && (R.push(F + 2 * r), R.push(F + 1), R.push(F + 1 + r), R.push(F + 2 * r), R.push(F + 1 + r), R.push(r + F + 2 * r))
- }
-
- for (var I = 0; I < r; I++) {
- var N = Cesium.EncodedCartesian3.fromCartesian(v[I]);
- D.push(v[I].x), D.push(v[I].y), D.push(v[I].z), k.push(N.high.x), k.push(N.high.y), k.push(N.high.z), A.push(N.low.x), A.push(N.low.y), A.push(N.low.z), O.push(1, 0)
- }
-
- for (var V = 0; V < r; V++) {
- var z = Cesium.EncodedCartesian3.fromCartesian(y[V]);
- D.push(y[V].x), D.push(y[V].y), D.push(y[V].z), k.push(z.high.x), k.push(z.high.y), k.push(z.high.z), A.push(z.low.x), A.push(z.low.y), A.push(z.low.z), O.push(0, 1)
- }
-
- for (var H = 0; H < r; H++) {
- var B = Cesium.EncodedCartesian3.fromCartesian(v[H]);
- D.push(v[H].x), D.push(v[H].y), D.push(v[H].z), k.push(B.high.x), k.push(B.high.y), k.push(B.high.z), A.push(B.low.x), A.push(B.low.y), A.push(B.low.z), O.push(0, 0)
- }
-
- this.polygonCartesianArray = []
- for (let i = 0; i < y.length; i++) {
- this.polygonCartesianArray.push(y[i])
- }
- for (let i = 0; i < v.length; i++) {
- this.polygonCartesianArray.push(v[i])
- }
- //计算polygon面积
- this.getPolygonArea(this.getPositionArray(this.polygonCartesianArray),this.polygonCartesianArray)
-
-
- return {
- left: v,
- right: y,
- self: positions,
- vertexs: new Float32Array(D),
- vertexsH: new Float32Array(k),
- vertexsL: new Float32Array(A),
- indexs: new Uint16Array(R),
- uvs: new Float32Array(O)
- }
- },
- onOpen: function () {
- //面板打开的时候触发 (when open this panel trigger)
- this.map.scene.globe.baseColor = Cesium.Color.BLACK;
- //初始化点
- this.addPoint()
- //切换底图
- $($('div.cesium-viewer').find('.cesium-baseLayerPicker-choices')[0]).children('div:eq(0)').trigger('click');
- $($('div.cesium-viewer').find('.cesium-baseLayerPicker-choices')[1]).children('div:eq(2)').trigger('click');
-
- this.map.camera.setView({
- destination: Cesium.Cartesian3.fromDegrees(116.021604,25.893668, 50000),
- });
-
- this.showDetail(false)
-
- },
-
- onClose: function () {
- //面板关闭的时候触发 (when this panel is closed trigger)
- this.map.entities.remove(this.drawingPolyline);
- this.map.scene.primitives.remove(this.riverPrimitive);
- this.map.entities.removeAll()
- },
-
- onMinimize: function () {
- this.resize();
- },
-
- onMaximize: function () {
- this.resize();
- },
-
- resize: function () {
-
- },
-
- destroy: function () {
- //销毁的时候触发
- //todo
- //do something before this func
- this.inherited(arguments);
- },
-
- //Cartesian3转换为经纬度
- getPositionArray:function (cartesiansArray){
- var positionArray = []
-
- if (cartesiansArray.length>0){
- for (let i = 0; i < cartesiansArray.length; i++) {
- //获取的对象中的经纬度为弧度
- let cartographic= Cesium.Cartographic.fromCartesian(cartesiansArray[i])
- //弧度转换
- let longitude = Cesium.Math.toDegrees(cartographic.longitude)
- let latitude = Cesium.Math.toDegrees(cartographic.latitude)
- let height = cartographic.height
- positionArray.push({
- lon:longitude,
- lat:latitude,
- hei:height,
- })
- }
- }
- return positionArray
- },
-
- //获取多边形面积
- getPolygonArea:function (points,positions){
- let radiansPerDegree = Math.PI / 180.0;//角度转化为弧度(rad)
- let degreesPerRadian = 180.0 / Math.PI;//弧度转化为角度
-
- //计算多边形面积
- function getArea(points) {
- let res = 0;
- //拆分三角曲面
-
- for (let i = 0; i < points.length - 2; i++) {
- let j = (i + 1) % points.length;
- let k = (i + 2) % points.length;
- let totalAngle = Angle(points[i], points[j], points[k]);
- let dis_temp1 = distance(positions[i], positions[j]);
- let dis_temp2 = distance(positions[j], positions[k]);
- res += dis_temp1 * dis_temp2 * Math.abs(Math.sin(totalAngle)) ;
- }
-
-
- return (res/1000000.0).toFixed(4);
- }
-
- /*角度*/
- function Angle(p1, p2, p3) {
- let bearing21 = Bearing(p2, p1);
- let bearing23 = Bearing(p2, p3);
- let angle = bearing21 - bearing23;
- if (angle < 0) {
- angle += 360;
- }
- return angle;
- }
- /*方向*/
- function Bearing(from, to) {
- let lat1 = from.lat * radiansPerDegree;
- let lon1 = from.lon * radiansPerDegree;
- let lat2 = to.lat * radiansPerDegree;
- let lon2 = to.lon * radiansPerDegree;
- let angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
- if (angle < 0) {
- angle += Math.PI * 2.0;
- }
- angle = angle * degreesPerRadian;//角度
- return angle;
- }
-
- //计算距离
- function distance(point1,point2){
- let point1cartographic = Cesium.Cartographic.fromCartesian(point1);
- let point2cartographic = Cesium.Cartographic.fromCartesian(point2);
- /**根据经纬度计算出距离**/
- let geodesic = new Cesium.EllipsoidGeodesic();
- geodesic.setEndPoints(point1cartographic, point2cartographic);
- let s = geodesic.surfaceDistance;
- //console.log(Math.sqrt(Math.pow(distance, 2) + Math.pow(endheight, 2)));
- //返回两点之间的距离
- s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2));
- return s;
- }
-
- console.log(getArea(points)+"平方公里","777")
-
- },
-
- //鼠标事件
- movehandLer: function movehandLer() {
- // 取消默认双击事件
- this.map.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
- // 获取鼠标事件
- this.mountainHandler = new Cesium.ScreenSpaceEventHandler(this.map.scene.canvas);
- // 给鼠标左键添加事件函数
- this.mountainHandler.setInputAction(lang.hitch(this, this.clickHand), Cesium.ScreenSpaceEventType.LEFT_CLICK);
- },
-
- //点击事件
- clickHand:function (click){
- var pickedObjects = this.map.scene.pick(click.position);
- if (pickedObjects && pickedObjects.primitive instanceof Cesium.Primitive) {
- // this.canvasToImage()
- this.floodAnalysisPopup()
- }
- },
-
- //洪水分析弹窗
- floodAnalysisPopup:function (){
- var url = './corelib/common/popup/floodAnalysis.html';
- var urlEvaluate = './corelib/common/popup/evaluateAnalysis.html'
- var top = ($(window).height() - 600) / 2;
- var left = ($(window).width() - 900 - 340) / 2 + 340;
- var self = this
- var inPolygon = []
- for (let i = 0; i < this.peoplePositionArray.length; i++) {
- let isIn = this.isPointInPolygon(this.peoplePositionArray[i])
- if (isIn){
- inPolygon.push(this.peoplePositionArray[i])
- }
- }
- var jsonStr = JSON.stringify(inPolygon)
-
- layer.open({
- title:'评估分析',
- type: 2,
- maxmin: false, //开启最大化最小化按钮
- area: ['1100px', '600px'],
- skin: 'floodAnalysis',
- offset: [top, left],
- content: urlEvaluate + "?data=" + encodeURIComponent(jsonStr),//使用encodeURIComponent转码,避免中文字符乱码,避免url截取错误
- id: "floodAnalysisLayer",
- closeBtn: 1,
- //把父页面数据传递给子弹窗并渲染
- success: function(layero, index) {
- //绑定父子之间的关系,用于数据传递,缺少则无法传递
- var body = layer.getChildFrame("body",index);
- //得到iframe页的窗口对象
- var iframeWin = window[layero.find('iframe')[0]['name']];
- // //渲染子页面中的img
- // iframeWin.$('#canvasImage')[0].src = self.canvasImage;
- var table = ""
- var house = 0
- var people = 0
- var area = 0
- var money = 0
- for (let i = 0; i < inPolygon.length; i++) {
- table += '<tr>'+
- '<td><div>' + inPolygon[i].name + '</div></td>' +
- '<td><div>' + inPolygon[i].house + '</div></td>' +
- '<td><div>' + inPolygon[i].people + '</div></td>' +
- '<td><div>' + inPolygon[i].area + '</div></td>' +
- '<td><div>' + inPolygon[i].money + '</div></td>' +
- '</tr>'
-
- house += inPolygon[i].house
- people += inPolygon[i].people
- area += inPolygon[i].area
- money += inPolygon[i].money
- }
- iframeWin.$('#evaluate-tbody').html(table)
-
- iframeWin.$(".house").html(house + '户')
- iframeWin.$(".people").html(people + '人')
- iframeWin.$(".area").html(area + 'km²')
- iframeWin.$(".money").html(money + '万元')
-
- },
- });
- },
-
- //添加点
- addPoint:function (){
- const url = './widgets/FloodAnalysis/data.json'
- this.getJsonUrl(url)
- },
-
- showDetail:function(show){
- //显示详情
- if (show){
- $('.flood-detail').show()
- }else {
- $('.flood-detail').hide()
- }
- },
-
- //判断点是否在多边形内部
- isPointInPolygon : function (point){
- //获取经纬度
- var polygonPosition = this.getPositionArray(this.polygonCartesianArray)
- //turf要求首尾闭合
- var turfPolygon = []
- polygonPosition.forEach(e=>{
- var temp = [e.lon,e.lat]
- turfPolygon.push(temp)
- })
- turfPolygon.push([polygonPosition[0].lon,polygonPosition[0].lat])
-
- var poly= turf.polygon([turfPolygon])
- var pt = turf.point([point.LGTD,point.LTTD])
- return turf.booleanPointInPolygon(pt,poly)
- },
-
- //获取json对象,测试用
- getJsonUrl: function getJsonUrl(url) {
- var self = this;
- $.ajax({
- url: url,
- dataType: 'json',
- type: 'get',
- success: function success(data) {
- const viewer = self.map
- var dataArray = data.data
- dataArray.forEach(e=>{
- e.house = Number(e.house)
- e.people = Number(e.people)
- e.area = Number(e.area)
- e.money = Number(e.money)
- })
- self.peoplePositionArray = []
- self.peoplePositionArray = dataArray
- for (let i = 0; i < dataArray.length; i++) {
- var temp = viewer.entities.add({
- position: Cesium.Cartesian3.fromDegrees(dataArray[i].LGTD, dataArray[i].LTTD),
- point: {
- color: Cesium.Color.RED,
- pixelSize: 16,
- //防止地形遮挡住点
- disableDepthTestDistance: Number.POSITIVE_INFINITY
- },
- });
- }
- }
- });
- },
-
- //canvas转换为image
- canvasToImage:function (){
- var canvas = this.map.scene.canvas
- let image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
- this.canvasImage = image
- // //导出看效果
- // let link = document.createElement("a");
- // let blob = this.dataURLtoBlob(image);
- // let objurl = URL.createObjectURL(blob);
- // link.download = "scene.png";
- // link.href = objurl;
- // link.click();
- },
-
- dataURLtoBlob:function (dataurl) {
- let arr = dataurl.split(','),
- mime = arr[0].match(/:(.*?);/)[1],
- bstr = atob(arr[1]),
- n = bstr.length,
- u8arr = new Uint8Array(n);
- while (n--) {
- u8arr[n] = bstr.charCodeAt(n);
+ return (res / 1000000.0).toFixed(4);
}
- return new Blob([u8arr], { type: mime });
+ /*角度*/
+ function Angle(p1, p2, p3) {
+ var bearing21 = Bearing(p2, p1);
+ var bearing23 = Bearing(p2, p3);
+ var angle = bearing21 - bearing23;
+ if (angle < 0) {
+ angle += 360;
+ }
+ return angle;
+ }
+ /*方向*/
+ function Bearing(from, to) {
+ var lat1 = from.lat * radiansPerDegree;
+ var lon1 = from.lon * radiansPerDegree;
+ var lat2 = to.lat * radiansPerDegree;
+ var lon2 = to.lon * radiansPerDegree;
+ var angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
+ if (angle < 0) {
+ angle += Math.PI * 2.0;
+ }
+ angle = angle * degreesPerRadian; //角度
+ return angle;
+ }
+ //计算距离
+ function distance(point1, point2) {
+ var point1cartographic = Cesium.Cartographic.fromCartesian(point1);
+ var point2cartographic = Cesium.Cartographic.fromCartesian(point2);
+ /**根据经纬度计算出距离**/
+ var geodesic = new Cesium.EllipsoidGeodesic();
+ geodesic.setEndPoints(point1cartographic, point2cartographic);
+ var s = geodesic.surfaceDistance;
+ //返回两点之间的距离
+ s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2));
+ return s;
+ }
+
+ this.closeDeleteEntity = function () {
+ handler.destroy();
+ that.deleteEntitys(that, pointId, shape, boildOne, boildTwo, boildThree, waterEntity);
+ };
},
+ onOpen: function onOpen() {
+ //面板打开的时候触发 (when open this panel trigger)
+ this.map.scene.globe.baseColor = Cesium.Color.BLACK;
- });
+ //初始化点
+ this.addPoint()
+ //切换底图
+ $($('div.cesium-viewer').find('.cesium-baseLayerPicker-choices')[0]).children('div:eq(0)').trigger('click');
+ $($('div.cesium-viewer').find('.cesium-baseLayerPicker-choices')[1]).children('div:eq(2)').trigger('click');
+
+ //设置地图初始位置
+ this.map.camera.setView({
+ destination: Cesium.Cartesian3.fromDegrees(116.016905,25.884684, 10000),
+ });
+
+ //隐藏详情框
+ this.showDetail(false)
+ },
+
+ onClose: function onClose() {
+ this.closeDeleteEntity();
+ //面板关闭的时候触发 (when this panel is closed trigger)
+
+ $('.dong-progress .container #progress_bar').width(0);
+ $('.dong-progress').stop().hide();
+ $('#dong_echarts').stop().hide();
+ $('.jimu-widget-AnalysisOfBarrierLake p').stop().hide();
+
+ this.map.scene.globe.baseColor = Cesium.Color.WHITE;
+ },
+
+ onMinimize: function onMinimize() {
+ this.resize();
+ },
+
+ onMaximize: function onMaximize() {
+ this.resize();
+ },
+
+ resize: function resize() {},
+
+ destroy: function destroy() {
+ //销毁的时候触发
+ //todo
+ //do something before this func
+ this.inherited(arguments);
+ },
+
+ deleteEntitys: function deleteEntitys(that, pointId, shape, boildOne, boildTwo, boildThree, waterEntity) {
+ if (pointId !== []) {
+ for (var i = 0; i < pointId.length; i++) {
+ that.map.entities.removeById(pointId[i]);
+ }
+
+ pointId = [];
+ }
+ that.map.entities.remove(shape);
+ that.map.entities.remove(boildOne);
+ that.map.entities.remove(boildTwo);
+ that.map.entities.remove(boildThree);
+ if (waterEntity != null) {
+ that.map.entities.removeById(waterEntity._id);
+ }
+ },
+
+ //添加点
+ addPoint:function (){
+ const url = './widgets/FloodAnalysis/data.json'
+ this.getJsonUrl(url)
+ },
+
+ //获取json对象,测试用
+ getJsonUrl: function getJsonUrl(url) {
+ var self = this;
+ $.ajax({
+ url: url,
+ dataType: 'json',
+ type: 'get',
+ success: function success(data) {
+ const viewer = self.map
+ var dataArray = data.data
+ dataArray.forEach(e=>{
+ e.house = Number(e.house)
+ e.people = Number(e.people)
+ e.area = Number(e.area)
+ e.money = Number(e.money)
+ })
+ self.peoplePositionArray = []
+ self.peoplePositionArray = dataArray
+ for (let i = 0; i < dataArray.length; i++) {
+ var temp = viewer.entities.add({
+ position: Cesium.Cartesian3.fromDegrees(dataArray[i].LGTD, dataArray[i].LTTD),
+ point: {
+ color: Cesium.Color.RED,
+ pixelSize: 16,
+ //防止地形遮挡住点
+ disableDepthTestDistance: Number.POSITIVE_INFINITY
+ },
+ });
+ }
+ }
+ });
+ },
+
+ //是否显示详情框
+ showDetail:function(show){
+ //显示详情
+ if (show){
+ $('.flood-detail').show()
+ }else {
+ $('.flood-detail').hide()
+ }
+ },
+
+ //洪水分析弹窗
+ floodAnalysisPopup:function (){
+ var self = this
+ var inPolygon = []
+ for (let i = 0; i < this.peoplePositionArray.length; i++) {
+ let isIn = this.isPointInPolygon(this.peoplePositionArray[i])
+ if (isIn){
+ inPolygon.push(this.peoplePositionArray[i])
+ }
+ }
+ var jsonStr = JSON.stringify(inPolygon)
+
+ var url = './corelib/common/popup/floodAnalysis.html';
+ var urlEvaluate = './corelib/common/popup/evaluateAnalysis.html'
+ var top = ($(window).height() - 800) / 2;
+ var left = ($(window).width() - 1300 - 340) / 2 + 340;
+ layer.open({
+ title:'评估分析',
+ type: 2,
+ maxmin: false, //开启最大化最小化按钮
+ area: ['1100px', '800px'],
+ skin: 'floodAnalysis',
+ offset: [top, left],
+ content: urlEvaluate + "?data=" + encodeURIComponent(jsonStr),//使用encodeURIComponent转码,避免中文字符乱码,避免url截取错误
+ id: "floodAnalysisLayer",
+ closeBtn: 1,
+ //把父页面数据传递给子弹窗并渲染
+ success: function(layero, index) {
+ //绑定父子之间的关系,用于数据传递,缺少则无法传递
+ var body = layer.getChildFrame("body",index);
+ //得到iframe页的窗口对象
+ var iframeWin = window[layero.find('iframe')[0]['name']];
+ // //渲染子页面中的img
+ // iframeWin.$('#canvasImage')[0].src = self.canvasImage;
+ var table = ""
+ var house = 0
+ var people = 0
+ var area = 0
+ var money = 0
+ for (let i = 0; i < inPolygon.length; i++) {
+ table += '<tr>'+
+ '<td><div>' + inPolygon[i].name + '</div></td>' +
+ '<td><div>' + inPolygon[i].house + '</div></td>' +
+ '<td><div>' + inPolygon[i].people + '</div></td>' +
+ '<td><div>' + inPolygon[i].area + '</div></td>' +
+ '<td><div>' + inPolygon[i].money + '</div></td>' +
+ '</tr>'
+
+ house += inPolygon[i].house
+ people += inPolygon[i].people
+ area += inPolygon[i].area
+ money += inPolygon[i].money
+ }
+
+ iframeWin.$('#evaluate-tbody').html(table)
+
+ iframeWin.$(".house").html(house + '户')
+ iframeWin.$(".people").html(people + '人')
+ iframeWin.$(".area").html(area + 'km²')
+ iframeWin.$(".money").html(money + '万元')
+
+ },
+ });
+ },
+
+ //判断点是否在多边形内部
+ isPointInPolygon : function (point){
+ //获取经纬度
+ var polygonPosition = this.polygonPositionArray
+ //turf要求首尾闭合
+ var turfPolygon = []
+ polygonPosition.forEach(e=>{
+ var temp = [e.lon,e.lat]
+ turfPolygon.push(temp)
+ })
+ turfPolygon.push([polygonPosition[0].lon,polygonPosition[0].lat])
+
+ var poly= turf.polygon([turfPolygon])
+ var pt = turf.point([point.LGTD,point.LTTD])
+ return turf.booleanPointInPolygon(pt,poly)
+ },
});
+});
diff --git a/widgets/FloodAnalysis/css/style copy .css b/widgets/FloodAnalysis/css/style copy .css
deleted file mode 100644
index 0521ccc..0000000
--- a/widgets/FloodAnalysis/css/style copy .css
+++ /dev/null
@@ -1,165 +0,0 @@
-@import "Tooltip-div.css";
-
-.jimu-widget-DynamicRiver {
- display: none;
- width: 100%;
- height: auto;
- /* overflow-x: hidden; */
- font-size: 14px;
- color: rgb(238, 235, 235);
- background-color: rgba(48, 48, 48, 0.7);
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-main {
- border: 1px solid rgb(69, 154, 251);
- border-radius: 5px;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-header {
- position: relative;
- width: 100%;
- height: 40px;
- line-height: 40px;
- font-size: 20px;
- border-bottom: 1px solid rgb(69, 154, 251);
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-header i {
- display: inline-block;
- margin-left: 6px;
- vertical-align: middle;
- width: 20px;
- height: 20px;
- background: url(../../../images/toolbox.png ) no-repeat 0 -20px;
- background-size: 20px;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-header .close-dynamicriver {
- position: absolute;
- top: 50%;
- right: 8px;
- font-size: 38px;
- font-weight: 400;
- height: 28px;
- line-height: 28px;
- cursor: pointer;
- transform: translateY(-50%);
-}
-
-.jimu-widget-DynamicRiver .water-analysis {
- margin: 10px 8px;
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul,
-.jimu-widget-DynamicRiver .water-analysis ul li {
- margin: 0;
- padding: 0;
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul {
- border-right: 1px solid #fff;
- border-bottom: 1px solid #fff;
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul li {
- list-style: none;
- height: 30px;
- text-align: center;
- line-height: 30px;
- border-top: 1px solid #fff;
- border-left: 1px solid #fff;
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul li span.content-left {
- float: left;
- padding-left: 10px;
- height: 100%;
- width: 80%;
- text-align: left;
-
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul li span.content-right {
- float: left;
- height: 100%;
- width: 20%;
- background: url(../../../images/dynamicRiver-see.png) no-repeat;
- background-position: 50%;
- background-size: 50%;
- border-left: 1px solid #fff;
-}
-
-
-.jimu-widget-DynamicRiver .dynamicriver-result div,
-.jimu-widget-DynamicRiver .dynamicriver-result ul,
-.jimu-widget-DynamicRiver .dynamicriver-result li {
- margin: 0;
- padding: 0;
-}
-
-
-.jimu-widget-DynamicRiver .dynamicriver-result {
- display: none;
- position: absolute;
- top: 260px;
- right: 10px;
- width: 220px;
- height: auto;
- background-color: rgba(48, 48, 48, 0.7);
- border: 1px solid rgb(69, 154, 251);
- border-radius: 6px;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result > div {
- position: relative;
- padding: 0 10px;
- height: 40px;
- line-height: 40px;
- font-size: 16px;
- text-align: left;
- border-bottom: 1px solid rgb(69, 154, 251);
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result div .close-dynamicriver-result {
- position: absolute;
- top: 50%;
- right: 8px;
- font-size: 30px;
- font-weight: 400;
- height: 28px;
- line-height: 28px;
- cursor: pointer;
- transform: translateY(-50%);
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul {
- margin: 10px;
- border-top: 1px solid #fff;
- border-left: 1px solid #fff;
- border-right: 1px solid #fff;
- border-radius: 6px;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li {
- list-style: none;
- display: flex;
- height: 30px;
- line-height: 30px;
- border-bottom: 1px solid #fff;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li:last-child {
- border-radius: 6px;
-}
-
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li span:first-child {
- flex: 1;
- border-right: 1px solid #fff;
- text-align: center;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li span:last-child {
- flex: 2;
- padding-left: 8px;
-}
\ No newline at end of file
diff --git a/widgets/FloodAnalysis/css/style copy.css b/widgets/FloodAnalysis/css/style copy.css
index 0521ccc..c98871a 100644
--- a/widgets/FloodAnalysis/css/style copy.css
+++ b/widgets/FloodAnalysis/css/style copy.css
@@ -1,21 +1,20 @@
@import "Tooltip-div.css";
-
-.jimu-widget-DynamicRiver {
- display: none;
- width: 100%;
- height: auto;
- /* overflow-x: hidden; */
- font-size: 14px;
- color: rgb(238, 235, 235);
- background-color: rgba(48, 48, 48, 0.7);
+.jimu-widget-FloodAnalysis{
+ width: 100%;
+ height: 160px !important;
+ position: fixed !important;
+ left: 30px !important;
+ top: 75px !important;
+ overflow-x: hidden;
+ background: rgba(31, 39, 48, .7);
+ font-size: 14px;
+ border: 1px solid rgb(69, 154, 251);
+ border-radius: 5px;
+ color: rgb(255, 255, 255);
}
-.jimu-widget-DynamicRiver .dynamicriver-main {
- border: 1px solid rgb(69, 154, 251);
- border-radius: 5px;
-}
-.jimu-widget-DynamicRiver .dynamicriver-header {
+.jimu-widget-FloodAnalysis .flood-analysis-header {
position: relative;
width: 100%;
height: 40px;
@@ -24,7 +23,7 @@
border-bottom: 1px solid rgb(69, 154, 251);
}
-.jimu-widget-DynamicRiver .dynamicriver-header i {
+.jimu-widget-FloodAnalysis .flood-analysis-header i {
display: inline-block;
margin-left: 6px;
vertical-align: middle;
@@ -34,132 +33,108 @@
background-size: 20px;
}
-.jimu-widget-DynamicRiver .dynamicriver-header .close-dynamicriver {
- position: absolute;
- top: 50%;
- right: 8px;
- font-size: 38px;
- font-weight: 400;
- height: 28px;
- line-height: 28px;
- cursor: pointer;
- transform: translateY(-50%);
+.jimu-widget-FloodAnalysis .flood-water-analysis {
+ margin: 12px 17px 10px 17px;
}
-.jimu-widget-DynamicRiver .water-analysis {
- margin: 10px 8px;
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul,
-.jimu-widget-DynamicRiver .water-analysis ul li {
- margin: 0;
+.jimu-widget-FloodAnalysis .flood-water-analysis ul ,
+.jimu-widget-FloodAnalysis .flood-water-analysis ul li ,
+.jimu-widget-FloodAnalysis .flood-water-analysis ul input {
padding: 0;
+ margin: 0;
}
-.jimu-widget-DynamicRiver .water-analysis ul {
- border-right: 1px solid #fff;
- border-bottom: 1px solid #fff;
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul li {
+.jimu-widget-FloodAnalysis .flood-water-analysis ul li {
+ margin: 5px 0;
list-style: none;
- height: 30px;
- text-align: center;
- line-height: 30px;
- border-top: 1px solid #fff;
- border-left: 1px solid #fff;
+ height: 36px;
+ line-height: 36px;
+ font-size: 16px;
}
-.jimu-widget-DynamicRiver .water-analysis ul li span.content-left {
- float: left;
- padding-left: 10px;
- height: 100%;
- width: 80%;
- text-align: left;
-
-}
-
-.jimu-widget-DynamicRiver .water-analysis ul li span.content-right {
- float: left;
- height: 100%;
- width: 20%;
- background: url(../../../images/dynamicRiver-see.png) no-repeat;
- background-position: 50%;
- background-size: 50%;
- border-left: 1px solid #fff;
-}
-
-
-.jimu-widget-DynamicRiver .dynamicriver-result div,
-.jimu-widget-DynamicRiver .dynamicriver-result ul,
-.jimu-widget-DynamicRiver .dynamicriver-result li {
- margin: 0;
- padding: 0;
-}
-
-
-.jimu-widget-DynamicRiver .dynamicriver-result {
- display: none;
- position: absolute;
- top: 260px;
- right: 10px;
- width: 220px;
- height: auto;
- background-color: rgba(48, 48, 48, 0.7);
- border: 1px solid rgb(69, 154, 251);
- border-radius: 6px;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result > div {
- position: relative;
+.jimu-widget-FloodAnalysis .flood-water-analysis ul li input {
padding: 0 10px;
+ width: 48%;
+ height: 100%;
+ color: #fff;
+ border: none;
+ background: rgba(140, 151, 165, 0.5);
+}
+
+.jimu-widget-FloodAnalysis .flood-water-analysis ul li span {
+ display: inline-block;
+ width: 52%;
+}
+
+.jimu-widget-FloodAnalysis .flood-water-analysis .flood-water-analysis-new input {
+ margin: 5px 0;
+ width: 48%;
+ height: 36px;
+ color: #fff;
+ background: rgb(2,24,55);
+ border: 1px solid rgb(69, 154, 251);
+ border-radius: 4px;
+}
+
+.jimu-widget-FloodAnalysis .flood-water-analysis .flood-water-analysis-new input:nth-child(odd) {
+ float:left;
+}
+
+.jimu-widget-FloodAnalysis .flood-water-analysis .flood-water-analysis-new input:nth-child(even) {
+ float: right;
+}
+/**淹没详情**/
+.flood-detail{
+ position: fixed;
+ top: 270px;
+ width: 440px;
+ height: 200px;
+ left: 30px !important;
+ overflow-x: hidden;
+ background: rgba(31, 39, 48, .7);
+ font-size: 14px;
+ border: 1px solid rgb(69, 154, 251);
+ border-radius: 5px;
+ color: rgb(255, 255, 255);
+ display: none;
+}
+
+.flood-detail-header {
+ position: relative;
+ width: 100%;
height: 40px;
line-height: 40px;
- font-size: 16px;
- text-align: left;
+ font-size: 20px;
border-bottom: 1px solid rgb(69, 154, 251);
}
-.jimu-widget-DynamicRiver .dynamicriver-result div .close-dynamicriver-result {
- position: absolute;
- top: 50%;
- right: 8px;
- font-size: 30px;
- font-weight: 400;
- height: 28px;
- line-height: 28px;
- cursor: pointer;
- transform: translateY(-50%);
+.flood-detail-header i {
+ display: inline-block;
+ margin-left: 6px;
+ vertical-align: middle;
+ width: 20px;
+ height: 20px;
+ background: url(../../../images/toolbox.png ) no-repeat 0 -20px;
+ background-size: 20px;
}
-.jimu-widget-DynamicRiver .dynamicriver-result ul {
- margin: 10px;
- border-top: 1px solid #fff;
- border-left: 1px solid #fff;
- border-right: 1px solid #fff;
- border-radius: 6px;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li {
- list-style: none;
- display: flex;
- height: 30px;
- line-height: 30px;
- border-bottom: 1px solid #fff;
-}
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li:last-child {
- border-radius: 6px;
-}
-
-
-.jimu-widget-DynamicRiver .dynamicriver-result ul li span:first-child {
- flex: 1;
- border-right: 1px solid #fff;
+.flood-detail-content{
+ height: 45%;
text-align: center;
+ margin: 12px 17px 10px 17px;
}
-.jimu-widget-DynamicRiver .dynamicriver-result ul li span:last-child {
- flex: 2;
- padding-left: 8px;
-}
\ No newline at end of file
+.flood-detail-text{
+ height: 95%;
+ font-size: 20px;
+}
+
+.flood-detail-button input{
+ margin: 5px 0;
+ width: 48%;
+ height: 36px;
+ color: #fff;
+ background: rgb(2,24,55);
+ border: 1px solid rgb(69, 154, 251);
+ border-radius: 4px;
+}
diff --git a/widgets/FloodAnalysis/css/style.css b/widgets/FloodAnalysis/css/style.css
index 1c686d4..677f7db 100644
--- a/widgets/FloodAnalysis/css/style.css
+++ b/widgets/FloodAnalysis/css/style.css
@@ -1,20 +1,28 @@
-@import "Tooltip-div.css";
-.jimu-widget-FloodAnalysis{
- width: 100%;
- height: 160px !important;
- position: fixed !important;
- left: 30px !important;
- top: 75px !important;
- overflow-x: hidden;
- background: rgba(31, 39, 48, .7);
- font-size: 14px;
- border: 1px solid rgb(69, 154, 251);
- border-radius: 5px;
- color: rgb(255, 255, 255);
+.jimu-widget-FloodAnalysis {
+ width: 440px !important;
+ height: 100%;
+ position: fixed !important;
+ left: 30px !important;
+ top: 75px !important;
+ border: 1px solid rgb(69, 154, 251);
+ border-radius: 5px;
+ background: rgba(31, 39, 48, .7);
+ z-index: 41 !important;
+ color: rgb(255, 255, 255);
}
+.jimu-widget-FloodAnalysis div,
+.jimu-widget-FloodAnalysis i,
+.jimu-widget-FloodAnalysis ul,
+.jimu-widget-FloodAnalysis li,
+.jimu-widget-FloodAnalysis span,
+.jimu-widget-FloodAnalysis input,
+.jimu-widget-FloodAnalysis h2 {
+ margin: 0;
+ padding: 0;
+}
-.jimu-widget-FloodAnalysis .flood-analysis-header {
+.jimu-widget-FloodAnalysis div.analysis-header {
position: relative;
width: 100%;
height: 40px;
@@ -23,7 +31,7 @@
border-bottom: 1px solid rgb(69, 154, 251);
}
-.jimu-widget-FloodAnalysis .flood-analysis-header i {
+.jimu-widget-FloodAnalysis div.analysis-header i {
display: inline-block;
margin-left: 6px;
vertical-align: middle;
@@ -33,60 +41,162 @@
background-size: 20px;
}
-.jimu-widget-FloodAnalysis .flood-water-analysis {
- margin: 12px 17px 10px 17px;
+.jimu-widget-FloodAnalysis div.dong {
+ margin: 8px 17px;
}
-.jimu-widget-FloodAnalysis .flood-water-analysis ul ,
-.jimu-widget-FloodAnalysis .flood-water-analysis ul li ,
-.jimu-widget-FloodAnalysis .flood-water-analysis ul input {
- padding: 0;
- margin: 0;
-}
-
-.jimu-widget-FloodAnalysis .flood-water-analysis ul li {
+.jimu-widget-FloodAnalysis ul li {
margin: 5px 0;
list-style: none;
- height: 36px;
- line-height: 36px;
+ height: 46px;
+ line-height: 46px;
font-size: 16px;
}
-.jimu-widget-FloodAnalysis .flood-water-analysis ul li input {
- padding: 0 10px;
- width: 48%;
- height: 100%;
- color: #fff;
- border: none;
- background: rgba(140, 151, 165, 0.5);
-}
-.jimu-widget-FloodAnalysis .flood-water-analysis ul li span {
+
+.jimu-widget-FloodAnalysis li span {
display: inline-block;
- width: 52%;
+ width: 51%;
+ text-align: left;
}
-.jimu-widget-FloodAnalysis .flood-water-analysis .flood-water-analysis-new input {
- margin: 5px 0;
- width: 48%;
- height: 36px;
+.jimu-widget-FloodAnalysis li input {
+ display: inline-block;
+ width: 49%;
+ height: 42px;
+ border: 0;
color: #fff;
+ vertical-align: middle;
+ background: rgba(140, 151, 165, 0.7);
+ padding: 0 10px;
+}
+
+.jimu-widget-FloodAnalysis li:nth-child(5) input {
+ width: 49%;
+}
+
+.jimu-widget-FloodAnalysis li:nth-child(5) input:nth-child(1) {
+ margin-right: 2%;
+}
+
+.jimu-widget-FloodAnalysis li:nth-child(1) input,
+.jimu-widget-FloodAnalysis li:nth-child(5) input {
+ cursor: pointer;
background: rgb(2,24,55);
border: 1px solid rgb(69, 154, 251);
border-radius: 4px;
}
-.jimu-widget-FloodAnalysis .flood-water-analysis .flood-water-analysis-new input:nth-child(odd) {
- float:left;
+.jimu-widget-FloodAnalysis .dong-echarts {
+ display: none;
+ position: absolute;
+ top: 360px;
+ background: rgba(90, 87, 87, 0.7);
+ width: 560px;
+ height: 360px;
+ z-index: 55;
}
-.jimu-widget-FloodAnalysis .flood-water-analysis .flood-water-analysis-new input:nth-child(even) {
- float: right;
+.jimu-widget-FloodAnalysis p {
+ display: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ top: 368px;
+ left: 12px;
+ width: 150px;
+ height: 200px;
+ color: #fff;
+ line-height: 20px;
+ text-indent: 2em;
+ letter-spacing: 1.5px;
+ font-size: 16px;
+ word-break: break-all;
+ text-align-last: left;
+ text-align: justify;
+ text-justify: distribute-all-lines;
+ z-index: 56;
}
+.jimu-widget-FloodAnalysis .dong-progress {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ width: 500px;
+ height: 0px;
+ z-index: 33;
+ background: rgba(59, 59, 59, 0.7);
+
+}
+
+.jimu-widget-FloodAnalysis .dong-progress h2 {
+ margin: 10px 0;
+ text-align: center;
+ font-size: 16px;
+ font-weight: 400;
+}
+
+.jimu-widget-FloodAnalysis .dong-progress .container {
+ display: inline-block;
+ width: 100%;
+ height: 20px;
+ padding-right: 10px;
+ border: 1px solid #999;
+ border-radius: 5px;
+}
+
+.jimu-widget-FloodAnalysis .dong-progress .container .h-100P {
+ height: 100%;
+}
+
+.jimu-widget-FloodAnalysis .dong-progress .container .bar {
+ display: inline-block;
+ background: linear-gradient(to right, #ff4343, #48adff);
+ color: white;
+ font-weight: bold;
+ padding: 0 5px;
+ text-align: right;
+ border-radius: 5px;
+ border-right: 1px solid #999;
+}
+
+
+
+.jimu-widget-FloodAnalysis .storage-capacity-curve {
+ display: none;
+ padding-top: 10px;
+ position: absolute;
+ top: 360px;
+ left: 580px;
+ background: rgba(206, 204, 204, 0.7);
+ width: 500px;
+ height: 360px;
+ z-index: 55;
+}
+
+.jimu-widget-FloodAnalysis .storage-name {
+ display: none;
+ position: absolute;
+ top: 686px;
+ left: 780px;
+ width: 100px;
+ height: 20px;
+ line-height: 20px;
+ text-align: center;
+ font-size: 14px;
+ color: rgba(40, 37, 161, 0.7);
+ z-index: 111 !important;
+}
+
+/**淹没详情**/
.flood-detail{
position: fixed;
- top: 270px;
+ top: 420px;
width: 440px;
height: 200px;
left: 30px !important;
diff --git a/widgets/FloodAnalysis/data.json b/widgets/FloodAnalysis/data.json
index 6505428..f029a0a 100644
--- a/widgets/FloodAnalysis/data.json
+++ b/widgets/FloodAnalysis/data.json
@@ -62,6 +62,232 @@
"people": "100",
"area": "8.551",
"money": "39.789"
+ },
+ {
+ "name": "沙洲坝镇",
+ "LGTD": "115.997386",
+ "LTTD": "25.884228",
+ "house": "15",
+ "people": "135",
+ "area": "12.77",
+ "money": "42.123"
+ },
+ {
+ "name": "大坪头",
+ "LGTD": "116.009435",
+ "LTTD": "25.891839",
+ "house": "105",
+ "people": "5",
+ "area": "15.77",
+ "money": "34.123"
+ },
+ {
+ "name": "罗布塘",
+ "LGTD": "116.012287",
+ "LTTD": "25.896596",
+ "house": "25",
+ "people": "37",
+ "area": "14.72",
+ "money": "10.53"
+ },
+ {
+ "name": "窑下排",
+ "LGTD": "116.009354",
+ "LTTD": "25.866026",
+ "house": "105",
+ "people": "5",
+ "area": "15.77",
+ "money": "34.123"
+ },
+ {
+ "name": "龙子口",
+ "LGTD": "115.997337",
+ "LTTD": "25.865782",
+ "house": "15",
+ "people": "135",
+ "area": "12.77",
+ "money": "42.123"
+ },
+ {
+ "name": "白屋子",
+ "LGTD": "115.991039",
+ "LTTD": "25.877146",
+ "house": "25",
+ "people": "37",
+ "area": "14.72",
+ "money": "10.53"
+ },
+ {
+ "name": "塘背",
+ "LGTD": "116.059050",
+ "LTTD": "25.885193",
+ "house": "105",
+ "people": "5",
+ "area": "15.77",
+ "money": "34.123"
+ },
+ {
+ "name": "福水村",
+ "LGTD": "116.063359",
+ "LTTD": "25.876916",
+ "house": "31",
+ "people": "90",
+ "area": "15.11",
+ "money": "12.43"
+ },
+ {
+ "name": "陈坊垄",
+ "LGTD": "116.061225",
+ "LTTD": "25.875275",
+ "house": "25",
+ "people": "37",
+ "area": "14.72",
+ "money": "10.53"
+ },
+
+ {
+ "name": "溪背村",
+ "LGTD": "116.031522",
+ "LTTD": "25.866108",
+ "house": "35",
+ "people": "175",
+ "area": "12.888",
+ "money": "50.123"
+ },
+ {
+ "name": "黄荆垇",
+ "LGTD": "116.052346",
+ "LTTD": "25.868921",
+ "house": "40",
+ "people": "124",
+ "area": "12.078",
+ "money": "51.3"
+ },
+ {
+ "name": "谢屋",
+ "LGTD": "116.048576",
+ "LTTD": "25.863552",
+ "house": "35",
+ "people": "175",
+ "area": "12.888",
+ "money": "50.123"
+ },
+ {
+ "name": "邱屋",
+ "LGTD": "116.044104",
+ "LTTD": "25.857309",
+ "house": "35",
+ "people": "175",
+ "area": "12.888",
+ "money": "50.123"
+ },
+ {
+ "name": "红沙岭下",
+ "LGTD": "116.058560",
+ "LTTD": "25.869444",
+ "house": "20",
+ "people": "100",
+ "area": "8.551",
+ "money": "39.789"
+ },
+ {
+ "name": "靠岭背",
+ "LGTD": "116.053197",
+ "LTTD": "25.855536",
+ "house": "70",
+ "people": "350",
+ "area": "24.456",
+ "money": "100.456"
+ },
+ {
+ "name": "冷水井",
+ "LGTD": "116.062919",
+ "LTTD": "25.864527",
+ "house": "20",
+ "people": "100",
+ "area": "8.551",
+ "money": "39.789"
+ },
+ {
+ "name": "仙人岗",
+ "LGTD": "116.066362",
+ "LTTD": "25.865598",
+ "house": "15",
+ "people": "135",
+ "area": "12.77",
+ "money": "42.123"
+ },
+ {
+ "name": "詹屋",
+ "LGTD": "116.037672",
+ "LTTD": "25.852593",
+ "house": "105",
+ "people": "5",
+ "area": "15.77",
+ "money": "34.123"
+ },
+ {
+ "name": "桥坑",
+ "LGTD": "115.987810",
+ "LTTD": "25.861294",
+ "house": "25",
+ "people": "37",
+ "area": "14.72",
+ "money": "10.53"
+ },
+ {
+ "name": "老虎塘",
+ "LGTD": "115.989406",
+ "LTTD": "25.856659",
+ "house": "105",
+ "people": "5",
+ "area": "15.77",
+ "money": "34.123"
+ },
+ {
+ "name": "丰坑",
+ "LGTD": "115.985503",
+ "LTTD": "25.847369",
+ "house": "15",
+ "people": "135",
+ "area": "12.77",
+ "money": "42.123"
+ },
+ {
+ "name": "刘屋",
+ "LGTD": "115.996429",
+ "LTTD": "25.853648",
+ "house": "25",
+ "people": "37",
+ "area": "14.72",
+ "money": "10.53"
+ },
+ {
+ "name": "黄竹坑子",
+ "LGTD": "115.980189",
+ "LTTD": "25.840939",
+ "house": "105",
+ "people": "5",
+ "area": "15.77",
+ "money": "34.123"
+ },
+ {
+ "name": "大塆",
+ "LGTD": "116.055886",
+ "LTTD": "25.837923",
+ "house": "31",
+ "people": "90",
+ "area": "15.11",
+ "money": "12.43"
+ },
+ {
+ "name": "洪瑞苑",
+ "LGTD": "116.022552",
+ "LTTD": "25.882196",
+ "house": "25",
+ "people": "37",
+ "area": "14.72",
+ "money": "10.53"
}
]
}
--
Gitblit v1.9.3