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