1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/marsgis-mars3d

 / Детали:

Обработка тонких линий, приводящих к исчезновению других сегментов линий

Предстоит сделать
Владелец
Создано  
20.05.2025

Проблема:

  1. Была создана задача для обработки проблемы с тонкими линиями. (см. ссылку)
    https://gitee.com/marsgis/mars3d/issues/IC0VIB?from=project-issue&search_text=%E7%BB%86%E7%BA%BF
  2. В результате другие линии исчезают через несколько минут.

Введите описание изображения

Начальные линии между дроном и землёй

Ожидаемое поведение:

Как предотвратить исчезновение линий между землёй и дроном.

Код:

/* 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)
      }
    }
  }

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/marsgis-mars3d.git
git@api.gitlife.ru:oschina-mirror/marsgis-mars3d.git
oschina-mirror
marsgis-mars3d
marsgis-mars3d