Слияние кода завершено, страница обновится автоматически
Как предотвратить исчезновение линий между землёй и дроном.
/* eslint-disable @typescript-eslint/no-loss-of-precision */
import * as mars3d from "mars3d"
export let map // mars3d.Map объект трёхмерной карты
export let graphicLayer // объект векторного слоя
export const eventTarget = new mars3d.BaseClass()
// Параметры карты, которые нужно переопределить в config.json (в текущем примере фреймворк автоматически объединяет их)
export const mapOptions = {
scene: {
center: { lat: 28.589524, lng: 115.77969, alt: 2286.4, heading: 28.6, pitch: -44.9 },
logarithmicDepthBuffer: false // Логарифмический буфер глубины [установите это, если появляются тени на поверхности земли]
}
}
// Инициализация карты, жизненный цикл хук (обязательно), фреймворк автоматически вызывает эту функцию после инициализации карты
export function onMounted(mapInstance) {
map = mapInstance // Сохранение объекта карты
// Создание векторного слоя
graphicLayer = new mars3d.layer.GraphicLayer()
map.addLayer(graphicLayer)
// Привязка событий к слою
graphicLayer.on(mars3d.EventType.click, function (event) {
console.log("Слушатель слоя, нажата векторная объект", event)
})
}
``` // Добавление демонстрационных данных
addDemoGraphic1(graphicLayer)
}
// Освобождение текущего картографического бизнес-цикла, в конкретных проектах необходимо выполнить обратные операции к onMounted (например, отвязка событий, уничтожение объектов, обнуление переменных)
export function onUnmounted() {
map = null
graphicLayer.remove()
graphicLayer = null
}```json
const dataJson = [
{
lng: 115.794736,
lat: 28.612206,
height: 0,
sn: "Z05100125040"
},
{
lng: 115.79463958740234,
lat: 28.612184524536133,
height: 6,
sn: "Z05100125040"
},
{
sn: "Z05100125040",
lng: 115.79444122314453,
lat: 28.612140655517578,
height: 18
},
{
sn: "Z05100125040",
lng: 115.79414367675781,
lat: 28.612075805664062,
height: 36
},
{
sn: "Z05100125040",
lng: 115.79374694824219,
lat: 28.611989974975586,
height: 60
},
{
sn: "Z05100125040",
lng: 115.79325103759766,
lat: 28.611881256103516,
height: 90
},
{
sn: "Z05100125040",
lng: 115.79265594482422,
lat: 28.611751556396484,
height: 120
},
{
sn: "Z05100125040",
lng: 115.79196166992188,
lat: 28.61159896850586,
height: 120
},
{
sn: "Z05100125040",
lng: 115.79116821289062,
lat: 28.611425399780273,
height: 120
},
{
sn: "Z05100125040",
lng: 115.79037475585938,
lat: 28.611251831054688,
height: 120
},
{
sn: "Z05100125040",
lng: 115.78958129882812,
lat: 28.6110782623291,
height: 120
},
{
sn: "Z05100125040",
lng: 115.78878784179688,
lat: 28.610904693603516,
height: 120
},
{
sn: "Z05100125040",
lng: 115.78799438476562,
lat: 28.61073112487793,
height: 120
},
{
sn: "Z05100125040",
lng: 115.78720092773438,
lat: 28.610557556152344,
height: 120
},
{
sn: "Z05100125040",
lng: 115.78640747070312,
lat: 28.610383987426758,
height: 120
},
{
sn: "Z05100125040",
lng: 115.78561401367188,
lat: 28.610210418710938,
height: 120
}
]
function addDemoGraphic1(graphicLayer) {
const droneEntityMap = new Map() // Коллекция сущностей дрона
const droneTrackEntityMap = new Map() // Коллекция сущностей траектории полёта дрона
const connectGroundLineEntityMap = new Map() // Коллекция сущностей линий, соединяющих дрон с землёй
}
``````json
[
{
"sn": "Z05100125040",
"lng": 115.78561401367188,
"lat": 28.610210418701172,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78482055664062,
"lat": 28.610036849975586,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78402709960938,
"lat": 28.60986328125,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78323364257812,
"lat": 28.609689712524414,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78244018554688,
"lat": 28.6095156368927,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78164672851562,
"lat": 28.609342575073242,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78085327148438,
"lat": 28.609169006347656,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.78005981445312,
"lat": 28.60899543762207,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77926635742188,
"lat": 28.608821868896484,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77847290039062,
"lat": 28.6086483001709,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77767944335938,
"lat": 28.608474731445312,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77688598632812,
"lat": 28.608301162719727,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77609252929688,
"lat": 28.60812759399414,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77529907226562,
"lat": 28.607954025268555,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77450561523438,
"lat": 28.60778045654297,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77371215820312,
"lat": 28.607606887817383,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77291870117188,
"lat": 28.607433319091797,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77212524414062,
"lat": 28.60725975036621,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.77133178710938,
"lat": 28.607086181640625,
"height": 120
}
]
``````json
[
{
sn: "Z05100125040",
lng: 115.76577758789062,
lat: 28.605871200561523,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76498413085938,
lat: 28.605697631835938,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76419067382812,
lat: 28.60552406311035,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76339721679688,
lat: 28.605350494384766,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76260375976562,
lat: 28.60517692565918,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76181030273438,
lat: 28.605003356933594,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76101684570312,
lat: 28.604829788208008,
height: 120
},
{
sn: "Z05100125040",
lng: 115.76022338867188,
lat: 28.604656219482422,
height: 120
},
{
sn: "Z05100125040",
lng: 115.75942993164062,
lat: 28.604482650756836,
height: 120
},
{
sn: "Z05100125040",
lng: 115.75863647460938,
lat: 28.60430908203125,
height: 120
},
{
sn: "Z05100125040",
lng: 115.75784301757812,
lat: 28.604135513305664,
height: 120
},
{
sn: "Z05100125040",
lng: 115.75704956054688,
lat: 28.603961944580078,
height: 120
}
]
``````json
[
{
"sn": "Z05100125040",
"lng": 115.75625610351562,
"lat": 28.603788375854492,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.75546264648438,
"lat": 28.603614807128906,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.75466918945312,
"lat": 28.60344123840332,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.75387573242188,
"lat": 28.603267669677734,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.75308227539062,
"lat": 28.60309410095215,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.75228881835938,
"lat": 28.602920532226562,
"height": 120
},
{
"sn": "Z05100125040",
"lng": 115.75149536132812,
"lat": 28.602746963500977,
"height": 120
}
]
let i = 0
``` const startPlay = () => {
if (dataJson.length > 0) {
if (i < dataJson.length) {
const record = dataJson[i]
console.log(record)
drawDrone(record)
}
i++
}
}```javascript
const t = setInterval(startPlay, 2000)
if (i >= dataJson.length) {
clearInterval(t)
}
```javascript
const drawDrone = (drone) => {
// Отрисовка дрона
if (droneEntityMap.has(drone.sn)) {
const currDronePoint = [drone.lng, drone.lat, drone.height]
console.log(currDronePoint, "111")
const haveExistDroneEntity = droneEntityMap.get(drone.sn)
haveExistDroneEntity.position = currDronePoint
droneEntityMap.set(drone.sn, haveExistDroneEntity)
} else {
// Инициализация модели дрона
const droneEntity = new mars3d.graphic.ModelEntity({
id: drone.sn,
position: new mars3d.LngLatPoint(drone.lng, drone.lat, drone.height),
style: {
url: "https://data.mars3d.cn/gltf/mars/wrj.gltf",
scale: 0.1,
minimumPixelSize: 50
}
})
console.log(droneEntity)
droneEntityMap.set(drone.sn, droneEntity)
graphicLayer.addGraphic(droneEntity)
}
// Отрисовка линии, соединяющей с землей
if (connectGroundLineEntityMap.has(drone.sn)) {
const haveExistConnectGroundLineEntity = connectGroundLineEntityMap.get(drone.sn)
haveExistConnectGroundLineEntity.setCallbackPositions([
[drone.lng, drone.lat, 0],
[drone.lng, drone.lat, drone.height]
])
connectGroundLineEntityMap.set(drone.sn, haveExistConnectGroundLineEntity)
} else {
const connectGroundLineEntity = new mars3d.graphic.PolylineEntity({
positions: [
[drone.lng, drone.lat, 0],
[drone.lng, drone.lat, drone.height]
],
style: {
width: 1,
clampToGround: false,
materialType: mars3d.MaterialType.PolylineDash,
materialOptions: {
color: Cesium.Color.WHITE,
dashLength: 20
}
}
})
graphicLayer.addGraphic(connectGroundLineEntity)
connectGroundLineEntityMap.set(drone.sn, connectGroundLineEntity)
}
// Инициализация и обновление списка точек траектории дрона
if (droneTrackEntityMap.has(drone.sn)) {
const haveExistDroneTrackList = droneTrackEntityMap.get(drone.sn)
const positions_draw = haveExistDroneTrackList.
}
```setCallbackPositions() // Переключение координат в режим динамического обратного вызова
const positions = new mars3d. LngLatPoint(drone. lng, drone. lat, drone. height). toCartesian()
positions_draw. push(positions)
const data = mars3d. PolyUtil. getRectPositionsByCenter({
center: new mars3d. LngLatPoint(drone. lng, drone. lat, drone. height),
width: 60,
height: 10
})
haveExistDroneTrackList. setStyle({
granularity: mars3d. PolyUtil. getGranularity(data, 300)
})
droneTrackEntityMap. set(drone. sn, haveExistDroneTrackList)
} else {
const droneTrackList = new mars3d. LngLatPoint(drone. lng, drone. lat, drone. height). toCartesian()
const droneTrackEntity = new mars3d. graphic. PolylineEntity({
name: "Траектория дрона",
positions: [droneTrackList],
style: {
width: 5,
clampToGround: false,
materialOptions: {
color: "#ff0000"
}
}
})
graphicLayer. addGraphic(droneTrackEntity)
droneTrackEntityMap. set(drone. sn, droneTrackEntity)
}
}
}