feat: 新增几个工具类(功能待完善)。
parent
8ddcfd310d
commit
92221166dd
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* @Author: cbwu 504-wuchengbo@htsdfp.com
|
||||
* @Date: 2024-03-22 09:11:54
|
||||
* @LastEditors: cbwu
|
||||
* @LastEditTime: 2024-03-26 13:33:42
|
||||
* @Description: 坐标系转化
|
||||
*/
|
||||
import { Cartesian2, Viewer, Math, Cartographic } from 'cesium'
|
||||
/**
|
||||
* 屏幕坐标转笛卡尔坐标
|
||||
* @param viewer
|
||||
* @param windowPosition :屏幕二维坐标
|
||||
* @returns :笛卡尔坐标
|
||||
*/
|
||||
function cartesian2ToCartesian3(viewer: Viewer, windowPosition: Cartesian2) {
|
||||
const ray = viewer.camera.getPickRay(windowPosition)
|
||||
if (ray != undefined) {
|
||||
return viewer.scene.globe.pick(ray, viewer.scene)
|
||||
} else return undefined
|
||||
}
|
||||
/**
|
||||
* 屏幕坐标转地理坐标
|
||||
* @param viewer
|
||||
* @param windowPosition :屏幕坐标
|
||||
* @returns :WGS84坐标
|
||||
*/
|
||||
function cartesian2ToWGS84(viewer: Viewer, windowPosition: Cartesian2) {
|
||||
const cartesian3 = cartesian2ToCartesian3(viewer, windowPosition)
|
||||
if (cartesian3 != undefined) {
|
||||
const cartographic = Cartographic.fromCartesian(cartesian3)
|
||||
const lon = Math.toDegrees(cartographic.longitude) // 经度
|
||||
const lat = Math.toDegrees(cartographic.latitude) // 纬度
|
||||
const alt = cartographic.height // 高度
|
||||
return [lon, lat, alt]
|
||||
} else return []
|
||||
}
|
||||
export { cartesian2ToCartesian3, cartesian2ToWGS84 }
|
@ -0,0 +1,7 @@
|
||||
/*
|
||||
* @Author: cbwu 504-wuchengbo@htsdfp.com
|
||||
* @Date: 2024-03-22 15:42:49
|
||||
* @LastEditors: cbwu
|
||||
* @LastEditTime: 2024-03-22 15:43:23
|
||||
* @Description: 地理计算
|
||||
*/
|
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* @Author: cbwu 504-wuchengbo@htsdfp.com
|
||||
* @Date: 2024-03-20 08:55:59
|
||||
* @LastEditors: cbwu
|
||||
* @LastEditTime: 2024-03-26 09:00:46
|
||||
* @Description:几何类型类
|
||||
*/
|
||||
import {
|
||||
Entity,
|
||||
Cartesian3,
|
||||
Color,
|
||||
PrimitiveCollection,
|
||||
PointPrimitiveCollection,
|
||||
PolylineGeometry,
|
||||
PointGraphics,
|
||||
Property,
|
||||
PolylineGraphics,
|
||||
PolygonGraphics,
|
||||
} from 'cesium'
|
||||
type EntityOptions = {
|
||||
id?: string
|
||||
name?: string
|
||||
show?: boolean
|
||||
pixelSize?: number
|
||||
color?: Color
|
||||
fillColor?: Color
|
||||
fill?: boolean
|
||||
width?: number
|
||||
outlineWidth?: number
|
||||
}
|
||||
// 点
|
||||
class PointEntity extends Entity {
|
||||
static id: number = 0
|
||||
options: EntityOptions = {
|
||||
id: 'Point' + String(PointEntity.id),
|
||||
name: 'Point' + String(PointEntity.id + 1),
|
||||
show: true,
|
||||
pixelSize: 10,
|
||||
color: Color.GREEN,
|
||||
outlineWidth: 0,
|
||||
}
|
||||
constructor(position: Cartesian3, options?: EntityOptions) {
|
||||
super({
|
||||
// id: options?.id || String(PointEntity.id),
|
||||
position: position,
|
||||
})
|
||||
this.options = { ...this.options, ...options }
|
||||
this.name = this.options.name
|
||||
this.point = new PointGraphics({ ...this.options })
|
||||
PointEntity.id++
|
||||
}
|
||||
}
|
||||
// 线
|
||||
class PolylineEntity extends Entity {
|
||||
static id: number = 0
|
||||
options: EntityOptions = {
|
||||
id: 'Polyline' + String(PolylineEntity.id),
|
||||
name: 'Polyline' + String(PolylineEntity.id + 1),
|
||||
show: true,
|
||||
width: 2,
|
||||
color: Color.GREEN,
|
||||
}
|
||||
constructor(ptArr: Cartesian3[] | Property, options?: EntityOptions) {
|
||||
super({
|
||||
// id: options?.id || String(PolylineEntity.id),
|
||||
})
|
||||
this.options = { ...this.options, ...options }
|
||||
this.name = this.options.name
|
||||
this.polyline = new PolylineGraphics({
|
||||
positions: ptArr,
|
||||
show: this.options.show,
|
||||
width: this.options.width,
|
||||
material: this.options.color,
|
||||
})
|
||||
PolylineEntity.id++
|
||||
}
|
||||
}
|
||||
// 多边形
|
||||
class PolygonEntity extends Entity {
|
||||
static id: number = 0
|
||||
options: EntityOptions = {
|
||||
id: 'Polygon' + String(PolygonEntity.id),
|
||||
name: 'Polygon' + String(PolygonEntity.id + 1),
|
||||
show: true,
|
||||
width: 2,
|
||||
color: Color.RED,
|
||||
fillColor: Color.RED.withAlpha(0.5),
|
||||
fill: true,
|
||||
}
|
||||
constructor(ptArr: Cartesian3[] | Property, options?: EntityOptions) {
|
||||
super({
|
||||
// id: options?.id || String(PolygonEntity.id),
|
||||
})
|
||||
this.options = { ...this.options, ...options }
|
||||
this.name = this.options.name
|
||||
this.polygon = new PolygonGraphics({
|
||||
show: this.options.show,
|
||||
hierarchy: ptArr,
|
||||
material: this.options.fillColor, //填充颜色
|
||||
fill: this.options.fill, //是否填充
|
||||
outlineWidth: this.options.width, //线宽
|
||||
outlineColor: this.options.color, //线颜色
|
||||
})
|
||||
PolygonEntity.id++
|
||||
}
|
||||
}
|
||||
// 线
|
||||
class Polyline extends PrimitiveCollection {
|
||||
constructor(ptArr: Cartesian3[]) {
|
||||
super()
|
||||
this.add(this.createPoints(ptArr))
|
||||
this.add(this.createPolyline(ptArr))
|
||||
// this.id
|
||||
}
|
||||
private createPoints(posArr: Cartesian3[]) {
|
||||
const points = new PointPrimitiveCollection()
|
||||
for (const pos in posArr) {
|
||||
points.add({
|
||||
position: pos,
|
||||
color: Color.RED,
|
||||
pixelSize: 10,
|
||||
})
|
||||
}
|
||||
return points
|
||||
}
|
||||
private createPolyline(posArr: Cartesian3[]) {
|
||||
return new PolylineGeometry({
|
||||
positions: posArr,
|
||||
width: 2,
|
||||
colors: new Array(posArr.length).fill(Color.fromCssColorString('green')),
|
||||
})
|
||||
}
|
||||
}
|
||||
export { PointEntity, Polyline, PolylineEntity, PolygonEntity }
|
Loading…
Reference in New Issue