媒体库-地图图片路径-地图上的缩略图、飞行图标和右侧图片展示按照云台偏航角和坐标变化进行偏转

main
滕嵩 1 month ago
parent f2d4f79677
commit e93724ece6

@ -115,29 +115,6 @@
<EditOutlined @click="renameRecord(record)" />
</a-button>
</a-tooltip>
<!-- <a-tooltip placement="top">
<template #title>
<span>
{{ record.showOnMap == 1 ? '在地图上取消加载' : '在地图上加载' }}
</span>
</template>
<a-button
type="text"
v-if="record.objectKey && record.objectKey.includes('.jpeg')"
@click="funShowOnMap(record)"
>
<div
v-if="record.showOnMap == 1"
class="svg-container"
v-html="svg_showOnMap_1"
/>
<div
v-if="record.showOnMap != 1"
class="svg-container"
v-html="svg_showOnMap_0"
/>
</a-button>
</a-tooltip> -->
<a-tooltip placement="top">
<template #title>
<div>查看地图图片历史路径</div>
@ -555,9 +532,11 @@
...searchParams.value,
parentKey: nowParentKey.value,
page: 1,
limit: 100,
limit: 1000,
}).then((res) => {
previewRecordList.value = uniqueByKey(res.items, nowPreviewRecord.value);
previewRecordList.value = uniqueByKey(res.items, nowPreviewRecord.value).sort((a, b) => {
return dayjs(a.createTime) - dayjs(b.createTime);
});
nowPreviewRecord.value = getDataSource().find(
(item) => item.id == nowPreviewRecord.value.id,
);
@ -653,7 +632,9 @@
}).then((res) => {
nowPreviewRecord.value = record;
//
previewRecordList.value = uniqueByKey(res.items, record);
previewRecordList.value = uniqueByKey(res.items, record).sort((a, b) => {
return dayjs(a.createTime) - dayjs(b.createTime);
});
open.value = true;
});
}
@ -744,6 +725,9 @@
allImageDataList.value = res.items.filter(
(item) => item.objectKey && item.objectKey.includes('.jpeg'),
);
allImageDataList.value = allImageDataList.value.sort((a, b) => {
return dayjs(a.createTime) - dayjs(b.createTime);
});
allImageDataList.value.forEach((arr) => {
if (arr.fileTags) {
arr.fileTags = JSON.parse(arr.fileTags);

@ -46,7 +46,7 @@
</div>
</div>
<!-- 标签 -->
<div class="tags">
<div class="tagsDiv">
<a-tag color="success" v-for="tag in props.nowShowImageData.fileTags" :key="tag">
{{ tag }}
</a-tag>
@ -105,7 +105,7 @@
v-if="!hideOrShowGraffitiFlag"
style="color: #595959"
/>
<div style="position: absolute; bottom: -12px; right: -5px; pointer-events: none">
<div style="position: absolute; bottom: -10px; right: -5px; pointer-events: none">
<div
v-html="
`${
@ -119,6 +119,11 @@
</a-tooltip>
</div>
</div>
<!-- 退出涂鸦 -->
<div class="escTip" v-if="graffitiFlag">
<div class="whiteEsc">Esc</div>
<div class="blackTip">退出涂鸦</div>
</div>
<!-- 图片部分 -->
<div id="imageDiv" class="imageDiv" style="overflow: hidden">
@ -371,16 +376,21 @@
/>
</div>
</div>
<!-- 云台偏航角查看图片 -->
<div class="rimbalGawDegreeButton" @click="rotateGimbalYawDegree">
<a-tooltip placement="left">
<template #title>
<span> {{ rimbalGawDegreeFlag ? '正常查看图片' : '云台偏航角查看图片' }}</span>
</template>
<InstagramOutlined v-if="!rimbalGawDegreeFlag" style="color: #3c3c3c; font-size: 25px" />
<FileImageOutlined v-if="rimbalGawDegreeFlag" style="color: #3c3c3c; font-size: 25px" />
</a-tooltip>
</div>
<!-- 全屏 -->
<div class="expandButton" @click="clickExpandButton">
<ExpandOutlined v-if="!fullscreenFlag" style="color: #3c3c3c; font-size: 25px" />
<CompressOutlined v-if="fullscreenFlag" style="color: #3c3c3c; font-size: 25px" />
</div>
<!-- 退出涂鸦 -->
<div class="escTip" v-if="graffitiFlag">
<div class="whiteEsc">Esc</div>
<div class="blackTip">退出涂鸦</div>
</div>
</div>
<!-- 底部按钮和图片列表 -->
<div class="bottomDiv">
@ -430,15 +440,6 @@
<RotateLeftOutlined @click="rotateCounterClockwise" />
</a-tooltip>
</div>
<!-- 云台偏航角查看图片 -->
<!-- <div class="button">
<a-tooltip placement="top">
<template #title>
<span>云台偏航角查看图片</span>
</template>
<InstagramOutlined @click="rotateGimbalYawDegree" />
</a-tooltip>
</div> -->
<!-- 刷新 -->
<div class="button">
<a-tooltip placement="top">
@ -457,50 +458,6 @@
<AimOutlined @click="handlerLocation" />
</a-tooltip>
</div>
<!-- 加载到地图上 -->
<!-- <div class="button2">
<a-popconfirm
placement="top"
title="您是否将该照片在地图上取消加载?取消后照片将不在地图上显示。"
ok-text="确认"
cancel-text="取消"
@confirm="funShowOnMap"
>
<a-tooltip placement="top">
<template #title>
<span>
{{ props.nowShowImageData.showOnMap == 1 ? '在地图上取消加载' : '在地图上加载' }}
</span>
</template>
<svg
v-if="props.nowShowImageData.showOnMap == 1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="25"
height="25"
>
<path
d="M19 5v11.17l2 2V5c0-1.1-.9-2-2-2H5.83l2 2H19zM2.81 2.81L1.39 4.22L3 5.83V19c0 1.1.9 2 2 2h13.17l1.61 1.61l1.41-1.41L2.81 2.81zM5 19V7.83l7.07 7.07l-.82 1.1L9 13l-3 4h8.17l2 2H5z"
fill="#ffffff"
></path>
</svg>
<svg
v-if="props.nowShowImageData.showOnMap != 1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="25"
height="25"
>
<path
d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14L6 17h12l-3.86-5.14z"
fill="#ffffff"
></path>
</svg>
</a-tooltip>
</a-popconfirm>
</div> -->
</div>
<div class="imageChooseList">
<div
@ -605,6 +562,7 @@
ClockCircleOutlined,
PlusSquareOutlined,
InstagramOutlined,
FileImageOutlined,
} from '@ant-design/icons-vue';
import dayjs from 'dayjs';
import { UpdatePicStatus, UpdatePicName } from '@/api/demo/mediaLibrary';
@ -627,10 +585,12 @@
// --------------------------------
const focusInputRef = ref();
const editNameFlag = ref(true);
const editName = ref(props.nowShowImageData.name.split('.').slice(0, -1).join('.'));
const editName = ref();
function editNameChange() {
if (props.nowShowImageData.name.split('.').length <= 1) {
editName.value = props.nowShowImageData.name;
} else {
editName.value = props.nowShowImageData.name.split('.').slice(0, -1).join('.');
}
setTimeout(() => {
if (focusInputRef.value && focusInputRef.value.focus) {
@ -734,8 +694,18 @@
rotationAngle.value -= 90; // -90
}
//
const rimbalGawDegreeFlag = ref(true);
function rotateGimbalYawDegree() {
rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
if (!graffitiFlag.value) {
rimbalGawDegreeFlag.value = !rimbalGawDegreeFlag.value;
if (rimbalGawDegreeFlag.value) {
rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
} else {
rotationAngle.value = 0;
}
} else {
createMessage.warn('涂鸦状态下不能使用云台偏航角查看图片');
}
}
//
@ -780,8 +750,12 @@
//
function refresh() {
scale.value = 0.9;
rotationAngle.value = 0;
// graffitiFlag.value = false;
//
if (rimbalGawDegreeFlag.value) {
rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
} else {
rotationAngle.value = 0;
}
getImageWidthAndHeight();
//
const dragDocument: any = document.querySelector('.dragModal');
@ -795,37 +769,30 @@
function handlerLocation() {
emits('handlerLocation', props.nowShowImageData);
}
// //
// function funShowOnMap() {
// if (props.nowShowImageData.showOnMap == 1) {
// props.nowShowImageData.showOnMap = 0;
// } else {
// props.nowShowImageData.showOnMap = 1;
// }
// UpdatePicStatus({
// id: props.nowShowImageData.id,
// fileTags: JSON.stringify(fileTags.value),
// graffitiJson: JSON.stringify(graffitis.value),
// display: props.nowShowImageData.display,
// showOnMap: props.nowShowImageData.showOnMap,
// }).then((res) => {
// if (props.nowShowImageData.showOnMap == 1) {
// createMessage.success('');
// } else {
// createMessage.success('');
// }
// emits('funUpdateDisplayOrShowOnMapData', props.nowShowImageData);
// emits('handleSuccessPath', props.nowShowImageData);
// });
// }
// -----------------------------------------------
function setNowShowImageData(value) {
emits('setNowShowImageData', value);
function setNowShowImageData(chooseValue) {
emits('setNowShowImageData', chooseValue);
graffitiFlag.value = false;
refresh();
}
//
function setScrollLeft() {
const imageChooseListDocument: any = document.querySelector('.imageChooseList');
if (imageChooseListDocument) {
let index = props.allImageDataList.findIndex((item) => item.id == props.nowShowImageData.id);
let length = props.allImageDataList.length;
if (index < 5) {
imageChooseListDocument.scrollLeft = 0;
} else if (index + 6 > length) {
imageChooseListDocument.scrollLeft = 95 * length;
} else {
imageChooseListDocument.scrollLeft = 95 * (index - 4);
}
}
}
// or-------------------------------------------------
// or
const graffitiFlag = ref(false);
@ -833,6 +800,9 @@
function setGraffiti() {
refresh();
graffitiFlag.value = !graffitiFlag.value;
//
rimbalGawDegreeFlag.value = false;
rotationAngle.value = 0;
if (graffitiFlag.value) {
document.body.style.cursor = 'crosshair';
} else {
@ -855,7 +825,12 @@
? props.nowShowImageData.graffitiJson
: [];
fileTags.value = props.nowShowImageData.fileTags ? props.nowShowImageData.fileTags : [];
// rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
if (rimbalGawDegreeFlag.value) {
rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
}
//
setScrollLeft();
editNameFlag.value = true;
},
{
deep: true,
@ -863,6 +838,11 @@
},
);
onMounted(() => {
//
setScrollLeft();
});
//
function addFileTagsChange() {
addFileTagsFlag.value = true;
@ -1259,6 +1239,22 @@
height: calc(100% - 120px);
background: #101010;
//
.rimbalGawDegreeButton {
position: absolute;
right: 25px;
bottom: 12%;
z-index: 200;
background: #ffffff;
border-radius: 5px;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
}
//
.expandButton {
position: absolute;
@ -1359,7 +1355,7 @@
//
.titleDiv {
position: absolute;
top: 15px;
top: 1%;
left: 20px;
height: 80px;
width: 80%;
@ -1374,18 +1370,20 @@
color: #ffffff;
}
.titleTime {
margin-top: 5px;
font-size: 16px;
color: #ffffff;
}
.titleCoordinate {
margin-top: 5px;
font-size: 16px;
color: #ffffff;
}
}
//
.tags {
.tagsDiv {
position: absolute;
top: 105px;
top: 11%;
left: 20px;
height: 20px;
width: 80%;
@ -1509,11 +1507,12 @@
.escTip {
position: absolute;
left: 0%;
bottom: 100px;
bottom: 120px;
width: 120px;
height: 40px;
background: #9c9c9c77;
border-radius: 5px;
z-index: 1001;
display: flex;
align-items: center;

@ -41,8 +41,6 @@
isAutoEditing: true,
});
//
// -
// let bottomPointGraphicData: any = [];
// -
let flightointGraphicData: any = [];
// -线
@ -283,7 +281,17 @@
map.addLayer(graphicLayers);
//
showAllImageDataList();
handlerLocation([118.2958779, 35.1342553]);
let lngList = props.allImageDataList.map((item) => item.lng);
let latList = props.allImageDataList.map((item) => item.lat);
let maxLng = Math.max(...lngList);
let minLng = Math.min(...lngList);
let maxLat = Math.max(...latList);
let minLat = Math.min(...latList);
handlerLocation([(maxLng + minLng) / 2, (maxLat + minLat) / 2 - 0.002], {
height: 300,
heading: 0,
pitch: -45,
});
}
};
@ -291,16 +299,6 @@
() => props.updateDisplayOrShowOnMapData,
(newValue) => {
if (newValue) {
// -
// bottomPointGraphicData.forEach((graphicLayer) => {
// if (graphicLayer.options.id == newValue.id + '_bottom') {
// if (newValue.showOnMap == 1) {
// graphicLayer.show = newValue.display == 1 ? true : false;
// } else {
// graphicLayers.removeGraphic(graphicLayer);
// }
// }
// });
// -
flightointGraphicData.forEach((graphicLayer) => {
if (graphicLayer.options.id == newValue.id + '_flight') {
@ -337,9 +335,6 @@
// --
const showAllImageDataList = async () => {
//
// bottomPointGraphicData?.forEach((graphicLayer) => {
// graphicLayers.removeGraphic(graphicLayer);
// });
flightointGraphicData?.forEach((graphicLayer) => {
graphicLayers.removeGraphic(graphicLayer);
});
@ -350,258 +345,281 @@
graphicLayers.removeGraphic(graphicLayer);
});
//
// bottomPointGraphicData = [];
flightointGraphicData = [];
bottomImagePolylineGraphicData = [];
imageGraphicData = [];
// -
let rotation = 0;
props.allImageDataList.forEach((item, index) => {
if (item.lng && item.lat && item.absoluteAltitude) {
const image = new Image();
image.crossOrigin = 'Anonymous';
if (item.minipic) {
image.src = VITE_GLOB_MEDIALIBRARY_IMAGE_URL + item.minipic;
} else {
image.src =
'https://m.tuniucdn.com/fb2/t1/G5/M00/44/52/Cii-s1soezyIF2UxABn76u-yKl8AAIwBgB34jAAGfwC3020871';
}
image.onload = () => {
// Canvas
const canvas = document.createElement('canvas');
canvas.width = 34;
canvas.height = 29;
// Canvas
const ctx = canvas.getContext('2d');
ctx.fillStyle = 'white';
ctx?.fillRect(0, 0, canvas.width, canvas.height);
// Canvas
ctx.drawImage(image, 2, 2, 30, 25);
// CanvasURL
const dataURL1 = canvas.toDataURL('image/png');
//
let flightRotation = 0;
let flightMapRotation = 0;
const flightimage = new Image();
flightimage.crossOrigin = 'Anonymous';
flightimage.src = '/src/assets/images/flightoperation/mediaLibraryFlight.png';
flightimage.onload = () => {
// -
props.allImageDataList.forEach((item, index) => {
if (item.lng && item.lat && item.absoluteAltitude) {
const image = new Image();
image.crossOrigin = 'Anonymous';
if (item.minipic) {
image.src = VITE_GLOB_MEDIALIBRARY_IMAGE_URL + item.minipic;
} else {
image.src =
'https://m.tuniucdn.com/fb2/t1/G5/M00/44/52/Cii-s1soezyIF2UxABn76u-yKl8AAIwBgB34jAAGfwC3020871';
}
image.onload = () => {
// Canvas
const canvas = document.createElement('canvas');
canvas.width = 34;
canvas.height = 29;
// Canvas
const ctx = canvas.getContext('2d');
ctx.fillStyle = '#ffffff00';
ctx?.fillRect(0, 0, canvas.width, canvas.height);
// CanvasimageImage
ctx.drawImage(image, 2, 2, 30, 25);
//
ctx.strokeStyle = '#2d8cef'; //
ctx.lineWidth = 1; //
//
ctx.strokeRect(0.5, 0.5, canvas.width - 1, canvas.height - 1); //
// CanvasURL
const dataURL2 = canvas.toDataURL('image/png');
//
let position = [
parseFloat(item.lng),
parseFloat(item.lat),
parseFloat(item.absoluteAltitude),
];
//
mars3d.PointUtil.getSurfaceHeight(
map.scene,
Cesium.Cartesian3.fromDegrees(position[0], position[1]),
).then((point) => {
//
// let bottomPointGraphic = new mars3d.graphic.BillboardEntity({
// id: item.id + '_bottom',
// position: [position[0], position[1], point.height],
// style: {
// image: '/src/assets/images/flightoperation/mediaLibraryPoint.png',
// clampToGround: true,
// scale: 1,
// verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
// },
// hasEdit: false,
// show: item.display == 1 ? true : false,
// });
//
ctx.save();
const centerX = canvas.width / 2;
const centerY = canvas.height / 2;
ctx.translate(centerX, centerY);
const angleInRadians = (Math.PI / 180) * (parseFloat(item.gimbalYawDegree) + 180); //
ctx.rotate(angleInRadians);
ctx.drawImage(image, 2 - centerX, 2 - centerY, 30, 25);
ctx.restore();
// -
if (index + 1 < props.allImageDataList.length) {
const afterItem = props.allImageDataList[index + 1];
let lng = afterItem.lng - item.lng;
let lat = afterItem.lat - item.lat;
let angleARad = Math.atan(lng / lat);
let angleA = (angleARad * 180) / Math.PI;
rotation = angleA;
let dLng = afterItem.lng - item.lng;
let dLat = afterItem.lat - item.lat;
// 使 atan2
let angleRad = Math.atan2(dLat, dLng);
let angleDeg = Cesium.Math.toDegrees(angleRad);
let angleA = ((Math.PI / 180) * (90 - angleDeg + 360)) % 360;
flightRotation = angleA;
flightMapRotation = angleDeg;
}
//
let flightointGraphic = new mars3d.graphic.BillboardEntity({
id: item.id + '_flight',
position: [position[0], position[1], position[2] * 2],
style: {
image: '/src/assets/images/flightoperation/mediaLibraryFlight.png',
clampToGround: false,
scale: 1,
verticalOrigin: Cesium.VerticalOrigin.CENTER,
rotation: rotation,
},
hasEdit: false,
show: false,
});
// 线
let bottomImagePolylineGraphic = new mars3d.graphic.PolylineEntity({
id: item.id + '_polyline',
positions: [
Cesium.Cartesian3.fromDegrees(position[0], position[1], point.height),
Cesium.Cartesian3.fromDegrees(position[0], position[1], position[2]),
],
style: {
color: '#ffffff',
width: 1, // 线
clampToGround: false,
},
hasEdit: false,
show: item.display == 1 ? true : false,
//
defaultPosition: position,
//
surfaceHeight: point.height,
});
//
let imageGraphic = new mars3d.graphic.BillboardEntity({
id: item.id + '_image',
position: [position[0], position[1], position[2]],
style: {
image: dataURL1,
clampToGround: false,
scale: 1,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
label: {
text: `${item.name}`,
font_size: 14,
color: '#2d8cf0',
outline: true,
outlineColor: '#ffffff',
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
pixelOffset: [25, -5],
show: false,
ctx.save();
const imgWAndH = 15;
ctx.translate(18 + imgWAndH / 2, imgWAndH / 2);
ctx.rotate(flightRotation);
ctx.drawImage(flightimage, -imgWAndH / 2, -imgWAndH / 2, imgWAndH, imgWAndH);
ctx.restore();
// 1
ctx.save();
ctx.strokeStyle = '#ffffff';
ctx.lineWidth = 1;
ctx.strokeRect(1, 1, canvas.width - 2, canvas.height - 2);
const dataURL1 = canvas.toDataURL('image/png');
ctx.restore();
// 2
ctx.strokeStyle = '#2d8cef';
ctx.lineWidth = 1;
ctx.strokeRect(1, 1, canvas.width - 2, canvas.height - 2);
const dataURL2 = canvas.toDataURL('image/png');
//
let position = [
parseFloat(item.lng),
parseFloat(item.lat),
parseFloat(item.absoluteAltitude),
];
//
mars3d.PointUtil.getSurfaceHeight(
map.scene,
Cesium.Cartesian3.fromDegrees(position[0], position[1]),
).then((point) => {
//
let flightointGraphic = new mars3d.graphic.BillboardEntity({
id: item.id + '_flight',
position: [position[0], position[1], position[2]],
style: {
image: '/src/assets/images/flightoperation/mediaLibraryFlight.png',
clampToGround: false,
verticalOrigin: Cesium.VerticalOrigin.CENTER,
rotation: ((Math.PI / 180) * (flightMapRotation + 270)) % 360,
},
},
hasEdit: false,
show: item.display == 1 ? true : false,
//
defaultImage: dataURL1,
//
chooseImage: dataURL2,
});
// mouseover
imageGraphic.on(mars3d.EventType.mouseOver, function () {
if (!props.nowShowImageData || props.nowShowImageData.id !== item.id) {
//
imageGraphic.setStyle({
image: dataURL2,
scale: 1.1,
label: {
show: true,
},
});
}
});
// mouseout
imageGraphic.on(mars3d.EventType.mouseOut, function () {
if (!props.nowShowImageData || props.nowShowImageData.id !== item.id) {
//
imageGraphic.setStyle({
hasEdit: false,
show: false,
});
// 线
let bottomImagePolylineGraphic = new mars3d.graphic.PolylineEntity({
id: item.id + '_polyline',
positions: [
Cesium.Cartesian3.fromDegrees(position[0], position[1], point.height),
Cesium.Cartesian3.fromDegrees(
position[0],
position[1],
point.height + (position[2] - point.height) / 10,
),
],
style: {
color: '#ffffff',
width: 1, // 线
clampToGround: false,
},
hasEdit: false,
show: item.display == 1 ? true : false,
//
defaultPosition: position,
//
surfaceHeight: point.height,
});
//
let imageGraphic = new mars3d.graphic.BillboardEntity({
id: item.id + '_image',
position: [
position[0],
position[1],
point.height + (position[2] - point.height) / 10,
],
style: {
image: dataURL1,
clampToGround: false,
scale: 1,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
label: {
text: `${item.name}`,
font_size: 16,
color: '#ffffff',
outline: true,
outlineWidth: 4,
outlineColor: '#000000',
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
pixelOffset: [25, -5],
show: false,
},
});
}
});
//
imageGraphic.on(mars3d.EventType.click, function () {
//
if (props.nowShowImageData && props.nowShowImageData.id == item.id) {
//
imageRestoreDefault();
emits('setNowShowImageData', {});
} else if (!props.nowShowImageData || props.nowShowImageData.id !== item.id) {
//
//
imageRestoreDefault();
//
// PolylineEntity
bottomImagePolylineGraphic.positions = [
Cesium.Cartesian3.fromDegrees(position[0], position[1], point.height),
Cesium.Cartesian3.fromDegrees(position[0], position[1], position[2] * 2),
];
// PolylineEntity
bottomImagePolylineGraphic.setStyle({
color: '#2d8cf0',
});
//
flightointGraphic.show = true;
//
imageGraphic.setStyle({
image: dataURL2,
label: {
show: true,
},
});
emits('setNowShowImageData', item);
}
});
//
// graphicLayers.addGraphic(bottomPointGraphic);
//
graphicLayers.addGraphic(flightointGraphic);
// 线
graphicLayers.addGraphic(bottomImagePolylineGraphic);
//
graphicLayers.addGraphic(imageGraphic);
//
// bottomPointGraphicData.push(bottomPointGraphic);
flightointGraphicData.push(flightointGraphic);
bottomImagePolylineGraphicData.push(bottomImagePolylineGraphic);
imageGraphicData.push(imageGraphic);
//
if (props.nowShowImageData && props.nowShowImageData.id) {
//
flightointGraphicData?.forEach((graphicLayer) => {
if (props.nowShowImageData.id + '_flight' == graphicLayer.options.id) {
graphicLayer.show = true;
},
hasEdit: false,
show: item.display == 1 ? true : false,
//
defaultImage: dataURL1,
//
chooseImage: dataURL2,
});
// mouseover
imageGraphic.on(mars3d.EventType.mouseOver, function () {
if (!props.nowShowImageData || props.nowShowImageData.id !== item.id) {
//
imageGraphic.setStyle({
image: dataURL2,
scale: 1.3,
label: {
show: true,
},
});
}
});
// 线
bottomImagePolylineGraphicData?.forEach((graphicLayer) => {
if (props.nowShowImageData.id + '_polyline' == graphicLayer.options.id) {
let defaultPosition = graphicLayer.options.defaultPosition;
let surfaceHeight = graphicLayer.options.surfaceHeight;
graphicLayer.positions = [
Cesium.Cartesian3.fromDegrees(
defaultPosition[0],
defaultPosition[1],
surfaceHeight,
),
Cesium.Cartesian3.fromDegrees(
defaultPosition[0],
defaultPosition[1],
defaultPosition[2] * 2,
),
];
graphicLayer.setStyle({
color: '#2d8cf0',
// mouseout
imageGraphic.on(mars3d.EventType.mouseOut, function () {
if (!props.nowShowImageData || props.nowShowImageData.id !== item.id) {
//
imageGraphic.setStyle({
image: dataURL1,
scale: 1,
label: {
show: false,
},
});
}
});
//
imageGraphicData?.forEach((graphicLayer) => {
if (props.nowShowImageData.id + '_image' == graphicLayer.options.id) {
graphicLayer.setStyle({
image: graphicLayer.options.chooseImage,
//
imageGraphic.on(mars3d.EventType.click, function () {
//
// if (props.nowShowImageData && props.nowShowImageData.id == item.id) {
// //
// imageRestoreDefault();
// emits('setNowShowImageData', {});
// } else
if (!props.nowShowImageData || props.nowShowImageData.id !== item.id) {
//
//
imageRestoreDefault();
//
// PolylineEntity
bottomImagePolylineGraphic.positions = [
Cesium.Cartesian3.fromDegrees(position[0], position[1], point.height),
Cesium.Cartesian3.fromDegrees(position[0], position[1], position[2]),
];
// PolylineEntity
bottomImagePolylineGraphic.setStyle({
color: '#2d8cf0',
});
//
flightointGraphic.show = true;
//
imageGraphic.setStyle({
image: dataURL2,
scale: 1.3,
label: {
show: true,
},
});
emits('setNowShowImageData', item);
}
});
}
});
};
}
});
//
graphicLayers.addGraphic(flightointGraphic);
// 线
graphicLayers.addGraphic(bottomImagePolylineGraphic);
//
graphicLayers.addGraphic(imageGraphic);
//
flightointGraphicData.push(flightointGraphic);
bottomImagePolylineGraphicData.push(bottomImagePolylineGraphic);
imageGraphicData.push(imageGraphic);
//
if (props.nowShowImageData && props.nowShowImageData.id) {
//
flightointGraphicData?.forEach((graphicLayer) => {
if (props.nowShowImageData.id + '_flight' == graphicLayer.options.id) {
graphicLayer.show = true;
}
});
// 线
bottomImagePolylineGraphicData?.forEach((graphicLayer) => {
if (props.nowShowImageData.id + '_polyline' == graphicLayer.options.id) {
let defaultPosition = graphicLayer.options.defaultPosition;
let surfaceHeight = graphicLayer.options.surfaceHeight;
graphicLayer.positions = [
Cesium.Cartesian3.fromDegrees(
defaultPosition[0],
defaultPosition[1],
surfaceHeight,
),
Cesium.Cartesian3.fromDegrees(
defaultPosition[0],
defaultPosition[1],
defaultPosition[2],
),
];
graphicLayer.setStyle({
color: '#2d8cf0',
});
}
});
//
imageGraphicData?.forEach((graphicLayer) => {
if (props.nowShowImageData.id + '_image' == graphicLayer.options.id) {
graphicLayer.setStyle({
image: graphicLayer.options.chooseImage,
scale: 1.3,
label: {
show: true,
},
});
}
});
}
});
};
}
});
};
};
// -
@ -621,7 +639,11 @@
});
bottomImagePolylineGraphic.positions = [
Cesium.Cartesian3.fromDegrees(defaultPosition[0], defaultPosition[1], surfaceHeight),
Cesium.Cartesian3.fromDegrees(defaultPosition[0], defaultPosition[1], defaultPosition[2]),
Cesium.Cartesian3.fromDegrees(
defaultPosition[0],
defaultPosition[1],
surfaceHeight + (defaultPosition[2] - surfaceHeight) / 10,
),
];
}
//
@ -663,7 +685,7 @@
Cesium.Cartesian3.fromDegrees(
defaultPosition[0],
defaultPosition[1],
defaultPosition[2] * 2,
defaultPosition[2],
),
];
}
@ -675,6 +697,7 @@
let chooseImage = imageGraphic.options.chooseImage;
imageGraphic.setStyle({
image: chooseImage,
scale: 1.3,
label: {
show: true,
},
@ -685,9 +708,23 @@
}
//
const handlerLocation = (lngLat) => {
const position = Cesium.Cartesian3.fromDegrees(lngLat[0], lngLat[1]);
map.flyToPoint(position);
const handlerLocation = (lngLat, options: any = {}) => {
const { height, heading, pitch } = options;
if (height) {
const destination = Cesium.Cartesian3.fromDegrees(lngLat[0], lngLat[1], height);
map.camera.flyTo({
destination: destination,
orientation: {
heading: Cesium.Math.toRadians(heading),
pitch: Cesium.Math.toRadians(pitch),
roll: 0.0,
},
duration: 1.0,
});
} else {
const position = Cesium.Cartesian3.fromDegrees(lngLat[0], lngLat[1], 150);
map.flyToPoint(position);
}
};
defineExpose({

@ -390,7 +390,7 @@
</a-tooltip>
</div>
</div>
<div class="imageList">
<div class="imageChooseList">
<div v-for="li in props.previewRecordList" :key="li.id" @click="chooseNowPreviewRecord(li)">
<div
v-if="li.objectKey"
@ -798,12 +798,34 @@
? props.nowPreviewRecord.graffitiJson
: [];
fileTags.value = props.nowPreviewRecord.fileTags ? props.nowPreviewRecord.fileTags : [];
//
setScrollLeft();
},
{
deep: true,
immediate: true,
},
);
onMounted(() => {
//
setScrollLeft();
});
//
function setScrollLeft() {
const imageChooseListDocument: any = document.querySelector('.imageChooseList');
if (imageChooseListDocument) {
let index = props.previewRecordList.findIndex((item) => item.id == props.nowPreviewRecord.id);
let length = props.previewRecordList.length;
if (index < 5) {
imageChooseListDocument.scrollLeft = 0;
} else if (index + 7 > length) {
imageChooseListDocument.scrollLeft = 80 * length;
} else {
imageChooseListDocument.scrollLeft = 80 * (index - 5);
}
}
}
//
function addGraffiti() {
@ -1174,7 +1196,7 @@
}
}
.imageList {
.imageChooseList {
display: inline-flex;
align-items: center;
// justify-content: center;
@ -1198,11 +1220,11 @@
}
}
.imageList::-webkit-scrollbar {
.imageChooseList::-webkit-scrollbar {
display: block;
height: 2px;
}
.imageList {
.imageChooseList {
scrollbar-width: auto;
scrollbar-color: #888 #f1f1f100;
}

Loading…
Cancel
Save