@ino-cesium/draw 0.0.21 → 0.0.22-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 CHANGED
@@ -160,6 +160,11 @@ interface IDrawAttrInfo {
160
160
  * 测量结果数组
161
161
  */
162
162
  measureResult?: IMeasureResult[];
163
+ /**
164
+ * 绘制样式
165
+ */
166
+ style: Common.DeepPartial<IDrawStyle>;
167
+ __needUpdateAppearance?: boolean;
163
168
  }
164
169
  /**
165
170
  * 事件动作类型
@@ -212,10 +217,21 @@ interface IDrawHandler {
212
217
  */
213
218
  updateMeasureUnit: (drawData: IDrawAttrInfo, measureUnit: string[]) => void;
214
219
  /**
215
- * 设置绘制样式方法
220
+ * 设置全局绘制样式
216
221
  * @param drawStyle 绘制样式
217
222
  */
218
223
  setDrawStyle: (drawStyle: Common.DeepPartial<IDrawStyle>) => void;
224
+ /**
225
+ * 设置绘制条目样式
226
+ * @param drawStyle 绘制样式
227
+ */
228
+ setDrawItemStyle: (drawData: IDrawAttrInfo, drawStyle: Common.DeepPartial<IDrawStyle>) => void;
229
+ /**
230
+ * 设置贴地状态
231
+ * @param drawData
232
+ * @param clampToGround
233
+ */
234
+ setClampToGround: (drawData: IDrawAttrInfo, clampToGround: boolean) => void;
219
235
  /**
220
236
  * 事件处理器
221
237
  */
@@ -268,7 +284,7 @@ interface IDrawOptions {
268
284
  /**
269
285
  * 绘制样式
270
286
  */
271
- drawStyle?: Common.DeepPartial<IDrawStyle>;
287
+ style?: Common.DeepPartial<IDrawStyle>;
272
288
  }
