From c03856d80d71e92499bf0b084c4e862eb4d48a3d Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Thu, 02 Feb 2023 14:45:49 +0800
Subject: [PATCH] 水文水环境分析-洪水淹没页面--实现判断当前点是否在所绘多边形内部(当点在线上时存在误判)

---
 jimu.js/MapManager.js                   |   13 +++---
 corelib/common/popup/floodAnalysis.html |   12 +++++
 widgets/FloodAnalysis/Widget.js         |   67 ++++++++++++++++++++++++++++++++-
 3 files changed, 81 insertions(+), 11 deletions(-)

diff --git a/corelib/common/popup/floodAnalysis.html b/corelib/common/popup/floodAnalysis.html
index 8bcc1a1..0d69d2c 100644
--- a/corelib/common/popup/floodAnalysis.html
+++ b/corelib/common/popup/floodAnalysis.html
@@ -16,7 +16,17 @@
                 <div class="flood-box-left">
                     <img id="canvasImage">
                 </div>
-                <div class="flood-box-right">22</div>
+                <div class="flood-box-right">
+                    <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>
             <div class="flood-box-bottom">
                 <button type='button' id="start-analysis-btn"> 开始分析 </button>
diff --git a/jimu.js/MapManager.js b/jimu.js/MapManager.js
index 92bf4f6..7728255 100644
--- a/jimu.js/MapManager.js
+++ b/jimu.js/MapManager.js
@@ -110,12 +110,12 @@
 
 
                 //设置地形
-                /*if (appConfig.map.terrain && appConfig.map.terrain.show) {
-                    var globe = this.map.scene.globe;
-                    var terrainProvider = new Cesium.CesiumTerrainProvider(appConfig.map.terrain);
-                    globe.terrainProvider = terrainProvider;
-                    globe.enableLighting = false; //默认关闭灯光
-                }*/
+                // if (appConfig.map.terrain && appConfig.map.terrain.show) {
+                //     var globe = this.map.scene.globe;
+                //     var terrainProvider = new Cesium.CesiumTerrainProvider(appConfig.map.terrain);
+                //     globe.terrainProvider = terrainProvider;
+                //     globe.enableLighting = false; //默认关闭灯光
+                // }
 
 
                 //设置离线地图默认显示
@@ -123,7 +123,6 @@
                 this.map.baseLayerPicker.viewModel.selectedTerrain = this.map.baseLayerPicker.viewModel.terrainProviderViewModels[0];
                 $(".cesium-baseLayerPicker-sectionTitle").eq(0).html("底图");
                 $(".cesium-baseLayerPicker-sectionTitle").eq(1).html("地形");
-
 
                 //对外暴露的公共接口
                 topic.subscribe("gis/map/setCenter", lang.hitch(this, this.centerAt));
diff --git a/widgets/FloodAnalysis/Widget.js b/widgets/FloodAnalysis/Widget.js
index 6205b8e..85f17b3 100644
--- a/widgets/FloodAnalysis/Widget.js
+++ b/widgets/FloodAnalysis/Widget.js
@@ -11,7 +11,8 @@
 	'jimu/BaseWidget',
 	'./Tooltip-div',
 	'./FloodAnalysis',
-	'libs/layer/layer.js'
+	'libs/layer/layer.js',
+	'libs/turf/turf.min.js'
 ],
 	function (declare,
 		lang,
@@ -21,7 +22,8 @@
 		BaseWidget,
 		tooltip,
 		flood,
-		layer
+		layer,
+		turf,
 	) {
 		return declare([BaseWidget], {
 			baseClass: 'jimu-widget-FloodAnalysis',
@@ -34,9 +36,12 @@
 			riverPrimitive: null,
 			material: null,
 			drawingPolyline: null,
+			//绘制的多边形数组
 			polygonCartesianArray:[],
 			//canvas转换后的图片
 			canvasImage:null,
+			//房屋人口
+			peoplePositionArray:[],
 			startup: function () {
 				this.inherited(arguments);
 				var self = this;
@@ -301,6 +306,8 @@
 			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(3)').trigger('click');
 
 
@@ -310,7 +317,7 @@
 				//面板关闭的时候触发 (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 () {
@@ -444,6 +451,14 @@
 				var top = ($(window).height() - 600) / 2;
 				var left = ($(window).width() - 900 - 340) / 2 + 340;
 				var self = this
+
+				for (let i = 0; i < this.peoplePositionArray.length; i++) {
+					let inPolygon = this.isPointInPolygon(this.peoplePositionArray[i])
+
+					this.peoplePositionArray[i].inPolygon = inPolygon
+
+				}
+
 				layer.open({
 					title:'模拟分析',
 					type: 2,
@@ -454,6 +469,7 @@
 					content: url,
 					id: "floodAnalysisLayer",
 					closeBtn: 1,
+					//把父页面数据传递给子弹窗并渲染
 					success: function(layero, index) {
 						var body = layer.getChildFrame("body",index);//绑定父子之间的关系,用于数据传递,缺少则无法传递
 						var iframeWin = window[layero.find('iframe')[0]['name']];//得到iframe页的窗口对象
@@ -464,7 +480,52 @@
 
 			//添加点
 			addPoint:function (){
+				const url = './widgets/FloodAnalysis/data.json'
+				this.getJsonUrl(url)
+			},
 
+			//判断点是否在多边形内部
+			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
+						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

--
Gitblit v1.9.3