@ino-cesium/draw 0.0.23 → 0.0.25-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +53 -30
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Cesium from 'cesium';
|
|
2
|
-
import { BasePrimitive,
|
|
2
|
+
import { BasePrimitive, DeepPartial } from '@ino-cesium/common';
|
|
3
3
|
|
|
4
4
|
declare class MeasurePrimitive extends BasePrimitive<any> {
|
|
5
5
|
private drawData;
|
|
@@ -163,7 +163,7 @@ interface IDrawAttrInfo {
|
|
|
163
163
|
/**
|
|
164
164
|
* 绘制样式
|
|
165
165
|
*/
|
|
166
|
-
style:
|
|
166
|
+
style: DeepPartial<IDrawStyle>;
|
|
167
167
|
__needUpdateAppearance?: boolean;
|
|
168
168
|
}
|
|
169
169
|
/**
|
|
@@ -220,12 +220,12 @@ interface IDrawHandler {
|
|
|
220
220
|
* 设置全局绘制样式
|
|
221
221
|
* @param drawStyle 绘制样式
|
|
222
222
|
*/
|
|
223
|
-
setDrawStyle: (drawStyle:
|
|
223
|
+
setDrawStyle: (drawStyle: DeepPartial<IDrawStyle>) => void;
|
|
224
224
|
/**
|
|
225
225
|
* 设置绘制条目样式
|
|
226
226
|
* @param drawStyle 绘制样式
|
|
227
227
|
*/
|
|
228
|
-
setDrawItemStyle: (drawData: IDrawAttrInfo, drawStyle:
|
|
228
|
+
setDrawItemStyle: (drawData: IDrawAttrInfo, drawStyle: DeepPartial<IDrawStyle>) => void;
|
|
229
229
|
/**
|
|
230
230
|
* 设置贴地状态
|
|
231
231
|
* @param drawData
|
|
@@ -254,7 +254,19 @@ interface IDrawOptions {
|
|
|
254
254
|
*/
|
|
255
255
|
id?: string;
|
|
256
256
|
/**
|
|
257
|
-
*
|
|
257
|
+
* 绘制形状类型
|
|
258
|
+
* - polyline 折线 测量距离
|
|
259
|
+
* - polyline-arrow 折线箭头
|
|
260
|
+
* - polygon 多边形 测量面积
|
|
261
|
+
* - point 点 测量经纬度
|
|
262
|
+
* - circle 圆 测量面积
|
|
263
|
+
* - rectangle 矩形 测量面积
|
|
264
|
+
* - vertical-line 垂直线 测量高度
|
|
265
|
+
* - vertical-surface-line 垂直地平面线 测量离地高度
|
|
266
|
+
* - curve 曲线
|
|
267
|
+
* - curve-arrow 曲线箭头
|
|
268
|
+
* - sector 扇形
|
|
269
|
+
* - db-arrow 双箭头
|
|
258
270
|
*/
|
|
259
271
|
shape: DrawShape;
|
|
260
272
|
/**
|
|
@@ -284,7 +296,7 @@ interface IDrawOptions {
|
|
|
284
296
|
/**
|
|
285
297
|
* 绘制样式
|
|
286
298
|
*/
|
|
287
|
-
style?:
|
|
299
|
+
style?: DeepPartial<IDrawStyle>;
|
|
288
300
|
}
|
|
289
301
|
interface IReShowOptions {
|
|
290
302
|
id: string;
|
|
@@ -383,17 +395,35 @@ interface IMeasureResult {
|
|
|
383
395
|
}
|
|
384
396
|
/**
|
|
385
397
|
* 绘制形状类型
|
|
398
|
+
* - polyline 折线
|
|
399
|
+
* - polyline-arrow 折线箭头
|
|
400
|
+
* - polygon 多边形
|
|
401
|
+
* - point 点
|
|
402
|
+
* - circle 圆
|
|
403
|
+
* - rectangle 矩形
|
|
404
|
+
* - vertical-line 垂直线
|
|
405
|
+
* - vertical-surface-line 垂直地平面线
|
|
406
|
+
* - curve 曲线
|
|
407
|
+
* - curve-arrow 曲线箭头
|
|
408
|
+
* - sector 扇形
|
|
409
|
+
* - db-arrow 双箭头
|
|
386
410
|
*/
|
|
387
|
-
type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow' | 'sector' | 'db-arrow'
|
|
411
|
+
type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow' | 'sector' | 'db-arrow';
|
|
388
412
|
/**
|
|
389
|
-
*
|
|
390
|
-
*
|
|
413
|
+
* 绘制样式
|
|
414
|
+
*
|
|
415
|
+
* 点,线,面
|
|
416
|
+
*
|
|
417
|
+
* todo 面贴图
|
|
391
418
|
*/
|
|
392
419
|
interface IDrawStyle {
|
|
393
420
|
/**
|
|
394
421
|
* 点样式
|
|
395
422
|
*/
|
|
396
423
|
point: {
|
|
424
|
+
/**
|
|
425
|
+
* 传入image时,为billboard
|
|
426
|
+
*/
|
|
397
427
|
image: string;
|
|
398
428
|
/**
|
|
399
429
|
* 点颜色
|
|
@@ -434,11 +464,24 @@ interface IDrawStyle {
|
|
|
434
464
|
* 深度失败颜色
|
|
435
465
|
*/
|
|
436
466
|
depthFailColor: string;
|
|
467
|
+
/**
|
|
468
|
+
* 折线类型
|
|
469
|
+
* - solid: 实线线
|
|
470
|
+
* - dash: 虚线线
|
|
471
|
+
* - glow: 泛光线
|
|
472
|
+
* - trail: 尾迹线
|
|
473
|
+
*/
|
|
437
474
|
type: 'solid' | 'dash' | 'glow' | 'trail';
|
|
475
|
+
/**
|
|
476
|
+
* 虚线参数
|
|
477
|
+
*/
|
|
438
478
|
dash: {
|
|
439
479
|
dashLength: number;
|
|
440
480
|
gapColor: string;
|
|
441
481
|
};
|
|
482
|
+
/**
|
|
483
|
+
* 泛光线参数
|
|
484
|
+
*/
|
|
442
485
|
glow: {
|
|
443
486
|
glowPower: number;
|
|
444
487
|
taperPower: number;
|
|
@@ -460,26 +503,6 @@ interface IDrawStyle {
|
|
|
460
503
|
};
|
|
461
504
|
}
|
|
462
505
|
|
|
463
|
-
type types_DrawEvent = DrawEvent;
|
|
464
|
-
type types_DrawEventType = DrawEventType;
|
|
465
|
-
declare const types_DrawEventType: typeof DrawEventType;
|
|
466
|
-
type types_DrawShape = DrawShape;
|
|
467
|
-
type types_IDrawAttrInfo = IDrawAttrInfo;
|
|
468
|
-
type types_IDrawEditEvent = IDrawEditEvent;
|
|
469
|
-
type types_IDrawHandler = IDrawHandler;
|
|
470
|
-
type types_IDrawHandlerEvent = IDrawHandlerEvent;
|
|
471
|
-
type types_IDrawOptions = IDrawOptions;
|
|
472
|
-
type types_IDrawStyle = IDrawStyle;
|
|
473
|
-
type types_IEventActions = IEventActions;
|
|
474
|
-
type types_IEventData = IEventData;
|
|
475
|
-
type types_IMeasureOptions = IMeasureOptions;
|
|
476
|
-
type types_IMeasureResult = IMeasureResult;
|
|
477
|
-
type types_IReShowOptions = IReShowOptions;
|
|
478
|
-
declare namespace types {
|
|
479
|
-
export { types_DrawEventType as DrawEventType };
|
|
480
|
-
export type { types_DrawEvent as DrawEvent, types_DrawShape as DrawShape, types_IDrawAttrInfo as IDrawAttrInfo, types_IDrawEditEvent as IDrawEditEvent, types_IDrawHandler as IDrawHandler, types_IDrawHandlerEvent as IDrawHandlerEvent, types_IDrawOptions as IDrawOptions, types_IDrawStyle as IDrawStyle, types_IEventActions as IEventActions, types_IEventData as IEventData, types_IMeasureOptions as IMeasureOptions, types_IMeasureResult as IMeasureResult, types_IReShowOptions as IReShowOptions };
|
|
481
|
-
}
|
|
482
|
-
|
|
483
506
|
declare const DrawStyle: IDrawStyle;
|
|
484
507
|
|
|
485
508
|
/**
|
|
@@ -503,5 +526,5 @@ interface IAddDrawActionsOptions {
|
|
|
503
526
|
*/
|
|
504
527
|
declare const createDrawHandler: (viewer: Cesium.Viewer) => IDrawHandler;
|
|
505
528
|
|
|
506
|
-
export {
|
|
529
|
+
export { DrawEventType, DrawStyle, addDrawActions, createDrawHandler };
|
|
507
530
|
export type { DrawEvent, DrawShape, IDrawAttrInfo, IDrawEditEvent, IDrawHandler, IDrawHandlerEvent, IDrawOptions, IDrawStyle, IEventActions, IEventData, IMeasureOptions, IMeasureResult, IReShowOptions };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BasePrimitive as i,makePositionsToLnglats as t,makePositiontoLnglat as e,calcSpaceDistance as a,makeLnglatsToPositions as s,calcSpaceDistances as o,makeLnglatToPosition as n,calcGeodesicDistances as r,calcArea as l,calcPoistionCenter as p,calcGeodesicDistance as d,numberId as h,Tooltip as c}from"@ino-cesium/common";import*as m from"@turf/turf";import*as w from"cesium";var u=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(u||{}),g=Object.freeze({__proto__:null,DrawEventType:u});const y={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。","default-dbclick":"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。",default:"单机左键绘制下一个节点,单机右键撤销上次绘制。"},drawEnd:"单击左键结束绘制,单机右键取消上次绘制",pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},A={point:{color:"rgba(255,255,0,0.8)",pixelSize:8,offsetX:0,offsetY:0,outlineColor:"rgba(255,255,255,0.8)",outlineWidth:3,disableDepthTestDistance:Number.POSITIVE_INFINITY},polyline:{width:5,color:"rgba(81,255,0,0.8)",depthFailColor:"rgba(200,255,200,0.5)"},polygon:{color:"rgba(255,255,54,0.3)",depthFailColor:"rgba(255,0,0,0.3)"}};class v extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.drawData.__needUpdateAppearance&&this.setAppearance(),this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const s=t(i).map(i=>m.point([i.longitude,i.latitude])),o=e(i[0]).height,n=a(i[0],i[1]),[r,l,p]=[s[0],s[1],s[2]],d=m.bearing(r,l),h=m.bearing(r,p),c=m.lineArc(r,n/1e3,d,h).geometry.coordinates.map(i=>[i[0],i[1],o]);c.push([...r.geometry.coordinates,o]),c.unshift([...r.geometry.coordinates,o]),this.drawData.shapePositions=w.Cartesian3.fromDegreesArrayHeights(c.flat()),this.setShapePositions(this.drawData.shapePositions)}}const C=(i,t)=>Math.sqrt((i[0]-t[0])**2+(i[1]-t[1])**2),P=i=>{let t=0;return i&&Array.isArray(i)&&i.length>0&&i.forEach((e,a)=>{a<i.length-1&&(t+=C(e,i[a+1]))}),t},D=i=>P(i)**.99,f=(i,t)=>[(i[0]+t[0])/2,(i[1]+t[1])/2],E=(i,t)=>{let e;const a=Math.asin(Math.abs(t[1]-i[1])/C(i,t));return t[1]>=i[1]&&t[0]>=i[0]?e=a+Math.PI:t[1]>=i[1]&&t[0]<i[0]?e=2*Math.PI-a:t[1]<i[1]&&t[0]<i[0]?e=a:t[1]<i[1]&&t[0]>=i[0]&&(e=Math.PI-a),e},I=(i,t,e)=>{const a=E(t,i)-E(t,e);return a<0?a+2*Math.PI:a},S=(i,t,e,a,s)=>{const o=E(i,t),n=s?o+e:o-e,r=a*Math.cos(n),l=a*Math.sin(n);return[t[0]+r,t[1]+l]},M=function(i){if(i.length<=2)return i;const t=[],e=i.length-1;for(let a=0;a<=1;a+=.01){let[s,o]=[0,0];for(let t=0;t<=e;t++){const n=F(e,t),r=a**t,l=(1-a)**(e-t);s+=n*r*l*i[t][0],o+=n*r*l*i[t][1]}t.push([s,o])}return t.push(i[e]),t},b=i=>{let t=1;switch(i){case i<=1:t=1;break;case 2===i:t=2;break;case 3===i:t=6;break;case 24===i:t=24;break;case 5===i:t=120;break;default:for(let e=1;e<=i;e++)t*=e}return t},F=(i,t)=>b(i)/(b(t)*b(i-t));class _ extends i{positions;drawData;depthFailAppearance;connPoint;tempPoint4;llBodyPnts=[];rrBodyPnts=[];isClockWise;neckWidthFactor;headWidthFactor;headHeightFactor;neckHeightFactor;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance(),this.headHeightFactor=.25,this.headWidthFactor=.3,this.neckHeightFactor=.85,this.neckWidthFactor=.15,this.connPoint=[0,0],this.tempPoint4=[0,0],this.isClockWise=!1}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.drawData.__needUpdateAppearance&&this.setAppearance(),this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const e=[],a=t(i).map(i=>(e.push(i.height),[i.longitude,i.latitude])),o=Math.max(...e),[n,r,l]=[a[0],a[1],a[2]],p=a.length;let d,h;3===p?(this.tempPoint4=this.getTempPoint4(n,r,l),this.connPoint=f(n,r)):4===p?(this.tempPoint4=a[3],this.connPoint=f(n,r)):(this.tempPoint4=a[3],this.connPoint=a[4]),this.isClockWise=((i,t,e)=>(e[1]-i[1])*(t[0]-i[0])>(t[1]-i[1])*(e[0]-i[0]))(n,r,l),this.isClockWise?(d=this.getArrowPoints(n,this.connPoint,this.tempPoint4,!1),h=this.getArrowPoints(this.connPoint,r,l,!0)):(d=this.getArrowPoints(r,this.connPoint,l,!1),h=this.getArrowPoints(this.connPoint,n,this.tempPoint4,!0));const c=d.length,m=(c-5)/2,u=d.slice(0,m),g=d.slice(m,m+5);let y=d.slice(m+5,c);this.llBodyPnts=u;let A=h.slice(0,m);const v=h.slice(m,m+5),C=h.slice(m+5,c);this.rrBodyPnts=C,A=M(A);const P=M(C.concat(u.slice(1)));y=M(y);const D=A.concat(v,P,g,y).filter(i=>i[0]&&i[1]).map(i=>new w.Cartographic(i[0],i[1],o)),E=s(D);this.drawData.shapePositions=E,this.drawData.shapePositions.push(E[0]),this.setShapePositions(this.drawData.shapePositions)}getTempPoint4(i,t,e){const a=f(i,t),s=C(a,e),o=I(i,a,e);let n,r,l,p=[0,0];return o<Math.PI/2?(n=s*Math.sin(o),r=s*Math.cos(o),l=S(i,a,Math.PI/2,n,!1),p=S(a,l,Math.PI/2,r,!0)):o>=Math.PI/2&&o<Math.PI?(n=s*Math.sin(Math.PI-o),r=s*Math.cos(Math.PI-o),l=S(i,a,Math.PI/2,n,!1),p=S(a,l,Math.PI/2,r,!1)):o>=Math.PI&&o<1.5*Math.PI?(n=s*Math.sin(o-Math.PI),r=s*Math.cos(o-Math.PI),l=S(i,a,Math.PI/2,n,!0),p=S(a,l,Math.PI/2,r,!0)):(n=s*Math.sin(2*Math.PI-o),r=s*Math.cos(2*Math.PI-o),l=S(i,a,Math.PI/2,n,!0),p=S(a,l,Math.PI/2,r,!1)),p}getArrowPoints(i,t,e,a){const s=f(i,t),o=C(s,e);let n=S(e,s,0,.3*o,!0),r=S(e,s,0,.5*o,!0);n=S(s,n,Math.PI/2,o/5,a),r=S(s,r,Math.PI/2,o/4,a);const l=[s,n,r,e],p=this.getArrowHeadPoints(l);if(!(p&&Array.isArray(p)&&p.length>0))throw new Error("Interpolation Error");{const e=p[0],a=p[4],s=C(i,t)/D(l)/2,o=this.getArrowBodyPoints(l,e,a,s);if(o){const s=o.length;let n=o.slice(0,s/2),r=o.slice(s/2,s);return n.push(e),r.push(a),n=n.reverse(),n.push(t),r=r.reverse(),r.push(i),n.reverse().concat(p,r)}}}getArrowBodyPoints(i,t,e,a){const s=P(i),o=D(i)*a,n=(o-C(t,e))/2;let r=0;const l=[],p=[];for(let t=1;t<i.length-1;t++){const e=I(i[t-1],i[t],i[t+1])/2;r+=C(i[t-1],i[t]);const a=(o/2-r/s*n)/Math.sin(e),d=S(i[t-1],i[t],Math.PI-e,a,!0),h=S(i[t-1],i[t],e,a,!1);l.push(d),p.push(h)}return l.concat(p)}getArrowHeadPoints(i){const t=D(i)*this.headHeightFactor,e=i[i.length-1],a=t*this.headWidthFactor,s=t*this.neckWidthFactor,o=t*this.neckHeightFactor,n=S(i[i.length-2],e,0,t,!0),r=S(i[i.length-2],e,0,o,!0),l=S(e,n,Math.PI/2,a,!1),p=S(e,n,Math.PI/2,a,!0);return[S(e,r,Math.PI/2,s,!1),l,e,p,S(e,r,Math.PI/2,s,!0)]}}class T extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.drawData.__needUpdateAppearance&&this.setAppearance(),this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<2)return;const a=t(i).map(i=>m.point([i.longitude,i.latitude])),s=e(i[0]).height,n=o(i)/1e3,[r,l]=[a[0],a[1]],p=m.bearing(r,l),d=m.destination(r,.1*n,p-90,{units:"kilometers"}),h=m.destination(r,.1*n,p+90,{units:"kilometers"}),c=m.destination(r,.8*n,p-5,{units:"kilometers"}),u=m.destination(r,.8*n,p+5,{units:"kilometers"}),g=m.destination(r,.75*n,p-13,{units:"kilometers"}),y=m.destination(r,.75*n,p+13,{units:"kilometers"}),A=[...d.geometry.coordinates,s,...c.geometry.coordinates,s,...g.geometry.coordinates,s,...l.geometry.coordinates,s,...y.geometry.coordinates,s,...u.geometry.coordinates,s,...h.geometry.coordinates,s,...d.geometry.coordinates,s];this.drawData.shapePositions=w.Cartesian3.fromDegreesArrayHeights(A.flat()),this.setShapePositions(this.drawData.shapePositions)}}const G=i=>{const t=new v(i);i.primitives.add(t)},x=i=>{const t=new _(i);i.primitives.add(t)},R=i=>{const t=new T(i);i.primitives.add(t)},U="cm",k="厘米",N="m",O="米",B="km",H="千米",L="公里",V="㎡",W="平方厘米",K="㎡",z="平方米",j="km²",J="平方千米",Q="平方公里",Y="亩",X="公顷",q={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},Z=(i,t,e)=>t===e?i:i*ti(e),$=(i,t,e)=>t===e?i:i*function(i){switch(i){case V:return 1e4;case K:return 1;case j:return 1e-6;case W:return 1e4;case z:return 1;case J:case Q:return 1e-6;case Y:return.0015;case X:return 1e-4;default:return 1}}(e),ii=i=>q[i],ti=i=>{switch(i){case N:return 1;case U:case k:return 100;case B:return.001;case O:return 1;case H:case L:return.001;default:return 1}};const ei=(i,t)=>{let a=i;if("vertical-surface-line"===t&&i.length>=1){const t=i[0],e=w.Cartographic.fromCartesian(t),s=w.Math.toDegrees(e.longitude),o=w.Math.toDegrees(e.latitude),n=0;a=[w.Cartesian3.fromDegrees(s,o,e.height),w.Cartesian3.fromDegrees(s,o,n)]}if("vertical-line"===t&&i.length>=2){const t=i[0],s=i[1],o=e(t),r=e(s);let l=o,p=r;o.height>r.height&&(l=r,p=o),console.log(l.longitude,l.latitude,p.height);const d=n(new w.Cartographic(l.longitude,l.latitude,p.height));a=[n(l),d,n(p),n(l)]}return t.startsWith("curve")&&i.length>2&&(a=oi(i)),a},ai=(i,t,e,s,o)=>{e.push(...i.map((e,o)=>{const n=i[o+1];if(n){let i=t?d(e,n):a(e,n);return i=Z(i,"m",s),{value:Number(i.toFixed(2)),unit:s,position:p([e,n]),positions:[e,n]}}return null}).filter(i=>i&&i.value>0))},si=i=>{if(2===i.length)return i;let[t,e]=i;return e||(e=ii(t)),[t,e]},oi=i=>{const t=i.length,e=r(i),a=Math.floor(e/5),s=[];for(let i=0;i<t;i++)s.push(1.5*i);const o=new w.CatmullRomSpline({points:i,times:s}),n=[],l=s[0],p=s[s.length-1];for(let i=0;i<a;i++){const t=i/(a-1),e=w.Math.lerp(l,p,t),s=o.evaluate(e);n.push(s)}return n},ni=(i,t=1e3)=>{if(i.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const a=i[i.length-1],s=i[i.length-2],o=e(a),r=e(s),l=o.height,p=o.longitude-r.longitude,d=o.latitude-r.latitude,h=Math.sqrt(p**2+d**2);if(h<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const c=p/h,m=d/h,u=(i=>{const t=w.Math.toRadians(.5),e=n(i),a=n(new w.Cartographic(i.longitude+t,i.latitude,i.height)),s=2*w.Cartesian3.distance(e,a),o=n(new w.Cartographic(i.longitude,i.latitude+t,i.height));return{lon:s,lat:2*w.Cartesian3.distance(e,o)}})(o),g=t/u.lon*w.Math.RADIANS_PER_DEGREE,y=t/u.lat*w.Math.RADIANS_PER_DEGREE,A=Math.PI/6,v=t*Math.tan(A),C=v/u.lon*w.Math.RADIANS_PER_DEGREE,P=v/u.lat*w.Math.RADIANS_PER_DEGREE,D=o.longitude-c*g-m*C,f=o.latitude-m*y+c*P,E=o.longitude-c*g+m*C,I=o.latitude-m*y-c*P,S=n(new w.Cartographic(D,f,l)),M=n(new w.Cartographic(E,I,l));return[S,n(new w.Cartographic(o.longitude,o.latitude,l)),M]},ri=i=>{const t=i.polyline.type;let e="Color",a={};return"solid"===t&&(e="Color"),"dash"===t&&(e="PolylineDash",i.polyline.dash||(a={}),i.polyline.dash.gapColor&&(a.gapColor=w.Color.fromCssColorString(i.polyline.dash.gapColor)),i.polyline.dash.dashLength&&(a.dashLength=i.polyline.dash.dashLength)),"glow"===t&&(e="PolylineGlow",a=i.polyline.glow?i.polyline.glow:{}),"trail"===t&&(e="PolylineTrail"),"PolylineDash"===e&&i.polyline.dash&&(i.polyline.dash.gapColor&&(a.gapColor=w.Color.fromCssColorString(i.polyline.dash.gapColor)),i.polyline.dash.dashLength&&(a.dashLength=i.polyline.dash.dashLength)),"PolylineGlow"===e&&i.polyline.dash&&(i.polyline.dash.gapColor&&(a.gapColor=w.Color.fromCssColorString(i.polyline.dash.gapColor)),i.polyline.dash.dashLength&&(a.dashLength=i.polyline.dash.dashLength)),"PolylineTrail"===e&&i.polyline.dash&&(a.image="/icons/material/polyline/迁徙线材质.png"),{type:e,style:a}},li=(i,t)=>({appearance:new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:t.type,uniforms:{color:w.Color.fromCssColorString(i.polyline.color),...t.style}}})}),depthFailAppearance:new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:t.type,uniforms:{color:w.Color.fromCssColorString(i.polyline.depthFailColor),...t.style}}})})});class pi extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=ei(this.positions,this.drawData.shape);if(this.drawData.shapePositions=i,"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(this.setShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:i,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:i,width:this.drawData.style.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=this.getGeometry();if(!i)return;const t=new w.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){if(i)return void(this.appearance=i);this.appearanceTran=new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})});const t=ri(this.drawData.style),e=li(this.drawData.style,t);this.appearance=e.appearance,this.depthFailAppearance=e.depthFailAppearance}}class di extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(i),this.positions.length<3)return;const t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){const t=[...i,i[0]];this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class hi extends i{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return;this.drawData.__needUpdateAppearance&&this.setAppearance(),this.primitiveCollection.removeAll(),this.calcShapePositions(this.positions);const i=JSON.parse(JSON.stringify(this.positions)),t=this.drawData.clampToGround?d(i[0],i[1]):a(i[0],i[1]);if(!t)return;const e=w.Cartographic.fromCartesian(i[0]).height,s=[new w.GeometryInstance({geometry:new w.CircleGeometry({center:i[0],height:e,radius:t}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new w.GroundPrimitive({geometryInstances:s,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new w.Primitive({geometryInstances:s,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){let t=i;const e=a(i[0],i[1]),s=w.Cartographic.fromCartesian(i[0]).height,o=new w.CircleOutlineGeometry({center:i[0],height:s,radius:e}),n=w.CircleOutlineGeometry.createGeometry(o);let r=[];if(n){const i=[].slice.call(n.attributes.position.values);r=w.Cartesian3.unpackArray(i),r.push(r[0]),t=r}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class ci extends i{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return this.primitiveCollection;this.primitiveCollection.removeAll(),this.drawData.__needUpdateAppearance&&this.setAppearance();const i=JSON.parse(JSON.stringify(this.positions));i.length=2,this.calcShapePositions(i);const t=w.Cartographic.fromCartesian(i[0]).height,e=w.Rectangle.fromCartesianArray(i),a=[new w.GeometryInstance({geometry:new w.RectangleGeometry({rectangle:e,height:t}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new w.GroundPrimitive({geometryInstances:a,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new w.Primitive({geometryInstances:a,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){let t=i;const e=w.Cartographic.fromCartesian(i[0]).height,a=w.Rectangle.fromCartesianArray(i),s=new w.RectangleOutlineGeometry({rectangle:a,height:e}),o=w.RectangleOutlineGeometry.createGeometry(s);let n=[];if(o){const i=[].slice.call(o.attributes.position.values);n=w.Cartesian3.unpackArray(i),n.push(n[0]),t=n}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class mi extends i{drawData;labelCollection;measureDivs;cesiumWidget;viewer;constructor(i,t){super(),this.viewer=t,this.cesiumWidget=t._element.getElementsByClassName("cesium-widget")[0],this.drawData=i,this.labelCollection=new w.LabelCollection({scene:t.scene}),this.drawData.measureLabel&&this.setAppearance(),this.measureDivs=[],this.renderDivPosition()}getPrimitive(){return this.drawData.isEditing&&this.drawData.measureLabel?"point"===this.drawData.shape?(this.updatePointDivLabel(),this.labelCollection):this.drawData.shapePositions&&this.drawData.shapePositions.length>=2?(this.updateUnit(this.drawData.measureUnit),this.labelCollection):void 0:this.labelCollection}updateUnit(i){if("point"===this.drawData.shape)return;this.drawData.measureUnit=i,this.clearAllDiv();const t=(i=>{let{shapePositions:t,positions:e,shape:s,clampToGround:o,measureUnit:n}=i;t||(t=e),o||(o=!1);const[r,h]=si(n),c=ii("m");i.measureUnit=[r,h];const m=[];if("polyline"===s&&(ai(e,o,m,r),m.push({value:0,unit:r,position:e[0],positions:e,prefixText:"起点"}),m.push({value:Number(m.reduce((i,t)=>i+t.value,0).toFixed(2)),unit:r,position:e[e.length-1],positions:e})),"vertical-surface-line"===s&&ai(t,o,m,r),"vertical-line"===s&&(ai(t,o,m,r),m.forEach((i,t)=>{0===t&&(i.prefixText="高度"),1===t&&(i.prefixText="水平距离"),2===t&&(i.prefixText="空间距离")})),"polygon"===s){ai(t,o,m,r);const i=$(l(t),c,h);m.push({value:Number(i.toFixed(2)),unit:h,position:p(t),positions:t})}if("rectangle"===s){ai(t,o,m,r);const i=$(l(t),c,h);m.push({value:Number(i.toFixed(2)),unit:h,position:p(t),positions:t})}if("circle"===s){const i=o?d(e[0],e[1]):a(e[0],e[1]);m.push({value:Number(Z(i,"m",r).toFixed(2)),unit:r,position:e[1],positions:e,prefixText:"半径"});const t=$(i*i*Math.PI,c,h);i>0&&m.push({value:Number(t.toFixed(2)),unit:h,position:e[0],positions:e})}return m})(this.drawData);this.drawData.measureResult=t,t.forEach((i,t)=>{let e="";i.prefixText?(e=`${i.prefixText}`,i.value&&(e+=`:${i.value}${i.unit}`)):e+=`${i.value}${i.unit}`;const a=this.createDiv(`measure-label-${this.drawData.id}-${t}`,e);this.measureDivs.push({position:i.position,divEle:a})})}updatePointDivLabel(){this.clearAllDiv(),this.drawData.positions.forEach(i=>{const t=e(i),a=this.createDiv(`measure-label-${this.drawData.id}-0`,`经度:${t.longitude.toFixed(6)}\n纬度:${t.latitude.toFixed(6)}\n高度:${t.height.toFixed(6)}`);this.measureDivs.push({position:i,divEle:a})})}renderDivPosition(){this.viewer.scene.postRender.addEventListener(()=>{this.measureDivs.forEach(i=>{const t=this.viewer.scene.cartesianToCanvasCoordinates(i.position);if(t){i.divEle.style.display="block";const e=i.divEle.getBoundingClientRect();i.divEle.style.left=t.x-e.width/2+"px",i.divEle.style.top=t.y-e.height+"px"}else i.divEle.style.display="none"})})}destroy(){super.destroy(),this.clearAllDiv()}setAppearance(){}clearAllDiv(){this.measureDivs.forEach(i=>{i.divEle.remove()}),this.measureDivs=[]}createDiv(i,t,e=48){const a=`\n <div style="\n background: rgba(0, 0, 0, 0.6);\n color: white;\n border-radius: 5px;\n padding: 0 10px 0 10px;\n font-size: 14px;\n white-space: nowrap;\n pointer-events: none;\n ">\n ${t.split("\n").map(i=>`\n <div style="height: 24px; line-height: 24px">\n ${i}\n </div>\n `).join(" ")}\n </div>\n <div style="\n height: ${e}px;\n width: 2px;\n background: rgba(0, 0, 0, 0.6);\n margin: auto;\n ">\n </div>\n `,s=document.createElement("div");return s.id=i,s.innerHTML=a,s.style.position="absolute",s.style.pointerEvents="none",s.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(s),s}calcShapePositions(i){this.setShapePositions(i)}}class wi extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;arrowLengthScale;constructor(i,t){super(),this.arrowLengthScale=5,this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new w.PrimitiveCollection,this.viewer=t,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;let i=this.positions;i=ei(i,this.drawData.shape);let t=r(i)/this.arrowLengthScale;return t>3e6&&(t=3e6),i=ni(i,t/2),this.calcShapePositions(i),i.length<2?void 0:(this.setShapePositions(i),this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:i,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:i,width:this.drawData.style.polyline.width}))}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=this.getGeometry();if(!i)return;const t=new w.GeometryInstance({geometry:i,id:this.drawData.id});return i?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){if(i)return void(this.appearance=i);this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})});const t=ri(this.drawData.style),e=li(this.drawData.style,t);this.appearance=e.appearance,this.depthFailAppearance=e.depthFailAppearance}calcShapePositions(i){this.setShapePositions(i)}}class ui extends i{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.linePrimitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=this.drawData.shapePositions||[];if(this.calcShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:i,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:i,width:this.drawData.style.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=this.getGeometry();if(!i)return;const t=new w.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){if(i)return void(this.appearance=i);this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})});const t=ri(this.drawData.style),e=li(this.drawData.style,t);this.appearance=e.appearance,this.depthFailAppearance=e.depthFailAppearance}calcShapePositions(i){this.setShapePositions(i)}}class gi extends i{positions;drawData;pointCollection;billboardCollection;primitiveColltction;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.pointCollection=new w.PointPrimitiveCollection,this.billboardCollection=new w.BillboardCollection,this.primitiveColltction=new w.PrimitiveCollection,this.primitiveColltction.add(this.pointCollection),this.primitiveColltction.add(this.billboardCollection),console.log(this.billboardCollection)}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.drawData.style.point?.pixelSize||1,t=this.drawData.style.point?.offsetX,e=this.drawData.style.point?.offsetY;if(this.drawData.style.point?.image){const a=this.billboardCollection._billboards.map(i=>i.position),s=this.drawData.positions[this.drawData.positions.length-1];this.drawData.positions.forEach(s=>{a.find(i=>i.x===s.x&&i.y===s.y&&i.z===s.z)||this.billboardCollection.add({id:`draw-${this.drawData.id}-${h()}`,position:s,image:this.drawData.style.point.image,color:w.Color.fromCssColorString(this.drawData.style.point.color),width:i,height:i,pixelOffset:new w.Cartesian2(t||0,e||0),disableDepthTestDistance:Number.POSITIVE_INFINITY})});return this.billboardCollection._billboards.filter((i,t)=>{if(s.x===i.position.x&&s.y===i.position.y&&s.z===i.position.z)return!1;return!this.positions.find(t=>t.x===i.position.x&&t.y===i.position.y&&t.z===i.position.z)}).forEach(i=>{this.billboardCollection.remove(i)}),this.billboardCollection}return this.pointCollection.removeAll(),this.drawData.positions.forEach(t=>{this.pointCollection.add({id:`draw-${this.drawData.id}-${h()}`,position:t,color:w.Color.fromCssColorString(this.drawData.style.point.color),pixelSize:i,outlineColor:w.Color.fromCssColorString(this.drawData.style.point.outlineColor),outlineWidth:this.drawData.style.point?.outlineWidth,disableDepthTestDistance:Number.POSITIVE_INFINITY})}),this.pointCollection}getPointPrimitives(){return this._primitive._pointPrimitives}}const yi={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},Ai={},vi=i=>{const{type:t,action:e,outline:a,pointCount:s}=i;Ai[t]=(i,t)=>{e(i,t),a&&fi(i)},s&&(yi[t]=s)},Ci=(i,t,e)=>{Ai[t]&&Ai[t](e,i),Pi(e)},Pi=i=>{const t=new gi(i);i.primitives.add(t),i.primitives.raiseToTop(t)},Di=i=>{const t=new pi(i);i.primitives.add(t)},fi=i=>{const t=new ui(i);i.primitives.add(t)},Ei=(i,t)=>{const e=new wi(i,t);i.primitives.add(e)},Ii=i=>{const t=new di(i);i.primitives.add(t)},Si=i=>{const t=new hi(i);i.primitives.add(t)},Mi=i=>{const t=new ci(i);i.primitives.add(t)},bi=(i,t)=>{const e=new mi(i,t);i.primitives.add(e),i.measurePrimitive=e,i.primitives.raiseToTop(e)},Fi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",_i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",Ti="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",Gi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class xi{static editUI;_editUi;viewer;_editUiPosition=null;_editPointPrimitive=null;_drawEditEvent;elementId="draw-edit-ui";constructor(i,t){this._editUi=null,this.viewer=i,this.create(),this.setVisible(!1),this.renderPosition(),this._drawEditEvent=t}create(){if(this._editUi=document.getElementById(this.elementId),this._editUi)return this._editUi;const i=document.createElement("DIV");i.id=this.elementId,i.className="draw-edit-ui";const t=document.createElement("DIV");t.title="点击移动节点";const e=document.createElement("img");e.src=Gi,e.className="draw-edit-icon",t.appendChild(e),t.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const a=document.createElement("DIV");a.id="addPoint";const s=document.createElement("img");s.src=Fi,s.title="点击添加节点",s.className="draw-edit-icon",a.appendChild(s),a.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const o=document.createElement("DIV"),n=document.createElement("img");o.id="removePoint",n.src=Ti,n.title="点击删除节点",n.className="draw-edit-icon",o.appendChild(n),o.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=_i,l.title="点击删除绘制",l.className="draw-edit-icon",r.appendChild(l),r.addEventListener("click",()=>{this._drawEditEvent.drawDelete&&this._drawEditEvent.drawDelete(this._editPointPrimitive)}),i.appendChild(t),i.appendChild(a),i.appendChild(o),i.appendChild(r),document.body.appendChild(i),this._editUi=i}setAddElementStatus(i){const t=document.getElementById("addPoint"),e=document.getElementById("removePoint");t&&(t.style.display=i?"block":"none"),e&&(e.style.display=i?"block":"none")}static createEditUi(i,t){return xi.editUI||(xi.editUI=new xi(i,t)),xi.editUI}showAt(i,t,e){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=t,this.setAddElementStatus(!yi[e])}setVisible(i){this._editUi&&(this._editUi.style.display=i?"flex":"none")}renderPosition(){this.viewer.scene.postRender.addEventListener(()=>{if(this._editUiPosition&&this._editUi&&"flex"===this._editUi.style.display){const i=this.viewer.scene.cartesianToCanvasCoordinates(this._editUiPosition);this._editUi.style.position="fixed",this._editUi.style.top=i.y-28+"px",this._editUi.style.left=`${i.x+15}px`}})}destroy(){xi.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}Ai.polyline=i=>{Di(i)},Ai["polyline-arrow"]=(i,t)=>{Di(i),Ei(i,t)},Ai.curve=i=>{Di(i)},Ai["curve-arrow"]=(i,t)=>{Di(i),Ei(i,t)},Ai["vertical-line"]=i=>{i.clampToGround=!1,Di(i)},Ai["vertical-surface-line"]=i=>{i.clampToGround=!1,Di(i)},Ai.polygon=i=>{Ii(i),fi(i)},Ai.circle=i=>{Si(i),fi(i)},Ai.rectangle=i=>{Mi(i),fi(i)},vi({type:"sector",action:G,outline:!0,pointCount:3}),vi({type:"db-arrow",action:x,outline:!0,pointCount:4}),vi({type:"fine-arrow",action:R,outline:!0,pointCount:2});const Ri=i=>{let t;const e=[];let a=new w.Cartesian3(0,0,0);const s=[];let o,n;const r=c.createToolTip(i);let l=!1;((i,t)=>{const e=i.scene,a=new w.ScreenSpaceEventHandler(e.canvas);let s;i.cesiumWidget.screenSpaceEventHandler.removeInputAction(w.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),a.setInputAction(a=>{const o=e.pickPosition(a.position),n=(new Date).getTime();if(s&&n-s<270){const e=i.scene.pick(a.position);return void t(u.DRAW_DB_CLICK,{position:o,pickPrimitive:e?.primitive,windowPosition:a.position})}t(u.DRAW_ADD,{position:o}),s=(new Date).getTime()},w.ScreenSpaceEventType.LEFT_CLICK),a.setInputAction(a=>{const s=i.scene.pick(a.endPosition),o=e.pickPosition(a.endPosition);t(u.DRAW_MOVE,{position:o,pickPrimitive:s?.primitive,windowPosition:a.endPosition}),s&&t(u.DRAW_PICK,{position:o,pickPrimitive:s?.primitive,windowPosition:a.endPosition})},w.ScreenSpaceEventType.MOUSE_MOVE),a.setInputAction(()=>{t(u.DRAW_RIGHT_CLICK,{})},w.ScreenSpaceEventType.RIGHT_CLICK)})(i,(i,t)=>{o&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||o.isEditing)&&C[i]?.(t)});const p=new w.PrimitiveCollection;p.destroyPrimitives=!1,i.scene.primitives.add(p);const d=()=>{o&&(o.isEditing=!1,o.isDisAdd=!0,f(),I.id===o.id?g():(m(o.id),o={}))},m=i=>{const t=s.findIndex(t=>t.id===i);if(-1===t)return;const e=s[t];e.positions.length=0,s.splice(t,1),T.drawRemove&&T.drawRemove(e),setTimeout(()=>{e.measurePrimitive?.clearAllDiv(),p.remove(e?.primitives)},300)},g=()=>{if(I.id)return I.id="",o.isDisAdd=!0,o.isEditing=!0,I.originPosition?(o.positions.splice(I.index,1,I.originPosition),I.pointPrimitive.position=I.originPosition):o?.positions.splice(I.index,1),T.drawEditEnd&&T.drawEditEnd(o),setTimeout(()=>{o.isEditing=!1,o.isDisAdd=!1},300),a=new w.Cartesian3(0,0,0),n=void 0,void f();if((!yi[o.shape]||yi[o.shape]>2)&&o.positions&&o.positions.length>2){const i=l?2:1,t=o.pointPrimitives.get(o.positions.length-i);return o.pointPrimitives.remove(t),void o?.positions.splice(o.positions.length-i,1)}a=new w.Cartesian3(0,0,0),n=void 0,m(o.id),o={},f()},v=t=>{t||(t=o),i._element.style.cursor="default",a=new w.Cartesian3(0,0,0),t.positions.pop(),t.isDisAdd=!0,setTimeout(()=>{t.isEditing=!1,t.isDisAdd=!1,T.drawEnd&&T.drawEnd(t),o={}},300),n=void 0,f()},C={drawAdd:({position:i})=>{if(o.positions.push(i),l=!1,I.id)return T.drawEditEnd&&T.drawEditEnd(o),I.id="",void v();T.drawAdd&&T.drawAdd(i,o),o.positions.length>yi[o.shape]&&v()},drawMove:({position:i,windowPosition:t})=>{if(l=!0,E(),i&&!o.isDisAdd&&o.isEditing){if(f(t),I.id)o.positions.splice(I.index,1,i),I.pointPrimitive.position=i;else{const t=o.positions.findIndex(i=>i.x===a.x&&i.y===a.y&&i.z===a.z);o.positions.push(i),-1!==t&&o.positions.splice(t,1)}a=i,T.drawMove&&T.drawMove(i,o)}},drawPick:({pickPrimitive:i,windowPosition:t})=>{o.isEditing||(i instanceof w.PointPrimitive||i instanceof w.Billboard)&&P(i,t)},drawDbClick:({position:i,windowPosition:t,pickPrimitive:e})=>{if(o.isEditing){if(yi[o.shape])return;v()}else!o.isEditing&&e&&D(i,t,e)},drawRightClick:()=>{o.isEditing?g():t.setVisible(!1)}},P=(t,a)=>{const o=t.id.split("-")[1],l=s.find(i=>i.id===o);if(e.includes(t.id))return;if(!l)return;if(!l.edit)return;i._element.style.cursor="pointer";const p=l.style.point;p.image?(t.width=1.5*p.pixelSize,t.height=1.5*p.pixelSize):(t.pixelSize=1.5*p.pixelSize,t.outlineWidth=1.5*p.outlineWidth),n=t,r.showAt(a,y.pointEnter),r.setVisible(!0)},D=(i,a,o)=>{if(o instanceof w.PointPrimitive||o instanceof w.Billboard){if(e.includes(o.id))return;const a=o.id.split("-")[1],n=s.find(i=>i.id===a);if(!n)return;if(!n.edit)return;t.showAt(i,o,n.shape),T.drawEditStart&&T.drawEditStart(n)}},f=t=>{if(!r)return void(i._element.style.cursor="default");if(!t||!o.positions)return i._element.style.cursor="default",void r.setVisible(!1);const e=yi[o.shape]?"default":"default-dbclick";I.id?r.showAt(t,y.drawEditMove[o.shape]||y.drawEditMove.default):yi[o.shape]!==o.positions.length?o.positions.length>1?r.showAt(t,y.drawMove[e]||y.drawMove[e]):r.showAt(t,y.drawStart[e]||y.drawStart.default):r.showAt(t,y.drawEnd)},E=()=>{if(n){const i=n.id.split("-")[1],t=s.find(t=>t.id===i);if(!t)return;const e=t.style.point;e.image?(n.width=e.pixelSize,n.height=e.pixelSize):(n.pixelSize=e.pixelSize,n.outlineWidth=e.outlineWidth),f()}},I={},S={drawEditAdd:e=>{t.setVisible(!1);const{id:a,index:s,drawData:n}=M(e),r=new w.Cartesian3(e.position.x,e.position.y,e.position.z);n?.positions.splice(s,0,r),o=n;const l=F(r,o);i._element.style.cursor="move",Object.assign(I,{id:a,index:s+1,pointPrimitive:l,originPosition:r}),o.isEditing=!0},drawEditMove:e=>{t.setVisible(!1),i._element.style.cursor="move";const{id:a,index:s,drawData:n}=M(e);o=n,Object.assign(I,{id:a,index:s,pointPrimitive:e,originPosition:new w.Cartesian3(e.position.x,e.position.y,e.position.z)}),o.isEditing=!0},drawEditRemove:i=>{t.setVisible(!1);const{index:e,drawData:a}=M(i);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(e,1),a?.pointPrimitives.remove(i),T.drawEditEnd&&T.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:i=>{t.setVisible(!1);const{id:e}=M(i);m(e)}};t=xi.createEditUi(i,S);const M=i=>{const t=i.id.split("-")[1],e=s.find(i=>i.id===t),a=e.positions.findIndex(t=>t.x===i.position.x&&t.y===i.position.y&&t.z===i.position.z);return{id:t,drawData:e,index:a}},b=(i,t)=>{const e=new w.PrimitiveCollection,a=new w.PointPrimitiveCollection,s=JSON.parse(JSON.stringify(A));i.style&&(Object.assign(s.point,i.style.point||{}),Object.assign(s.polyline,i.style.polyline||{}),Object.assign(s.polygon,i.style.polygon||{}));const o={id:i.id,edit:i.edit||!1,measure:i.measure||!1,measureLabel:i.measureLabel||!1,disDepthFail:i.disDepthFail||!1,measureUnit:i.measureUnit||["m"],isEditing:!0,shape:i.shape,positions:t,clampToGround:i.clampToGround,pointPrimitives:a,primitives:e,style:s};return p.add(e),t.forEach(i=>{F(i,o)}),o},F=(i,t)=>{const e=t.style.point;return t.pointPrimitives.add({id:`draw-${t.id}-${h()}`,position:i,...e,color:w.Color.fromCssColorString(e.color),outlineColor:w.Color.fromCssColorString(e.outlineColor),disableDepthTestDistance:Number.POSITIVE_INFINITY})},_=t=>{const e=b({...t},t.positions);e.positions.push(e.positions[e.positions.length-1]),o=e,s.push(e),Ci(i,t.shape,e),t.measure&&bi(e,i),v(e)},T={};return{draw:t=>{i._element.style.cursor="crosshair",n=void 0,t.id=h();const e=b(t,[]);o=e,T.drawStart&&T.drawStart(e),s.push(e),Ci(i,t.shape,e),t.measure&&bi(e,i)},removeEditing:d,remove:i=>{m(i.id),f()},removeAll:()=>{s.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),p.removeAll(),s.length=0,d()},setDrawStyle:i=>{Object.assign(A.point,i.point),Object.assign(A.polyline,i.polyline),Object.assign(A.polygon,i.polygon)},setDrawItemStyle:(i,t)=>{if(-1===s.findIndex(t=>t.id===i.id))throw new Error("绘制对象不存在");Object.assign(i.style.point,t.point||{}),Object.assign(i.style.polyline,t.polyline||{}),Object.assign(i.style.polygon,t.polygon||{}),i.__needUpdateAppearance=!0,i.isEditing=!0,setTimeout(()=>{i.isEditing=!1,i.__needUpdateAppearance=!1},100)},setClampToGround:(i,t)=>{if(-1===s.findIndex(t=>t.id===i.id))throw new Error("绘制对象不存在");i.clampToGround=t,i.isEditing=!0,setTimeout(()=>{i.isEditing=!1,i.__needUpdateAppearance=!1},100)},Event:T,updateMeasureUnit:(i,t)=>{if(-1===s.findIndex(t=>t.id===i.id))throw new Error("绘制对象不存在");const e=i.primitives._primitives.find(i=>i instanceof mi);e&&e.updateUnit(t)},reShowDrawData:_,reShowDrawDatas:i=>{i.forEach(i=>{_(i)})}}};export{g as Draw,u as DrawEventType,A as DrawStyle,vi as addDrawActions,Ri as createDrawHandler};
|
|
1
|
+
import{BasePrimitive as i,makePositionsToLnglats as t,makePositiontoLnglat as e,calcSpaceDistance as a,makeLnglatsToPositions as s,calcSpaceDistances as o,makeLnglatToPosition as n,calcGeodesicDistances as r,calcArea as l,calcPoistionCenter as p,calcGeodesicDistance as d,numberId as h,Tooltip as c}from"@ino-cesium/common";import*as m from"@turf/turf";import*as w from"cesium";const u={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。","default-dbclick":"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。",default:"单机左键绘制下一个节点,单机右键撤销上次绘制。"},drawEnd:"单击左键结束绘制,单机右键取消上次绘制",pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},g={point:{color:"rgba(255,255,0,0.8)",pixelSize:8,offsetX:0,offsetY:0,outlineColor:"rgba(255,255,255,0.8)",outlineWidth:3,disableDepthTestDistance:Number.POSITIVE_INFINITY},polyline:{width:5,color:"rgba(81,255,0,0.8)",depthFailColor:"rgba(200,255,200,0.5)"},polygon:{color:"rgba(255,255,54,0.3)",depthFailColor:"rgba(255,0,0,0.3)"}};class y extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.drawData.__needUpdateAppearance&&this.setAppearance(),this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const s=t(i).map(i=>m.point([i.longitude,i.latitude])),o=e(i[0]).height,n=a(i[0],i[1]),[r,l,p]=[s[0],s[1],s[2]],d=m.bearing(r,l),h=m.bearing(r,p),c=m.lineArc(r,n/1e3,d,h).geometry.coordinates.map(i=>[i[0],i[1],o]);c.push([...r.geometry.coordinates,o]),c.unshift([...r.geometry.coordinates,o]),this.drawData.shapePositions=w.Cartesian3.fromDegreesArrayHeights(c.flat()),this.setShapePositions(this.drawData.shapePositions)}}const A=(i,t)=>Math.sqrt((i[0]-t[0])**2+(i[1]-t[1])**2),v=i=>{let t=0;return i&&Array.isArray(i)&&i.length>0&&i.forEach((e,a)=>{a<i.length-1&&(t+=A(e,i[a+1]))}),t},C=i=>v(i)**.99,P=(i,t)=>[(i[0]+t[0])/2,(i[1]+t[1])/2],D=(i,t)=>{let e;const a=Math.asin(Math.abs(t[1]-i[1])/A(i,t));return t[1]>=i[1]&&t[0]>=i[0]?e=a+Math.PI:t[1]>=i[1]&&t[0]<i[0]?e=2*Math.PI-a:t[1]<i[1]&&t[0]<i[0]?e=a:t[1]<i[1]&&t[0]>=i[0]&&(e=Math.PI-a),e},f=(i,t,e)=>{const a=D(t,i)-D(t,e);return a<0?a+2*Math.PI:a},E=(i,t,e,a,s)=>{const o=D(i,t),n=s?o+e:o-e,r=a*Math.cos(n),l=a*Math.sin(n);return[t[0]+r,t[1]+l]},I=function(i){if(i.length<=2)return i;const t=[],e=i.length-1;for(let a=0;a<=1;a+=.01){let[s,o]=[0,0];for(let t=0;t<=e;t++){const n=M(e,t),r=a**t,l=(1-a)**(e-t);s+=n*r*l*i[t][0],o+=n*r*l*i[t][1]}t.push([s,o])}return t.push(i[e]),t},S=i=>{let t=1;switch(i){case i<=1:t=1;break;case 2===i:t=2;break;case 3===i:t=6;break;case 24===i:t=24;break;case 5===i:t=120;break;default:for(let e=1;e<=i;e++)t*=e}return t},M=(i,t)=>S(i)/(S(t)*S(i-t));class b extends i{positions;drawData;depthFailAppearance;connPoint;tempPoint4;llBodyPnts=[];rrBodyPnts=[];isClockWise;neckWidthFactor;headWidthFactor;headHeightFactor;neckHeightFactor;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance(),this.headHeightFactor=.25,this.headWidthFactor=.3,this.neckHeightFactor=.85,this.neckWidthFactor=.15,this.connPoint=[0,0],this.tempPoint4=[0,0],this.isClockWise=!1}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.drawData.__needUpdateAppearance&&this.setAppearance(),this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const e=[],a=t(i).map(i=>(e.push(i.height),[i.longitude,i.latitude])),o=Math.max(...e),[n,r,l]=[a[0],a[1],a[2]],p=a.length;let d,h;3===p?(this.tempPoint4=this.getTempPoint4(n,r,l),this.connPoint=P(n,r)):4===p?(this.tempPoint4=a[3],this.connPoint=P(n,r)):(this.tempPoint4=a[3],this.connPoint=a[4]),this.isClockWise=((i,t,e)=>(e[1]-i[1])*(t[0]-i[0])>(t[1]-i[1])*(e[0]-i[0]))(n,r,l),this.isClockWise?(d=this.getArrowPoints(n,this.connPoint,this.tempPoint4,!1),h=this.getArrowPoints(this.connPoint,r,l,!0)):(d=this.getArrowPoints(r,this.connPoint,l,!1),h=this.getArrowPoints(this.connPoint,n,this.tempPoint4,!0));const c=d.length,m=(c-5)/2,u=d.slice(0,m),g=d.slice(m,m+5);let y=d.slice(m+5,c);this.llBodyPnts=u;let A=h.slice(0,m);const v=h.slice(m,m+5),C=h.slice(m+5,c);this.rrBodyPnts=C,A=I(A);const D=I(C.concat(u.slice(1)));y=I(y);const f=A.concat(v,D,g,y).filter(i=>i[0]&&i[1]).map(i=>new w.Cartographic(i[0],i[1],o)),E=s(f);this.drawData.shapePositions=E,this.drawData.shapePositions.push(E[0]),this.setShapePositions(this.drawData.shapePositions)}getTempPoint4(i,t,e){const a=P(i,t),s=A(a,e),o=f(i,a,e);let n,r,l,p=[0,0];return o<Math.PI/2?(n=s*Math.sin(o),r=s*Math.cos(o),l=E(i,a,Math.PI/2,n,!1),p=E(a,l,Math.PI/2,r,!0)):o>=Math.PI/2&&o<Math.PI?(n=s*Math.sin(Math.PI-o),r=s*Math.cos(Math.PI-o),l=E(i,a,Math.PI/2,n,!1),p=E(a,l,Math.PI/2,r,!1)):o>=Math.PI&&o<1.5*Math.PI?(n=s*Math.sin(o-Math.PI),r=s*Math.cos(o-Math.PI),l=E(i,a,Math.PI/2,n,!0),p=E(a,l,Math.PI/2,r,!0)):(n=s*Math.sin(2*Math.PI-o),r=s*Math.cos(2*Math.PI-o),l=E(i,a,Math.PI/2,n,!0),p=E(a,l,Math.PI/2,r,!1)),p}getArrowPoints(i,t,e,a){const s=P(i,t),o=A(s,e);let n=E(e,s,0,.3*o,!0),r=E(e,s,0,.5*o,!0);n=E(s,n,Math.PI/2,o/5,a),r=E(s,r,Math.PI/2,o/4,a);const l=[s,n,r,e],p=this.getArrowHeadPoints(l);if(!(p&&Array.isArray(p)&&p.length>0))throw new Error("Interpolation Error");{const e=p[0],a=p[4],s=A(i,t)/C(l)/2,o=this.getArrowBodyPoints(l,e,a,s);if(o){const s=o.length;let n=o.slice(0,s/2),r=o.slice(s/2,s);return n.push(e),r.push(a),n=n.reverse(),n.push(t),r=r.reverse(),r.push(i),n.reverse().concat(p,r)}}}getArrowBodyPoints(i,t,e,a){const s=v(i),o=C(i)*a,n=(o-A(t,e))/2;let r=0;const l=[],p=[];for(let t=1;t<i.length-1;t++){const e=f(i[t-1],i[t],i[t+1])/2;r+=A(i[t-1],i[t]);const a=(o/2-r/s*n)/Math.sin(e),d=E(i[t-1],i[t],Math.PI-e,a,!0),h=E(i[t-1],i[t],e,a,!1);l.push(d),p.push(h)}return l.concat(p)}getArrowHeadPoints(i){const t=C(i)*this.headHeightFactor,e=i[i.length-1],a=t*this.headWidthFactor,s=t*this.neckWidthFactor,o=t*this.neckHeightFactor,n=E(i[i.length-2],e,0,t,!0),r=E(i[i.length-2],e,0,o,!0),l=E(e,n,Math.PI/2,a,!1),p=E(e,n,Math.PI/2,a,!0);return[E(e,r,Math.PI/2,s,!1),l,e,p,E(e,r,Math.PI/2,s,!0)]}}class F extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.drawData.__needUpdateAppearance&&this.setAppearance(),this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<2)return;const a=t(i).map(i=>m.point([i.longitude,i.latitude])),s=e(i[0]).height,n=o(i)/1e3,[r,l]=[a[0],a[1]],p=m.bearing(r,l),d=m.destination(r,.1*n,p-90,{units:"kilometers"}),h=m.destination(r,.1*n,p+90,{units:"kilometers"}),c=m.destination(r,.8*n,p-5,{units:"kilometers"}),u=m.destination(r,.8*n,p+5,{units:"kilometers"}),g=m.destination(r,.75*n,p-13,{units:"kilometers"}),y=m.destination(r,.75*n,p+13,{units:"kilometers"}),A=[...d.geometry.coordinates,s,...c.geometry.coordinates,s,...g.geometry.coordinates,s,...l.geometry.coordinates,s,...y.geometry.coordinates,s,...u.geometry.coordinates,s,...h.geometry.coordinates,s,...d.geometry.coordinates,s];this.drawData.shapePositions=w.Cartesian3.fromDegreesArrayHeights(A.flat()),this.setShapePositions(this.drawData.shapePositions)}}const T=i=>{const t=new y(i);i.primitives.add(t)},_=i=>{const t=new b(i);i.primitives.add(t)},G=i=>{const t=new F(i);i.primitives.add(t)},x="cm",R="厘米",U="m",k="米",N="km",O="千米",B="公里",H="㎡",L="平方厘米",V="㎡",W="平方米",K="km²",z="平方千米",j="平方公里",J="亩",Q="公顷",Y={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},X=(i,t,e)=>t===e?i:i*$(e),q=(i,t,e)=>t===e?i:i*function(i){switch(i){case H:return 1e4;case V:return 1;case K:return 1e-6;case L:return 1e4;case W:return 1;case z:case j:return 1e-6;case J:return.0015;case Q:return 1e-4;default:return 1}}(e),Z=i=>Y[i],$=i=>{switch(i){case U:return 1;case x:case R:return 100;case N:return.001;case k:return 1;case O:case B:return.001;default:return 1}};const ii=(i,t)=>{let a=i;if("vertical-surface-line"===t&&i.length>=1){const t=i[0],e=w.Cartographic.fromCartesian(t),s=w.Math.toDegrees(e.longitude),o=w.Math.toDegrees(e.latitude),n=0;a=[w.Cartesian3.fromDegrees(s,o,e.height),w.Cartesian3.fromDegrees(s,o,n)]}if("vertical-line"===t&&i.length>=2){const t=i[0],s=i[1],o=e(t),r=e(s);let l=o,p=r;o.height>r.height&&(l=r,p=o),console.log(l.longitude,l.latitude,p.height);const d=n(new w.Cartographic(l.longitude,l.latitude,p.height));a=[n(l),d,n(p),n(l)]}return t.startsWith("curve")&&i.length>2&&(a=ai(i)),a},ti=(i,t,e,s,o)=>{e.push(...i.map((e,o)=>{const n=i[o+1];if(n){let i=t?d(e,n):a(e,n);return i=X(i,"m",s),{value:Number(i.toFixed(2)),unit:s,position:p([e,n]),positions:[e,n]}}return null}).filter(i=>i&&i.value>0))},ei=i=>{if(2===i.length)return i;let[t,e]=i;return e||(e=Z(t)),[t,e]},ai=i=>{const t=i.length,e=r(i),a=Math.floor(e/5),s=[];for(let i=0;i<t;i++)s.push(1.5*i);const o=new w.CatmullRomSpline({points:i,times:s}),n=[],l=s[0],p=s[s.length-1];for(let i=0;i<a;i++){const t=i/(a-1),e=w.Math.lerp(l,p,t),s=o.evaluate(e);n.push(s)}return n},si=(i,t=1e3)=>{if(i.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const a=i[i.length-1],s=i[i.length-2],o=e(a),r=e(s),l=o.height,p=o.longitude-r.longitude,d=o.latitude-r.latitude,h=Math.sqrt(p**2+d**2);if(h<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const c=p/h,m=d/h,u=(i=>{const t=w.Math.toRadians(.5),e=n(i),a=n(new w.Cartographic(i.longitude+t,i.latitude,i.height)),s=2*w.Cartesian3.distance(e,a),o=n(new w.Cartographic(i.longitude,i.latitude+t,i.height));return{lon:s,lat:2*w.Cartesian3.distance(e,o)}})(o),g=t/u.lon*w.Math.RADIANS_PER_DEGREE,y=t/u.lat*w.Math.RADIANS_PER_DEGREE,A=Math.PI/6,v=t*Math.tan(A),C=v/u.lon*w.Math.RADIANS_PER_DEGREE,P=v/u.lat*w.Math.RADIANS_PER_DEGREE,D=o.longitude-c*g-m*C,f=o.latitude-m*y+c*P,E=o.longitude-c*g+m*C,I=o.latitude-m*y-c*P,S=n(new w.Cartographic(D,f,l)),M=n(new w.Cartographic(E,I,l));return[S,n(new w.Cartographic(o.longitude,o.latitude,l)),M]},oi=i=>{const t=i.polyline.type;let e="Color",a={};return"solid"===t&&(e="Color"),"dash"===t&&(e="PolylineDash",i.polyline.dash||(a={}),i.polyline.dash.gapColor&&(a.gapColor=w.Color.fromCssColorString(i.polyline.dash.gapColor)),i.polyline.dash.dashLength&&(a.dashLength=i.polyline.dash.dashLength)),"glow"===t&&(e="PolylineGlow",a=i.polyline.glow?i.polyline.glow:{}),"trail"===t&&(e="PolylineTrail"),"PolylineDash"===e&&i.polyline.dash&&(i.polyline.dash.gapColor&&(a.gapColor=w.Color.fromCssColorString(i.polyline.dash.gapColor)),i.polyline.dash.dashLength&&(a.dashLength=i.polyline.dash.dashLength)),"PolylineGlow"===e&&i.polyline.dash&&(i.polyline.dash.gapColor&&(a.gapColor=w.Color.fromCssColorString(i.polyline.dash.gapColor)),i.polyline.dash.dashLength&&(a.dashLength=i.polyline.dash.dashLength)),"PolylineTrail"===e&&i.polyline.dash&&(a.image="/icons/material/polyline/迁徙线材质.png"),{type:e,style:a}},ni=(i,t)=>({appearance:new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:t.type,uniforms:{color:w.Color.fromCssColorString(i.polyline.color),...t.style}}})}),depthFailAppearance:new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:t.type,uniforms:{color:w.Color.fromCssColorString(i.polyline.depthFailColor),...t.style}}})})});class ri extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=ii(this.positions,this.drawData.shape);if(this.drawData.shapePositions=i,"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(this.setShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:i,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:i,width:this.drawData.style.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=this.getGeometry();if(!i)return;const t=new w.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){if(i)return void(this.appearance=i);this.appearanceTran=new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})});const t=oi(this.drawData.style),e=ni(this.drawData.style,t);this.appearance=e.appearance,this.depthFailAppearance=e.depthFailAppearance}}class li extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(i),this.positions.length<3)return;const t=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){const t=[...i,i[0]];this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class pi extends i{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return;this.drawData.__needUpdateAppearance&&this.setAppearance(),this.primitiveCollection.removeAll(),this.calcShapePositions(this.positions);const i=JSON.parse(JSON.stringify(this.positions)),t=this.drawData.clampToGround?d(i[0],i[1]):a(i[0],i[1]);if(!t)return;const e=w.Cartographic.fromCartesian(i[0]).height,s=[new w.GeometryInstance({geometry:new w.CircleGeometry({center:i[0],height:e,radius:t}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new w.GroundPrimitive({geometryInstances:s,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new w.Primitive({geometryInstances:s,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){let t=i;const e=a(i[0],i[1]),s=w.Cartographic.fromCartesian(i[0]).height,o=new w.CircleOutlineGeometry({center:i[0],height:s,radius:e}),n=w.CircleOutlineGeometry.createGeometry(o);let r=[];if(n){const i=[].slice.call(n.attributes.position.values);r=w.Cartesian3.unpackArray(i),r.push(r[0]),t=r}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class di extends i{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return this.primitiveCollection;this.primitiveCollection.removeAll(),this.drawData.__needUpdateAppearance&&this.setAppearance();const i=JSON.parse(JSON.stringify(this.positions));i.length=2,this.calcShapePositions(i);const t=w.Cartographic.fromCartesian(i[0]).height,e=w.Rectangle.fromCartesianArray(i),a=[new w.GeometryInstance({geometry:new w.RectangleGeometry({rectangle:e,height:t}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new w.GroundPrimitive({geometryInstances:a,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new w.Primitive({geometryInstances:a,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.color)})}),this.depthFailAppearance=new w.MaterialAppearance({material:w.Material.fromType("Color",{color:w.Color.fromCssColorString(this.drawData.style.polygon.depthFailColor)})})}calcShapePositions(i){let t=i;const e=w.Cartographic.fromCartesian(i[0]).height,a=w.Rectangle.fromCartesianArray(i),s=new w.RectangleOutlineGeometry({rectangle:a,height:e}),o=w.RectangleOutlineGeometry.createGeometry(s);let n=[];if(o){const i=[].slice.call(o.attributes.position.values);n=w.Cartesian3.unpackArray(i),n.push(n[0]),t=n}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class hi extends i{drawData;labelCollection;measureDivs;cesiumWidget;viewer;constructor(i,t){super(),this.viewer=t,this.cesiumWidget=t._element.getElementsByClassName("cesium-widget")[0],this.drawData=i,this.labelCollection=new w.LabelCollection({scene:t.scene}),this.drawData.measureLabel&&this.setAppearance(),this.measureDivs=[],this.renderDivPosition()}getPrimitive(){return this.drawData.isEditing&&this.drawData.measureLabel?"point"===this.drawData.shape?(this.updatePointDivLabel(),this.labelCollection):this.drawData.shapePositions&&this.drawData.shapePositions.length>=2?(this.updateUnit(this.drawData.measureUnit),this.labelCollection):void 0:this.labelCollection}updateUnit(i){if("point"===this.drawData.shape)return;this.drawData.measureUnit=i,this.clearAllDiv();const t=(i=>{let{shapePositions:t,positions:e,shape:s,clampToGround:o,measureUnit:n}=i;t||(t=e),o||(o=!1);const[r,h]=ei(n),c=Z("m");i.measureUnit=[r,h];const m=[];if("polyline"===s&&(ti(e,o,m,r),m.push({value:0,unit:r,position:e[0],positions:e,prefixText:"起点"}),m.push({value:Number(m.reduce((i,t)=>i+t.value,0).toFixed(2)),unit:r,position:e[e.length-1],positions:e})),"vertical-surface-line"===s&&ti(t,o,m,r),"vertical-line"===s&&(ti(t,o,m,r),m.forEach((i,t)=>{0===t&&(i.prefixText="高度"),1===t&&(i.prefixText="水平距离"),2===t&&(i.prefixText="空间距离")})),"polygon"===s){ti(t,o,m,r);const i=q(l(t),c,h);m.push({value:Number(i.toFixed(2)),unit:h,position:p(t),positions:t})}if("rectangle"===s){ti(t,o,m,r);const i=q(l(t),c,h);m.push({value:Number(i.toFixed(2)),unit:h,position:p(t),positions:t})}if("circle"===s){const i=o?d(e[0],e[1]):a(e[0],e[1]);m.push({value:Number(X(i,"m",r).toFixed(2)),unit:r,position:e[1],positions:e,prefixText:"半径"});const t=q(i*i*Math.PI,c,h);i>0&&m.push({value:Number(t.toFixed(2)),unit:h,position:e[0],positions:e})}return m})(this.drawData);this.drawData.measureResult=t,t.forEach((i,t)=>{let e="";i.prefixText?(e=`${i.prefixText}`,i.value&&(e+=`:${i.value}${i.unit}`)):e+=`${i.value}${i.unit}`;const a=this.createDiv(`measure-label-${this.drawData.id}-${t}`,e);this.measureDivs.push({position:i.position,divEle:a})})}updatePointDivLabel(){this.clearAllDiv(),this.drawData.positions.forEach(i=>{const t=e(i),a=this.createDiv(`measure-label-${this.drawData.id}-0`,`经度:${t.longitude.toFixed(6)}\n纬度:${t.latitude.toFixed(6)}\n高度:${t.height.toFixed(6)}`);this.measureDivs.push({position:i,divEle:a})})}renderDivPosition(){this.viewer.scene.postRender.addEventListener(()=>{this.measureDivs.forEach(i=>{const t=this.viewer.scene.cartesianToCanvasCoordinates(i.position);if(t){i.divEle.style.display="block";const e=i.divEle.getBoundingClientRect();i.divEle.style.left=t.x-e.width/2+"px",i.divEle.style.top=t.y-e.height+"px"}else i.divEle.style.display="none"})})}destroy(){super.destroy(),this.clearAllDiv()}setAppearance(){}clearAllDiv(){this.measureDivs.forEach(i=>{i.divEle.remove()}),this.measureDivs=[]}createDiv(i,t,e=48){const a=`\n <div style="\n background: rgba(0, 0, 0, 0.6);\n color: white;\n border-radius: 5px;\n padding: 0 10px 0 10px;\n font-size: 14px;\n white-space: nowrap;\n pointer-events: none;\n ">\n ${t.split("\n").map(i=>`\n <div style="height: 24px; line-height: 24px">\n ${i}\n </div>\n `).join(" ")}\n </div>\n <div style="\n height: ${e}px;\n width: 2px;\n background: rgba(0, 0, 0, 0.6);\n margin: auto;\n ">\n </div>\n `,s=document.createElement("div");return s.id=i,s.innerHTML=a,s.style.position="absolute",s.style.pointerEvents="none",s.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(s),s}calcShapePositions(i){this.setShapePositions(i)}}class ci extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;arrowLengthScale;constructor(i,t){super(),this.arrowLengthScale=5,this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new w.PrimitiveCollection,this.viewer=t,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;let i=this.positions;i=ii(i,this.drawData.shape);let t=r(i)/this.arrowLengthScale;return t>3e6&&(t=3e6),i=si(i,t/2),this.calcShapePositions(i),i.length<2?void 0:(this.setShapePositions(i),this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:i,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:i,width:this.drawData.style.polyline.width}))}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=this.getGeometry();if(!i)return;const t=new w.GeometryInstance({geometry:i,id:this.drawData.id});return i?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){if(i)return void(this.appearance=i);this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})});const t=oi(this.drawData.style),e=ni(this.drawData.style,t);this.appearance=e.appearance,this.depthFailAppearance=e.depthFailAppearance}calcShapePositions(i){this.setShapePositions(i)}}class mi extends i{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.linePrimitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=this.drawData.shapePositions||[];if(this.calcShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:i,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:i,width:this.drawData.style.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const i=this.getGeometry();if(!i)return;const t=new w.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){if(i)return void(this.appearance=i);this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})});const t=oi(this.drawData.style),e=ni(this.drawData.style,t);this.appearance=e.appearance,this.depthFailAppearance=e.depthFailAppearance}calcShapePositions(i){this.setShapePositions(i)}}class wi extends i{positions;drawData;pointCollection;billboardCollection;primitiveColltction;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.pointCollection=new w.PointPrimitiveCollection,this.billboardCollection=new w.BillboardCollection,this.primitiveColltction=new w.PrimitiveCollection,this.primitiveColltction.add(this.pointCollection),this.primitiveColltction.add(this.billboardCollection),console.log(this.billboardCollection)}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.drawData.style.point?.pixelSize||1,t=this.drawData.style.point?.offsetX,e=this.drawData.style.point?.offsetY;if(this.drawData.style.point?.image){const a=this.billboardCollection._billboards.map(i=>i.position),s=this.drawData.positions[this.drawData.positions.length-1];this.drawData.positions.forEach(s=>{a.find(i=>i.x===s.x&&i.y===s.y&&i.z===s.z)||this.billboardCollection.add({id:`draw-${this.drawData.id}-${h()}`,position:s,image:this.drawData.style.point.image,color:w.Color.fromCssColorString(this.drawData.style.point.color),width:i,height:i,pixelOffset:new w.Cartesian2(t||0,e||0),disableDepthTestDistance:Number.POSITIVE_INFINITY})});return this.billboardCollection._billboards.filter((i,t)=>{if(s.x===i.position.x&&s.y===i.position.y&&s.z===i.position.z)return!1;return!this.positions.find(t=>t.x===i.position.x&&t.y===i.position.y&&t.z===i.position.z)}).forEach(i=>{this.billboardCollection.remove(i)}),this.billboardCollection}return this.pointCollection.removeAll(),this.drawData.positions.forEach(t=>{this.pointCollection.add({id:`draw-${this.drawData.id}-${h()}`,position:t,color:w.Color.fromCssColorString(this.drawData.style.point.color),pixelSize:i,outlineColor:w.Color.fromCssColorString(this.drawData.style.point.outlineColor),outlineWidth:this.drawData.style.point?.outlineWidth,disableDepthTestDistance:Number.POSITIVE_INFINITY})}),this.pointCollection}getPointPrimitives(){return this._primitive._pointPrimitives}}const ui={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},gi={},yi=i=>{const{type:t,action:e,outline:a,pointCount:s}=i;gi[t]=(i,t)=>{e(i,t),a&&Pi(i)},s&&(ui[t]=s)},Ai=(i,t,e)=>{gi[t]&&gi[t](e,i),vi(e)},vi=i=>{const t=new wi(i);i.primitives.add(t),i.primitives.raiseToTop(t)},Ci=i=>{const t=new ri(i);i.primitives.add(t)},Pi=i=>{const t=new mi(i);i.primitives.add(t)},Di=(i,t)=>{const e=new ci(i,t);i.primitives.add(e)},fi=i=>{const t=new li(i);i.primitives.add(t)},Ei=i=>{const t=new pi(i);i.primitives.add(t)},Ii=i=>{const t=new di(i);i.primitives.add(t)},Si=(i,t)=>{const e=new hi(i,t);i.primitives.add(e),i.measurePrimitive=e,i.primitives.raiseToTop(e)};var Mi=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(Mi||{});const bi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",Fi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",Ti="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",_i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class Gi{static editUI;_editUi;viewer;_editUiPosition=null;_editPointPrimitive=null;_drawEditEvent;elementId="draw-edit-ui";constructor(i,t){this._editUi=null,this.viewer=i,this.create(),this.setVisible(!1),this.renderPosition(),this._drawEditEvent=t}create(){if(this._editUi=document.getElementById(this.elementId),this._editUi)return this._editUi;const i=document.createElement("DIV");i.id=this.elementId,i.className="draw-edit-ui";const t=document.createElement("DIV");t.title="点击移动节点";const e=document.createElement("img");e.src=_i,e.className="draw-edit-icon",t.appendChild(e),t.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const a=document.createElement("DIV");a.id="addPoint";const s=document.createElement("img");s.src=bi,s.title="点击添加节点",s.className="draw-edit-icon",a.appendChild(s),a.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const o=document.createElement("DIV"),n=document.createElement("img");o.id="removePoint",n.src=Ti,n.title="点击删除节点",n.className="draw-edit-icon",o.appendChild(n),o.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=Fi,l.title="点击删除绘制",l.className="draw-edit-icon",r.appendChild(l),r.addEventListener("click",()=>{this._drawEditEvent.drawDelete&&this._drawEditEvent.drawDelete(this._editPointPrimitive)}),i.appendChild(t),i.appendChild(a),i.appendChild(o),i.appendChild(r),document.body.appendChild(i),this._editUi=i}setAddElementStatus(i){const t=document.getElementById("addPoint"),e=document.getElementById("removePoint");t&&(t.style.display=i?"block":"none"),e&&(e.style.display=i?"block":"none")}static createEditUi(i,t){return Gi.editUI||(Gi.editUI=new Gi(i,t)),Gi.editUI}showAt(i,t,e){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=t,this.setAddElementStatus(!ui[e])}setVisible(i){this._editUi&&(this._editUi.style.display=i?"flex":"none")}renderPosition(){this.viewer.scene.postRender.addEventListener(()=>{if(this._editUiPosition&&this._editUi&&"flex"===this._editUi.style.display){const i=this.viewer.scene.cartesianToCanvasCoordinates(this._editUiPosition);this._editUi.style.position="fixed",this._editUi.style.top=i.y-28+"px",this._editUi.style.left=`${i.x+15}px`}})}destroy(){Gi.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}gi.polyline=i=>{Ci(i)},gi["polyline-arrow"]=(i,t)=>{Ci(i),Di(i,t)},gi.curve=i=>{Ci(i)},gi["curve-arrow"]=(i,t)=>{Ci(i),Di(i,t)},gi["vertical-line"]=i=>{i.clampToGround=!1,Ci(i)},gi["vertical-surface-line"]=i=>{i.clampToGround=!1,Ci(i)},gi.polygon=i=>{fi(i),Pi(i)},gi.circle=i=>{Ei(i),Pi(i)},gi.rectangle=i=>{Ii(i),Pi(i)},yi({type:"sector",action:T,outline:!0,pointCount:3}),yi({type:"db-arrow",action:_,outline:!0,pointCount:4}),yi({type:"fine-arrow",action:G,outline:!0,pointCount:2});const xi=i=>{let t;const e=[];let a=new w.Cartesian3(0,0,0);const s=[];let o,n;const r=c.createToolTip(i);let l=!1;((i,t)=>{const e=i.scene,a=new w.ScreenSpaceEventHandler(e.canvas);let s;i.cesiumWidget.screenSpaceEventHandler.removeInputAction(w.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),a.setInputAction(a=>{const o=e.pickPosition(a.position),n=(new Date).getTime();if(s&&n-s<270){const e=i.scene.pick(a.position);return void t(Mi.DRAW_DB_CLICK,{position:o,pickPrimitive:e?.primitive,windowPosition:a.position})}t(Mi.DRAW_ADD,{position:o}),s=(new Date).getTime()},w.ScreenSpaceEventType.LEFT_CLICK),a.setInputAction(a=>{const s=i.scene.pick(a.endPosition),o=e.pickPosition(a.endPosition);t(Mi.DRAW_MOVE,{position:o,pickPrimitive:s?.primitive,windowPosition:a.endPosition}),s&&t(Mi.DRAW_PICK,{position:o,pickPrimitive:s?.primitive,windowPosition:a.endPosition})},w.ScreenSpaceEventType.MOUSE_MOVE),a.setInputAction(()=>{t(Mi.DRAW_RIGHT_CLICK,{})},w.ScreenSpaceEventType.RIGHT_CLICK)})(i,(i,t)=>{o&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||o.isEditing)&&v[i]?.(t)});const p=new w.PrimitiveCollection;p.destroyPrimitives=!1,i.scene.primitives.add(p);const d=()=>{o&&(o.isEditing=!1,o.isDisAdd=!0,D(),E.id===o.id?y():(m(o.id),o={}))},m=i=>{const t=s.findIndex(t=>t.id===i);if(-1===t)return;const e=s[t];e.positions.length=0,s.splice(t,1),T.drawRemove&&T.drawRemove(e),setTimeout(()=>{e.measurePrimitive?.clearAllDiv(),p.remove(e?.primitives)},300)},y=()=>{if(E.id)return E.id="",o.isDisAdd=!0,o.isEditing=!0,E.originPosition?(o.positions.splice(E.index,1,E.originPosition),E.pointPrimitive.position=E.originPosition):o?.positions.splice(E.index,1),T.drawEditEnd&&T.drawEditEnd(o),setTimeout(()=>{o.isEditing=!1,o.isDisAdd=!1},300),a=new w.Cartesian3(0,0,0),n=void 0,void D();if((!ui[o.shape]||ui[o.shape]>2)&&o.positions&&o.positions.length>2){const i=l?2:1,t=o.pointPrimitives.get(o.positions.length-i);return o.pointPrimitives.remove(t),void o?.positions.splice(o.positions.length-i,1)}a=new w.Cartesian3(0,0,0),n=void 0,m(o.id),o={},D()},A=t=>{t||(t=o),i._element.style.cursor="default",a=new w.Cartesian3(0,0,0),t.positions.pop(),t.isDisAdd=!0,setTimeout(()=>{t.isEditing=!1,t.isDisAdd=!1,T.drawEnd&&T.drawEnd(t),o={}},300),n=void 0,D()},v={drawAdd:({position:i})=>{if(o.positions.push(i),l=!1,E.id)return T.drawEditEnd&&T.drawEditEnd(o),E.id="",void A();T.drawAdd&&T.drawAdd(i,o),o.positions.length>ui[o.shape]&&A()},drawMove:({position:i,windowPosition:t})=>{if(l=!0,f(),i&&!o.isDisAdd&&o.isEditing){if(D(t),E.id)o.positions.splice(E.index,1,i),E.pointPrimitive.position=i;else{const t=o.positions.findIndex(i=>i.x===a.x&&i.y===a.y&&i.z===a.z);o.positions.push(i),-1!==t&&o.positions.splice(t,1)}a=i,T.drawMove&&T.drawMove(i,o)}},drawPick:({pickPrimitive:i,windowPosition:t})=>{o.isEditing||(i instanceof w.PointPrimitive||i instanceof w.Billboard)&&C(i,t)},drawDbClick:({position:i,windowPosition:t,pickPrimitive:e})=>{if(o.isEditing){if(ui[o.shape])return;A()}else!o.isEditing&&e&&P(i,t,e)},drawRightClick:()=>{o.isEditing?y():t.setVisible(!1)}},C=(t,a)=>{const o=t.id.split("-")[1],l=s.find(i=>i.id===o);if(e.includes(t.id))return;if(!l)return;if(!l.edit)return;i._element.style.cursor="pointer";const p=l.style.point;p.image?(t.width=1.5*p.pixelSize,t.height=1.5*p.pixelSize):(t.pixelSize=1.5*p.pixelSize,t.outlineWidth=1.5*p.outlineWidth),n=t,r.showAt(a,u.pointEnter),r.setVisible(!0)},P=(i,a,o)=>{if(o instanceof w.PointPrimitive||o instanceof w.Billboard){if(e.includes(o.id))return;const a=o.id.split("-")[1],n=s.find(i=>i.id===a);if(!n)return;if(!n.edit)return;t.showAt(i,o,n.shape),T.drawEditStart&&T.drawEditStart(n)}},D=t=>{if(!r)return void(i._element.style.cursor="default");if(!t||!o.positions)return i._element.style.cursor="default",void r.setVisible(!1);const e=ui[o.shape]?"default":"default-dbclick";E.id?r.showAt(t,u.drawEditMove[o.shape]||u.drawEditMove.default):ui[o.shape]!==o.positions.length?o.positions.length>1?r.showAt(t,u.drawMove[e]||u.drawMove[e]):r.showAt(t,u.drawStart[e]||u.drawStart.default):r.showAt(t,u.drawEnd)},f=()=>{if(n){const i=n.id.split("-")[1],t=s.find(t=>t.id===i);if(!t)return;const e=t.style.point;e.image?(n.width=e.pixelSize,n.height=e.pixelSize):(n.pixelSize=e.pixelSize,n.outlineWidth=e.outlineWidth),D()}},E={},I={drawEditAdd:e=>{t.setVisible(!1);const{id:a,index:s,drawData:n}=S(e),r=new w.Cartesian3(e.position.x,e.position.y,e.position.z);n?.positions.splice(s,0,r),o=n;const l=b(r,o);i._element.style.cursor="move",Object.assign(E,{id:a,index:s+1,pointPrimitive:l,originPosition:r}),o.isEditing=!0},drawEditMove:e=>{t.setVisible(!1),i._element.style.cursor="move";const{id:a,index:s,drawData:n}=S(e);o=n,Object.assign(E,{id:a,index:s,pointPrimitive:e,originPosition:new w.Cartesian3(e.position.x,e.position.y,e.position.z)}),o.isEditing=!0},drawEditRemove:i=>{t.setVisible(!1);const{index:e,drawData:a}=S(i);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(e,1),a?.pointPrimitives.remove(i),T.drawEditEnd&&T.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:i=>{t.setVisible(!1);const{id:e}=S(i);m(e)}};t=Gi.createEditUi(i,I);const S=i=>{const t=i.id.split("-")[1],e=s.find(i=>i.id===t),a=e.positions.findIndex(t=>t.x===i.position.x&&t.y===i.position.y&&t.z===i.position.z);return{id:t,drawData:e,index:a}},M=(i,t)=>{const e=new w.PrimitiveCollection,a=new w.PointPrimitiveCollection,s=JSON.parse(JSON.stringify(g));i.style&&(Object.assign(s.point,i.style.point||{}),Object.assign(s.polyline,i.style.polyline||{}),Object.assign(s.polygon,i.style.polygon||{}));const o={id:i.id,edit:i.edit||!1,measure:i.measure||!1,measureLabel:i.measureLabel||!1,disDepthFail:i.disDepthFail||!1,measureUnit:i.measureUnit||["m"],isEditing:!0,shape:i.shape,positions:t,clampToGround:i.clampToGround,pointPrimitives:a,primitives:e,style:s};return p.add(e),t.forEach(i=>{b(i,o)}),o},b=(i,t)=>{const e=t.style.point;return t.pointPrimitives.add({id:`draw-${t.id}-${h()}`,position:i,...e,color:w.Color.fromCssColorString(e.color),outlineColor:w.Color.fromCssColorString(e.outlineColor),disableDepthTestDistance:Number.POSITIVE_INFINITY})},F=t=>{const e=M({...t},t.positions);e.positions.push(e.positions[e.positions.length-1]),o=e,s.push(e),Ai(i,t.shape,e),t.measure&&Si(e,i),A(e)},T={};return{draw:t=>{i._element.style.cursor="crosshair",n=void 0,t.id=h();const e=M(t,[]);o=e,T.drawStart&&T.drawStart(e),s.push(e),Ai(i,t.shape,e),t.measure&&Si(e,i)},removeEditing:d,remove:i=>{m(i.id),D()},removeAll:()=>{s.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),p.removeAll(),s.length=0,d()},setDrawStyle:i=>{Object.assign(g.point,i.point),Object.assign(g.polyline,i.polyline),Object.assign(g.polygon,i.polygon)},setDrawItemStyle:(i,t)=>{if(-1===s.findIndex(t=>t.id===i.id))throw new Error("绘制对象不存在");Object.assign(i.style.point,t.point||{}),Object.assign(i.style.polyline,t.polyline||{}),Object.assign(i.style.polygon,t.polygon||{}),i.__needUpdateAppearance=!0,i.isEditing=!0,setTimeout(()=>{i.isEditing=!1,i.__needUpdateAppearance=!1},100)},setClampToGround:(i,t)=>{if(-1===s.findIndex(t=>t.id===i.id))throw new Error("绘制对象不存在");i.clampToGround=t,i.isEditing=!0,setTimeout(()=>{i.isEditing=!1,i.__needUpdateAppearance=!1},100)},Event:T,updateMeasureUnit:(i,t)=>{if(-1===s.findIndex(t=>t.id===i.id))throw new Error("绘制对象不存在");const e=i.primitives._primitives.find(i=>i instanceof hi);e&&e.updateUnit(t)},reShowDrawData:F,reShowDrawDatas:i=>{i.forEach(i=>{F(i)})}}};export{Mi as DrawEventType,g as DrawStyle,yi as addDrawActions,xi as createDrawHandler};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ino-cesium/draw",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.25-beta.0",
|
|
5
5
|
"author": "koino",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"cesium",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"@turf/turf": "^7.0.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ino-cesium/common": "0.0.
|
|
33
|
-
"@ino-cesium/material": "0.0.
|
|
32
|
+
"@ino-cesium/common": "0.0.25-beta.0",
|
|
33
|
+
"@ino-cesium/material": "0.0.25-beta.0"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "rimraf dist && rollup -c",
|