273
289
  interface IReShowOptions {
274
290
  id: string;
@@ -371,12 +387,14 @@ interface IMeasureResult {
371
387
  type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow' | 'sector' | 'db-arrow' | string;
372
388
  /**
373
389
  * 绘制样式接口
390
+ * todo 点图标,线样式,面贴图
374
391
  */
375
392
  interface IDrawStyle {
376
393
  /**
377
394
  * 点样式
378
395
  */
379
396
  point: {
397
+ image: string;
380
398
  /**
381
399
  * 点颜色
382
400
  */
@@ -414,11 +432,13 @@ interface IDrawStyle {
414
432
  * 深度失败颜色
415
433
  */
416
434
  depthFailColor: string;
435
+ type: 'solid' | 'dashed' | 'glow';
417
436
  };
418
437
  /**
419
438
  * 多边形样式
420
439
  */
421
440
  polygon: {
441
+ image: string;
422
442
  /**
423
443
  * 多边形颜色
424
444
  */
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{BasePrimitive as i,makePositionsToLnglats as e,makePositiontoLnglat as t,calcSpaceDistance as a,makeLnglatsToPositions as o,calcSpaceDistances as n,makeLnglatToPosition as s,calcGeodesicDistances as r,calcArea as l,calcPoistionCenter as p,calcGeodesicDistance as c,Tooltip as d,numberId as h}from"@ino-cesium/common";import*as m from"@turf/turf";import*as u from"cesium";var w=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(w||{}),g=Object.freeze({__proto__:null,DrawEventType:w});const v={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,outlineColor:"rgba(255,255,255,0.8)",outlineWidth:2,disableDepthTestDistance:Number.POSITIVE_INFINITY},polyline:{width:2,color:"rgba(81,255,0,0.8)",depthFailColor:"rgba(255,0,0,0.5)"},polygon:{color:"rgba(255,255,54,0.3)",depthFailColor:"rgba(255,0,0,0.3)"}};class P 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.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new u.GeometryInstance({geometry:new u.PolygonGeometry({polygonHierarchy:new u.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new u.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new u.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.color)})}),this.depthFailAppearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const o=e(i).map(i=>m.point([i.longitude,i.latitude])),n=t(i[0]).height,s=a(i[0],i[1]),[r,l,p]=[o[0],o[1],o[2]],c=m.bearing(r,l),d=m.bearing(r,p),h=m.lineArc(r,s/1e3,c,d).geometry.coordinates.map(i=>[i[0],i[1],n]);h.push([...r.geometry.coordinates,n]),h.unshift([...r.geometry.coordinates,n]),this.drawData.shapePositions=u.Cartesian3.fromDegreesArrayHeights(h.flat()),this.setShapePositions(this.drawData.shapePositions)}}const y=(i,e)=>Math.sqrt((i[0]-e[0])**2+(i[1]-e[1])**2),C=i=>{let e=0;return i&&Array.isArray(i)&&i.length>0&&i.forEach((t,a)=>{a<i.length-1&&(e+=y(t,i[a+1]))}),e},D=i=>C(i)**.99,f=(i,e)=>[(i[0]+e[0])/2,(i[1]+e[1])/2],E=(i,e)=>{let t;const a=Math.asin(Math.abs(e[1]-i[1])/y(i,e));return e[1]>=i[1]&&e[0]>=i[0]?t=a+Math.PI:e[1]>=i[1]&&e[0]<i[0]?t=2*Math.PI-a:e[1]<i[1]&&e[0]<i[0]?t=a:e[1]<i[1]&&e[0]>=i[0]&&(t=Math.PI-a),t},M=(i,e,t)=>{const a=E(e,i)-E(e,t);return a<0?a+2*Math.PI:a},I=(i,e,t,a,o)=>{const n=E(i,e),s=o?n+t:n-t,r=a*Math.cos(s),l=a*Math.sin(s);return[e[0]+r,e[1]+l]},S=function(i){if(i.length<=2)return i;const e=[],t=i.length-1;for(let a=0;a<=1;a+=.01){let[o,n]=[0,0];for(let e=0;e<=t;e++){const s=T(t,e),r=a**e,l=(1-a)**(t-e);o+=s*r*l*i[e][0],n+=s*r*l*i[e][1]}e.push([o,n])}return e.push(i[t]),e},F=i=>{let e=1;switch(i){case i<=1:e=1;break;case 2===i:e=2;break;case 3===i:e=6;break;case 24===i:e=24;break;case 5===i:e=120;break;default:for(let t=1;t<=i;t++)e*=t}return e},T=(i,e)=>F(i)/(F(e)*F(i-e));class G 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.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new u.GeometryInstance({geometry:new u.PolygonGeometry({polygonHierarchy:new u.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new u.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new u.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.color)})}),this.depthFailAppearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const t=[],a=e(i).map(i=>(t.push(i.height),[i.longitude,i.latitude])),n=Math.max(...t),[s,r,l]=[a[0],a[1],a[2]],p=a.length;let c,d;3===p?(this.tempPoint4=this.getTempPoint4(s,r,l),this.connPoint=f(s,r)):4===p?(this.tempPoint4=a[3],this.connPoint=f(s,r)):(this.tempPoint4=a[3],this.connPoint=a[4]),this.isClockWise=((i,e,t)=>(t[1]-i[1])*(e[0]-i[0])>(e[1]-i[1])*(t[0]-i[0]))(s,r,l),this.isClockWise?(c=this.getArrowPoints(s,this.connPoint,this.tempPoint4,!1),d=this.getArrowPoints(this.connPoint,r,l,!0)):(c=this.getArrowPoints(r,this.connPoint,l,!1),d=this.getArrowPoints(this.connPoint,s,this.tempPoint4,!0));const h=c.length,m=(h-5)/2,w=c.slice(0,m),g=c.slice(m,m+5);let v=c.slice(m+5,h);this.llBodyPnts=w;let A=d.slice(0,m);const P=d.slice(m,m+5),y=d.slice(m+5,h);this.rrBodyPnts=y,A=S(A);const C=S(y.concat(w.slice(1)));v=S(v);const D=A.concat(P,C,g,v).filter(i=>i[0]&&i[1]).map(i=>new u.Cartographic(i[0],i[1],n)),E=o(D);this.drawData.shapePositions=E,this.drawData.shapePositions.push(E[0]),this.setShapePositions(this.drawData.shapePositions)}getTempPoint4(i,e,t){const a=f(i,e),o=y(a,t),n=M(i,a,t);let s,r,l,p=[0,0];return n<Math.PI/2?(s=o*Math.sin(n),r=o*Math.cos(n),l=I(i,a,Math.PI/2,s,!1),p=I(a,l,Math.PI/2,r,!0)):n>=Math.PI/2&&n<Math.PI?(s=o*Math.sin(Math.PI-n),r=o*Math.cos(Math.PI-n),l=I(i,a,Math.PI/2,s,!1),p=I(a,l,Math.PI/2,r,!1)):n>=Math.PI&&n<1.5*Math.PI?(s=o*Math.sin(n-Math.PI),r=o*Math.cos(n-Math.PI),l=I(i,a,Math.PI/2,s,!0),p=I(a,l,Math.PI/2,r,!0)):(s=o*Math.sin(2*Math.PI-n),r=o*Math.cos(2*Math.PI-n),l=I(i,a,Math.PI/2,s,!0),p=I(a,l,Math.PI/2,r,!1)),p}getArrowPoints(i,e,t,a){const o=f(i,e),n=y(o,t);let s=I(t,o,0,.3*n,!0),r=I(t,o,0,.5*n,!0);s=I(o,s,Math.PI/2,n/5,a),r=I(o,r,Math.PI/2,n/4,a);const l=[o,s,r,t],p=this.getArrowHeadPoints(l);if(!(p&&Array.isArray(p)&&p.length>0))throw new Error("Interpolation Error");{const t=p[0],a=p[4],o=y(i,e)/D(l)/2,n=this.getArrowBodyPoints(l,t,a,o);if(n){const o=n.length;let s=n.slice(0,o/2),r=n.slice(o/2,o);return s.push(t),r.push(a),s=s.reverse(),s.push(e),r=r.reverse(),r.push(i),s.reverse().concat(p,r)}}}getArrowBodyPoints(i,e,t,a){const o=C(i),n=D(i)*a,s=(n-y(e,t))/2;let r=0;const l=[],p=[];for(let e=1;e<i.length-1;e++){const t=M(i[e-1],i[e],i[e+1])/2;r+=y(i[e-1],i[e]);const a=(n/2-r/o*s)/Math.sin(t),c=I(i[e-1],i[e],Math.PI-t,a,!0),d=I(i[e-1],i[e],t,a,!1);l.push(c),p.push(d)}return l.concat(p)}getArrowHeadPoints(i){const e=D(i)*this.headHeightFactor,t=i[i.length-1],a=e*this.headWidthFactor,o=e*this.neckWidthFactor,n=e*this.neckHeightFactor,s=I(i[i.length-2],t,0,e,!0),r=I(i[i.length-2],t,0,n,!0),l=I(t,s,Math.PI/2,a,!1),p=I(t,s,Math.PI/2,a,!0);return[I(t,r,Math.PI/2,o,!1),l,t,p,I(t,r,Math.PI/2,o,!0)]}}class b 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.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new u.GeometryInstance({geometry:new u.PolygonGeometry({polygonHierarchy:new u.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new u.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new u.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.color)})}),this.depthFailAppearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<2)return;const a=e(i).map(i=>m.point([i.longitude,i.latitude])),o=t(i[0]).height,s=n(i)/1e3,[r,l]=[a[0],a[1]],p=m.bearing(r,l),c=m.destination(r,.1*s,p-90,{units:"kilometers"}),d=m.destination(r,.1*s,p+90,{units:"kilometers"}),h=m.destination(r,.8*s,p-5,{units:"kilometers"}),w=m.destination(r,.8*s,p+5,{units:"kilometers"}),g=m.destination(r,.75*s,p-13,{units:"kilometers"}),v=m.destination(r,.75*s,p+13,{units:"kilometers"}),A=[...c.geometry.coordinates,o,...h.geometry.coordinates,o,...g.geometry.coordinates,o,...l.geometry.coordinates,o,...v.geometry.coordinates,o,...w.geometry.coordinates,o,...d.geometry.coordinates,o,...c.geometry.coordinates,o];this.drawData.shapePositions=u.Cartesian3.fromDegreesArrayHeights(A.flat()),this.setShapePositions(this.drawData.shapePositions)}}const R=i=>{const e=new P(i);i.primitives.add(e)},k=i=>{const e=new G(i);i.primitives.add(e)},_=i=>{const e=new b(i);i.primitives.add(e)},x="cm",U="厘米",N="m",H="米",B="km",O="千米",L="公里",V="㎡",W="平方厘米",K="㎡",J="平方米",Q="km²",j="平方千米",z="平方公里",Y="亩",q="公顷",X={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},Z=(i,e,t)=>e===t?i:i*ei(t),$=(i,e,t)=>e===t?i:i*function(i){switch(i){case V:return 1e4;case K:return 1;case Q:return 1e-6;case W:return 1e4;case J:return 1;case j:case z:return 1e-6;case Y:return.0015;case q:return 1e-4;default:return 1}}(t),ii=i=>X[i],ei=i=>{switch(i){case N:return 1;case x:case U:return 100;case B:return.001;case H:return 1;case O:case L:return.001;default:return 1}};const ti=(i,e)=>{let a=i;if("vertical-surface-line"===e&&i.length>=1){const e=i[0],t=u.Cartographic.fromCartesian(e),o=u.Math.toDegrees(t.longitude),n=u.Math.toDegrees(t.latitude),s=0;a=[u.Cartesian3.fromDegrees(o,n,t.height),u.Cartesian3.fromDegrees(o,n,s)]}if("vertical-line"===e&&i.length>=2){const e=i[0],o=i[1],n=t(e),r=t(o);let l=n,p=r;n.height>r.height&&(l=r,p=n),console.log(l.longitude,l.latitude,p.height);const c=s(new u.Cartographic(l.longitude,l.latitude,p.height));a=[s(l),c,s(p),s(l)]}return e.startsWith("curve")&&i.length>2&&(a=ni(i)),a},ai=(i,e,t,o,n)=>{t.push(...i.map((t,n)=>{const s=i[n+1];if(s){let i=e?c(t,s):a(t,s);return i=Z(i,"m",o),{value:Number(i.toFixed(2)),unit:o,position:p([t,s]),positions:[t,s]}}return null}).filter(i=>i&&i.value>0))},oi=i=>{if(2===i.length)return i;let[e,t]=i;return t||(t=ii(e)),[e,t]},ni=i=>{const e=i.length,t=r(i),a=Math.floor(t/5),o=[];for(let i=0;i<e;i++)o.push(1.5*i);const n=new u.CatmullRomSpline({points:i,times:o}),s=[],l=o[0],p=o[o.length-1];for(let i=0;i<a;i++){const e=i/(a-1),t=u.Math.lerp(l,p,e),o=n.evaluate(t);s.push(o)}return s},si=(i,e=1e3)=>{if(i.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const a=i[i.length-1],o=i[i.length-2],n=t(a),r=t(o),l=n.height,p=n.longitude-r.longitude,c=n.latitude-r.latitude,d=Math.sqrt(p**2+c**2);if(d<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const h=p/d,m=c/d,w=(i=>{const e=u.Math.toRadians(.5),t=s(i),a=s(new u.Cartographic(i.longitude+e,i.latitude,i.height)),o=2*u.Cartesian3.distance(t,a),n=s(new u.Cartographic(i.longitude,i.latitude+e,i.height));return{lon:o,lat:2*u.Cartesian3.distance(t,n)}})(n),g=e/w.lon*u.Math.RADIANS_PER_DEGREE,v=e/w.lat*u.Math.RADIANS_PER_DEGREE,A=Math.PI/6,P=e*Math.tan(A),y=P/w.lon*u.Math.RADIANS_PER_DEGREE,C=P/w.lat*u.Math.RADIANS_PER_DEGREE,D=n.longitude-h*g-m*y,f=n.latitude-m*v+h*C,E=n.longitude-h*g+m*y,M=n.latitude-m*v-h*C,I=s(new u.Cartographic(D,f,l)),S=s(new u.Cartographic(E,M,l));return[I,s(new u.Cartographic(n.longitude,n.latitude,l)),S]};class ri extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new u.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=ti(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 u.GroundPolylineGeometry({positions:i,width:A.polyline.width}):new u.PolylineGeometry({positions:i,width:A.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new u.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new u.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new u.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new u.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){i?this.appearance=i:(this.appearance=new u.PolylineMaterialAppearance({material:new u.Material({fabric:{type:"Color",uniforms:{color:u.Color.fromCssColorString(A.polyline.color)}}})}),this.appearanceTran=new u.MaterialAppearance({material:new u.Material({fabric:{type:"Color",uniforms:{color:new u.Color(0,0,0,0)}}})}),this.depthFailAppearance=new u.PolylineMaterialAppearance({material:u.Material.fromType(u.Material.PolylineDashType,{color:u.Color.fromCssColorString(A.polyline.depthFailColor)})}))}}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;const i=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(i),this.positions.length<3)return;const e=[new u.GeometryInstance({geometry:new u.PolygonGeometry({polygonHierarchy:new u.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new u.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new u.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.color)})}),this.depthFailAppearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.depthFailColor)})})}calcShapePositions(i){const e=[...i,i[0]];this.drawData.shapePositions=e,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 u.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return;this.primitiveCollection.removeAll(),this.calcShapePositions(this.positions);const i=JSON.parse(JSON.stringify(this.positions)),e=this.drawData.clampToGround?c(i[0],i[1]):a(i[0],i[1]);if(!e)return;const t=u.Cartographic.fromCartesian(i[0]).height,o=[new u.GeometryInstance({geometry:new u.CircleGeometry({center:i[0],height:t,radius:e}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new u.GroundPrimitive({geometryInstances:o,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new u.Primitive({geometryInstances:o,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.color)})}),this.depthFailAppearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.depthFailColor)})})}calcShapePositions(i){let e=i;const t=a(i[0],i[1]),o=u.Cartographic.fromCartesian(i[0]).height,n=new u.CircleOutlineGeometry({center:i[0],height:o,radius:t}),s=u.CircleOutlineGeometry.createGeometry(n);let r=[];if(s){const i=[].slice.call(s.attributes.position.values);r=u.Cartesian3.unpackArray(i),r.push(r[0]),e=r}this.drawData.shapePositions=e,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 u.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return this.primitiveCollection;this.primitiveCollection.removeAll();const i=JSON.parse(JSON.stringify(this.positions));i.length=2,this.calcShapePositions(i);const e=u.Cartographic.fromCartesian(i[0]).height,t=u.Rectangle.fromCartesianArray(i),a=[new u.GeometryInstance({geometry:new u.RectangleGeometry({rectangle:t,height:e}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new u.GroundPrimitive({geometryInstances:a,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new u.Primitive({geometryInstances:a,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.color)})}),this.depthFailAppearance=new u.MaterialAppearance({material:u.Material.fromType("Color",{color:u.Color.fromCssColorString(A.polygon.depthFailColor)})})}calcShapePositions(i){let e=i;const t=u.Cartographic.fromCartesian(i[0]).height,a=u.Rectangle.fromCartesianArray(i),o=new u.RectangleOutlineGeometry({rectangle:a,height:t}),n=u.RectangleOutlineGeometry.createGeometry(o);let s=[];if(n){const i=[].slice.call(n.attributes.position.values);s=u.Cartesian3.unpackArray(i),s.push(s[0]),e=s}this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class di extends i{drawData;labelCollection;measureDivs;cesiumWidget;viewer;constructor(i,e){super(),this.viewer=e,this.cesiumWidget=e._element.getElementsByClassName("cesium-widget")[0],this.drawData=i,this.labelCollection=new u.LabelCollection({scene:e.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 e=(i=>{let{shapePositions:e,positions:t,shape:o,clampToGround:n,measureUnit:s}=i;e||(e=t),n||(n=!1);const[r,d]=oi(s),h=ii("m");i.measureUnit=[r,d];const m=[];if("polyline"===o&&(ai(t,n,m,r),m.push({value:0,unit:r,position:t[0],positions:t,prefixText:"起点"}),m.push({value:Number(m.reduce((i,e)=>i+e.value,0).toFixed(2)),unit:r,position:t[t.length-1],positions:t})),"vertical-surface-line"===o&&ai(e,n,m,r),"vertical-line"===o&&(ai(e,n,m,r),m.forEach((i,e)=>{0===e&&(i.prefixText="高度"),1===e&&(i.prefixText="水平距离"),2===e&&(i.prefixText="空间距离")})),"polygon"===o){ai(e,n,m,r);const i=$(l(e),h,d);m.push({value:Number(i.toFixed(2)),unit:d,position:p(e),positions:e})}if("rectangle"===o){ai(e,n,m,r);const i=$(l(e),h,d);m.push({value:Number(i.toFixed(2)),unit:d,position:p(e),positions:e})}if("circle"===o){const i=n?c(t[0],t[1]):a(t[0],t[1]);m.push({value:Number(Z(i,"m",r).toFixed(2)),unit:r,position:t[1],positions:t,prefixText:"半径"});const e=$(i*i*Math.PI,h,d);i>0&&m.push({value:Number(e.toFixed(2)),unit:d,position:t[0],positions:t})}return m})(this.drawData);this.drawData.measureResult=e,e.forEach((i,e)=>{let t="";i.prefixText?(t=`${i.prefixText}`,i.value&&(t+=`:${i.value}${i.unit}`)):t+=`${i.value}${i.unit}`;const a=this.createDiv(`measure-label-${this.drawData.id}-${e}`,t);this.measureDivs.push({position:i.position,divEle:a})})}updatePointDivLabel(){this.clearAllDiv(),this.drawData.positions.forEach(i=>{const e=t(i),a=this.createDiv(`measure-label-${this.drawData.id}-0`,`经度:${e.longitude.toFixed(6)}\n纬度:${e.latitude.toFixed(6)}\n高度:${e.height.toFixed(6)}`);this.measureDivs.push({position:i,divEle:a})})}renderDivPosition(){this.viewer.scene.postRender.addEventListener(()=>{this.measureDivs.forEach(i=>{const e=this.viewer.scene.cartesianToCanvasCoordinates(i.position);if(e){i.divEle.style.display="block";const t=i.divEle.getBoundingClientRect();i.divEle.style.left=e.x-t.width/2+"px",i.divEle.style.top=e.y-t.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,e,t=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 ${e.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: ${t}px;\n width: 2px;\n background: rgba(0, 0, 0, 0.6);\n margin: auto;\n ">\n </div>\n `,o=document.createElement("div");return o.id=i,o.innerHTML=a,o.style.position="absolute",o.style.pointerEvents="none",o.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(o),o}calcShapePositions(i){this.setShapePositions(i)}}class hi extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;arrowLengthScale;constructor(i,e){super(),this.arrowLengthScale=5,this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new u.PrimitiveCollection,this.viewer=e,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;let i=this.positions;i=ti(i,this.drawData.shape);let e=r(i)/this.arrowLengthScale;return e>3e6&&(e=3e6),i=si(i,e/2),this.calcShapePositions(i),i.length<2?void 0:(this.setShapePositions(i),this.drawData.clampToGround?new u.GroundPolylineGeometry({positions:i,width:A.polyline.width}):new u.PolylineGeometry({positions:i,width:A.polyline.width}))}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new u.GeometryInstance({geometry:i,id:this.drawData.id});return i?this.drawData.clampToGround?new u.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new u.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new u.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){i?this.appearance=i:(this.appearance=new u.PolylineMaterialAppearance({material:new u.Material({fabric:{type:"Color",uniforms:{color:u.Color.fromCssColorString(A.polyline.color)}}})}),this.appearanceTran=new u.MaterialAppearance({material:new u.Material({fabric:{type:"Color",uniforms:{color:new u.Color(0,0,0,0)}}})}),this.depthFailAppearance=new u.PolylineMaterialAppearance({material:u.Material.fromType(u.Material.PolylineDashType,{color:u.Color.fromCssColorString(A.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}class mi extends i{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.linePrimitiveCollection=new u.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=this.drawData.shapePositions||[];if(this.calcShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new u.GroundPolylineGeometry({positions:i,width:A.polyline.width}):new u.PolylineGeometry({positions:i,width:A.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new u.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new u.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new u.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new u.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){i?this.appearance=i:(this.appearance=new u.PolylineMaterialAppearance({material:new u.Material({fabric:{type:"Color",uniforms:{color:u.Color.fromCssColorString(A.polyline.color)}}})}),this.appearanceTran=new u.MaterialAppearance({material:new u.Material({fabric:{type:"Color",uniforms:{color:new u.Color(0,0,0,0)}}})}),this.depthFailAppearance=new u.PolylineMaterialAppearance({material:u.Material.fromType(u.Material.PolylineDashType,{color:u.Color.fromCssColorString(A.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}const ui={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},wi={},gi=i=>{const{type:e,action:t,outline:a,pointCount:o}=i;wi[e]=(i,e)=>{t(i,e),a&&Pi(i)},o&&(ui[e]=o)},vi=(i,e,t)=>{wi[e]&&wi[e](t,i)},Ai=i=>{const e=new ri(i);i.primitives.add(e)},Pi=i=>{const e=new mi(i);i.primitives.add(e)},yi=(i,e)=>{const t=new hi(i,e);i.primitives.add(t)},Ci=i=>{const e=new li(i);i.primitives.add(e)},Di=i=>{const e=new pi(i);i.primitives.add(e)},fi=i=>{const e=new ci(i);i.primitives.add(e)},Ei=(i,e)=>{const t=new di(i,e);i.primitives.add(t),i.measurePrimitive=t,i.primitives.raiseToTop(t)},Mi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",Ii="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",Si="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",Fi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class Ti{static editUI;_editUi;viewer;_editUiPosition=null;_editPointPrimitive=null;_drawEditEvent;elementId="draw-edit-ui";constructor(i,e){this._editUi=null,this.viewer=i,this.create(),this.setVisible(!1),this.renderPosition(),this._drawEditEvent=e}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 e=document.createElement("DIV");e.title="点击移动节点";const t=document.createElement("img");t.src=Fi,t.className="draw-edit-icon",e.appendChild(t),e.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const a=document.createElement("DIV");a.id="addPoint";const o=document.createElement("img");o.src=Mi,o.title="点击添加节点",o.className="draw-edit-icon",a.appendChild(o),a.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const n=document.createElement("DIV"),s=document.createElement("img");n.id="removePoint",s.src=Si,s.title="点击删除节点",s.className="draw-edit-icon",n.appendChild(s),n.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=Ii,l.title="点击删除绘制",l.className="draw-edit-icon",r.appendChild(l),r.addEventListener("click",()=>{this._drawEditEvent.drawDelete&&this._drawEditEvent.drawDelete(this._editPointPrimitive)}),i.appendChild(e),i.appendChild(a),i.appendChild(n),i.appendChild(r),document.body.appendChild(i),this._editUi=i}setAddElementStatus(i){const e=document.getElementById("addPoint"),t=document.getElementById("removePoint");e&&(e.style.display=i?"block":"none"),t&&(t.style.display=i?"block":"none")}static createEditUi(i,e){return Ti.editUI||(Ti.editUI=new Ti(i,e)),Ti.editUI}showAt(i,e,t){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=e,this.setAddElementStatus(!ui[t])}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(){Ti.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}wi.polyline=i=>{Ai(i)},wi["polyline-arrow"]=(i,e)=>{Ai(i),yi(i,e)},wi.curve=i=>{Ai(i)},wi["curve-arrow"]=(i,e)=>{Ai(i),yi(i,e)},wi["vertical-line"]=i=>{i.clampToGround=!1,Ai(i)},wi["vertical-surface-line"]=i=>{i.clampToGround=!1,Ai(i)},wi.polygon=i=>{Ci(i),Pi(i)},wi.circle=i=>{Di(i),Pi(i)},wi.rectangle=i=>{fi(i),Pi(i)},gi({type:"sector",action:R,outline:!0,pointCount:3}),gi({type:"db-arrow",action:k,outline:!0,pointCount:4}),gi({type:"fine-arrow",action:_,outline:!0,pointCount:2});const Gi=i=>{let e;const t=[];let a=new u.Cartesian3(0,0,0);const o=[];let n,s,r;const l=d.createToolTip(i),p=A.point;let c=!1;((i,e)=>{const t=i.scene,a=new u.ScreenSpaceEventHandler(t.canvas);let o;i.cesiumWidget.screenSpaceEventHandler.removeInputAction(u.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),a.setInputAction(a=>{const n=t.pickPosition(a.position),s=(new Date).getTime();if(o&&s-o<270){const t=i.scene.pick(a.position);return void e(w.DRAW_DB_CLICK,{position:n,pickPrimitive:t?.primitive,windowPosition:a.position})}e(w.DRAW_ADD,{position:n}),o=(new Date).getTime()},u.ScreenSpaceEventType.LEFT_CLICK),a.setInputAction(a=>{const o=i.scene.pick(a.endPosition),n=t.pickPosition(a.endPosition);e(w.DRAW_MOVE,{position:n,pickPrimitive:o?.primitive,windowPosition:a.endPosition}),o&&e(w.DRAW_PICK,{position:n,pickPrimitive:o?.primitive,windowPosition:a.endPosition})},u.ScreenSpaceEventType.MOUSE_MOVE),a.setInputAction(()=>{e(w.DRAW_RIGHT_CLICK,{})},u.ScreenSpaceEventType.RIGHT_CLICK)})(i,(i,e)=>{n&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||n.isEditing)&&D[i]?.(e)});const m=new u.PrimitiveCollection;m.destroyPrimitives=!1,i.scene.primitives.add(m);const g=()=>{n&&(n.isEditing=!1,n.isDisAdd=!0,M(),S.id===n.id?y():(P(n.id),n={}))},P=i=>{const e=o.findIndex(e=>e.id===i);if(-1===e)return;const t=o[e];t.positions.length=0,o.splice(e,1),k.drawRemove&&k.drawRemove(t),setTimeout(()=>{t.measurePrimitive?.clearAllDiv(),m.remove(t?.primitives)},300)},y=()=>{if(S.id)return S.id="",n.isDisAdd=!0,n.isEditing=!0,S.originPosition?(n.positions.splice(S.index,1,S.originPosition),S.pointPrimitive.position=S.originPosition):n?.positions.splice(S.index,1),k.drawEditEnd&&k.drawEditEnd(n),setTimeout(()=>{n.isEditing=!1,n.isDisAdd=!1},300),a=new u.Cartesian3(0,0,0),s=void 0,void M();if((!ui[n.shape]||ui[n.shape]>2)&&n.positions&&n.positions.length>2){const i=c?2:1,e=n.pointPrimitives.get(n.positions.length-i);return n.pointPrimitives.remove(e),void n?.positions.splice(n.positions.length-i,1)}a=new u.Cartesian3(0,0,0),s=void 0,P(n.id),n={},M()},C=e=>{e||(e=n),i._element.style.cursor="default",a=new u.Cartesian3(0,0,0),e.positions.pop(),e.isDisAdd=!0,setTimeout(()=>{e.isEditing=!1,e.isDisAdd=!1,k.drawEnd&&k.drawEnd(e),n={}},300),s=void 0,r&&(e.pointPrimitives.remove(r),r=void 0),M()},D={drawAdd:({position:i})=>{if(n.positions.push(i),c=!1,S.id)return k.drawEditEnd&&k.drawEditEnd(n),S.id="",void C();b(i,n),k.drawAdd&&k.drawAdd(i,n),n.positions.length>ui[n.shape]&&C()},drawMove:({position:i,windowPosition:e})=>{if(c=!0,I(),i&&!n.isDisAdd&&n.isEditing){if(M(e),S.id)n.positions.splice(S.index,1,i),S.pointPrimitive.position=i;else{const e=n.positions.findIndex(i=>i.x===a.x&&i.y===a.y&&i.z===a.z);n.positions.push(i),-1!==e&&n.positions.splice(e,1),r&&n.pointPrimitives.remove(r),r=b(i,n)}a=i,k.drawMove&&k.drawMove(i,n)}},drawPick:({pickPrimitive:i,windowPosition:e})=>{n.isEditing||i instanceof u.PointPrimitive&&f(i,e)},drawDbClick:({position:i,windowPosition:e,pickPrimitive:t})=>{if(n.isEditing){if(ui[n.shape])return;C()}else!n.isEditing&&t&&E(i,e,t)},drawRightClick:()=>{n.isEditing?y():e.setVisible(!1)}},f=(e,a)=>{const n=e.id.split("-")[1],r=o.find(i=>i.id===n);t.includes(e.id)||r&&r.edit&&(i._element.style.cursor="pointer",e.pixelSize=1.5*p.pixelSize,e.outlineWidth=1.5*p.outlineWidth,s=e,l.showAt(a,v.pointEnter),l.setVisible(!0))},E=(i,a,n)=>{if(n instanceof u.PointPrimitive){if(t.includes(n.id))return;const a=n.id.split("-")[1],s=o.find(i=>i.id===a);if(!s)return;if(!s.edit)return;console.log(n),e.showAt(i,n,s.shape),k.drawEditStart&&k.drawEditStart(s)}},M=e=>{if(!l)return void(i._element.style.cursor="default");if(!e||!n.positions)return i._element.style.cursor="default",void l.setVisible(!1);const t=ui[n.shape]?"default":"default-dbclick";S.id?l.showAt(e,v.drawEditMove[n.shape]||v.drawEditMove.default):ui[n.shape]!==n.positions.length?n.positions.length>1?l.showAt(e,v.drawMove[t]||v.drawMove[t]):l.showAt(e,v.drawStart[t]||v.drawStart.default):l.showAt(e,v.drawEnd)},I=()=>{s&&(s.pixelSize=p.pixelSize,s.outlineWidth=p.outlineWidth,M())},S={},F={drawEditAdd:t=>{e.setVisible(!1);const{id:a,index:o,drawData:s}=T(t),r=new u.Cartesian3(t.position.x,t.position.y,t.position.z);s?.positions.splice(o,0,r),n=s;const l=b(r,n);i._element.style.cursor="move",Object.assign(S,{id:a,index:o+1,pointPrimitive:l,originPosition:r}),n.isEditing=!0},drawEditMove:t=>{e.setVisible(!1),i._element.style.cursor="move";const{id:a,index:o,drawData:s}=T(t);n=s,Object.assign(S,{id:a,index:o,pointPrimitive:t,originPosition:new u.Cartesian3(t.position.x,t.position.y,t.position.z)}),n.isEditing=!0},drawEditRemove:i=>{e.setVisible(!1);const{index:t,drawData:a}=T(i);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(t,1),a?.pointPrimitives.remove(i),k.drawEditEnd&&k.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:i=>{e.setVisible(!1);const{id:t}=T(i);P(t)}};e=Ti.createEditUi(i,F);const T=i=>{const e=i.id.split("-")[1],t=o.find(i=>i.id===e),a=t.positions.findIndex(e=>e.x===i.position.x&&e.y===i.position.y&&e.z===i.position.z);return{id:e,drawData:t,index:a}},G=(i,e)=>{const t=new u.PrimitiveCollection,a=new u.PointPrimitiveCollection;t.add(a);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:e,clampToGround:i.clampToGround,pointPrimitives:a,primitives:t};return m.add(t),e.forEach(i=>{b(i,o)}),o},b=(i,e)=>e.pointPrimitives.add({id:`draw-${e.id}-${h()}`,position:i,...p,color:u.Color.fromCssColorString(p.color),outlineColor:u.Color.fromCssColorString(p.outlineColor)}),R=e=>{const t=G({...e},e.positions);t.positions.push(t.positions[t.positions.length-1]),n=t,o.push(t),vi(i,e.shape,t),e.measure&&Ei(t,i),t.primitives.raiseToTop(t.pointPrimitives),C(t)},k={};return{draw:e=>{i._element.style.cursor="crosshair",s=void 0,e.id=h();const t=G(e,[]);n=t,k.drawStart&&k.drawStart(t),o.push(t),vi(i,e.shape,t),e.measure&&Ei(t,i),t.primitives.raiseToTop(t.pointPrimitives)},removeEditing:g,remove:i=>{P(i.id),M()},removeAll:()=>{o.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),m.removeAll(),o.length=0,g()},setDrawStyle:i=>{Object.assign(A.point,i.point),Object.assign(A.polyline,i.polyline),Object.assign(A.polygon,i.polygon)},Event:k,updateMeasureUnit:(i,e)=>{if(-1===o.findIndex(e=>e.id===i.id))throw new Error("绘制对象不存在");const t=i.primitives._primitives.find(i=>i instanceof di);t&&t.updateUnit(e)},reShowDrawData:R,reShowDrawDatas:i=>{i.forEach(i=>{R(i)})}}};export{g as Draw,w as DrawEventType,A as DrawStyle,gi as addDrawActions,Gi as createDrawHandler};
1
+ import{BasePrimitive as t,makePositionsToLnglats as e,makePositiontoLnglat as i,calcSpaceDistance as a,makeLnglatsToPositions as s,calcSpaceDistances as o,makeLnglatToPosition as n,calcGeodesicDistances as r,calcArea as l,calcPoistionCenter as p,calcGeodesicDistance as d,Tooltip as c,numberId as h}from"@ino-cesium/common";import*as m from"@turf/turf";import*as w from"cesium";var u=(t=>(t.DRAW_ADD="drawAdd",t.DRAW_MOVE="drawMove",t.DRAW_PICK="drawPick",t.DRAW_DB_CLICK="drawDbClick",t.DRAW_RIGHT_CLICK="drawRightClick",t))(u||{}),g=Object.freeze({__proto__:null,DrawEventType:u});const A={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。","default-dbclick":"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。",default:"单机左键绘制下一个节点,单机右键撤销上次绘制。"},drawEnd:"单击左键结束绘制,单机右键取消上次绘制",pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},y={point:{color:"rgba(255,255,0,0.8)",pixelSize:8,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(255,0,0,0.5)"},polygon:{color:"rgba(255,255,54,0.3)",depthFailColor:"rgba(255,0,0,0.3)"}};class v extends t{positions;drawData;depthFailAppearance;constructor(t){super(),this.drawData=t,this.positions=t.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 t=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(t),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:e,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(t){if(t.length<3)return this.drawData.shapePositions=t,void this.setShapePositions(this.drawData.shapePositions);const s=e(t).map(t=>m.point([t.longitude,t.latitude])),o=i(t[0]).height,n=a(t[0],t[1]),[r,l,p]=[s[0],s[1],s[2]],d=m.bearing(r,l),c=m.bearing(r,p),h=m.lineArc(r,n/1e3,d,c).geometry.coordinates.map(t=>[t[0],t[1],o]);h.push([...r.geometry.coordinates,o]),h.unshift([...r.geometry.coordinates,o]),this.drawData.shapePositions=w.Cartesian3.fromDegreesArrayHeights(h.flat()),this.setShapePositions(this.drawData.shapePositions)}}const P=(t,e)=>Math.sqrt((t[0]-e[0])**2+(t[1]-e[1])**2),C=t=>{let e=0;return t&&Array.isArray(t)&&t.length>0&&t.forEach((i,a)=>{a<t.length-1&&(e+=P(i,t[a+1]))}),e},D=t=>C(t)**.99,f=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],E=(t,e)=>{let i;const a=Math.asin(Math.abs(e[1]-t[1])/P(t,e));return e[1]>=t[1]&&e[0]>=t[0]?i=a+Math.PI:e[1]>=t[1]&&e[0]<t[0]?i=2*Math.PI-a:e[1]<t[1]&&e[0]<t[0]?i=a:e[1]<t[1]&&e[0]>=t[0]&&(i=Math.PI-a),i},M=(t,e,i)=>{const a=E(e,t)-E(e,i);return a<0?a+2*Math.PI:a},I=(t,e,i,a,s)=>{const o=E(t,e),n=s?o+i:o-i,r=a*Math.cos(n),l=a*Math.sin(n);return[e[0]+r,e[1]+l]},S=function(t){if(t.length<=2)return t;const e=[],i=t.length-1;for(let a=0;a<=1;a+=.01){let[s,o]=[0,0];for(let e=0;e<=i;e++){const n=T(i,e),r=a**e,l=(1-a)**(i-e);s+=n*r*l*t[e][0],o+=n*r*l*t[e][1]}e.push([s,o])}return e.push(t[i]),e},F=t=>{let e=1;switch(t){case t<=1:e=1;break;case 2===t:e=2;break;case 3===t:e=6;break;case 24===t:e=24;break;case 5===t:e=120;break;default:for(let i=1;i<=t;i++)e*=i}return e},T=(t,e)=>F(t)/(F(e)*F(t-e));class _ extends t{positions;drawData;depthFailAppearance;connPoint;tempPoint4;llBodyPnts=[];rrBodyPnts=[];isClockWise;neckWidthFactor;headWidthFactor;headHeightFactor;neckHeightFactor;constructor(t){super(),this.drawData=t,this.positions=t.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 t=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(t),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:e,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(t){if(t.length<3)return this.drawData.shapePositions=t,void this.setShapePositions(this.drawData.shapePositions);const i=[],a=e(t).map(t=>(i.push(t.height),[t.longitude,t.latitude])),o=Math.max(...i),[n,r,l]=[a[0],a[1],a[2]],p=a.length;let d,c;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=((t,e,i)=>(i[1]-t[1])*(e[0]-t[0])>(e[1]-t[1])*(i[0]-t[0]))(n,r,l),this.isClockWise?(d=this.getArrowPoints(n,this.connPoint,this.tempPoint4,!1),c=this.getArrowPoints(this.connPoint,r,l,!0)):(d=this.getArrowPoints(r,this.connPoint,l,!1),c=this.getArrowPoints(this.connPoint,n,this.tempPoint4,!0));const h=d.length,m=(h-5)/2,u=d.slice(0,m),g=d.slice(m,m+5);let A=d.slice(m+5,h);this.llBodyPnts=u;let y=c.slice(0,m);const v=c.slice(m,m+5),P=c.slice(m+5,h);this.rrBodyPnts=P,y=S(y);const C=S(P.concat(u.slice(1)));A=S(A);const D=y.concat(v,C,g,A).filter(t=>t[0]&&t[1]).map(t=>new w.Cartographic(t[0],t[1],o)),E=s(D);this.drawData.shapePositions=E,this.drawData.shapePositions.push(E[0]),this.setShapePositions(this.drawData.shapePositions)}getTempPoint4(t,e,i){const a=f(t,e),s=P(a,i),o=M(t,a,i);let n,r,l,p=[0,0];return o<Math.PI/2?(n=s*Math.sin(o),r=s*Math.cos(o),l=I(t,a,Math.PI/2,n,!1),p=I(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=I(t,a,Math.PI/2,n,!1),p=I(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=I(t,a,Math.PI/2,n,!0),p=I(a,l,Math.PI/2,r,!0)):(n=s*Math.sin(2*Math.PI-o),r=s*Math.cos(2*Math.PI-o),l=I(t,a,Math.PI/2,n,!0),p=I(a,l,Math.PI/2,r,!1)),p}getArrowPoints(t,e,i,a){const s=f(t,e),o=P(s,i);let n=I(i,s,0,.3*o,!0),r=I(i,s,0,.5*o,!0);n=I(s,n,Math.PI/2,o/5,a),r=I(s,r,Math.PI/2,o/4,a);const l=[s,n,r,i],p=this.getArrowHeadPoints(l);if(!(p&&Array.isArray(p)&&p.length>0))throw new Error("Interpolation Error");{const i=p[0],a=p[4],s=P(t,e)/D(l)/2,o=this.getArrowBodyPoints(l,i,a,s);if(o){const s=o.length;let n=o.slice(0,s/2),r=o.slice(s/2,s);return n.push(i),r.push(a),n=n.reverse(),n.push(e),r=r.reverse(),r.push(t),n.reverse().concat(p,r)}}}getArrowBodyPoints(t,e,i,a){const s=C(t),o=D(t)*a,n=(o-P(e,i))/2;let r=0;const l=[],p=[];for(let e=1;e<t.length-1;e++){const i=M(t[e-1],t[e],t[e+1])/2;r+=P(t[e-1],t[e]);const a=(o/2-r/s*n)/Math.sin(i),d=I(t[e-1],t[e],Math.PI-i,a,!0),c=I(t[e-1],t[e],i,a,!1);l.push(d),p.push(c)}return l.concat(p)}getArrowHeadPoints(t){const e=D(t)*this.headHeightFactor,i=t[t.length-1],a=e*this.headWidthFactor,s=e*this.neckWidthFactor,o=e*this.neckHeightFactor,n=I(t[t.length-2],i,0,e,!0),r=I(t[t.length-2],i,0,o,!0),l=I(i,n,Math.PI/2,a,!1),p=I(i,n,Math.PI/2,a,!0);return[I(i,r,Math.PI/2,s,!1),l,i,p,I(i,r,Math.PI/2,s,!0)]}}class b extends t{positions;drawData;depthFailAppearance;constructor(t){super(),this.drawData=t,this.positions=t.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 t=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(t),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:e,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(t){if(t.length<2)return;const a=e(t).map(t=>m.point([t.longitude,t.latitude])),s=i(t[0]).height,n=o(t)/1e3,[r,l]=[a[0],a[1]],p=m.bearing(r,l),d=m.destination(r,.1*n,p-90,{units:"kilometers"}),c=m.destination(r,.1*n,p+90,{units:"kilometers"}),h=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"}),A=m.destination(r,.75*n,p+13,{units:"kilometers"}),y=[...d.geometry.coordinates,s,...h.geometry.coordinates,s,...g.geometry.coordinates,s,...l.geometry.coordinates,s,...A.geometry.coordinates,s,...u.geometry.coordinates,s,...c.geometry.coordinates,s,...d.geometry.coordinates,s];this.drawData.shapePositions=w.Cartesian3.fromDegreesArrayHeights(y.flat()),this.setShapePositions(this.drawData.shapePositions)}}const G=t=>{const e=new v(t);t.primitives.add(e)},R=t=>{const e=new _(t);t.primitives.add(e)},U=t=>{const e=new b(t);t.primitives.add(e)},x="cm",k="厘米",N="m",O="米",H="km",B="千米",W="公里",L="㎡",V="平方厘米",K="㎡",j="平方米",J="km²",Q="平方千米",z="平方公里",Y="亩",q="公顷",X={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},Z=(t,e,i)=>e===i?t:t*et(i),$=(t,e,i)=>e===i?t:t*function(t){switch(t){case L:return 1e4;case K:return 1;case J:return 1e-6;case V:return 1e4;case j:return 1;case Q:case z:return 1e-6;case Y:return.0015;case q:return 1e-4;default:return 1}}(i),tt=t=>X[t],et=t=>{switch(t){case N:return 1;case x:case k:return 100;case H:return.001;case O:return 1;case B:case W:return.001;default:return 1}};const it=(t,e)=>{let a=t;if("vertical-surface-line"===e&&t.length>=1){const e=t[0],i=w.Cartographic.fromCartesian(e),s=w.Math.toDegrees(i.longitude),o=w.Math.toDegrees(i.latitude),n=0;a=[w.Cartesian3.fromDegrees(s,o,i.height),w.Cartesian3.fromDegrees(s,o,n)]}if("vertical-line"===e&&t.length>=2){const e=t[0],s=t[1],o=i(e),r=i(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 e.startsWith("curve")&&t.length>2&&(a=ot(t)),a},at=(t,e,i,s,o)=>{i.push(...t.map((i,o)=>{const n=t[o+1];if(n){let t=e?d(i,n):a(i,n);return t=Z(t,"m",s),{value:Number(t.toFixed(2)),unit:s,position:p([i,n]),positions:[i,n]}}return null}).filter(t=>t&&t.value>0))},st=t=>{if(2===t.length)return t;let[e,i]=t;return i||(i=tt(e)),[e,i]},ot=t=>{const e=t.length,i=r(t),a=Math.floor(i/5),s=[];for(let t=0;t<e;t++)s.push(1.5*t);const o=new w.CatmullRomSpline({points:t,times:s}),n=[],l=s[0],p=s[s.length-1];for(let t=0;t<a;t++){const e=t/(a-1),i=w.Math.lerp(l,p,e),s=o.evaluate(i);n.push(s)}return n},nt=(t,e=1e3)=>{if(t.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const a=t[t.length-1],s=t[t.length-2],o=i(a),r=i(s),l=o.height,p=o.longitude-r.longitude,d=o.latitude-r.latitude,c=Math.sqrt(p**2+d**2);if(c<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const h=p/c,m=d/c,u=(t=>{const e=w.Math.toRadians(.5),i=n(t),a=n(new w.Cartographic(t.longitude+e,t.latitude,t.height)),s=2*w.Cartesian3.distance(i,a),o=n(new w.Cartographic(t.longitude,t.latitude+e,t.height));return{lon:s,lat:2*w.Cartesian3.distance(i,o)}})(o),g=e/u.lon*w.Math.RADIANS_PER_DEGREE,A=e/u.lat*w.Math.RADIANS_PER_DEGREE,y=Math.PI/6,v=e*Math.tan(y),P=v/u.lon*w.Math.RADIANS_PER_DEGREE,C=v/u.lat*w.Math.RADIANS_PER_DEGREE,D=o.longitude-h*g-m*P,f=o.latitude-m*A+h*C,E=o.longitude-h*g+m*P,M=o.latitude-m*A-h*C,I=n(new w.Cartographic(D,f,l)),S=n(new w.Cartographic(E,M,l));return[I,n(new w.Cartographic(o.longitude,o.latitude,l)),S]};class rt extends t{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(t){super(),this.drawData=t,this.positions=t.positions,this.linePrimitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getGeometry(){const t=it(this.positions,this.drawData.shape);if(this.drawData.shapePositions=t,"vertical-surface-line"===this.drawData.shape){const t=this.drawData.pointPrimitives.get(1);t&&(t.position=this.drawData.shapePositions[1])}if(this.setShapePositions(t),!(t.length<2))return this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:t,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:t,width:this.drawData.style.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const t=this.getGeometry();if(!t)return;const e=new w.GeometryInstance({geometry:t,id:`draw-${this.drawData.id}`});return t?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(t){t?this.appearance=t:(this.appearance=new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:w.Color.fromCssColorString(this.drawData.style.polyline.color)}}})}),this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})}),this.depthFailAppearance=new w.PolylineMaterialAppearance({material:w.Material.fromType(w.Material.PolylineDashType,{color:w.Color.fromCssColorString(this.drawData.style.polyline.depthFailColor)})}))}}class lt extends t{positions;drawData;depthFailAppearance;constructor(t){super(),this.drawData=t,this.positions=t.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const t=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(t),this.positions.length<3)return;const e=[new w.GeometryInstance({geometry:new w.PolygonGeometry({polygonHierarchy:new w.PolygonHierarchy(t),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new w.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new w.Primitive({geometryInstances:e,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(t){const e=[...t,t[0]];this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class pt extends t{positions;drawData;depthFailAppearance;primitiveCollection;constructor(t){super(),this.drawData=t,this.positions=t.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 t=JSON.parse(JSON.stringify(this.positions)),e=this.drawData.clampToGround?d(t[0],t[1]):a(t[0],t[1]);if(!e)return;const i=w.Cartographic.fromCartesian(t[0]).height,s=[new w.GeometryInstance({geometry:new w.CircleGeometry({center:t[0],height:i,radius:e}),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(t){let e=t;const i=a(t[0],t[1]),s=w.Cartographic.fromCartesian(t[0]).height,o=new w.CircleOutlineGeometry({center:t[0],height:s,radius:i}),n=w.CircleOutlineGeometry.createGeometry(o);let r=[];if(n){const t=[].slice.call(n.attributes.position.values);r=w.Cartesian3.unpackArray(t),r.push(r[0]),e=r}this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class dt extends t{positions;drawData;depthFailAppearance;primitiveCollection;constructor(t){super(),this.drawData=t,this.positions=t.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 t=JSON.parse(JSON.stringify(this.positions));t.length=2,this.calcShapePositions(t);const e=w.Cartographic.fromCartesian(t[0]).height,i=w.Rectangle.fromCartesianArray(t),a=[new w.GeometryInstance({geometry:new w.RectangleGeometry({rectangle:i,height:e}),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(t){let e=t;const i=w.Cartographic.fromCartesian(t[0]).height,a=w.Rectangle.fromCartesianArray(t),s=new w.RectangleOutlineGeometry({rectangle:a,height:i}),o=w.RectangleOutlineGeometry.createGeometry(s);let n=[];if(o){const t=[].slice.call(o.attributes.position.values);n=w.Cartesian3.unpackArray(t),n.push(n[0]),e=n}this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class ct extends t{drawData;labelCollection;measureDivs;cesiumWidget;viewer;constructor(t,e){super(),this.viewer=e,this.cesiumWidget=e._element.getElementsByClassName("cesium-widget")[0],this.drawData=t,this.labelCollection=new w.LabelCollection({scene:e.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(t){if("point"===this.drawData.shape)return;this.drawData.measureUnit=t,this.clearAllDiv();const e=(t=>{let{shapePositions:e,positions:i,shape:s,clampToGround:o,measureUnit:n}=t;e||(e=i),o||(o=!1);const[r,c]=st(n),h=tt("m");t.measureUnit=[r,c];const m=[];if("polyline"===s&&(at(i,o,m,r),m.push({value:0,unit:r,position:i[0],positions:i,prefixText:"起点"}),m.push({value:Number(m.reduce((t,e)=>t+e.value,0).toFixed(2)),unit:r,position:i[i.length-1],positions:i})),"vertical-surface-line"===s&&at(e,o,m,r),"vertical-line"===s&&(at(e,o,m,r),m.forEach((t,e)=>{0===e&&(t.prefixText="高度"),1===e&&(t.prefixText="水平距离"),2===e&&(t.prefixText="空间距离")})),"polygon"===s){at(e,o,m,r);const t=$(l(e),h,c);m.push({value:Number(t.toFixed(2)),unit:c,position:p(e),positions:e})}if("rectangle"===s){at(e,o,m,r);const t=$(l(e),h,c);m.push({value:Number(t.toFixed(2)),unit:c,position:p(e),positions:e})}if("circle"===s){const t=o?d(i[0],i[1]):a(i[0],i[1]);m.push({value:Number(Z(t,"m",r).toFixed(2)),unit:r,position:i[1],positions:i,prefixText:"半径"});const e=$(t*t*Math.PI,h,c);t>0&&m.push({value:Number(e.toFixed(2)),unit:c,position:i[0],positions:i})}return m})(this.drawData);this.drawData.measureResult=e,e.forEach((t,e)=>{let i="";t.prefixText?(i=`${t.prefixText}`,t.value&&(i+=`:${t.value}${t.unit}`)):i+=`${t.value}${t.unit}`;const a=this.createDiv(`measure-label-${this.drawData.id}-${e}`,i);this.measureDivs.push({position:t.position,divEle:a})})}updatePointDivLabel(){this.clearAllDiv(),this.drawData.positions.forEach(t=>{const e=i(t),a=this.createDiv(`measure-label-${this.drawData.id}-0`,`经度:${e.longitude.toFixed(6)}\n纬度:${e.latitude.toFixed(6)}\n高度:${e.height.toFixed(6)}`);this.measureDivs.push({position:t,divEle:a})})}renderDivPosition(){this.viewer.scene.postRender.addEventListener(()=>{this.measureDivs.forEach(t=>{const e=this.viewer.scene.cartesianToCanvasCoordinates(t.position);if(e){t.divEle.style.display="block";const i=t.divEle.getBoundingClientRect();t.divEle.style.left=e.x-i.width/2+"px",t.divEle.style.top=e.y-i.height+"px"}else t.divEle.style.display="none"})})}destroy(){super.destroy(),this.clearAllDiv()}setAppearance(){}clearAllDiv(){this.measureDivs.forEach(t=>{t.divEle.remove()}),this.measureDivs=[]}createDiv(t,e,i=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 ${e.split("\n").map(t=>`\n <div style="height: 24px; line-height: 24px">\n ${t}\n </div>\n `).join(" ")}\n </div>\n <div style="\n height: ${i}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=t,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(t){this.setShapePositions(t)}}class ht extends t{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;arrowLengthScale;constructor(t,e){super(),this.arrowLengthScale=5,this.drawData=t,this.positions=t.positions,this.linePrimitiveCollection=new w.PrimitiveCollection,this.viewer=e,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;let t=this.positions;t=it(t,this.drawData.shape);let e=r(t)/this.arrowLengthScale;return e>3e6&&(e=3e6),t=nt(t,e/2),this.calcShapePositions(t),t.length<2?void 0:(this.setShapePositions(t),this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:t,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:t,width:this.drawData.style.polyline.width}))}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const t=this.getGeometry();if(!t)return;const e=new w.GeometryInstance({geometry:t,id:this.drawData.id});return t?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(t){t?this.appearance=t:(this.appearance=new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:w.Color.fromCssColorString(this.drawData.style.polyline.color)}}})}),this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})}),this.depthFailAppearance=new w.PolylineMaterialAppearance({material:w.Material.fromType(w.Material.PolylineDashType,{color:w.Color.fromCssColorString(this.drawData.style.polyline.depthFailColor)})}))}calcShapePositions(t){this.setShapePositions(t)}}class mt extends t{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(t){super(),this.drawData=t,this.linePrimitiveCollection=new w.PrimitiveCollection,this.setAppearance()}getGeometry(){const t=this.drawData.shapePositions||[];if(this.calcShapePositions(t),!(t.length<2))return this.drawData.clampToGround?new w.GroundPolylineGeometry({positions:t,width:this.drawData.style.polyline.width}):new w.PolylineGeometry({positions:t,width:this.drawData.style.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;this.drawData.__needUpdateAppearance&&this.setAppearance();const t=this.getGeometry();if(!t)return;const e=new w.GeometryInstance({geometry:t,id:`draw-${this.drawData.id}`});return t?this.drawData.clampToGround?new w.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new w.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(t){t?this.appearance=t:(this.appearance=new w.PolylineMaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:w.Color.fromCssColorString(this.drawData.style.polyline.color)}}})}),this.appearanceTran=new w.MaterialAppearance({material:new w.Material({fabric:{type:"Color",uniforms:{color:new w.Color(0,0,0,0)}}})}),this.depthFailAppearance=new w.PolylineMaterialAppearance({material:w.Material.fromType(w.Material.PolylineDashType,{color:w.Color.fromCssColorString(this.drawData.style.polyline.depthFailColor)})}))}calcShapePositions(t){this.setShapePositions(t)}}const wt={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},ut={},gt=t=>{const{type:e,action:i,outline:a,pointCount:s}=t;ut[e]=(t,e)=>{i(t,e),a&&vt(t)},s&&(wt[e]=s)},At=(t,e,i)=>{ut[e]&&ut[e](i,t)},yt=t=>{const e=new rt(t);t.primitives.add(e)},vt=t=>{const e=new mt(t);t.primitives.add(e)},Pt=(t,e)=>{const i=new ht(t,e);t.primitives.add(i)},Ct=t=>{const e=new lt(t);t.primitives.add(e)},Dt=t=>{const e=new pt(t);t.primitives.add(e)},ft=t=>{const e=new dt(t);t.primitives.add(e)},Et=(t,e)=>{const i=new ct(t,e);t.primitives.add(i),t.measurePrimitive=i,t.primitives.raiseToTop(i)},Mt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",It="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",St="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",Ft="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class Tt{static editUI;_editUi;viewer;_editUiPosition=null;_editPointPrimitive=null;_drawEditEvent;elementId="draw-edit-ui";constructor(t,e){this._editUi=null,this.viewer=t,this.create(),this.setVisible(!1),this.renderPosition(),this._drawEditEvent=e}create(){if(this._editUi=document.getElementById(this.elementId),this._editUi)return this._editUi;const t=document.createElement("DIV");t.id=this.elementId,t.className="draw-edit-ui";const e=document.createElement("DIV");e.title="点击移动节点";const i=document.createElement("img");i.src=Ft,i.className="draw-edit-icon",e.appendChild(i),e.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=Mt,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=St,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=It,l.title="点击删除绘制",l.className="draw-edit-icon",r.appendChild(l),r.addEventListener("click",()=>{this._drawEditEvent.drawDelete&&this._drawEditEvent.drawDelete(this._editPointPrimitive)}),t.appendChild(e),t.appendChild(a),t.appendChild(o),t.appendChild(r),document.body.appendChild(t),this._editUi=t}setAddElementStatus(t){const e=document.getElementById("addPoint"),i=document.getElementById("removePoint");e&&(e.style.display=t?"block":"none"),i&&(i.style.display=t?"block":"none")}static createEditUi(t,e){return Tt.editUI||(Tt.editUI=new Tt(t,e)),Tt.editUI}showAt(t,e,i){this.setVisible(!0),this._editUiPosition=t,this._editPointPrimitive=e,this.setAddElementStatus(!wt[i])}setVisible(t){this._editUi&&(this._editUi.style.display=t?"flex":"none")}renderPosition(){this.viewer.scene.postRender.addEventListener(()=>{if(this._editUiPosition&&this._editUi&&"flex"===this._editUi.style.display){const t=this.viewer.scene.cartesianToCanvasCoordinates(this._editUiPosition);this._editUi.style.position="fixed",this._editUi.style.top=t.y-28+"px",this._editUi.style.left=`${t.x+15}px`}})}destroy(){Tt.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}ut.polyline=t=>{yt(t)},ut["polyline-arrow"]=(t,e)=>{yt(t),Pt(t,e)},ut.curve=t=>{yt(t)},ut["curve-arrow"]=(t,e)=>{yt(t),Pt(t,e)},ut["vertical-line"]=t=>{t.clampToGround=!1,yt(t)},ut["vertical-surface-line"]=t=>{t.clampToGround=!1,yt(t)},ut.polygon=t=>{Ct(t),vt(t)},ut.circle=t=>{Dt(t),vt(t)},ut.rectangle=t=>{ft(t),vt(t)},gt({type:"sector",action:G,outline:!0,pointCount:3}),gt({type:"db-arrow",action:R,outline:!0,pointCount:4}),gt({type:"fine-arrow",action:U,outline:!0,pointCount:2});const _t=t=>{let e;const i=[];let a=new w.Cartesian3(0,0,0);const s=[];let o,n,r;const l=c.createToolTip(t);let p=!1;((t,e)=>{const i=t.scene,a=new w.ScreenSpaceEventHandler(i.canvas);let s;t.cesiumWidget.screenSpaceEventHandler.removeInputAction(w.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),a.setInputAction(a=>{const o=i.pickPosition(a.position),n=(new Date).getTime();if(s&&n-s<270){const i=t.scene.pick(a.position);return void e(u.DRAW_DB_CLICK,{position:o,pickPrimitive:i?.primitive,windowPosition:a.position})}e(u.DRAW_ADD,{position:o}),s=(new Date).getTime()},w.ScreenSpaceEventType.LEFT_CLICK),a.setInputAction(a=>{const s=t.scene.pick(a.endPosition),o=i.pickPosition(a.endPosition);e(u.DRAW_MOVE,{position:o,pickPrimitive:s?.primitive,windowPosition:a.endPosition}),s&&e(u.DRAW_PICK,{position:o,pickPrimitive:s?.primitive,windowPosition:a.endPosition})},w.ScreenSpaceEventType.MOUSE_MOVE),a.setInputAction(()=>{e(u.DRAW_RIGHT_CLICK,{})},w.ScreenSpaceEventType.RIGHT_CLICK)})(t,(t,e)=>{o&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(t)||o.isEditing)&&C[t]?.(e)});const d=new w.PrimitiveCollection;d.destroyPrimitives=!1,t.scene.primitives.add(d);const m=()=>{o&&(o.isEditing=!1,o.isDisAdd=!0,E(),I.id===o.id?v():(g(o.id),o={}))},g=t=>{const e=s.findIndex(e=>e.id===t);if(-1===e)return;const i=s[e];i.positions.length=0,s.splice(e,1),G.drawRemove&&G.drawRemove(i),setTimeout(()=>{i.measurePrimitive?.clearAllDiv(),d.remove(i?.primitives)},300)},v=()=>{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),G.drawEditEnd&&G.drawEditEnd(o),setTimeout(()=>{o.isEditing=!1,o.isDisAdd=!1},300),a=new w.Cartesian3(0,0,0),n=void 0,void E();if((!wt[o.shape]||wt[o.shape]>2)&&o.positions&&o.positions.length>2){const t=p?2:1,e=o.pointPrimitives.get(o.positions.length-t);return o.pointPrimitives.remove(e),void o?.positions.splice(o.positions.length-t,1)}a=new w.Cartesian3(0,0,0),n=void 0,g(o.id),o={},E()},P=e=>{e||(e=o),t._element.style.cursor="default",a=new w.Cartesian3(0,0,0),e.positions.pop(),e.isDisAdd=!0,setTimeout(()=>{e.isEditing=!1,e.isDisAdd=!1,G.drawEnd&&G.drawEnd(e),o={}},300),n=void 0,r&&(e.pointPrimitives.remove(r),r=void 0),E()},C={drawAdd:({position:t})=>{if(o.positions.push(t),p=!1,I.id)return G.drawEditEnd&&G.drawEditEnd(o),I.id="",void P();_(t,o),G.drawAdd&&G.drawAdd(t,o),o.positions.length>wt[o.shape]&&P()},drawMove:({position:t,windowPosition:e})=>{if(p=!0,M(),t&&!o.isDisAdd&&o.isEditing){if(E(e),I.id)o.positions.splice(I.index,1,t),I.pointPrimitive.position=t;else{const e=o.positions.findIndex(t=>t.x===a.x&&t.y===a.y&&t.z===a.z);o.positions.push(t),-1!==e&&o.positions.splice(e,1),r&&o.pointPrimitives.remove(r),r=_(t,o)}a=t,G.drawMove&&G.drawMove(t,o)}},drawPick:({pickPrimitive:t,windowPosition:e})=>{o.isEditing||t instanceof w.PointPrimitive&&D(t,e)},drawDbClick:({position:t,windowPosition:e,pickPrimitive:i})=>{if(o.isEditing){if(wt[o.shape])return;P()}else!o.isEditing&&i&&f(t,e,i)},drawRightClick:()=>{o.isEditing?v():e.setVisible(!1)}},D=(e,a)=>{const o=e.id.split("-")[1],r=s.find(t=>t.id===o);if(i.includes(e.id))return;if(!r)return;if(!r.edit)return;t._element.style.cursor="pointer";const p=r.style.point;e.pixelSize=1.5*p.pixelSize,e.outlineWidth=1.5*p.outlineWidth,n=e,l.showAt(a,A.pointEnter),l.setVisible(!0)},f=(t,a,o)=>{if(o instanceof w.PointPrimitive){if(i.includes(o.id))return;const a=o.id.split("-")[1],n=s.find(t=>t.id===a);if(!n)return;if(!n.edit)return;console.log(o),e.showAt(t,o,n.shape),G.drawEditStart&&G.drawEditStart(n)}},E=e=>{if(!l)return void(t._element.style.cursor="default");if(!e||!o.positions)return t._element.style.cursor="default",void l.setVisible(!1);const i=wt[o.shape]?"default":"default-dbclick";I.id?l.showAt(e,A.drawEditMove[o.shape]||A.drawEditMove.default):wt[o.shape]!==o.positions.length?o.positions.length>1?l.showAt(e,A.drawMove[i]||A.drawMove[i]):l.showAt(e,A.drawStart[i]||A.drawStart.default):l.showAt(e,A.drawEnd)},M=()=>{if(n){const t=n.id.split("-")[1],e=s.find(e=>e.id===t);if(!e)return;const i=e.style.point;n.pixelSize=i.pixelSize,n.outlineWidth=i.outlineWidth,E()}},I={},S={drawEditAdd:i=>{e.setVisible(!1);const{id:a,index:s,drawData:n}=F(i),r=new w.Cartesian3(i.position.x,i.position.y,i.position.z);n?.positions.splice(s,0,r),o=n;const l=_(r,o);t._element.style.cursor="move",Object.assign(I,{id:a,index:s+1,pointPrimitive:l,originPosition:r}),o.isEditing=!0},drawEditMove:i=>{e.setVisible(!1),t._element.style.cursor="move";const{id:a,index:s,drawData:n}=F(i);o=n,Object.assign(I,{id:a,index:s,pointPrimitive:i,originPosition:new w.Cartesian3(i.position.x,i.position.y,i.position.z)}),o.isEditing=!0},drawEditRemove:t=>{e.setVisible(!1);const{index:i,drawData:a}=F(t);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(i,1),a?.pointPrimitives.remove(t),G.drawEditEnd&&G.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:t=>{e.setVisible(!1);const{id:i}=F(t);g(i)}};e=Tt.createEditUi(t,S);const F=t=>{const e=t.id.split("-")[1],i=s.find(t=>t.id===e),a=i.positions.findIndex(e=>e.x===t.position.x&&e.y===t.position.y&&e.z===t.position.z);return{id:e,drawData:i,index:a}},T=(t,e)=>{const i=new w.PrimitiveCollection,a=new w.PointPrimitiveCollection;i.add(a);const s=JSON.parse(JSON.stringify(y));t.style&&(Object.assign(s.point,t.style.point||{}),Object.assign(s.polyline,t.style.polyline||{}),Object.assign(s.polygon,t.style.polygon||{}));const o={id:t.id,edit:t.edit||!1,measure:t.measure||!1,measureLabel:t.measureLabel||!1,disDepthFail:t.disDepthFail||!1,measureUnit:t.measureUnit||["m"],isEditing:!0,shape:t.shape,positions:e,clampToGround:t.clampToGround,pointPrimitives:a,primitives:i,style:s};return d.add(i),e.forEach(t=>{_(t,o)}),o},_=(t,e)=>{const i=e.style.point;return e.pointPrimitives.add({id:`draw-${e.id}-${h()}`,position:t,...i,color:w.Color.fromCssColorString(i.color),outlineColor:w.Color.fromCssColorString(i.outlineColor),disableDepthTestDistance:Number.POSITIVE_INFINITY})},b=e=>{const i=T({...e},e.positions);i.positions.push(i.positions[i.positions.length-1]),o=i,s.push(i),At(t,e.shape,i),e.measure&&Et(i,t),i.primitives.raiseToTop(i.pointPrimitives),P(i)},G={};return{draw:e=>{t._element.style.cursor="crosshair",n=void 0,e.id=h();const i=T(e,[]);o=i,G.drawStart&&G.drawStart(i),s.push(i),At(t,e.shape,i),e.measure&&Et(i,t),i.primitives.raiseToTop(i.pointPrimitives)},removeEditing:m,remove:t=>{g(t.id),E()},removeAll:()=>{s.forEach(t=>{t.measurePrimitive?.clearAllDiv()}),d.removeAll(),s.length=0,m()},setDrawStyle:t=>{Object.assign(y.point,t.point),Object.assign(y.polyline,t.polyline),Object.assign(y.polygon,t.polygon)},setDrawItemStyle:(t,e)=>{if(-1===s.findIndex(e=>e.id===t.id))throw new Error("绘制对象不存在");Object.assign(t.style.point,e.point||{}),Object.assign(t.style.polyline,e.polyline||{}),Object.assign(t.style.polygon,e.polygon||{}),console.log(t.pointPrimitives),t.__needUpdateAppearance=!0,t.isEditing=!0,t.pointPrimitives._pointPrimitives.forEach(e=>{e.pixelSize=t.style.point.pixelSize,e.outlineWidth=t.style.point.outlineWidth,e.color=w.Color.fromCssColorString(t.style.point.color),e.outlineColor=w.Color.fromCssColorString(t.style.point.outlineColor)}),setTimeout(()=>{t.isEditing=!1,t.__needUpdateAppearance=!1},100)},setClampToGround:(t,e)=>{if(-1===s.findIndex(e=>e.id===t.id))throw new Error("绘制对象不存在");t.clampToGround=e,t.isEditing=!0,setTimeout(()=>{t.isEditing=!1,t.__needUpdateAppearance=!1},100)},Event:G,updateMeasureUnit:(t,e)=>{if(-1===s.findIndex(e=>e.id===t.id))throw new Error("绘制对象不存在");const i=t.primitives._primitives.find(t=>t instanceof ct);i&&i.updateUnit(e)},reShowDrawData:b,reShowDrawDatas:t=>{t.forEach(t=>{console.log("reshow",t),b(t)})}}};export{g as Draw,u as DrawEventType,y as DrawStyle,gt as addDrawActions,_t 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.21",
4
+ "version": "0.0.22-beta.0",
5
5
  "author": "koino",
6
6
  "keywords": [
7
7
  "cesium",
@@ -25,11 +25,11 @@
25
25
  "README.MD"
26
26
  ],
27
27
  "peerDependencies": {
28
- "cesium": "1.131.0",
28
+ "cesium": "1.134.0",
29
29
  "@turf/turf": "^7.0.0"
30
30
  },
31
31
  "dependencies": {
32
- "@ino-cesium/common": "0.0.21"
32
+ "@ino-cesium/common": "0.0.22-beta.0"
33
33
  },
34
34
  "scripts": {
35
35
  "build": "rimraf dist && rollup -c",