From aec00ecc093be803860c8675cbe1c4c776a7cb4e Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Tue, 19 Mar 2024 17:49:21 +0800
Subject: [PATCH] update: 新建航线、事件编辑、kmz文件问题修改
---
src/utils/cesium/mapUtils.ts | 53 ++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/src/utils/cesium/mapUtils.ts b/src/utils/cesium/mapUtils.ts
index 7ea2e20..ef5b8f6 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,42 @@
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
+}
--
Gitblit v1.9.3