From f27ca082eb0a839449dd50c49007b58e5ed6946f Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 19 Jun 2025 19:08:01 +0800
Subject: [PATCH] feat: 服务名修改

---
 src/utils/cesium/mapUtils.ts |   76 ++++++++++++++++++++++++++++++++-----
 1 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/src/utils/cesium/mapUtils.ts b/src/utils/cesium/mapUtils.ts
index 7ea2e20..47d01a4 100644
--- a/src/utils/cesium/mapUtils.ts
+++ b/src/utils/cesium/mapUtils.ts
@@ -1,11 +1,6 @@
 import * as Cesium from 'cesium'
 
-export function getLngLatDistance (
-  lat1: number,
-  lng1: number,
-  lat2: number,
-  lng2: number,
-) {
+export const getLngLatDistance = (lat1: number, lng1: number, lat2: number, lng2: number) => {
   const radLat1 = (lat1 * Math.PI) / 180.0
   const radLat2 = (lat2 * Math.PI) / 180.0
   const a = radLat1 - radLat2
@@ -13,10 +8,7 @@
   let s =
     2 *
     Math.asin(
-      Math.sqrt(
-        Math.pow(Math.sin(a / 2), 2) +
-          Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2),
-      ),
+      Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)),
     )
   s = s * 6378.137 // EARTH_RADIUS;
   s = Math.round(s * 10000) / 10000
@@ -24,7 +16,7 @@
 }
 
 // 获取限polyline长度
-export function getPolylineLength (entity: any) {
+export const getPolylineLength = (entity: any) => {
   let length = 0
 
   // 获取Polyline的所有顶点位置
@@ -43,3 +35,65 @@
 
   return length
 }
+
+// 创建三角广告牌
+export const createTriangleMarker = (title: string | number, color: string) => {
+  // 创建canvas绘制广告牌
+  const billboard = document.createElement('canvas')
+  billboard.width = 30
+  billboard.height = 30
+  const ctx: HTMLCanvasElement | any = billboard.getContext('2d')
+  ctx.beginPath()
+  ctx.moveTo(0, 0)
+  ctx.lineTo(30, 0)
+  ctx.lineTo(15, 22)
+  ctx.fillStyle = color
+  ctx.fill()
+  ctx.font = '18px serif'
+  ctx.fillStyle = '#ffffff'
+  ctx.fillText(title, 10, 15)
+  ctx.closePath()
+  return billboard
+}
+
+// 获取当前经纬度海拔
+export const getHaeHeight = (
+  start: { longitude: number; latitude: number; height: number },
+  end: { longitude: number; latitude: number; height: number },
+) => {
+  const ellipsoid = Cesium.Ellipsoid.WGS84 // 选择合适的椭圆体模型
+  // const { longitude, latitude, height } = start
+  // const { longitude: endLng, latitude: endLat, height: endHeight } = end
+  // const startC3Position = new Cesium.Cartographic(longitude, latitude, height)
+  // const endC3Position = new Cesium.Cartographic(endLng, endLat, endHeight)
+  // const startCartesianPosition = ellipsoid.cartographicToCartesian(startC3Position)
+  // const endCartesianPosition = ellipsoid.cartographicToCartesian(endC3Position)
+  // // 计算两个位置之间的距离
+  // const distance = new Cesium.EllipsoidGeodesic(startCartesianPosition, endCartesianPosition, ellipsoid)
+  // return distance
+  const { longitude, latitude, height } = end
+  const cartographic = Cesium.Cartographic.fromDegrees(longitude, latitude, height)
+  const cartesianPosition = ellipsoid.cartographicToCartesian(cartographic)
+  const haeHeight = ellipsoid.cartesianToCartographic(cartesianPosition).height
+  return haeHeight
+}
+
+// Cesium Cartesian3 转正常经纬度
+export const cartesian3Convert = (cartesian3Position: Cesium.Cartesian3, viewer: { scene: { globe: { ellipsoid: any } } }) => {
+  // 转换为经纬度
+  const ellipsoid = viewer.scene.globe.ellipsoid
+  const cartographicPosition = Cesium.Cartographic.fromCartesian(cartesian3Position, ellipsoid)
+  const longitude = Cesium.Math.toDegrees(cartographicPosition.longitude)
+  const latitude = Cesium.Math.toDegrees(cartographicPosition.latitude)
+  const height = cartographicPosition.height
+
+  console.log('经度: ' + longitude)
+  console.log('纬度: ' + latitude)
+  console.log('高度: ' + height)
+
+  return {
+    longitude,
+    latitude,
+    height,
+  }
+}

--
Gitblit v1.9.3