From e5eb1ebb6a058c6f130124da1fac0289e09b9265 Mon Sep 17 00:00:00 2001
From: unknown <2414074862@qq.com>
Date: Mon, 24 Apr 2023 15:53:01 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9D=91=E7=82=B9=E5=87=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/crops/area/index.vue | 438 +++++++++++++++++++++++++--------
1 file changed, 334 insertions(+), 104 deletions(-)
diff --git a/src/views/crops/area/index.vue b/src/views/crops/area/index.vue
index 9200ce7..008f909 100644
--- a/src/views/crops/area/index.vue
+++ b/src/views/crops/area/index.vue
@@ -5,19 +5,13 @@
种植面积时间统计
-
+
下载
-
+
@@ -26,18 +20,12 @@
种植面积统计
-
+
下载
-
+
@@ -89,18 +77,12 @@
作物类型统计-高标准农田
-
+
下载
-
+
@@ -109,27 +91,17 @@
作物类型统计-行政区划
-
+
下载
-
+
-
+
@@ -151,6 +123,17 @@
{{ clickInfoMap.value }}亩
X
+
+
+
{{ item.crop }}:
+
{{ (item.Shape_Area / 666.67).toFixed(2) }} 亩
+
+
+
村名:
+
{{ townZuowu.XZQMC }}
+
+
X
+
@@ -357,6 +340,8 @@ function initMap() {
// 图层点击事件
layerClick();
+ // 蒙版
+ mbHandle()
//加载黄岛区村级地图服务
// Cesium.GeoJsonDataSource.load(
@@ -535,6 +520,7 @@ function getLevel(height) {
}
}
+let townZuowu = ref({ label: [] })//镇的作物
let XZDM = '';
// 图层点击事件
function layerClick() {
@@ -549,7 +535,6 @@ function layerClick() {
let alti = viewer.camera.positionCartographic.height;
let level = getLevel(alti);
const layers = viewer.imageryLayers._layers;
- console.log('layers:', layers);
const index = layers.findIndex(
item =>
item._imageryProvider._layers &&
@@ -576,13 +561,11 @@ function layerClick() {
if (promise) {
promise.then(data => {
if (data.length > 0) {
- console.log('data:', data);
let newData = data['0'];
if (newData.properties && newData.properties.XZDM) {
if (XZDM !== newData.properties.XZDM) {
//防止
XZDM = newData.properties.XZDM;
- console.log('111', newData);
value.value = XZDM; //
selectTab(); //
let item = newData.data;
@@ -611,9 +594,33 @@ function layerClick() {
`XZDM=${newData.properties.XZDM}`,
'village_CQL'
);
+
+ // 显示该镇的种植结构
+ let entitys = viewer.entities._entities._array;
+ for (var na = entitys.length - 1; na >= 0; na--) {
+ if (entitys[na]._name && entitys[na]._name === 'point' + newData.properties.XZDM) {
+ let info = entitys[na]._info
+ // entitys[na].label.show = true
+ townZuowu.value = info//保存数据
+ showOverlayChart(movement.position); // 添加地图移动监听:使地图移动弹窗跟着移动
+ viewer.scene.postRender.addEventListener(infoWindowPostRender);
+ } else {
+ // if (entitys[na].label) {
+ // entitys[na].label.show = false
+ // }
+ }
+ }
+ // 移除村高亮
+ deleteEntityByName('villageLine');
+ XZQDM = ''
+ } else {
+ // // 已经有镇了,监听村点击
+ villageClick(layers, xy, level, cartographic)
}
} else {
removeWms(['village_CQL']);
+ // 移除框框
+ hiddenOverlayChart(); // 清除监听事件
}
}
});
@@ -624,11 +631,91 @@ function layerClick() {
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}
+let XZQDM = ''
+// 村点击高亮
+function villageClick(layers, xy, level, cartographic) {
+ const index = layers.findIndex(
+ item =>
+ item._imageryProvider._layers &&
+ item._imageryProvider._layers === 'shuzisannong:huangdaoqu_village'
+ );
+ if (index > -1) {
+ const providerPoint = layers[index];
+ // 拿取最后一个图层
+ let provider = providerPoint._imageryProvider;
+ if (
+ provider &&
+ provider.ready &&
+ provider._layers &&
+ providerPoint.show === true
+ ) {
+ xy = provider.tilingScheme.positionToTileXY(cartographic, level, xy);
+ let promise = provider.pickFeatures(
+ xy.x,
+ xy.y,
+ level,
+ cartographic.longitude,
+ cartographic.latitude
+ );
+ if (promise) {
+ promise.then(data => {
+ if (data.length > 0) {
+ let newData = data['0'];
+ if (newData.properties && newData.properties.XZQDM) {
+ if (XZQDM !== newData.properties.XZQDM) {
+ //防止
+ XZQDM = newData.properties.XZQDM;
+ let item = newData.data;
+ // 移除高亮
+ deleteEntityByName('villageLine');
+ // 高亮边界
+ addBoundaryHandle(
+ item.geometry.coordinates,
+ 'villageLine',
+ 'yellow'
+ );
+ // townZuowu.value = info//保存数据
+
+ // 后插和村
+ if (newData.properties.XZQDM === '370211104217') {
+ // console.log('后河岔村委会')
+ const rectangle = Cesium.Rectangle.fromDegrees(
+ item.bbox[0],
+ item.bbox[1],
+ item.bbox[2],
+ item.bbox[3]
+ );
+ const center = Cesium.Rectangle.center(rectangle); //获取视角范围中心点(得到的结果为弧度Cartographic)
+ let longitude = Cesium.Math.toDegrees(center.longitude); //将弧度转为度
+ let latitude = Cesium.Math.toDegrees(center.latitude);
+ let info = {
+ lon: longitude,
+ lat: latitude,
+ ...item.properties,
+ // XZQMC
+ label: [
+ { crop: "茶叶", Shape_Area: 2820 },
+ { crop: "大豆", Shape_Area: 2767 },
+ { crop: "花生", Shape_Area: 62356 },
+ { crop: "蓝莓", Shape_Area: 5443 },
+ { crop: "地瓜", Shape_Area: 897 },
+ { crop: "小麦", Shape_Area: 20111 },
+ ]
+ }
+ townZuowu.value = info//保存数据
+ }
+ }
+ }
+ }
+ });
+ }
+ }
+ }
+}
// 添加村
// CQL_FILTER:筛选的语句
// customName地图服务自定义属性名
function addvillage(CQL_FILTER, customName) {
- console.log('222');
let map2 = new Cesium.WebMapServiceImageryProvider({
url: `http://121.36.229.60:9080/geoserver/shuzisannong/wms`,
layers: 'shuzisannong:huangdaoqu_village', //图层名
@@ -1778,6 +1865,108 @@ function ASdivision() {
}
/*--------------------------------------------------------------------------------------------*/
+function getAreaFenlei() {
+ let fl = fenleiRef.value
+ console.log('fl:', fl);
+ axios({
+ url: serverAPI.geoserverUrl + '/shuzisannong/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=shuzisannong%3Ahuangdaoqu_town&maxFeatures=50&outputFormat=application%2Fjson',
+ }).then(res => {
+ console.log('res1111:', res);
+ let data = res.data.features;
+ data.forEach((item, index) => {
+ const rectangle = Cesium.Rectangle.fromDegrees(
+ item.bbox[0],
+ item.bbox[1],
+ item.bbox[2],
+ item.bbox[3]
+ );
+ const center = Cesium.Rectangle.center(rectangle); //获取视角范围中心点(得到的结果为弧度Cartographic)
+ let longitude = Cesium.Math.toDegrees(center.longitude); //将弧度转为度
+ let latitude = Cesium.Math.toDegrees(center.latitude);
+
+ if (item.properties.XZDM === '370211011') {
+ //灵山卫街道
+ longitude = 120.0863;
+ latitude = 35.941;
+ } else if (item.properties.XZDM === '370211003') {
+ //薛家岛街道
+ longitude = 120.243682;
+ latitude = 35.97123201;
+ }
+ const townData = fl[item.properties.XZMC]
+ let label = []
+ if (townData) {
+ label = townData.map((it, inex) => {
+ // let dd = `${it.properties.crop} :${(it.properties.Shape_Area / 666.67).toFixed(2)} 亩`
+ // return dd
+ return it.properties
+ })
+ }
+ // label = label.join(' ')
+ // console.log('label:', index, label,fl[item.properties.XZMC],item.properties.XZMC)
+ // 添加点
+ viewer.entities.add({
+ name: 'point' + item.properties.XZDM,
+ position: Cesium.Cartesian3.fromDegrees(longitude, latitude),
+ point: new Cesium.PointGraphics({
+ show: true,
+ pixelSize: 10,
+ // heightReference: Cesium.HeightReference.NONE,
+ color: Cesium.Color.fromBytes(30, 144, 255),
+ outlineColor: new Cesium.Color(0, 0, 0, 0),
+ outlineWidth: 0,
+ disableDepthTestDistance: Number.POSITIVE_INFINITY, //去掉地形遮挡
+ heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,//贴地
+ }),
+ // label: {
+ // show: false,
+ // text: label.join(' '),
+ // font: '12px sans-serif',
+ // fillColor: Cesium.Color.WHITE,
+ // showBackground: true,
+ // backgroundColor: Cesium.Color.fromCssColorString('rgba(2, 31, 26, 0.6)'),//背景颜色
+ // // style: Cesium.LabelStyle.FILL,
+ // outlineWidth: 3,
+ // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+ // horizontalOrigin: Cesium.HorizontalOrigin.LEFT,//水平位置
+ // pixelOffset: new Cesium.Cartesian2(-80, -10),
+ // },
+ info: {
+ label: label,
+ ...item.properties,
+ // 经纬度,以便监听
+ lon: longitude,
+ lat: latitude,
+ },
+ });
+
+ });
+ }).catch(err => { })
+
+}
+let fenleiRef = ref({})
+function mbHandle() {
+ axios({
+ url: serverAPI.geoserverUrl + '/shuzisannong/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=shuzisannong%3Afenlei&maxFeatures=137&outputFormat=application%2Fjson',
+ }).then(res => {
+ let features = res.data.features
+ let town = {}
+ // 按镇分类
+ features.forEach(item => {
+ let key = item.properties.town
+ if (town[key]) {
+ town[key].push(item)
+ } else {
+ town[key] = [item]
+ }
+ })
+ fenleiRef.value = town
+ getAreaFenlei()
+
+ }).catch(err => { })
+
+}
+
/*------------------------------------------柱状图--------------------------------------------*/
// function getJson() {
@@ -1930,28 +2119,27 @@ function ASdivision() {
// .catch(err => {});
// }
// 地图移动时弹窗跟随
-// function infoWindowPostRender() {
-// // let viewer = viewers.value;
-// console.log('clickInfoMap.value:', clickInfoMap.value);
-// if (clickInfoMap.value && clickInfoMap.value.lon && clickInfoMap.value.lat) {
-// //经纬度转为世界坐标
-// const gisPosition = Cesium.Cartesian3.fromDegrees(
-// Number(clickInfoMap.value.lon),
-// Number(clickInfoMap.value.lat),
-// 0
-// ); //转化为屏幕坐标
-// var windowPosition = Cesium.SceneTransforms.wgs84ToWindowCoordinates(
-// viewer.scene,
-// gisPosition
-// );
+function infoWindowPostRender() {
+ // let viewer = viewers.value;
+ if (townZuowu.value && townZuowu.value.lon && townZuowu.value.lat) {
+ //经纬度转为世界坐标
+ const gisPosition = Cesium.Cartesian3.fromDegrees(
+ Number(townZuowu.value.lon),
+ Number(townZuowu.value.lat),
+ 0
+ ); //转化为屏幕坐标
+ var windowPosition = Cesium.SceneTransforms.wgs84ToWindowCoordinates(
+ viewer.scene,
+ gisPosition
+ );
-// if (Cesium.defined(windowPosition)) {
-// const pop = document.getElementById('popup');
-// pop.style.top = windowPosition.y - 10 + 'px';
-// pop.style.left = windowPosition.x + 10 + 'px';
-// }
-// }
-// }
+ if (Cesium.defined(windowPosition)) {
+ const pop = document.getElementById('pop');
+ pop.style.top = windowPosition.y - 10 + 'px';
+ pop.style.left = windowPosition.x + 10 + 'px';
+ }
+ }
+}
// function mapClick() {
// // let viewer = viewers.value;
// viewer.screenSpaceEventHandler.setInputAction(function (movement) {
@@ -1993,22 +2181,21 @@ function ASdivision() {
// }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
// }
-// // 隐藏弹窗
-// function hiddenOverlayChart() {
-// // let viewer = viewers.value;
-// const pop = document.getElementById('popup');
-// pop.style.display = 'none'; // 清除监听事件
-// viewer.scene.postRender.removeEventListener(infoWindowPostRender);
-// }
-// //显示弹窗
-// function showOverlayChart(position) {
-// const pop = document.getElementById('popup');
-// pop.style.display = 'flex';
-// pop.style.position = 'absolute';
-// pop.style.top = position.y - 10 + 'px';
-// pop.style.left = position.x + 10 + 'px';
-// pop.style.zIndex = 99;
-// }
+// 隐藏弹窗
+function hiddenOverlayChart() {
+ const pop = document.getElementById('pop');
+ pop.style.display = 'none'; // 清除监听事件
+ viewer.scene.postRender.removeEventListener(infoWindowPostRender);
+}
+//显示弹窗
+function showOverlayChart(position) {
+ const pop = document.getElementById('pop');
+ pop.style.display = 'block';
+ pop.style.position = 'absolute';
+ pop.style.top = position.y - 10 + 'px';
+ pop.style.left = position.x + 10 + 'px';
+ pop.style.zIndex = 99;
+}
// function random(min, max) {
// return Math.floor(Math.random() * (max - min)) + min;
@@ -2050,11 +2237,9 @@ $height: calc(100vh - 100px);
height: 25px;
border-radius: 20px;
font-size: 14px;
- background: linear-gradient(
- 180deg,
- rgba(16, 111, 111, 1) 0%,
- rgba(47, 214, 214, 1) 100%
- );
+ background: linear-gradient(180deg,
+ rgba(16, 111, 111, 1) 0%,
+ rgba(47, 214, 214, 1) 100%);
border: 1.5px solid rgba(23, 194, 180, 1);
display: flex;
justify-content: center;
@@ -2115,6 +2300,7 @@ $height: calc(100vh - 100px);
flex-direction: column;
padding: 5px 10px 5px 10px;
color: rgba(255, 255, 255, 1);
+
.Crops {
display: flex;
width: 100%;
@@ -2126,16 +2312,16 @@ $height: calc(100vh - 100px);
align-items: center;
justify-content: space-around;
opacity: 1;
- background: linear-gradient(
- 90deg,
- rgba(21, 173, 148, 0.1) 0%,
- rgba(21, 173, 148, 0) 100%
- );
+ background: linear-gradient(90deg,
+ rgba(21, 173, 148, 0.1) 0%,
+ rgba(21, 173, 148, 0) 100%);
+
div {
display: flex;
align-items: center;
}
}
+
.el-checkbox-group {
display: flex;
flex-direction: column;
@@ -2308,7 +2494,7 @@ $height: calc(100vh - 100px);
// align-items: flex-end;
padding: 30px 8px 20px 8px;
- & > div:nth-child(1) {
+ &>div:nth-child(1) {
font-weight: 400;
letter-spacing: 0px;
color: rgba(255, 255, 255, 1);
@@ -2316,7 +2502,7 @@ $height: calc(100vh - 100px);
line-height: 24px;
}
- & > div:nth-child(2) {
+ &>div:nth-child(2) {
color: rgba(255, 255, 255, 1);
width: 129px;
height: 24px;
@@ -2339,6 +2525,50 @@ $height: calc(100vh - 100px);
}
}
-:deep(.el-select__popper.el-popper) {
+#pop {
+ border-radius: 5px;
+ background: rgba(2, 31, 26, 0.6);
+ display: none;
+ // justify-content: flex-start;
+ // align-items: flex-end;
+ padding: 30px 8px 20px 8px;
+
+ .cancel {
+ position: absolute;
+ right: 10px;
+ top: 5px;
+ color: rgba(255, 255, 255, 1);
+ cursor: pointer;
+ }
+
+ &>div {
+ display: flex;
+ margin-bottom: 10px;
+
+ &>div:nth-child(1) {
+ font-weight: 400;
+ letter-spacing: 0px;
+ color: rgba(255, 255, 255, 1);
+ // margin-top: 20px;
+ line-height: 24px;
+ margin-right: 10px;
+ }
+
+ &>div:nth-child(2) {
+ color: rgba(255, 255, 255, 1);
+ width: 129px;
+ height: 24px;
+ opacity: 1;
+ border-radius: 2px;
+ background: rgba(217, 231, 255, 0.2);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 2px 10px 2px 10px;
+ // margin-top: 20px;
+ }
+ }
}
+
+:deep(.el-select__popper.el-popper) {}