From d9308c7fad46780bbaa918e4a2ecdd7e82ae4676 Mon Sep 17 00:00:00 2001 From: fangjiakai <450850793@qq.com> Date: Mon, 26 Feb 2024 15:37:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=91=84=E5=83=8F=E5=A4=B4=E6=91=86=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/lib/Cesium/CustomCesium.js | 7 -- src/assets/images/map/peoIcon_green.png | Bin 0 -> 5970 bytes src/components/map_tools/index.vue | 37 +++++- src/components/map_tools/map.js | 119 +++++++++++++++++- src/request/map_settings.js | 2 + src/views/BI/js/map.js | 75 ++++++++++- .../components/selecting_points.vue | 58 +++++++++ .../video_manager/video_manager/index.vue | 23 +++- 8 files changed, 294 insertions(+), 27 deletions(-) create mode 100644 src/assets/images/map/peoIcon_green.png create mode 100644 src/views/video_manager/video_manager/components/selecting_points.vue diff --git a/public/lib/Cesium/CustomCesium.js b/public/lib/Cesium/CustomCesium.js index 9522293..87bfe83 100644 --- a/public/lib/Cesium/CustomCesium.js +++ b/public/lib/Cesium/CustomCesium.js @@ -127,13 +127,6 @@ var CustomCesium; navigationHelpButton: !1, fullscreenButton: !1 }), this.icy.viewer.scene.mode, Cesium.SceneMode.COLUMBUS_VIEW, this.icy.viewer.scene.screenSpaceCameraController.enableTilt = !0, this.icy.viewer._cesiumWidget._creditContainer.style.display = "none", this.icy.viewer.scene.globe.depthTestAgainstTerrain = !0, this.icy.viewer.scene.sampleHeightSupported || window.alert("浏览器不支持 sampleHeight."), this.icy.viewer.scene.pickPositionSupported || window.alert("不支持深度纹理,无法绘制多边形,地形开挖功能无法使用!"), this.icy.viewer.scene.globe.enableLighting = !1, this.icy.viewer.shadows = !1, this.icy.viewer.scene.globe.fillHighlightColor = 1, this.icy.viewer.scene.postProcessStages.fxaa.enabled = !0, this.fPSShow(!0), this.initMaterial(); - var r = document.createElement("canvas"), n = r.getContext("2d"); - let s = "@%E5%BE%97%E7%91%9E%E7%B4%AB%E8%9C%82"; - r.width = 12 * decodeURIComponent(s).length, r.height = 18, n.fillStyle = "#ffffff00", n.fillRect(0, 0, r.width, r.height), n.fillStyle = "#8500ff20", n.font = "bold 11px Arial", n.textAlign = "right", n.textBaseline = "bottom"; - var a = decodeURIComponent(s); - n.fillText(a, r.width - 2, r.height - 2); - var o = r.toDataURL(), l = document.createElement("img"); - l.src = o, l.style = "position:fixed;z-index:9999999;bottom: 5px;left: 5px", document.body.appendChild(l), window.copyright = decodeURIComponent("%E6%9C%ACSDK%E5%9F%BA%E4%BA%8ECesiumJS%EF%BC%8C%E7%94%B1%EF%BC%9A%E5%8C%97%E4%BA%AC%E5%BE%97%E7%91%9E%E7%B4%AB%E8%9C%82%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%20-%20%E5%86%AF~~%20%E5%B0%81%E8%A3%85") } fPSShow(e) { diff --git a/src/assets/images/map/peoIcon_green.png b/src/assets/images/map/peoIcon_green.png new file mode 100644 index 0000000000000000000000000000000000000000..b6df0674462a51a02733a36b2ce25eef003a38b5 GIT binary patch literal 5970 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
- 完成绘制 - 清除绘制 - 还原建筑 + 完成绘制 + 清除绘制 + 还原建筑 当前选中楼层id:{{ model_id }}
@@ -15,6 +21,7 @@ import { clearEnclosure, handleEnclosure, handleMouseClick, + handlePut, initMap, reduction, showEnclosure, @@ -23,11 +30,21 @@ import { useUserStore } from "@/pinia/user.js"; import { getEnterpriseInfo } from "@/request/enterprise_management.js"; const props = defineProps({ + type: { + type: Number, + required: true, + default: 1, + }, positions: { type: Array, required: true, default: () => [], }, + position: { + type: Array, + required: true, + default: () => [], + }, modUuid: { type: String, required: true, @@ -38,8 +55,12 @@ const userStore = useUserStore(); const CORPINFO_ID = userStore.getUserInfo.CORPINFO_ID; const data = []; const model_id = ref(0); -const emits = defineEmits(["update:positions", "update:modUuid"]); -const { positions, modUuid } = useVModels(props, emits); +const emits = defineEmits([ + "update:positions", + "update:position", + "update:modUuid", +]); +const { positions, position, modUuid } = useVModels(props, emits); const confrim = () => { showEnclosure(data); @@ -55,7 +76,11 @@ onMounted(async () => { const corp = await getEnterpriseInfo({ CORPINFO_ID }); initMap(corp.pd); handleMouseClick(model_id); - handleEnclosure(data); + if (props.type === 1) { + handleEnclosure(data); + } else { + handlePut(position); + } }); onBeforeUnmount(() => { window.$scene = null; diff --git a/src/components/map_tools/map.js b/src/components/map_tools/map.js index 2ca1a01..5e7b951 100644 --- a/src/components/map_tools/map.js +++ b/src/components/map_tools/map.js @@ -5,6 +5,7 @@ let $entityTransparent = []; const clickModel = new Map(); let enclosure = null; +let entities = null; export const initMap = (corp) => { window.$scene = new window.CustomCesium.Scene( "map", @@ -23,7 +24,6 @@ export const initMap = (corp) => { ), }); const [wgsLat, wgsLon] = bd09ToWgs84(corp.LATITUDE, corp.LONGITUDE); - console.log(corp.LATITUDE, corp.LONGITUDE); flyTo(wgsLon, wgsLat); // 亮度设置 const stages = window.$icy.viewer.scene.postProcessStages; @@ -36,17 +36,84 @@ export const initMap = (corp) => { }; const bd09ToWgs84 = (bdLat, bdLon) => { - const pi = Math.PI; - const x_pi = (pi * 3000.0) / 180.0; + const x_pi = (Math.PI * 3000.0) / 180.0; const x = bdLon - 0.0065; const y = bdLat - 0.006; const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); - const wgsLon = z * Math.cos(theta); - const wgsLat = z * Math.sin(theta); + const gcjLon = z * Math.cos(theta); + const gcjLat = z * Math.sin(theta); + + let dlat = transformlat(gcjLon - 105.0, gcjLat - 35.0); + let dlng = transformlng(gcjLon - 105.0, gcjLat - 35.0); + const radlat = (gcjLat / 180.0) * Math.PI; + let magic = Math.sin(radlat); + magic = 1 - 0.006693421622965943 * magic * magic; + const sqrtmagic = Math.sqrt(magic); + dlat = + (dlat * 180.0) / + (((6378245.0 * (1 - 0.006693421622965943)) / (magic * sqrtmagic)) * + Math.PI); + dlng = + (dlng * 180.0) / ((6378245.0 / sqrtmagic) * Math.cos(radlat) * Math.PI); + const mglat = gcjLat + dlat; + const mglng = gcjLon + dlng; + const wgsLon = gcjLon * 2 - mglng; + const wgsLat = gcjLat * 2 - mglat; + return [wgsLat, wgsLon]; }; +const transformlat = (lng, lat) => { + let ret = + -100.0 + + 2.0 * lng + + 3.0 * lat + + 0.2 * lat * lat + + 0.1 * lng * lat + + 0.2 * Math.sqrt(Math.abs(lng)); + ret += + ((20.0 * Math.sin(6.0 * lng * Math.PI) + + 20.0 * Math.sin(2.0 * lng * Math.PI)) * + 2.0) / + 3.0; + ret += + ((20.0 * Math.sin(lat * Math.PI) + 40.0 * Math.sin((lat / 3.0) * Math.PI)) * + 2.0) / + 3.0; + ret += + ((160.0 * Math.sin((lat / 12.0) * Math.PI) + + 320 * Math.sin((lat * Math.PI) / 30.0)) * + 2.0) / + 3.0; + return ret; +}; +// 纬度转换 +const transformlng = (lng, lat) => { + let ret = + 300.0 + + lng + + 2.0 * lat + + 0.1 * lng * lng + + 0.1 * lng * lat + + 0.1 * Math.sqrt(Math.abs(lng)); + ret += + ((20.0 * Math.sin(6.0 * lng * Math.PI) + + 20.0 * Math.sin(2.0 * lng * Math.PI)) * + 2.0) / + 3.0; + ret += + ((20.0 * Math.sin(lng * Math.PI) + 40.0 * Math.sin((lng / 3.0) * Math.PI)) * + 2.0) / + 3.0; + ret += + ((150.0 * Math.sin((lng / 12.0) * Math.PI) + + 300.0 * Math.sin((lng / 30.0) * Math.PI)) * + 2.0) / + 3.0; + return ret; +}; + // eslint-disable-next-line no-unused-vars const flyTo = (lng, lat) => { window.$carmer.flyTo({ @@ -72,7 +139,6 @@ export const handleMouseClick = (model_id) => { $mouse.mouseLeft((model) => { if (model._name === "建筑") { model_id.value = model._id; - console.log(model_id); clickBuilding(model); } }); @@ -226,3 +292,44 @@ export const showEnclosure = (positions) => { ); enclosure.show(true); }; + +export const handlePut = (pos) => { + const $mouse = new window.CustomCesium.Mouse(window.$icy); + $mouse.mouseRight((e) => { + if (entities && entities.children) { + entities.children.forEach((e) => { + e.destroy(); + }); + entities = null; + } + entities = new window.CustomCesium.GroupModel("摆放地图实例"); + addEntity("put_entity_00001", "put_entity_00001", e.lng, e.lat, e.alt); + pos.value = [e.lng, e.lat, e.alt]; + }); +}; + +const addEntity = (id, name, lon, lat, height) => { + const obj = {}; + obj.entity = window.$icy.viewer.entities.add( + new window.Cesium.Entity({ + id, + name, + position: window.Cesium.Cartesian3.fromDegrees(lon, lat, height), + billboard: { + image: "src/assets/images/map/peoIcon_green.png", + height: 36, + width: 30, + verticalOrigin: window.Cesium.VerticalOrigin.BOTTOM, + horizontalOrigin: window.Cesium.HorizontalOrigin.CENTER, + disableDepthTestDistance: Number.POSITIVE_INFINITY, + }, + }) + ); + obj.show = (e) => { + obj.entity.show = e; + }; + obj.destroy = () => { + window.$icy.viewer.entities.remove(obj.entity); + }; + entities.add(obj); +}; diff --git a/src/request/map_settings.js b/src/request/map_settings.js index eb33b12..a19aa2e 100644 --- a/src/request/map_settings.js +++ b/src/request/map_settings.js @@ -29,3 +29,5 @@ export const getPathPlanningList = (params) => post("/positAlarm/coordinateLine/tree", params); // 路径规划列表 export const setPathPlanningDelete = (params) => post("/positAlarm/coordinateLine/batchDelete", params); // 路径规划删除 +export const setPositioning = (params) => + post("/videomanager/setPositioning", params); // 摆放摄像头 diff --git a/src/views/BI/js/map.js b/src/views/BI/js/map.js index 553eab1..f8eb1b7 100644 --- a/src/views/BI/js/map.js +++ b/src/views/BI/js/map.js @@ -49,17 +49,84 @@ export const initMap = (corp) => { }; const bd09ToWgs84 = (bdLat, bdLon) => { - const pi = Math.PI; - const x_pi = (pi * 3000.0) / 180.0; + const x_pi = (Math.PI * 3000.0) / 180.0; const x = bdLon - 0.0065; const y = bdLat - 0.006; const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); - const wgsLon = z * Math.cos(theta); - const wgsLat = z * Math.sin(theta); + const gcjLon = z * Math.cos(theta); + const gcjLat = z * Math.sin(theta); + + let dlat = transformlat(gcjLon - 105.0, gcjLat - 35.0); + let dlng = transformlng(gcjLon - 105.0, gcjLat - 35.0); + const radlat = (gcjLat / 180.0) * Math.PI; + let magic = Math.sin(radlat); + magic = 1 - 0.006693421622965943 * magic * magic; + const sqrtmagic = Math.sqrt(magic); + dlat = + (dlat * 180.0) / + (((6378245.0 * (1 - 0.006693421622965943)) / (magic * sqrtmagic)) * + Math.PI); + dlng = + (dlng * 180.0) / ((6378245.0 / sqrtmagic) * Math.cos(radlat) * Math.PI); + const mglat = gcjLat + dlat; + const mglng = gcjLon + dlng; + const wgsLon = gcjLon * 2 - mglng; + const wgsLat = gcjLat * 2 - mglat; + return [wgsLat, wgsLon]; }; +const transformlat = (lng, lat) => { + let ret = + -100.0 + + 2.0 * lng + + 3.0 * lat + + 0.2 * lat * lat + + 0.1 * lng * lat + + 0.2 * Math.sqrt(Math.abs(lng)); + ret += + ((20.0 * Math.sin(6.0 * lng * Math.PI) + + 20.0 * Math.sin(2.0 * lng * Math.PI)) * + 2.0) / + 3.0; + ret += + ((20.0 * Math.sin(lat * Math.PI) + 40.0 * Math.sin((lat / 3.0) * Math.PI)) * + 2.0) / + 3.0; + ret += + ((160.0 * Math.sin((lat / 12.0) * Math.PI) + + 320 * Math.sin((lat * Math.PI) / 30.0)) * + 2.0) / + 3.0; + return ret; +}; +// 纬度转换 +const transformlng = (lng, lat) => { + let ret = + 300.0 + + lng + + 2.0 * lat + + 0.1 * lng * lng + + 0.1 * lng * lat + + 0.1 * Math.sqrt(Math.abs(lng)); + ret += + ((20.0 * Math.sin(6.0 * lng * Math.PI) + + 20.0 * Math.sin(2.0 * lng * Math.PI)) * + 2.0) / + 3.0; + ret += + ((20.0 * Math.sin(lng * Math.PI) + 40.0 * Math.sin((lng / 3.0) * Math.PI)) * + 2.0) / + 3.0; + ret += + ((150.0 * Math.sin((lng / 12.0) * Math.PI) + + 300.0 * Math.sin((lng / 30.0) * Math.PI)) * + 2.0) / + 3.0; + return ret; +}; + // eslint-disable-next-line no-unused-vars const flyTo = (lng, lat) => { window.$carmer.flyTo({ diff --git a/src/views/video_manager/video_manager/components/selecting_points.vue b/src/views/video_manager/video_manager/components/selecting_points.vue new file mode 100644 index 0000000..4b4a939 --- /dev/null +++ b/src/views/video_manager/video_manager/components/selecting_points.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/video_manager/video_manager/index.vue b/src/views/video_manager/video_manager/index.vue index 380fe61..db4ecda 100644 --- a/src/views/video_manager/video_manager/index.vue +++ b/src/views/video_manager/video_manager/index.vue @@ -58,7 +58,12 @@ > 修改 - + 定位 @@ -90,6 +95,11 @@ v-model:visible="data.videoDialog.visible" :src="data.videoDialog.src" /> + @@ -107,6 +117,7 @@ import { nextTick, reactive } from "vue"; import { ElMessage, ElMessageBox } from "element-plus"; import VideoView from "./components/video.vue"; import { setVideoManagerList } from "@/request/eightwork_videomanager.js"; +import SelectingPoints from "./components/selecting_points.vue"; const data = reactive({ addDialog: { @@ -122,6 +133,10 @@ const data = reactive({ visible: false, src: "", }, + selectingPointsDialog: { + id: "", + visible: false, + }, }); const { list, pagination, searchForm, fnGetData, fnResetPagination } = @@ -152,9 +167,9 @@ const fnAddOrEdit = async (VIDEOMANAGER_ID, type) => { data.addDialog.form = resData.pd; } }; -const fnSetPositioning = async () => { - // 接口路径 /videomanager/setPositioning - // 参数 {"camId":1,"lon":119.44794324054146,"lat":39.91841473114172,"alt":12.189401230148036} +const fnSetPositioning = async (id) => { + data.selectingPointsDialog.id = id; + data.selectingPointsDialog.visible = true; }; const fnUpToBi = async (VIDEOMANAGER_ID) => { await ElMessageBox.confirm("确定要置顶吗?置顶后将会默认展示在Bi页", {