leiting-bim 2.1.69 → 2.1.71
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.
Potentially problematic release.
This version of leiting-bim might be problematic. Click here for more details.
- package/leiting-bim.es.js +1 -1
- package/leiting-bim.umd.js +1 -1
- package/package.json +1 -1
- package/plugins/cesium-core/dist/cesium-core.mjs +20 -20
- package/plugins/cesium-core/dist/cesium-core.mjs.map +1 -1
- package/plugins/cesium-core/dist/cesium-core.umd.js +2 -2
- package/plugins/cesium-core/dist/cesium-core.umd.js.map +1 -1
- package/plugins/cesium-core/package.json +1 -1
- package/plugins/cesium-vue/dist/cesium-vue/src/components/basic-audio/index.d.ts +13 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/basic-video/index.d.ts +98 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/card-carousel/index.d.ts +147 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/card-content/index.d.ts +16 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/card-page/index.d.ts +64 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/carousel-img/index.d.ts +34 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/echarts-pro/index.d.ts +63 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-bubble/index.d.ts +73 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-default/index.d.ts +43 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-html/index.d.ts +43 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-manage/index.d.ts +159 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-text/index.d.ts +25 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/measurement/index.d.ts +73 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/components/position-picker/index.d.ts +58 -0
- package/plugins/cesium-vue/dist/cesium-vue/src/index.d.ts +46 -0
- package/plugins/cesium-vue/dist/components/basic-audio.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/basic-audio.js.map +1 -1
- package/plugins/cesium-vue/dist/components/basic-video.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/basic-video.js.map +1 -1
- package/plugins/cesium-vue/dist/components/card-carousel.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/card-carousel.js.map +1 -1
- package/plugins/cesium-vue/dist/components/card-content.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/card-content.js.map +1 -1
- package/plugins/cesium-vue/dist/components/card-page.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/card-page.js.map +1 -1
- package/plugins/cesium-vue/dist/components/carousel-img.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/carousel-img.js.map +1 -1
- package/plugins/cesium-vue/dist/components/echarts-pro.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/marker-bubble.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/marker-bubble.js.map +1 -1
- package/plugins/cesium-vue/dist/components/marker-default.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/marker-default.js.map +1 -1
- package/plugins/cesium-vue/dist/components/marker-html.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/marker-html.js.map +1 -1
- package/plugins/cesium-vue/dist/components/marker-manage.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/marker-manage.js +211 -194
- package/plugins/cesium-vue/dist/components/marker-manage.js.map +1 -1
- package/plugins/cesium-vue/dist/components/marker-text.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/marker-text.js.map +1 -1
- package/plugins/cesium-vue/dist/components/measurement.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/measurement.js.map +1 -1
- package/plugins/cesium-vue/dist/components/position-picker.d.ts +3 -3
- package/plugins/cesium-vue/dist/components/position-picker.js.map +1 -1
- package/plugins/cesium-vue/dist/index-CUs_hd1V.js.map +1 -1
- package/plugins/cesium-vue/dist/index-Kdqw0FJN.js.map +1 -1
- package/plugins/cesium-vue/dist/index.d.ts +6 -46
- package/plugins/cesium-vue/dist/index.js.map +1 -1
- package/plugins/cesium-vue/package.json +4 -4
- package/plugins/theme-chalk/package.json +1 -1
- package/plugins/utils/package.json +1 -1
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
return material;
|
|
26
26
|
}
|
|
27
|
-
`,o};return a.Material._materialCache.addMaterial(e,{fabric:{type:e,uniforms:{color:new a.Color(1,0,0,.5),image:t.image,time:0},source:r({count:t.count,freely:t.freely,direction:t.direction})},translucent:function(){return!0}}),new i(t)}function Pr(a,t){const e=a.Color,i=
|
|
27
|
+
`,o};return a.Material._materialCache.addMaterial(e,{fabric:{type:e,uniforms:{color:new a.Color(1,0,0,.5),image:t.image,time:0},source:r({count:t.count,freely:t.freely,direction:t.direction})},translucent:function(){return!0}}),new i(t)}function Pr(a,t){const e=a.Color,i=Object.defineProperties,r=a.Event,s=a.createPropertyDescriptor,o=a.Property,n=(u,m)=>u===void 0?m:u,l={};let c=t.materialType||"PolylineFlow"+Date.now()+Math.floor(Math.random()*1e3);function d(u){u=n(u,l),this._definitionChanged=new r,this._color=void 0,this._colorSubscription=void 0,this.color=u.color||e.fromBytes(0,255,255,255),this._duration=void 0,this._durationSubscription=void 0,this.duration=n(u.duration,45)}return i(d.prototype,{isConstant:{get(){return!1}},definitionChanged:{get(){return this._definitionChanged}}}),d.prototype.getType=function(u){return c},d.prototype.getValue=function(u,m){return m||(m={}),m.color=o.getValueOrClonedDefault(this._color,u,a.Color.WHITE,m.color),m.duration=this._duration,m},d.prototype.equals=function(u){return this===u||u instanceof d&&o.equals(this._color,u._color)},i(d.prototype,{color:s("color"),duration:s("duration")}),a.PolylineFlowMaterialProperty=d,a.Material._materialCache.addMaterial(c,{fabric:{type:c,uniforms:{color:new e(1,1,1,1),duration:45},source:(function(){return`uniform vec4 color;
|
|
28
28
|
uniform float duration;
|
|
29
29
|
czm_material czm_getMaterial(czm_materialInput materialInput){
|
|
30
30
|
czm_material material = czm_getDefaultMaterial(materialInput);
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
material.alpha = alpha;
|
|
41
41
|
material.emission = fragColor.rgb;
|
|
42
42
|
return material;
|
|
43
|
-
}`})()},translucent(){return!0}}),new c(t)}class Lr{constructor(){h(this,"categoryMap",new Map);h(this,"CategoryGet",{})}registerCategoryGet(t,e){if(!t)return console.warn("分类不能为空");this.CategoryGet[t]=e}register(t){const{themeKey:e,material:i,force:r=!1,category:s="default"}=t;this.categoryMap.has(s)||this.categoryMap.set(s,new Map);const o=this.categoryMap.get(s);if(o.has(e))if(r)console.info(`[MaterialManager] themeKey '${e}' 在分类 '${s}' 已被覆盖`);else{console.warn(`[MaterialManager] 已存在 themeKey '${e}' 在分类 '${s}',如需覆盖请设置 force = true`);return}o.set(e,i)}get({themeKey:t,category:e,options:i}){var r;return e=e||"default",this.CategoryGet[e]?this.CategoryGet[e]({themeKey:t,materialMap:this.categoryMap,options:i||{}}):(r=this.categoryMap.get(e))==null?void 0:r.get(t)}has(t,e="default"){var i;return((i=this.categoryMap.get(e))==null?void 0:i.has(t))??!1}remove(t,e="default"){const i=this.categoryMap.get(e);if(!i)return;const r=i.get(t);r!=null&&r.destroy&&r.destroy(),i.delete(t),i.size===0&&this.categoryMap.delete(e)}keys(t="default"){var e;return[...((e=this.categoryMap.get(t))==null?void 0:e.keys())||[]]}clearCategory(t="default"){var i;const e=this.categoryMap.get(t);if(e){for(const r of e.values())(i=r==null?void 0:r.destroy)==null||i.call(r);e.clear(),this.categoryMap.delete(t)}}clearAll(){var t;for(const e of this.categoryMap.values())for(const i of e.values())(t=i==null?void 0:i.destroy)==null||t.call(i);this.categoryMap.clear()}categories(){return[...this.categoryMap.keys()]}}class Er{constructor(t){h(this,"id");h(this,"entities",[]);h(this,"primitives",[]);h(this,"dataItem",{});h(this,"aggregator");h(this,"cardPool");const{id:e,entities:i=[],primitives:r=[],dataItem:s={},aggregator:o,cardPool:n}=t;this.id=e,this.entities=i,this.primitives=r,this.dataItem=s,this.aggregator=o,this.cardPool=n}setVisible(t){this.entities.forEach(e=>{e&&(e.show=t)}),this.primitives.forEach(e=>{e&&(e.show=t)}),this.aggregator&&Array.isArray(this.dataItem.billboard)&&this.dataItem.billboard.map((i,r)=>{var o;return{id:this.dataItem.id,data:{...this.dataItem,show:t&&(((o=i.data)==null?void 0:o.show)??!0)}}}).forEach(i=>{var r;(r=this.aggregator)==null||r.updatePoint(i)}),this.cardPool&&this.dataItem.card&&(t?this.cardPool.showByIds([this.dataItem.id]):this.cardPool.hideByIds([this.dataItem.id]))}removeAll(t,e=!0){return this.entities.forEach(i=>{i&&t.entities.remove(i)}),this.entities=[],this.primitives.forEach(i=>{i&&t.scene.primitives.remove(i)}),this.primitives=[],e&&this.aggregator&&Array.isArray(this.dataItem.billboard)&&this.aggregator.removePointsById([this.dataItem.id]),e&&this.cardPool&&this.dataItem.card&&this.cardPool.removeByIds([this.dataItem.id]),this.dataItem.id}}class Mr{constructor(t,e,i,r,s,o){h(this,"id");h(this,"groupMap",new Map);h(this,"Cesium");h(this,"viewer");h(this,"materialManager");h(this,"aggregator");h(this,"cardPool");this.id=t,this.Cesium=e,this.viewer=i,this.materialManager=r,this.aggregator=s,this.cardPool=o,this.aggregator.labelPool.eventBus.addListener(U.Click,{name:"BufferedHierarchicalAggregator_maker_click",fn:(l,c)=>{this.cardPool.showByIds([l.data.id])}}),new e.ScreenSpaceEventHandler(i.scene.canvas).setInputAction(()=>{this.cardPool.hideFilter(l=>!l.initShow)},e.ScreenSpaceEventType.LEFT_CLICK)}createPolyline(t,e){if(!t.positions||t.positions.length<1)return null;const i=this.materialManager.get({themeKey:t.theme,category:"polyline",options:t}),r=Array.isArray(t.positions[0])?t.positions.flat():t.positions;let s={...t};return i&&(s.material=i),this.viewer.entities.add({polyline:{...s,positions:this.Cesium.Cartesian3.fromDegreesArrayHeights(r)},show:(t.show??!0)&&e})}createWall(t,e){var l,c;if(!t.positions||t.positions.length<1)return null;const i=this.materialManager.get({themeKey:t.theme,category:"wall",options:t}),r=t.positions.length===((l=t.minimumHeights)==null?void 0:l.length)?t.minimumHeights.map(d=>d-Number(t.minHeight||0)):t.positions.map(d=>(d[2]||0)-Number(t.minHeight||0)),s=t.positions.length===((c=t.maximumHeights)==null?void 0:c.length)?t.maximumHeights.map(d=>d+Number(t.maxHeight||0)):t.positions.map(d=>(d[2]||0)+Number(t.maxHeight||0)),o=t.positions.map(d=>this.Cesium.Cartesian3.fromDegrees(d[0],d[1],d[2]||0));let n={...t};return i&&(n.material=i),this.viewer.entities.add({wall:{...n,positions:o,minimumHeights:r,maximumHeights:s},show:(t.show??!0)&&e})}createPolygon(t,e){var c;if(!t.hierarchy||t.hierarchy.length<1)return null;const i=this.materialManager.get({themeKey:t.theme,category:"polygon",options:t}),r=Array.isArray(t.hierarchy[0])?t.hierarchy.flat():t.hierarchy,s=this.Cesium.Cartesian3.fromDegreesArrayHeights(r),o=((c=t.holes)==null?void 0:c.map(d=>{let u=Array.isArray(d[0])?t.hierarchy.flat():t.hole;return this.Cesium.Cartesian3.fromDegreesArrayHeights(u.flat())}))||[],n=new this.Cesium.PolygonHierarchy(s,o);let l={...t};return i&&(l.material=i),this.viewer.entities.add({polygon:{...l,hierarchy:n},show:(t.show??!0)&&e})}createBillboardPoints(t){var e;return!((e=t.billboard)!=null&&e.length)||!this.aggregator?[]:t.billboard.map(i=>{var n;const[r,s,o=0]=i.position||[0,0,0];return{id:t.id,lon:r,lat:s,height:o,name:((n=i.options)==null?void 0:n.text)||"",data:t,style:{zIndex:t.zIndex||"1"}}})}createCard(t){var e,i,r;(i=(e=t.card)==null?void 0:e.data)!=null&&i.length&&this.cardPool.add(t.card,{id:t.id,lon:t.card.position[0],lat:t.card.position[1],height:t.card.position[3]||0,theme:t.card.theme,show:t.show?t.card.initShow??!1:!1,notCreateElement:!0,style:{width:"0",height:"0",zIndex:((r=t==null?void 0:t.card)==null?void 0:r.zIndex)||"110"}})}addGroup(t,e=!0){const i=t.id||`${Date.now()}`;this.removeGroup(i);const r=[],s=t.show!==!1;(t.polyline||[]).forEach(l=>{const c=this.createPolyline(l,s);c&&r.push(c)}),(t.wall||[]).forEach(l=>{const c=this.createWall(l,s);c&&r.push(c)}),(t.polygon||[]).forEach(l=>{const c=this.createPolygon(l,s);c&&r.push(c)});const o=this.createBillboardPoints(t);o.length&&e&&this.aggregator.appendPoints(o,!1),this.createCard(t);const n=new Er({id:i,entities:r,primitives:[],dataItem:t,aggregator:this.aggregator,cardPool:this.cardPool});return this.groupMap.set(i,n),o}async addGroups(t){const i=t.map(r=>this.addGroup(r,!1)).flat();i.length>0&&this.aggregator&&this.aggregator.appendPoints(i,!1)}removeGroup(t){const e=this.groupMap.get(t);e&&(e.removeAll(this.viewer),this.groupMap.delete(t))}removeGroups(t){let e=[];for(const i of t){const r=this.groupMap.get(i);if(r){let s=r.removeAll(this.viewer,!1);this.groupMap.delete(i),e.push(s)}}this.aggregator.removePointsById(e),this.cardPool.removeByIds(e)}updateGroup(t){const e=this.groupMap.get(t.id);e&&(e.removeAll(this.viewer),this.groupMap.delete(t.id)),this.addGroup(t)}async updateGroups(t){this.aggregator.removePointsById(t.map(r=>r.id)),this.cardPool.removeByIds(t.map(r=>r.id));const i=t.map(r=>{const s=this.groupMap.get(r.id);return s&&(s.removeAll(this.viewer,!1),this.groupMap.delete(r.id)),this.addGroup(r,!1)}).flat();i.length>0&&this.aggregator&&this.aggregator.appendPoints(i,!1)}setGroupVisible(t,e){var i;(i=this.groupMap.get(t))==null||i.setVisible(e)}clearAllGroups(){this.groupMap.forEach(t=>t.removeAll(this.viewer)),this.groupMap.clear()}}class Ir{constructor(t,e,i,r,s){h(this,"Cesium");h(this,"viewer");h(this,"layerMap",new Map);h(this,"materialManager");h(this,"aggregator");h(this,"cardPool");this.Cesium=t,this.viewer=e,this.materialManager=i,this.aggregator=r,this.cardPool=s}addLayer(t){this.layerMap.has(t)||this.layerMap.set(t,new Mr(t,this.Cesium,this.viewer,this.materialManager,this.aggregator,this.cardPool))}removeLayer(t){const e=this.layerMap.get(t);e&&(e.clearAllGroups(),this.layerMap.delete(t))}getLayer(t){return this.layerMap.get(t)}async addGroupsToLayer(t,e){const i=this.layerMap.get(t);i&&(i.addGroups(e),this.aggregator.refresh())}updateGroupToLayer(t,e){const i=this.layerMap.get(t);i&&(i.updateGroups(e),this.aggregator.refresh())}setGroupVisible(t,e,i){var r;(r=this.layerMap.get(t))==null||r.setGroupVisible(e,i)}removeGroup(t,e){var i;(i=this.layerMap.get(t))==null||i.removeGroup(e)}removeGroups(t,e){var i;(i=this.layerMap.get(t))==null||i.removeGroups(e)}}function Tr(a){const t=[];return a.features.forEach((e,i)=>{if(e.geometry&&e.properties){const r=e.geometry,s=e.properties,o={id:s.id||`${Date.now()}`,show:!0,zIndex:s.zIndex||1,name:`${s.layer}_${i}`||"",billboard:[],polyline:[],wall:[],polygon:[],card:s.card||null};switch(r.type){case"Point":o.billboard.push({position:r.coordinates,options:s,name:`${s.layer}_${i}`});break;case"LineString":o.polyline.push({positions:r.coordinates,theme:s.theme||"default"});break;case"Polygon":o.polygon.push({hierarchy:r.coordinates[0],theme:s.theme||"default"});break;case"MultiLineString":r.coordinates.forEach(n=>{o.polyline.push({positions:n})});break;case"MultiPolygon":r.coordinates.forEach(n=>{o.polygon.push({hierarchy:n[0]})});break;case"GeometryCollection":r.geometries.forEach(n=>{n.type==="Point"?o.billboard.push({position:n.coordinates}):n.type==="LineString"?o.polyline.push({positions:n.coordinates}):n.type==="Polygon"&&o.polygon.push({hierarchy:n.coordinates[0]})});break;default:console.warn(`Unsupported geometry type: ${r.type}`);break}t.push(o)}}),t}class xr{constructor(t){h(this,"Cesium");h(this,"viewer");h(this,"layerMap");h(this,"hideLayerMap");h(this,"entityLayerManager");h(this,"PrimitiveThemeMap");h(this,"materialManager");let{Cesium:e,viewer:i,materialManager:r,entityLayerManager:s}=t;this.Cesium=e,this.viewer=i,this.layerMap=new Map,this.PrimitiveThemeMap=new Map,this.hideLayerMap=new Map,this.materialManager=r,this.entityLayerManager=s}createGeometryInstance(t){let e;return t.category==="polyline"&&t.positions?e=this.createPolyline(t):t.category==="polygon"&&t.hierarchy&&(e=this.createPolygon(t)),e}carateThemePrimitive(t){let e=Oe(t),i=this.PrimitiveThemeMap.get(e.theme);if(!i){this.initTheme(e);let r=this.createAppearance(e);i={Primitive:null,ids:new Map,appearance:r,geometryInstances:new Map},this.PrimitiveThemeMap.set(e.theme,i)}return i}initTheme(t){var r,s,o,n,l,c,d,u,m,g,p,f;let e=this.materialManager,i=this.Cesium;if(t.category=="polyline"){const w=((s=(r=t.properties)==null?void 0:r.lineType)==null?void 0:s.pattern)&&((n=(o=t.properties)==null?void 0:o.lineType)==null?void 0:n.patternLength);let y="";if(w){const C=((c=(l=t.properties)==null?void 0:l.lineType)==null?void 0:c.pattern)||[.25,-.125],b=((u=(d=t.properties)==null?void 0:d.lineType)==null?void 0:u.patternLength)||.375;let v=this.convertCadPatternToCesiumDash(C,b);y=`DashedLineMaterial_pattern_${v.dashPattern}_dashLength_${v.dashLength}_color_${(m=t.properties)==null?void 0:m.color}`,e.has(y)||e.register({themeKey:y,material:i.Material.fromType("PolylineDash",{color:i.Color.fromCssColorString(t.properties.color||"#FFFFFF").withAlpha(.8),dashLength:v.dashLength,dashPattern:v.dashPattern})})}else y=`LineMaterial_color_${(g=t.properties)==null?void 0:g.color}`,e.has(y)||e.register({themeKey:y,material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(t.properties.color||"#FFFFFF").withAlpha(.8)})})}else if(t.category=="polygon"){let w=`polygonMaterial_color_${(p=t.properties)==null?void 0:p.color}`;e.has(w)||e.register({themeKey:w,material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(((f=t.properties)==null?void 0:f.color)||"#FFFFFF").withAlpha(.8)})})}}convertCadPatternToCesiumDash(t,e){const r=e/16;let s=[],o=0;for(let l of t){const c=Math.floor(Math.abs(l)/r),d=l>=0?1:0;for(let u=0;u<c&&(s.push(d),o++,!(o>=16));u++);if(o>=16)break}for(;s.length<16;)s.push(0);s.length>16&&(s.length=16);let n=0;for(let l=0;l<16;l++)n=n<<1|s[l];return{dashPattern:n,dashLength:e}}async processBatch(t){const e=new Map;t.forEach(i=>{let{layerId:r,dataList:s}=i;Oe(s).forEach(n=>{let l=this.createGeometryInstance(n);if(l){let c=this.carateThemePrimitive(n);c.ids.set(n.id,n),c.geometryInstances.set(n.id,l);const d=this.layerMap.get(r);if(d)d.set(n.id,n);else{let u=new Map;this.layerMap.set(r,u),u.set(n.id,n)}e.set(n.theme,n)}})}),e.forEach(i=>{this.updatePrimitive(i)})}createPolyline(t){const e=Array.isArray(t.positions[0])?t.positions.flat():t.positions;return new this.Cesium.GeometryInstance({id:t.id,geometry:new this.Cesium.GroundPolylineGeometry({positions:this.Cesium.Cartesian3.fromDegreesArrayHeights(e),width:Math.max(t.width||2,2)})})}createPolygon(t){var o;const e=Array.isArray(t.hierarchy[0])?t.hierarchy.flat():t.hierarchy,i=this.Cesium.Cartesian3.fromDegreesArrayHeights(e),r=((o=t.holes)==null?void 0:o.map(n=>{let l=Array.isArray(n[0])?n.flat():n,c=this.Cesium.Cartesian3.fromDegreesArrayHeights(l.flat());return new this.Cesium.PolygonHierarchy(c)}))||[],s=new this.Cesium.PolygonHierarchy(i,r);return new this.Cesium.GeometryInstance({id:t.id,geometry:new this.Cesium.PolygonGeometry({polygonHierarchy:s})})}getMaterial(t){let e=this.materialManager.get({themeKey:t.theme,options:t});return e||(e=this.Cesium.Material.fromType("Color",{color:new this.Cesium.Color(1,0,0,1)})),e}updateGeometryInstance(t){let e=Oe(t);const i=this.layerMap.get(e.layerId);if(!i){console.warn(`没有找到图层 ${e.layerId}`);return}let r=i.get(e.id);if(i.set(e.id,e),!r){console.warn(`没有找到图元 ${e.id} 在图层 ${e.layerId} 中`);return}if(r.theme!==e.theme){let o=this.PrimitiveThemeMap.get(r.theme);o==null||o.geometryInstances.delete(e.id),o==null||o.ids.delete(e.id),this.updatePrimitive(r)}let s=this.carateThemePrimitive(e);if(s){const o=this.createGeometryInstance(e);s.geometryInstances.set(e.id,o),s.ids.set(e.id,e),this.updatePrimitive(e)}}deleteGeometryInstance(t){let e=new Set;t.forEach(i=>{let{layerId:r,ids:s}=i;const o=this.layerMap.get(r);if(!o){console.warn(`没有找到图层 ${r}`);return}s.forEach(n=>{let l=o.get(n);if(!l){console.warn(`没有找到图元 ${n} 在图层 ${r} 中`);return}let c=this.PrimitiveThemeMap.get(l.theme);c&&(c.geometryInstances.delete(l.id),c.ids.delete(l.id),e.add(l))})}),Array.from(e.values()).forEach(i=>{this.updatePrimitive(i)})}addGeometryInstance(t){let e=Oe(t);const i=this.layerMap.get(e.layerId);if(!i){console.warn(`没有找到图层 ${e.layerId}`);return}if(i.get(e.id)){console.warn(`图元 ${e.id} 已经存在图层 ${e.layerId} 中`);return}i.set(e.id,e);let s=this.carateThemePrimitive(e);if(s){const o=this.createGeometryInstance(e);s.geometryInstances.set(e.id,o),s.ids.set(e.id,e),this.updatePrimitive(e)}}createAppearance(t){let e=this.getMaterial({theme:t.theme}),i;return t.category==="polyline"?i=new this.Cesium.PolylineMaterialAppearance({material:e,translucent:!0}):t.category==="polygon"&&(i=new this.Cesium.MaterialAppearance({material:e,translucent:!0})),i}updatePrimitive(t){const e=this.PrimitiveThemeMap.get(t.theme);if(!e)return;e.Primitive&&(this.viewer.scene.primitives.remove(e.Primitive),e.Primitive=null);let r=Array.from(e.geometryInstances,([s,o])=>({key:s,value:o})).filter(s=>!Array.from(this.hideLayerMap.values()).some(o=>o.has(s.key))).map(s=>s.value);r.length<=0||(t.category==="polyline"?(e.Primitive=new this.Cesium.GroundPolylinePrimitive({geometryInstances:r,appearance:e.appearance}),this.viewer.scene.primitives.add(e.Primitive)):(e.Primitive=new this.Cesium.GroundPrimitive({geometryInstances:r,appearance:e.appearance}),this.viewer.scene.primitives.add(e.Primitive)))}hideByLayerAndId(t){let e=new Map;t.forEach(i=>{let{layerId:r,ids:s}=i,o=this.hideLayerMap.get(r);o||(o=new Set,this.hideLayerMap.set(r,o)),s.forEach(n=>{o.add(n);let l=this.getGeometryInstanceInfo(r,n);l&&e.set(l.theme,l)})}),Array.from(e.values()).forEach(i=>{this.updatePrimitive(i)})}showByLayerAndId(t){let e=new Map;t.forEach(i=>{let{layerId:r,ids:s}=i,o=this.hideLayerMap.get(r);o||(o=new Set,this.hideLayerMap.set(r,o)),s.forEach(n=>{o.delete(n);let l=this.getGeometryInstanceInfo(r,n);l&&e.set(l.theme,l)})}),Array.from(e.values()).forEach(i=>{this.updatePrimitive(i)})}hasGeometryInstance(t,e){const i=this.layerMap.get(t);if(!i)return!1;const r=i.get(e);if(!r)return!1;let s=this.PrimitiveThemeMap.get(r.theme);return!(!s||!s.geometryInstances.get(e))}getGeometryInstanceInfo(t,e){const i=this.layerMap.get(t);return i?i.get(e):null}focusOnGeometryInstance(t,e){const i=this.layerMap.get(t);if(!i){console.warn(`图层 ${t} 不存在`);return}const r=i.get(e);if(!r){console.warn(`没有找到图元 ${e} 在图层 ${t} 中`);return}let s=this.PrimitiveThemeMap.get(r.theme);if(!s){console.warn(`没有找到 ${e} 图元相关的Primitive`);return}const o=s.geometryInstances.get(e);if(!o){console.warn(`没有找到图元的几何体 ${e}`);return}const n=o.geometry,l=n._positions||n._polygonHierarchy.positions;if(l&&l.length>0){let c=l[0].x,d=l[0].y,u=l[0].z,m=l[0].x,g=l[0].y,p=l[0].z;l.forEach(b=>{c=Math.min(c,b.x),d=Math.min(d,b.y),u=Math.min(u,b.z),m=Math.max(m,b.x),g=Math.max(g,b.y),p=Math.max(p,b.z)});const f=new this.Cesium.Cartesian3((c+m)/2,(d+g)/2,(u+p)/2),y=new this.Cesium.Cartesian3(m-c,g-d,p-u).z,C=Math.abs(y||1)*1.5;this.viewer.camera.flyTo({destination:f,duration:2,complete:()=>{console.log(`已定位到图元 ${e}`)},offset:new this.Cesium.Cartesian3(0,0,C)})}else console.warn(`无法获取图元 ${e} 的顶点信息`)}}class Ye{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"positions",[]);h(this,"tempPoints",[]);h(this,"segmentEntities",[]);h(this,"segmentLabelIds",[]);h(this,"previewEntity",null);h(this,"previewGroundEntity",null);h(this,"hoverPos",null);h(this,"htmlLabelPool",null);h(this,"totalLabelId",null);h(this,"previewLabelId",null);h(this,"labelEntity",null);h(this,"firstHeight",null);h(this,"groundLineEntities",[]);h(this,"previewPos",null);h(this,"previewGroundPos",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-horizontal-total",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-horizontal-seg",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var f,w,y,C;const s=i.scene.pickPosition(r.position);if(!s)return;const o=e.Cartographic.fromCartesian(s),n=e.Math.toDegrees(o.longitude),l=e.Math.toDegrees(o.latitude);this.positions.length===0&&(this.firstHeight=o.height||0);const c=e.Cartesian3.fromDegrees(n,l,this.firstHeight||0);this.positions.push(c);const d=i.entities.add({position:c,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(d);const u=i.scene.globe.getHeight(new e.Cartographic(o.longitude,o.latitude,0))||0,m=e.Cartesian3.fromDegrees(n,l,u),g=((w=(f=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:w.call(f,.9))||e.Color.RED,p=i.entities.add({polyline:{positions:[m,c],width:t.width||3,material:new e.PolylineDashMaterialProperty({color:g,dashLength:12,dashPattern:255})}});if(this.groundLineEntities.push(p),this.positions.length>=2){const b=this.positions[this.positions.length-2],v=this.positions[this.positions.length-1],M=e.Cartographic.fromCartesian(b),P=e.Cartographic.fromCartesian(v),L=i.entities.add({polyline:{positions:[b,v],width:t.width||3,material:t.lineColor||t.color||e.Color.YELLOW,depthFailMaterial:new e.PolylineDashMaterialProperty({color:((C=(y=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:C.call(y,.9))||e.Color.RED,dashLength:12,dashPattern:255})}});this.segmentEntities.push(L);const I=new e.EllipsoidGeodesic(M,P).surfaceDistance,D=new e.Cartesian3((b.x+v.x)/2,(b.y+v.y)/2,(b.z+v.z)/2),A=e.Cartographic.fromCartesian(D),T=`measure_horizontal_seg_${this.segmentLabelIds.length}_${Date.now()}`;this.segmentLabelIds.push(T),this.htmlLabelPool.add({text:`${I.toFixed(2)} m`},{id:T,lon:e.Math.toDegrees(A.longitude),lat:e.Math.toDegrees(A.latitude),height:A.height||this.firstHeight||0,theme:"measure-horizontal-seg",show:!0})}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(()=>{var c;if(this.positions.length<2){this.stop();return}this.stop(),this.previewLabelId&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.hoverPos&&(this.hoverPos=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewGroundEntity&&(this.viewer.entities.remove(this.previewGroundEntity),this.previewGroundEntity=null);let r=0;for(let d=1;d<this.positions.length;d++){const u=this.positions[d-1],m=this.positions[d],g=e.Cartographic.fromCartesian(u),p=e.Cartographic.fromCartesian(m),f=new e.EllipsoidGeodesic(g,p);r+=f.surfaceDistance}const s=this.positions[this.positions.length-1],o=e.Cartographic.fromCartesian(s),n=this.totalLabelId||`measure_horizontal_total_${Date.now()}`;this.totalLabelId=n,this.htmlLabelPool.add({text:`${r.toFixed(2)} m`},{id:n,lon:e.Math.toDegrees(o.longitude),lat:e.Math.toDegrees(o.latitude),height:o.height||this.firstHeight||0,theme:"measure-horizontal-total",show:!0}),this.labelEntity=this.totalLabelId;const l={entity:this.segmentEntities,label:this.labelEntity,segmentLabels:this.segmentLabelIds,positions:this.positions,distance:r,clear:()=>this.clear()};(c=t.onComplete)==null||c.call(t,l)},e.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),this.handler.setInputAction(r=>{var M,P,L,E;if(this.positions.length===0)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;this.hoverPos=s;const o=e.Cartographic.fromCartesian(s),n=e.Math.toDegrees(o.longitude),l=e.Math.toDegrees(o.latitude),c=e.Cartesian3.fromDegrees(n,l,this.firstHeight||0);this.previewPos=c;const d=i.scene.globe.getHeight(new e.Cartographic(o.longitude,o.latitude,0))||0,u=e.Cartesian3.fromDegrees(n,l,d);this.previewGroundPos=u;const m=this.positions[this.positions.length-1],g=e.Cartographic.fromCartesian(m),p=e.Cartographic.fromCartesian(c),w=new e.EllipsoidGeodesic(g,p).surfaceDistance,y=new e.Cartesian3((m.x+c.x)/2,(m.y+c.y)/2,(m.z+c.z)/2),C=e.Cartographic.fromCartesian(y),b=this.previewLabelId||"measure_horizontal_preview";this.previewLabelId=b,this.htmlLabelPool.add({text:`${w.toFixed(2)} m`},{id:b,lon:e.Math.toDegrees(C.longitude),lat:e.Math.toDegrees(C.latitude),height:C.height||this.firstHeight||0,theme:"measure-horizontal-seg",show:!0});const v=((P=(M=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:P.call(M,.9))||e.Color.RED;this.previewGroundEntity||(this.previewGroundEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.previewGroundPos?[]:[this.previewGroundPos,this.previewPos],!1),width:t.width||3,material:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}})),this.previewEntity||(this.previewEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.positions.length?[]:[this.positions[this.positions.length-1],this.previewPos],!1),width:t.width||3,material:t.lineColor||t.color||e.Color.YELLOW,depthFailMaterial:new e.PolylineDashMaterialProperty({color:((E=(L=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:E.call(L,.9))||e.Color.RED,dashLength:12,dashPattern:255})}}))},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.segmentEntities.forEach(t=>this.viewer.entities.remove(t)),this.segmentEntities=[],this.groundLineEntities.forEach(t=>this.viewer.entities.remove(t)),this.groundLineEntities=[],this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.totalLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.totalLabelId]),this.totalLabelId=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewGroundEntity&&(this.viewer.entities.remove(this.previewGroundEntity),this.previewGroundEntity=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.segmentLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice()),this.segmentLabelIds=[],this.positions=[],this.hoverPos=null,this.labelEntity=null,this.firstHeight=null,this.previewPos=null,this.previewGroundPos=null}rehydrate(t,e){var p,f;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.YELLOW,n=((f=(p=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:f.call(p,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(w=>new i.Cartesian3(w[0],w[1],w[2]));if(!c.length)return;if(!this.htmlLabelPool){const w=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,w),this.htmlLabelPool.registerTheme("measure-horizontal-total",{createElement:(y,C)=>{var b;y.innerHTML=String(((b=C==null?void 0:C.data)==null?void 0:b.text)||""),y.style.background="rgba(0,0,0,0.6)",y.style.color="#fff",y.style.font="14px sans-serif",y.style.padding="4px 6px",y.style.borderRadius="4px",y.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-horizontal-seg",{createElement:(y,C)=>{var b;y.innerHTML=String(((b=C==null?void 0:C.data)==null?void 0:b.text)||""),y.style.background="rgba(0,0,0,0.6)",y.style.color="#fff",y.style.font="14px sans-serif",y.style.padding="4px 6px",y.style.borderRadius="4px",y.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}for(const w of c){const y=r.entities.add({position:w,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(y);const C=i.Cartographic.fromCartesian(w),b=i.Math.toDegrees(C.longitude),v=i.Math.toDegrees(C.latitude),M=r.scene.globe.getHeight(new i.Cartographic(C.longitude,C.latitude,0))||0,P=i.Cartesian3.fromDegrees(b,v,M),L=r.entities.add({polyline:{positions:[P,w],width:l,material:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.groundLineEntities.push(L)}for(let w=1;w<c.length;w++){const y=c[w-1],C=c[w],b=r.entities.add({polyline:{positions:[y,C],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.segmentEntities.push(b);const v=i.Cartographic.fromCartesian(y),M=i.Cartographic.fromCartesian(C),L=new i.EllipsoidGeodesic(v,M).surfaceDistance,E=new i.Cartesian3((y.x+C.x)/2,(y.y+C.y)/2,(y.z+C.z)/2),I=i.Cartographic.fromCartesian(E),D=t.id+`_seg_${w-1}`;this.segmentLabelIds.push(D),this.htmlLabelPool.add({text:`${L.toFixed(2)} m`},{id:D,lon:i.Math.toDegrees(I.longitude),lat:i.Math.toDegrees(I.latitude),height:I.height||0,theme:"measure-horizontal-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}let d=0;for(let w=1;w<c.length;w++){const y=i.Cartographic.fromCartesian(c[w-1]),C=i.Cartographic.fromCartesian(c[w]),b=new i.EllipsoidGeodesic(y,C);d+=b.surfaceDistance}const u=c[c.length-1],m=i.Cartographic.fromCartesian(u),g=t.id+"_total";this.totalLabelId=g,this.htmlLabelPool.add({text:`${d.toFixed(2)} m`},{id:g,lon:i.Math.toDegrees(m.longitude),lat:i.Math.toDegrees(m.latitude),height:m.height||0,theme:"measure-horizontal-total",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}}class Ve{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"labelEntity",null);h(this,"positions",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"previewLabelId",null);h(this,"baseCarto",null);h(this,"baseUp",null);h(this,"tempPoints",[]);h(this,"previewPointEntity",null);h(this,"previewEntity",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-vertical",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var n,l,c,d,u;const s=i.camera.getPickRay(r.position);let o=s?i.scene.globe.pick(s,i.scene):null;if(o||(o=i.camera.pickEllipsoid(r.position,e.Ellipsoid.WGS84)),o||(o=i.scene.pickPosition(r.position)),!!o)if(this.positions.length===0){const m=e.Cartographic.fromCartesian(o);this.baseCarto=new e.Cartographic(m.longitude,m.latitude,0);const g=e.Ellipsoid.WGS84.cartographicToCartesian(this.baseCarto);this.baseUp=e.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto),this.positions.push(g);const p=i.entities.add({position:g,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(p);const f=t.lineColor||t.color||e.Color.CYAN,w=((l=(n=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:l.call(n,.9))||e.Color.RED;this.previewEntity=i.entities.add({polyline:{positions:[g,g],width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}})}else{if(!this.baseCarto||!this.baseUp)return;const m=this.positions[0],g=i.camera.getPickRay(r.position);if(!g)return;const p=g.origin,f=e.Cartesian3.normalize(g.direction,new e.Cartesian3),w=m,y=this.baseUp,C=e.Cartesian3.subtract(p,w,new e.Cartesian3),b=e.Cartesian3.dot(f,f),v=-e.Cartesian3.dot(f,y),M=e.Cartesian3.dot(y,y),P=-e.Cartesian3.dot(f,C),L=e.Cartesian3.dot(y,C),E=b*M-v*v;if(Math.abs(E)<1e-6)return;const I=(b*L-v*P)/E,D=e.Cartesian3.add(w,e.Cartesian3.multiplyByScalar(y,I,new e.Cartesian3),new e.Cartesian3);this.positions[1]=D,this.stop(),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewPointEntity&&(this.viewer.entities.remove(this.previewPointEntity),this.previewPointEntity=null);const A=t.lineColor||t.color||e.Color.CYAN,T=((d=(c=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:d.call(c,.9))||e.Color.RED;this.entity=i.entities.add({polyline:{positions:[m,D],width:t.width||3,material:A,depthFailMaterial:new e.PolylineDashMaterialProperty({color:T,dashLength:12,dashPattern:255})}});const S=i.entities.add({position:D,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(S);const x=this.baseCarto,$=e.Cartographic.fromCartesian(D),F=Math.abs(($.height||0)-(x.height||0)),O=new e.Cartesian3((this.positions[0].x+this.positions[1].x)/2,(this.positions[0].y+this.positions[1].y)/2,(this.positions[0].z+this.positions[1].z)/2),R=e.Cartographic.fromCartesian(O);this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null);const Y=this.htmlLabelId||`measure_vertical_${Date.now()}`;this.htmlLabelId=Y,this.htmlLabelPool.add({text:`${F.toFixed(2)} m`},{id:Y,lon:e.Math.toDegrees(R.longitude),lat:e.Math.toDegrees(R.latitude),height:R.height||0,theme:"measure-vertical",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const V={entity:this.entity,label:this.labelEntity,positions:this.positions,vertical:F,clear:()=>this.clear()};(u=t.onComplete)==null||u.call(t,V)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var D,A;if(this.positions.length<1)return;if(!this.baseCarto||!this.baseUp){const T=e.Cartographic.fromCartesian(this.positions[0]);this.baseCarto=new e.Cartographic(T.longitude,T.latitude,T.height||0),this.baseUp=e.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto)}const s=this.positions[0],o=i.camera.getPickRay(r.endPosition);if(!o)return;const n=o.origin,l=e.Cartesian3.normalize(o.direction,new e.Cartesian3),c=s,d=this.baseUp,u=e.Cartesian3.subtract(n,c,new e.Cartesian3),m=e.Cartesian3.dot(l,l),g=-e.Cartesian3.dot(l,d),p=e.Cartesian3.dot(d,d),f=-e.Cartesian3.dot(l,u),w=e.Cartesian3.dot(d,u),y=m*p-g*g;if(Math.abs(y)<1e-6)return;const C=(m*w-g*f)/y,b=e.Cartesian3.add(c,e.Cartesian3.multiplyByScalar(d,C,new e.Cartesian3),new e.Cartesian3);if(this.positions[1]=b,!this.previewEntity){const T=t.lineColor||t.color||e.Color.CYAN,S=((A=(D=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:A.call(D,.9))||e.Color.RED;this.previewEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>this.positions.length<2?[]:[this.positions[0],this.positions[1]],!1),width:t.width||3,material:T,depthFailMaterial:new e.PolylineDashMaterialProperty({color:S,dashLength:12,dashPattern:255})}})}this.previewPointEntity?this.previewPointEntity.position=b:this.previewPointEntity=i.entities.add({position:b,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});const v=this.baseCarto,M=e.Cartographic.fromCartesian(b),P=Math.abs((M.height||0)-(v.height||0)),L=new e.Cartesian3((this.positions[0].x+b.x)/2,(this.positions[0].y+b.y)/2,(this.positions[0].z+b.z)/2),E=e.Cartographic.fromCartesian(L),I=this.previewLabelId||"measure_vertical_preview";this.previewLabelId=I,this.htmlLabelPool.add({text:`${P.toFixed(2)} m`},{id:I,lon:e.Math.toDegrees(E.longitude),lat:e.Math.toDegrees(E.latitude),height:E.height||0,theme:"measure-vertical",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.entity&&(this.viewer.entities.remove(this.entity),this.entity=null),this.labelEntity&&(this.viewer.entities.remove(this.labelEntity),this.labelEntity=null),this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.previewPointEntity&&(this.viewer.entities.remove(this.previewPointEntity),this.previewPointEntity=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.positions=[]}rehydrate(t,e){var v,M;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.CYAN,n=((M=(v=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:M.call(v,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(P=>new i.Cartesian3(P[0],P[1],P[2]));if(c.length<2)return;if(!this.htmlLabelPool){const P=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,P),this.htmlLabelPool.registerTheme("measure-vertical",{createElement:(L,E)=>{var I;L.innerHTML=String(((I=E==null?void 0:E.data)==null?void 0:I.text)||""),L.style.background="rgba(0,0,0,0.6)",L.style.color="#fff",L.style.font="14px sans-serif",L.style.padding="4px 6px",L.style.borderRadius="4px",L.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}const d=c[0],u=c[1],m=r.entities.add({position:d,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}}),g=r.entities.add({position:u,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(m),this.tempPoints.push(g),this.entity=r.entities.add({polyline:{positions:[d,u],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});const p=i.Cartographic.fromCartesian(d),f=i.Cartographic.fromCartesian(u),w=Math.abs((f.height||0)-(p.height||0)),y=new i.Cartesian3((d.x+u.x)/2,(d.y+u.y)/2,(d.z+u.z)/2),C=i.Cartographic.fromCartesian(y),b=t.id+"_label";this.htmlLabelId=b,this.htmlLabelPool.add({text:`${w.toFixed(2)} m`},{id:b,lon:i.Math.toDegrees(C.longitude),lat:i.Math.toDegrees(C.latitude),height:C.height||0,theme:"measure-vertical",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}}class We{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"positions",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"segmentEntities",[]);h(this,"angleMarkerEntities",[]);h(this,"pointEntities",[]);h(this,"segmentLabelIds",[]);h(this,"angleLabelIds",[]);h(this,"previewLabelId",null);h(this,"previewSegmentEntities",[]);h(this,"previewAngleMarkerEntities",[]);h(this,"previewPointEntity",null);h(this,"previewLow",null);h(this,"previewHigh",null);h(this,"previewThird",null);h(this,"previewMarkerP1",null);h(this,"previewMarkerP2",null);h(this,"previewMarkerCorner",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-triangle",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-seg",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-angle",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var n,l,c;const s=i.scene.pickPosition(r.position);if(!s)return;this.positions.push(s);const o=i.entities.add({position:s,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});if(this.pointEntities.push(o),this.positions.length===2){this.stop(),this.previewSegmentEntities.forEach(Z=>i.entities.remove(Z)),this.previewSegmentEntities=[],this.previewAngleMarkerEntities.forEach(Z=>i.entities.remove(Z)),this.previewAngleMarkerEntities=[],this.previewPointEntity&&(i.entities.remove(this.previewPointEntity),this.previewPointEntity=null);const d=e.Cartographic.fromCartesian(this.positions[0]),u=e.Cartographic.fromCartesian(this.positions[1]),m=d.height||0,g=u.height||0,p=m<=g?this.positions[0]:this.positions[1],f=m>g?this.positions[0]:this.positions[1],w=e.Cartographic.fromCartesian(p);e.Cartographic.fromCartesian(f);const y=Math.max(m,g),C=e.Cartesian3.fromDegrees(e.Math.toDegrees(w.longitude),e.Math.toDegrees(w.latitude),y),b=t.lineColor||t.color||e.Color.YELLOW,v=((l=(n=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:l.call(n,.9))||e.Color.RED,M=i.entities.add({polyline:{positions:[p,C],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}}),P=i.entities.add({polyline:{positions:[C,f],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}}),L=i.entities.add({polyline:{positions:[p,f],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}});this.segmentEntities.push(M,P,L);const E=e.Cartesian3.distance(p,C),I=e.Cartesian3.distance(C,f),D=e.Cartesian3.distance(p,f),A=new e.Cartesian3((p.x+C.x)/2,(p.y+C.y)/2,(p.z+C.z)/2),T=new e.Cartesian3((C.x+f.x)/2,(C.y+f.y)/2,(C.z+f.z)/2),S=new e.Cartesian3((p.x+f.x)/2,(p.y+f.y)/2,(p.z+f.z)/2),x=e.Cartographic.fromCartesian(A),$=e.Cartographic.fromCartesian(T),F=e.Cartographic.fromCartesian(S),O="measure_triangle_seg_v",R="measure_triangle_seg_h",Y="measure_triangle_seg_hyp";this.segmentLabelIds=[O,R,Y],this.htmlLabelPool.add({text:`${E.toFixed(2)} m`},{id:O,lon:e.Math.toDegrees(x.longitude),lat:e.Math.toDegrees(x.latitude),height:x.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${I.toFixed(2)} m`},{id:R,lon:e.Math.toDegrees($.longitude),lat:e.Math.toDegrees($.latitude),height:$.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${D.toFixed(2)} m`},{id:Y,lon:e.Math.toDegrees(F.longitude),lat:e.Math.toDegrees(F.latitude),height:F.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const V=e.Cartesian3.subtract(f,p,new e.Cartesian3),j=e.Cartesian3.subtract(C,p,new e.Cartesian3),W=e.Cartesian3.subtract(C,f,new e.Cartesian3),H=e.Cartesian3.subtract(p,f,new e.Cartesian3),ne=e.Cartesian3.dot(V,j),K=Math.sqrt(e.Cartesian3.dot(V,V))*Math.sqrt(e.Cartesian3.dot(j,j)),ce=e.Cartesian3.dot(W,H),ue=Math.sqrt(e.Cartesian3.dot(W,W))*Math.sqrt(e.Cartesian3.dot(H,H)),z=Math.acos(Math.min(Math.max(ne/(K||1),-1),1)),oe=Math.acos(Math.min(Math.max(ce/(ue||1),-1),1)),se=e.Cartographic.fromCartesian(p),q=e.Cartographic.fromCartesian(f),ee="measure_triangle_angle_a",de="measure_triangle_angle_b";this.angleLabelIds=[ee,de],this.htmlLabelPool.add({text:`${(z*180/Math.PI).toFixed(2)}°`},{id:ee,lon:e.Math.toDegrees(se.longitude),lat:e.Math.toDegrees(se.latitude),height:se.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${(oe*180/Math.PI).toFixed(2)}°`},{id:de,lon:e.Math.toDegrees(q.longitude),lat:e.Math.toDegrees(q.latitude),height:q.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const be=Math.max(.01,Math.min(.5,t.angleMarkerRatio??.2)),X=Math.min(E,I)*be;if(E>.001&&I>.001){const Z=e.Cartesian3.normalize(e.Cartesian3.subtract(p,C,new e.Cartesian3),new e.Cartesian3),pe=e.Cartesian3.normalize(e.Cartesian3.subtract(f,C,new e.Cartesian3),new e.Cartesian3),te=new e.Cartesian3(C.x+Z.x*X,C.y+Z.y*X,C.z+Z.z*X),k=new e.Cartesian3(C.x+pe.x*X,C.y+pe.y*X,C.z+pe.z*X),Q=new e.Cartesian3(C.x+Z.x*X+pe.x*X,C.y+Z.y*X+pe.y*X,C.z+Z.z*X+pe.z*X),re=i.entities.add({polyline:{positions:[te,Q],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}}),Fe=i.entities.add({polyline:{positions:[k,Q],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}});this.angleMarkerEntities.push(re,Fe)}this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null);const J={entity:this.segmentEntities,positions:[p,f,C],lengths:{vertical:E,horizontal:I,hypotenuse:D},angles:{acuteA:z,acuteB:oe},clear:()=>this.clear()};(c=t.onComplete)==null||c.call(t,J)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var oe,se;if(this.positions.length!==1)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;const o=e.Cartographic.fromCartesian(this.positions[0]),n=e.Cartographic.fromCartesian(s),l=o.height||0,c=n.height||0,d=l<=c?this.positions[0]:s,u=l>c?this.positions[0]:s,m=e.Cartographic.fromCartesian(d),g=Math.max(l,c),p=e.Cartesian3.fromDegrees(this.Cesium.Math.toDegrees(m.longitude),this.Cesium.Math.toDegrees(m.latitude),g);this.previewLow=d,this.previewHigh=u,this.previewThird=p;const f=t.lineColor||t.color||e.Color.YELLOW,w=((se=(oe=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:se.call(oe,.9))||e.Color.RED;if(this.previewPointEntity?this.previewPointEntity.position=s:this.previewPointEntity=i.entities.add({position:s,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}}),!this.previewSegmentEntities.length){const q=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewLow||!this.previewThird?[]:[this.previewLow,this.previewThird],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}}),ee=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewThird||!this.previewHigh?[]:[this.previewThird,this.previewHigh],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}}),de=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewLow||!this.previewHigh?[]:[this.previewLow,this.previewHigh],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}});this.previewSegmentEntities.push(q,ee,de)}const y=e.Cartesian3.distance(d,p),C=e.Cartesian3.distance(p,u),b=e.Cartesian3.distance(d,u),v=e.Cartesian3.subtract(u,d,new e.Cartesian3),M=e.Cartesian3.subtract(p,d,new e.Cartesian3),P=e.Cartesian3.subtract(p,u,new e.Cartesian3),L=e.Cartesian3.subtract(d,u,new e.Cartesian3),E=e.Cartesian3.dot(v,M),I=Math.sqrt(e.Cartesian3.dot(v,v))*Math.sqrt(e.Cartesian3.dot(M,M)),D=e.Cartesian3.dot(P,L),A=Math.sqrt(e.Cartesian3.dot(P,P))*Math.sqrt(e.Cartesian3.dot(L,L)),T=Math.acos(Math.min(Math.max(E/(I||1),-1),1)),S=Math.acos(Math.min(Math.max(D/(A||1),-1),1)),x=new e.Cartesian3((d.x+p.x)/2,(d.y+p.y)/2,(d.z+p.z)/2),$=new e.Cartesian3((p.x+u.x)/2,(p.y+u.y)/2,(p.z+u.z)/2),F=new e.Cartesian3((d.x+u.x)/2,(d.y+u.y)/2,(d.z+u.z)/2),O=e.Cartographic.fromCartesian(x),R=e.Cartographic.fromCartesian($),Y=e.Cartographic.fromCartesian(F),V=e.Cartographic.fromCartesian(d),j=e.Cartographic.fromCartesian(u),W="measure_triangle_seg_v",H="measure_triangle_seg_h",ne="measure_triangle_seg_hyp",K="measure_triangle_angle_a",ce="measure_triangle_angle_b";this.segmentLabelIds.length===0&&(this.segmentLabelIds=[W,H,ne]),this.angleLabelIds.length===0&&(this.angleLabelIds=[K,ce]),this.htmlLabelPool.add({text:`${y.toFixed(2)} m`},{id:W,lon:e.Math.toDegrees(O.longitude),lat:e.Math.toDegrees(O.latitude),height:O.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${C.toFixed(2)} m`},{id:H,lon:e.Math.toDegrees(R.longitude),lat:e.Math.toDegrees(R.latitude),height:R.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${b.toFixed(2)} m`},{id:ne,lon:e.Math.toDegrees(Y.longitude),lat:e.Math.toDegrees(Y.latitude),height:Y.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${(T*180/Math.PI).toFixed(2)}°`},{id:K,lon:e.Math.toDegrees(V.longitude),lat:e.Math.toDegrees(V.latitude),height:V.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${(S*180/Math.PI).toFixed(2)}°`},{id:ce,lon:e.Math.toDegrees(j.longitude),lat:e.Math.toDegrees(j.latitude),height:j.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const ue=Math.max(.01,Math.min(.5,t.angleMarkerRatio??.2)),z=Math.min(y,C)*ue;if(y>.001&&C>.001){const q=e.Cartesian3.normalize(e.Cartesian3.subtract(d,p,new e.Cartesian3),new e.Cartesian3),ee=e.Cartesian3.normalize(e.Cartesian3.subtract(u,p,new e.Cartesian3),new e.Cartesian3),de=new e.Cartesian3(p.x+q.x*z,p.y+q.y*z,p.z+q.z*z),be=new e.Cartesian3(p.x+ee.x*z,p.y+ee.y*z,p.z+ee.z*z),X=new e.Cartesian3(p.x+q.x*z+ee.x*z,p.y+q.y*z+ee.y*z,p.z+q.z*z+ee.z*z);if(this.previewMarkerP1=de,this.previewMarkerP2=be,this.previewMarkerCorner=X,!this.previewAngleMarkerEntities.length){const J=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewMarkerP1||!this.previewMarkerCorner?[]:[this.previewMarkerP1,this.previewMarkerCorner],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}}),Z=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewMarkerP2||!this.previewMarkerCorner?[]:[this.previewMarkerP2,this.previewMarkerCorner],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}});this.previewAngleMarkerEntities.push(J,Z)}}},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.segmentEntities.forEach(t=>this.viewer.entities.remove(t)),this.segmentEntities=[],this.angleMarkerEntities.forEach(t=>this.viewer.entities.remove(t)),this.angleMarkerEntities=[],this.pointEntities.forEach(t=>this.viewer.entities.remove(t)),this.pointEntities=[],this.previewSegmentEntities.forEach(t=>this.viewer.entities.remove(t)),this.previewSegmentEntities=[],this.previewAngleMarkerEntities.forEach(t=>this.viewer.entities.remove(t)),this.previewAngleMarkerEntities=[],this.previewPointEntity&&(this.viewer.entities.remove(this.previewPointEntity),this.previewPointEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.segmentLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice()),this.angleLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.angleLabelIds.slice()),this.segmentLabelIds=[],this.angleLabelIds=[],this.positions=[]}rehydrate(t,e){var Z,pe;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.YELLOW,n=((pe=(Z=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:pe.call(Z,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(te=>new i.Cartesian3(te[0],te[1],te[2]));if(c.length<2)return;if(!this.htmlLabelPool){const te=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,te),this.htmlLabelPool.registerTheme("measure-triangle",{createElement:(k,Q)=>{var re;k.innerHTML=String(((re=Q==null?void 0:Q.data)==null?void 0:re.text)||""),k.style.background="rgba(0,0,0,0.6)",k.style.color="#fff",k.style.font="14px sans-serif",k.style.padding="4px 6px",k.style.borderRadius="4px",k.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-seg",{createElement:(k,Q)=>{var re;k.innerHTML=String(((re=Q==null?void 0:Q.data)==null?void 0:re.text)||""),k.style.background="rgba(0,0,0,0.6)",k.style.color="#fff",k.style.font="14px sans-serif",k.style.padding="4px 6px",k.style.borderRadius="4px",k.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-angle",{createElement:(k,Q)=>{var re;k.innerHTML=String(((re=Q==null?void 0:Q.data)==null?void 0:re.text)||""),k.style.background="rgba(0,0,0,0.6)",k.style.color="#fff",k.style.font="14px sans-serif",k.style.padding="4px 6px",k.style.borderRadius="4px",k.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}const d=i.Cartographic.fromCartesian(c[0]),u=i.Cartographic.fromCartesian(c[1]),m=d.height||0,g=u.height||0,p=m<=g?c[0]:c[1],f=m>g?c[0]:c[1],w=r.entities.add({position:p,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}}),y=r.entities.add({position:f,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.pointEntities.push(w,y);const C=i.Cartographic.fromCartesian(p),b=Math.max(m,g),v=i.Cartesian3.fromDegrees(i.Math.toDegrees(C.longitude),i.Math.toDegrees(C.latitude),b),M=r.entities.add({polyline:{positions:[p,v],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}}),P=r.entities.add({polyline:{positions:[v,f],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}}),L=r.entities.add({polyline:{positions:[p,f],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.segmentEntities.push(M,P,L);const E=i.Cartesian3.distance(p,v),I=i.Cartesian3.distance(v,f),D=i.Cartesian3.distance(p,f),A=new i.Cartesian3((p.x+v.x)/2,(p.y+v.y)/2,(p.z+v.z)/2),T=new i.Cartesian3((v.x+f.x)/2,(v.y+f.y)/2,(v.z+f.z)/2),S=new i.Cartesian3((p.x+f.x)/2,(p.y+f.y)/2,(p.z+f.z)/2),x=i.Cartographic.fromCartesian(A),$=i.Cartographic.fromCartesian(T),F=i.Cartographic.fromCartesian(S),O=t.id+"_tri_v",R=t.id+"_tri_h",Y=t.id+"_tri_hyp";this.segmentLabelIds=[O,R,Y],this.htmlLabelPool.add({text:`${E.toFixed(2)} m`},{id:O,lon:i.Math.toDegrees(x.longitude),lat:i.Math.toDegrees(x.latitude),height:x.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${I.toFixed(2)} m`},{id:R,lon:i.Math.toDegrees($.longitude),lat:i.Math.toDegrees($.latitude),height:$.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${D.toFixed(2)} m`},{id:Y,lon:i.Math.toDegrees(F.longitude),lat:i.Math.toDegrees(F.latitude),height:F.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const V=i.Cartesian3.subtract(f,p,new i.Cartesian3),j=i.Cartesian3.subtract(v,p,new i.Cartesian3),W=i.Cartesian3.subtract(v,f,new i.Cartesian3),H=i.Cartesian3.subtract(p,f,new i.Cartesian3),ne=i.Cartesian3.dot(V,j),K=Math.sqrt(i.Cartesian3.dot(V,V))*Math.sqrt(i.Cartesian3.dot(j,j)),ce=i.Cartesian3.dot(W,H),ue=Math.sqrt(i.Cartesian3.dot(W,W))*Math.sqrt(i.Cartesian3.dot(H,H)),z=Math.acos(Math.min(Math.max(ne/(K||1),-1),1)),oe=Math.acos(Math.min(Math.max(ce/(ue||1),-1),1)),se=i.Cartographic.fromCartesian(p),q=i.Cartographic.fromCartesian(f),ee=s.labelText||{angle:"角度"},de=t.id+"_tri_angA",be=t.id+"_tri_angB";this.angleLabelIds=[de,be],this.htmlLabelPool.add({text:`${ee.angle}:${(z*180/Math.PI).toFixed(2)}°`},{id:de,lon:i.Math.toDegrees(se.longitude),lat:i.Math.toDegrees(se.latitude),height:se.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${ee.angle}:${(oe*180/Math.PI).toFixed(2)}°`},{id:be,lon:i.Math.toDegrees(q.longitude),lat:i.Math.toDegrees(q.latitude),height:q.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const X=Math.max(.01,Math.min(.5,s.angleMarkerRatio??.2)),J=Math.min(E,I)*X;if(E>.001&&I>.001){const te=i.Cartesian3.normalize(i.Cartesian3.subtract(p,v,new i.Cartesian3),new i.Cartesian3),k=i.Cartesian3.normalize(i.Cartesian3.subtract(f,v,new i.Cartesian3),new i.Cartesian3),Q=new i.Cartesian3(v.x+te.x*J,v.y+te.y*J,v.z+te.z*J),re=new i.Cartesian3(v.x+k.x*J,v.y+k.y*J,v.z+k.z*J),Fe=new i.Cartesian3(v.x+te.x*J+k.x*J,v.y+te.y*J+k.y*J,v.z+te.z*J+k.z*J),Ar=r.entities.add({polyline:{positions:[Q,Fe],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}}),$r=r.entities.add({polyline:{positions:[re,Fe],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.angleMarkerEntities.push(Ar,$r)}}}class Ue{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"labelEntity",null);h(this,"positions",[]);h(this,"tempPoints",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"previewEntity",null);h(this,"previewPos",null);h(this,"previewLabelId",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-space",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var n,l,c;const s=i.scene.pickPosition(r.position);if(!s)return;this.positions.push(s);const o=i.entities.add({position:s,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});if(this.tempPoints.push(o),this.positions.length===2){this.stop(),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null);const d=this.positions[0],u=this.positions[1],m=t.lineColor||t.color||e.Color.YELLOW,g=((l=(n=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:l.call(n,.9))||e.Color.RED;this.entity=i.entities.add({polyline:{positions:[d,u],width:t.width||3,material:m,depthFailMaterial:new e.PolylineDashMaterialProperty({color:g,dashLength:12,dashPattern:255})}});const p=e.Cartesian3.distance(d,u),f=u,w=e.Cartographic.fromCartesian(f),y=this.htmlLabelId||`measure_space_${Date.now()}`;this.htmlLabelId=y,this.htmlLabelPool.add({text:`${p.toFixed(2)} m`},{id:y,lon:e.Math.toDegrees(w.longitude),lat:e.Math.toDegrees(w.latitude),height:w.height||0,theme:"measure-space",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const C={entity:this.entity,label:this.labelEntity,positions:this.positions,distance:p,clear:()=>this.clear()};(c=t.onComplete)==null||c.call(t,C)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var g,p;if(this.positions.length!==1)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;this.previewPos=s;const o=this.positions[0],n=e.Cartesian3.distance(o,s),l=new e.Cartesian3((o.x+s.x)/2,(o.y+s.y)/2,(o.z+s.z)/2),c=e.Cartographic.fromCartesian(l),d=this.previewLabelId||"measure_space_preview";this.previewLabelId=d,this.htmlLabelPool.add({text:`${n.toFixed(2)} m`},{id:d,lon:e.Math.toDegrees(c.longitude),lat:e.Math.toDegrees(c.latitude),height:c.height||0,theme:"measure-space",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const u=t.lineColor||t.color||e.Color.YELLOW,m=((p=(g=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:p.call(g,.9))||e.Color.RED;this.previewEntity||(this.previewEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.positions.length?[]:[this.positions[0],this.previewPos],!1),width:t.width||3,material:u,depthFailMaterial:new e.PolylineDashMaterialProperty({color:m,dashLength:12,dashPattern:255})}}))},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.entity&&(this.viewer.entities.remove(this.entity),this.entity=null),this.labelEntity&&(this.viewer.entities.remove(this.labelEntity),this.labelEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.positions=[]}rehydrate(t,e){var d,u;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.YELLOW,n=((u=(d=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:u.call(d,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(m=>new i.Cartesian3(m[0],m[1],m[2]));if(c.length){if(!this.htmlLabelPool){const m=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,m),this.htmlLabelPool.registerTheme("measure-space",{createElement:(g,p)=>{var f;g.innerHTML=String(((f=p==null?void 0:p.data)==null?void 0:f.text)||""),g.style.background="rgba(0,0,0,0.6)",g.style.color="#fff",g.style.font="14px sans-serif",g.style.padding="4px 6px",g.style.borderRadius="4px",g.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}if(c.length>=1){const m=r.entities.add({position:c[0],point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(m)}if(c.length>=2){const m=r.entities.add({position:c[1],point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(m),this.entity=r.entities.add({polyline:{positions:[c[0],c[1]],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});const g=i.Cartesian3.distance(c[0],c[1]),p=i.Cartographic.fromCartesian(c[1]),f=t.id+"_label";this.htmlLabelId=f,this.htmlLabelPool.add({text:`${g.toFixed(2)} m`},{id:f,lon:i.Math.toDegrees(p.longitude),lat:i.Math.toDegrees(p.latitude),height:p.height||0,theme:"measure-space",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}}}}class Ke{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"labelEntity",null);h(this,"positions",[]);h(this,"tempPoints",[]);h(this,"primitive",null);h(this,"previewEntity",null);h(this,"previewPos",null);h(this,"edgeEntities",[]);h(this,"pointEntities",[]);h(this,"previewEdgeEntity",null);h(this,"previewPointEntities",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"previewLabelId",null);h(this,"segmentLabelIds",[]);h(this,"angleLabelIds",[]);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-area",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-seg",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-angle",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var m,g;const s=i.scene.pickPosition(r.position);if(!s)return;this.positions.push(s);const o=i.entities.add({position:s,point:{pixelSize:8,color:t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(o),this.primitive&&(i.scene.primitives.remove(this.primitive),this.primitive=null);const n=new e.PolygonHierarchy(this.positions.slice()),l=new e.PolygonGeometry({polygonHierarchy:n,vertexFormat:e.MaterialAppearance.VERTEX_FORMAT,perPositionHeight:!0,arcType:e.ArcType.NONE}),c=new e.GeometryInstance({geometry:l}),d=t.color||e.Color.YELLOW.withAlpha(.4),u=t.color&&t.color.withAlpha?t.color.withAlpha(.25):e.Color.RED.withAlpha(.4);if(this.primitive=new e.Primitive({geometryInstances:c,appearance:new e.MaterialAppearance({material:e.Material.fromType("Color",{color:d}),translucent:!0,closed:!0}),depthFailAppearance:new e.MaterialAppearance({material:e.Material.fromType("Color",{color:u}),translucent:!0,closed:!0})}),i.scene.primitives.add(this.primitive),this.positions.length>=2){if(this.edgeEntities.length){for(const C of this.edgeEntities)try{i.entities.remove(C)}catch{}this.edgeEntities=[]}const p=t.lineColor||t.color||e.Color.YELLOW,f=((g=(m=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:g.call(m,.9))||e.Color.RED,w=this.positions.concat([this.positions[0]]),y=i.entities.add({polyline:{positions:w,width:t.width||2,material:p,clampToGround:!1,arcType:e.ArcType.NONE,depthFailMaterial:new e.PolylineDashMaterialProperty({color:f,dashLength:12,dashPattern:255})}});this.edgeEntities.push(y)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var p,f;if(this.positions.length===0)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;this.previewPos=s;const o=this.positions.concat([s]),n=new e.Cartesian3(o.reduce((w,y)=>w+y.x,0)/o.length,o.reduce((w,y)=>w+y.y,0)/o.length,o.reduce((w,y)=>w+y.z,0)/o.length),c=new e.EllipsoidTangentPlane(n,e.Ellipsoid.WGS84).projectPointsOntoPlane(o);let d=0;for(let w=0;w<c.length;w++){const y=(w+1)%c.length;d+=c[w].x*c[y].y-c[y].x*c[w].y}d=Math.abs(d)/2;const u=e.Cartographic.fromCartesian(n),m=this.previewLabelId||"measure_area_preview";this.previewLabelId=m;const g=t.labelText||{area:"面积"};if(this.htmlLabelPool.add({text:`${g.area}:${d.toFixed(2)} m²`},{id:m,lon:e.Math.toDegrees(u.longitude),lat:e.Math.toDegrees(u.latitude),height:u.height||0,theme:"measure-area",show:!0}),!this.previewEntity){const w=t.color||e.Color.YELLOW.withAlpha(.4);this.previewEntity=i.entities.add({polygon:{hierarchy:new e.CallbackProperty(()=>{if(!this.previewPos||!this.positions.length)return;const M=this.positions.concat([this.previewPos]);return new e.PolygonHierarchy(M)},!1),material:w,perPositionHeight:!0,arcType:e.ArcType.NONE}});const y=t.lineColor||t.color||e.Color.YELLOW,C=((f=(p=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:f.call(p,.9))||e.Color.RED;this.previewEdgeEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.positions.length?[]:this.positions.concat([this.previewPos,this.positions[0]]),!1),width:t.width||2,material:y,clampToGround:!1,arcType:e.ArcType.NONE,depthFailMaterial:new e.PolylineDashMaterialProperty({color:C,dashLength:12,dashPattern:255})}});const b=t.pointColor||t.color||e.Color.YELLOW,v=i.entities.add({position:new e.CallbackProperty(()=>this.previewPos||this.positions[this.positions.length-1],!1),point:{pixelSize:8,color:b,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.previewPointEntities.push(v)}},e.ScreenSpaceEventType.MOUSE_MOVE),this.handler.setInputAction(()=>{var g;if(this.positions.length<3){this.stop();return}if(this.positions.length>=3){this.positions.pop();const p=this.tempPoints.pop();p&&this.viewer.entities.remove(p)}if(this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewEdgeEntity&&(this.viewer.entities.remove(this.previewEdgeEntity),this.previewEdgeEntity=null),this.previewPointEntities.length){for(const p of this.previewPointEntities)try{this.viewer.entities.remove(p)}catch{}this.previewPointEntities=[]}this.previewPos=null,this.stop();const r=new e.Cartesian3(this.positions.reduce((p,f)=>p+f.x,0)/this.positions.length,this.positions.reduce((p,f)=>p+f.y,0)/this.positions.length,this.positions.reduce((p,f)=>p+f.z,0)/this.positions.length),o=new e.EllipsoidTangentPlane(r,e.Ellipsoid.WGS84).projectPointsOntoPlane(this.positions);let n=0;for(let p=0;p<o.length;p++){const f=(p+1)%o.length;n+=o[p].x*o[f].y-o[f].x*o[p].y}n=Math.abs(n)/2;const l=e.Cartographic.fromCartesian(r),c=this.htmlLabelId||`measure_area_${Date.now()}`;this.htmlLabelId=c;const d=t.labelText||{area:"面积",side:"边长",angle:"角度"};this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.htmlLabelPool.add({text:`${d.area}:${n.toFixed(2)} m²`},{id:c,lon:e.Math.toDegrees(l.longitude),lat:e.Math.toDegrees(l.latitude),height:l.height||0,theme:"measure-area",show:!0}),this.labelEntity=this.htmlLabelId;for(let p=0;p<this.positions.length;p++){const f=(p+1)%this.positions.length,w=this.positions[p],y=this.positions[f],C=e.Cartographic.fromCartesian(w),b=e.Cartographic.fromCartesian(y),M=new e.EllipsoidGeodesic(C,b).surfaceDistance,P=new e.Cartesian3((w.x+y.x)/2,(w.y+y.y)/2,(w.z+y.z)/2),L=e.Cartographic.fromCartesian(P),E=`measure_area_seg_${Date.now()}_${p}`;this.segmentLabelIds.push(E),this.htmlLabelPool.add({text:`${d.side}:${M.toFixed(2)} m`},{id:E,lon:e.Math.toDegrees(L.longitude),lat:e.Math.toDegrees(L.latitude),height:L.height||0,theme:"measure-area-seg",show:!0})}const u=o;for(let p=0;p<u.length;p++){const f=u[(p-1+u.length)%u.length],w=u[p],y=u[(p+1)%u.length],C=f.x-w.x,b=f.y-w.y,v=y.x-w.x,M=y.y-w.y,P=Math.sqrt(C*C+b*b),L=Math.sqrt(v*v+M*M);if(!P||!L)continue;const E=C/P*(v/L)+b/P*(M/L),I=Math.acos(Math.min(1,Math.max(-1,E)))*(180/Math.PI),D=e.Cartographic.fromCartesian(this.positions[p]),A=`measure_area_angle_${Date.now()}_${p}`;this.angleLabelIds.push(A),this.htmlLabelPool.add({text:`${d.angle}:${I.toFixed(2)} °`},{id:A,lon:e.Math.toDegrees(D.longitude),lat:e.Math.toDegrees(D.latitude),height:D.height||0,theme:"measure-area-angle",show:!0})}const m={entity:this.primitive,label:this.labelEntity,positions:this.positions,area:n,clear:()=>this.clear()};(g=t.onComplete)==null||g.call(t,m)},e.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){if(this.stop(),this.entity&&(this.viewer.entities.remove(this.entity),this.entity=null),this.primitive&&(this.viewer.scene.primitives.remove(this.primitive),this.primitive=null),this.edgeEntities.length){for(const t of this.edgeEntities)try{this.viewer.entities.remove(t)}catch{}this.edgeEntities=[]}if(this.pointEntities.length){for(const t of this.pointEntities)try{this.viewer.entities.remove(t)}catch{}this.pointEntities=[]}if(this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null,this.previewPos=null),this.previewEdgeEntity&&(this.viewer.entities.remove(this.previewEdgeEntity),this.previewEdgeEntity=null),this.previewPointEntities.length){for(const t of this.previewPointEntities)try{this.viewer.entities.remove(t)}catch{}this.previewPointEntities=[]}this.labelEntity&&(this.viewer.entities.remove(this.labelEntity),this.labelEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.segmentLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice()),this.angleLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.angleLabelIds.slice()),this.segmentLabelIds=[],this.angleLabelIds=[],this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.positions=[]}rehydrate(t,e){const i=this.Cesium,r=this.viewer,s=t.options||{},o=(t.positions||[]).map(M=>new i.Cartesian3(M[0],M[1],M[2]));if(o.length<3)return;if(!this.htmlLabelPool){const M=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,M),this.htmlLabelPool.registerTheme("measure-area",{createElement:(P,L)=>{var E;P.innerHTML=String(((E=L==null?void 0:L.data)==null?void 0:E.text)||""),P.style.background="rgba(0,0,0,0.6)",P.style.color="#fff",P.style.font="14px sans-serif",P.style.padding="4px 6px",P.style.borderRadius="4px",P.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-seg",{createElement:(P,L)=>{var E;P.innerHTML=String(((E=L==null?void 0:L.data)==null?void 0:E.text)||""),P.style.background="rgba(0,0,0,0.6)",P.style.color="#fff",P.style.font="14px sans-serif",P.style.padding="4px 6px",P.style.borderRadius="4px",P.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-angle",{createElement:(P,L)=>{var E;P.innerHTML=String(((E=L==null?void 0:L.data)==null?void 0:E.text)||""),P.style.background="rgba(0,0,0,0.6)",P.style.color="#fff",P.style.font="14px sans-serif",P.style.padding="4px 6px",P.style.borderRadius="4px",P.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}for(const M of o){const P=r.entities.add({position:M,point:{pixelSize:8,color:s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(P)}const n=new i.Cartesian3(o.reduce((M,P)=>M+P.x,0)/o.length,o.reduce((M,P)=>M+P.y,0)/o.length,o.reduce((M,P)=>M+P.z,0)/o.length),c=new i.EllipsoidTangentPlane(n,i.Ellipsoid.WGS84).projectPointsOntoPlane(o);let d=0;for(let M=0;M<c.length;M++){const P=(M+1)%c.length;d+=c[M].x*c[P].y-c[P].x*c[M].y}d=Math.abs(d)/2;const u=i.Cartographic.fromCartesian(n),m=t.id+"_area";this.htmlLabelId=m;const g=s.labelText||{area:"面积",side:"边长",angle:"角度"};this.htmlLabelPool.add({text:`${g.area}:${d.toFixed(2)} m²`},{id:m,lon:i.Math.toDegrees(u.longitude),lat:i.Math.toDegrees(u.latitude),height:u.height||0,theme:"measure-area",show:!0});const p=new i.PolygonHierarchy(o),f=new i.PolygonGeometry({polygonHierarchy:p,vertexFormat:i.MaterialAppearance.VERTEX_FORMAT,perPositionHeight:!0}),w=new i.GeometryInstance({geometry:f}),y=s.color||i.Color.YELLOW.withAlpha(.4),C=s.color&&s.color.withAlpha?s.color.withAlpha(.25):i.Color.RED.withAlpha(.4),b=new i.Primitive({geometryInstances:w,appearance:new i.MaterialAppearance({material:i.Material.fromType("Color",{color:y}),translucent:!0,closed:!0}),depthFailAppearance:new i.MaterialAppearance({material:i.Material.fromType("Color",{color:C}),translucent:!0,closed:!0})});r.scene.primitives.add(b),this.primitive=b;for(let M=0;M<o.length;M++){const P=(M+1)%o.length,L=o[M],E=o[P],I=i.Cartographic.fromCartesian(L),D=i.Cartographic.fromCartesian(E),T=new i.EllipsoidGeodesic(I,D).surfaceDistance,S=new i.Cartesian3((L.x+E.x)/2,(L.y+E.y)/2,(L.z+E.z)/2),x=i.Cartographic.fromCartesian(S),$=t.id+`_area_seg_${M}`;this.segmentLabelIds.push($),this.htmlLabelPool.add({text:`${g.side}:${T.toFixed(2)} m`},{id:$,lon:i.Math.toDegrees(x.longitude),lat:i.Math.toDegrees(x.latitude),height:x.height||0,theme:"measure-area-seg",show:!0})}const v=c;for(let M=0;M<v.length;M++){const P=v[(M-1+v.length)%v.length],L=v[M],E=v[(M+1)%v.length],I=P.x-L.x,D=P.y-L.y,A=E.x-L.x,T=E.y-L.y,S=Math.sqrt(I*I+D*D),x=Math.sqrt(A*A+T*T);if(!S||!x)continue;const $=I/S*(A/x)+D/S*(T/x),F=Math.acos(Math.min(1,Math.max(-1,$)))*(180/Math.PI),O=i.Cartographic.fromCartesian(o[M]),R=t.id+`_area_angle_${M}`;this.angleLabelIds.push(R),this.htmlLabelPool.add({text:`${g.angle}:${F.toFixed(2)} °`},{id:R,lon:i.Math.toDegrees(O.longitude),lat:i.Math.toDegrees(O.latitude),height:O.height||0,theme:"measure-area-angle",show:!0})}}}class qe{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"positions",[]);h(this,"currentRadius",0);h(this,"labelEntity",null);h(this,"previewLabel",null);h(this,"ellipsePrimitive",null);h(this,"previewEntity",null);h(this,"isPrimitive",!1);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-circle",{createElement:(s,o)=>{var l;const n=((l=o==null?void 0:o.data)==null?void 0:l.text)||"";s.innerHTML=String(n),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var o;const s=i.scene.pickPosition(r.position);if(s&&(this.positions.push(s),this.positions.length===2)){this.stop();const n=this.positions[0],l=this.positions[1],c=e.Cartesian3.distance(n,l),d=Math.PI*c*c,u=2*Math.PI*c,m=t.labelText||{radius:"半径",area:"面积",circumference:"周长"},g=n;this.labelEntity?(this.labelEntity.position=g,this.labelEntity.label.text=`${m.radius}:${c.toFixed(2)} m
|
|
43
|
+
}`})()},translucent(){return!0}}),new d(t)}class Lr{constructor(){h(this,"categoryMap",new Map);h(this,"CategoryGet",{})}registerCategoryGet(t,e){if(!t)return console.warn("分类不能为空");this.CategoryGet[t]=e}register(t){const{themeKey:e,material:i,force:r=!1,category:s="default"}=t;this.categoryMap.has(s)||this.categoryMap.set(s,new Map);const o=this.categoryMap.get(s);if(o.has(e))if(r)console.info(`[MaterialManager] themeKey '${e}' 在分类 '${s}' 已被覆盖`);else{console.warn(`[MaterialManager] 已存在 themeKey '${e}' 在分类 '${s}',如需覆盖请设置 force = true`);return}o.set(e,i)}get({themeKey:t,category:e,options:i}){var r;return e=e||"default",this.CategoryGet[e]?this.CategoryGet[e]({themeKey:t,materialMap:this.categoryMap,options:i||{}}):(r=this.categoryMap.get(e))==null?void 0:r.get(t)}has(t,e="default"){var i;return((i=this.categoryMap.get(e))==null?void 0:i.has(t))??!1}remove(t,e="default"){const i=this.categoryMap.get(e);if(!i)return;const r=i.get(t);r!=null&&r.destroy&&r.destroy(),i.delete(t),i.size===0&&this.categoryMap.delete(e)}keys(t="default"){var e;return[...((e=this.categoryMap.get(t))==null?void 0:e.keys())||[]]}clearCategory(t="default"){var i;const e=this.categoryMap.get(t);if(e){for(const r of e.values())(i=r==null?void 0:r.destroy)==null||i.call(r);e.clear(),this.categoryMap.delete(t)}}clearAll(){var t;for(const e of this.categoryMap.values())for(const i of e.values())(t=i==null?void 0:i.destroy)==null||t.call(i);this.categoryMap.clear()}categories(){return[...this.categoryMap.keys()]}}class Er{constructor(t){h(this,"id");h(this,"entities",[]);h(this,"primitives",[]);h(this,"dataItem",{});h(this,"aggregator");h(this,"cardPool");const{id:e,entities:i=[],primitives:r=[],dataItem:s={},aggregator:o,cardPool:n}=t;this.id=e,this.entities=i,this.primitives=r,this.dataItem=s,this.aggregator=o,this.cardPool=n}setVisible(t){this.entities.forEach(e=>{e&&(e.show=t)}),this.primitives.forEach(e=>{e&&(e.show=t)}),this.aggregator&&Array.isArray(this.dataItem.billboard)&&this.dataItem.billboard.map((i,r)=>{var o;return{id:this.dataItem.id,data:{...this.dataItem,show:t&&(((o=i.data)==null?void 0:o.show)??!0)}}}).forEach(i=>{var r;(r=this.aggregator)==null||r.updatePoint(i)}),this.cardPool&&this.dataItem.card&&(t?this.cardPool.showByIds([this.dataItem.id]):this.cardPool.hideByIds([this.dataItem.id]))}removeAll(t,e=!0){return this.entities.forEach(i=>{i&&t.entities.remove(i)}),this.entities=[],this.primitives.forEach(i=>{i&&t.scene.primitives.remove(i)}),this.primitives=[],e&&this.aggregator&&Array.isArray(this.dataItem.billboard)&&this.aggregator.removePointsById([this.dataItem.id]),e&&this.cardPool&&this.dataItem.card&&this.cardPool.removeByIds([this.dataItem.id]),this.dataItem.id}}class Mr{constructor(t,e,i,r,s,o){h(this,"id");h(this,"groupMap",new Map);h(this,"Cesium");h(this,"viewer");h(this,"materialManager");h(this,"aggregator");h(this,"cardPool");this.id=t,this.Cesium=e,this.viewer=i,this.materialManager=r,this.aggregator=s,this.cardPool=o,this.aggregator.labelPool.eventBus.addListener(U.Click,{name:"BufferedHierarchicalAggregator_maker_click",fn:(l,c)=>{this.cardPool.showByIds([l.data.id])}}),new e.ScreenSpaceEventHandler(i.scene.canvas).setInputAction(()=>{this.cardPool.hideFilter(l=>!l.initShow)},e.ScreenSpaceEventType.LEFT_CLICK)}createPolyline(t,e){if(!t.positions||t.positions.length<1)return null;const i=this.materialManager.get({themeKey:t.theme,category:"polyline",options:t}),r=Array.isArray(t.positions[0])?t.positions.flat():t.positions;let s={...t};return i&&(s.material=i),this.viewer.entities.add({polyline:{...s,positions:this.Cesium.Cartesian3.fromDegreesArrayHeights(r)},show:(t.show??!0)&&e})}createWall(t,e){var l,c;if(!t.positions||t.positions.length<1)return null;const i=this.materialManager.get({themeKey:t.theme,category:"wall",options:t}),r=t.positions.length===((l=t.minimumHeights)==null?void 0:l.length)?t.minimumHeights.map(d=>d-Number(t.minHeight||0)):t.positions.map(d=>(d[2]||0)-Number(t.minHeight||0)),s=t.positions.length===((c=t.maximumHeights)==null?void 0:c.length)?t.maximumHeights.map(d=>d+Number(t.maxHeight||0)):t.positions.map(d=>(d[2]||0)+Number(t.maxHeight||0)),o=t.positions.map(d=>this.Cesium.Cartesian3.fromDegrees(d[0],d[1],d[2]||0));let n={...t};return i&&(n.material=i),this.viewer.entities.add({wall:{...n,positions:o,minimumHeights:r,maximumHeights:s},show:(t.show??!0)&&e})}createPolygon(t,e){var c;if(!t.hierarchy||t.hierarchy.length<1)return null;const i=this.materialManager.get({themeKey:t.theme,category:"polygon",options:t}),r=Array.isArray(t.hierarchy[0])?t.hierarchy.flat():t.hierarchy,s=this.Cesium.Cartesian3.fromDegreesArrayHeights(r),o=((c=t.holes)==null?void 0:c.map(d=>{let u=Array.isArray(d[0])?t.hierarchy.flat():t.hole;return this.Cesium.Cartesian3.fromDegreesArrayHeights(u.flat())}))||[],n=new this.Cesium.PolygonHierarchy(s,o);let l={...t};return i&&(l.material=i),this.viewer.entities.add({polygon:{...l,hierarchy:n},show:(t.show??!0)&&e})}createBillboardPoints(t){var e;return!((e=t.billboard)!=null&&e.length)||!this.aggregator?[]:t.billboard.map(i=>{var n;const[r,s,o=0]=i.position||[0,0,0];return{id:t.id,lon:r,lat:s,height:o,name:((n=i.options)==null?void 0:n.text)||"",data:t,style:{zIndex:t.zIndex||"1"}}})}createCard(t){var e,i,r;(i=(e=t.card)==null?void 0:e.data)!=null&&i.length&&this.cardPool.add(t.card,{id:t.id,lon:t.card.position[0],lat:t.card.position[1],height:t.card.position[3]||0,theme:t.card.theme,show:t.show?t.card.initShow??!1:!1,notCreateElement:!0,style:{width:"0",height:"0",zIndex:((r=t==null?void 0:t.card)==null?void 0:r.zIndex)||"110"}})}addGroup(t,e=!0){const i=t.id||`${Date.now()}`;this.removeGroup(i);const r=[],s=t.show!==!1;(t.polyline||[]).forEach(l=>{const c=this.createPolyline(l,s);c&&r.push(c)}),(t.wall||[]).forEach(l=>{const c=this.createWall(l,s);c&&r.push(c)}),(t.polygon||[]).forEach(l=>{const c=this.createPolygon(l,s);c&&r.push(c)});const o=this.createBillboardPoints(t);o.length&&e&&this.aggregator.appendPoints(o,!1),this.createCard(t);const n=new Er({id:i,entities:r,primitives:[],dataItem:t,aggregator:this.aggregator,cardPool:this.cardPool});return this.groupMap.set(i,n),o}async addGroups(t){const i=t.map(r=>this.addGroup(r,!1)).flat();i.length>0&&this.aggregator&&this.aggregator.appendPoints(i,!1)}removeGroup(t){const e=this.groupMap.get(t);e&&(e.removeAll(this.viewer),this.groupMap.delete(t))}removeGroups(t){let e=[];for(const i of t){const r=this.groupMap.get(i);if(r){let s=r.removeAll(this.viewer,!1);this.groupMap.delete(i),e.push(s)}}this.aggregator.removePointsById(e),this.cardPool.removeByIds(e)}updateGroup(t){const e=this.groupMap.get(t.id);e&&(e.removeAll(this.viewer),this.groupMap.delete(t.id)),this.addGroup(t)}async updateGroups(t){this.aggregator.removePointsById(t.map(r=>r.id)),this.cardPool.removeByIds(t.map(r=>r.id));const i=t.map(r=>{const s=this.groupMap.get(r.id);return s&&(s.removeAll(this.viewer,!1),this.groupMap.delete(r.id)),this.addGroup(r,!1)}).flat();i.length>0&&this.aggregator&&this.aggregator.appendPoints(i,!1)}setGroupVisible(t,e){var i;(i=this.groupMap.get(t))==null||i.setVisible(e)}clearAllGroups(){this.groupMap.forEach(t=>t.removeAll(this.viewer)),this.groupMap.clear()}}class Ir{constructor(t,e,i,r,s){h(this,"Cesium");h(this,"viewer");h(this,"layerMap",new Map);h(this,"materialManager");h(this,"aggregator");h(this,"cardPool");this.Cesium=t,this.viewer=e,this.materialManager=i,this.aggregator=r,this.cardPool=s}addLayer(t){this.layerMap.has(t)||this.layerMap.set(t,new Mr(t,this.Cesium,this.viewer,this.materialManager,this.aggregator,this.cardPool))}removeLayer(t){const e=this.layerMap.get(t);e&&(e.clearAllGroups(),this.layerMap.delete(t))}getLayer(t){return this.layerMap.get(t)}async addGroupsToLayer(t,e){const i=this.layerMap.get(t);i&&(i.addGroups(e),this.aggregator.refresh())}updateGroupToLayer(t,e){const i=this.layerMap.get(t);i&&(i.updateGroups(e),this.aggregator.refresh())}setGroupVisible(t,e,i){var r;(r=this.layerMap.get(t))==null||r.setGroupVisible(e,i)}removeGroup(t,e){var i;(i=this.layerMap.get(t))==null||i.removeGroup(e)}removeGroups(t,e){var i;(i=this.layerMap.get(t))==null||i.removeGroups(e)}}function Tr(a){const t=[];return a.features.forEach((e,i)=>{if(e.geometry&&e.properties){const r=e.geometry,s=e.properties,o={id:s.id||`${Date.now()}`,show:!0,zIndex:s.zIndex||1,name:`${s.layer}_${i}`||"",billboard:[],polyline:[],wall:[],polygon:[],card:s.card||null};switch(r.type){case"Point":o.billboard.push({position:r.coordinates,options:s,name:`${s.layer}_${i}`});break;case"LineString":o.polyline.push({positions:r.coordinates,theme:s.theme||"default"});break;case"Polygon":o.polygon.push({hierarchy:r.coordinates[0],theme:s.theme||"default"});break;case"MultiLineString":r.coordinates.forEach(n=>{o.polyline.push({positions:n})});break;case"MultiPolygon":r.coordinates.forEach(n=>{o.polygon.push({hierarchy:n[0]})});break;case"GeometryCollection":r.geometries.forEach(n=>{n.type==="Point"?o.billboard.push({position:n.coordinates}):n.type==="LineString"?o.polyline.push({positions:n.coordinates}):n.type==="Polygon"&&o.polygon.push({hierarchy:n.coordinates[0]})});break;default:console.warn(`Unsupported geometry type: ${r.type}`);break}t.push(o)}}),t}class xr{constructor(t){h(this,"Cesium");h(this,"viewer");h(this,"layerMap");h(this,"hideLayerMap");h(this,"entityLayerManager");h(this,"PrimitiveThemeMap");h(this,"materialManager");let{Cesium:e,viewer:i,materialManager:r,entityLayerManager:s}=t;this.Cesium=e,this.viewer=i,this.layerMap=new Map,this.PrimitiveThemeMap=new Map,this.hideLayerMap=new Map,this.materialManager=r,this.entityLayerManager=s}createGeometryInstance(t){let e;return t.category==="polyline"&&t.positions?e=this.createPolyline(t):t.category==="polygon"&&t.hierarchy&&(e=this.createPolygon(t)),e}carateThemePrimitive(t){let e=Oe(t),i=this.PrimitiveThemeMap.get(e.theme);if(!i){this.initTheme(e);let r=this.createAppearance(e);i={Primitive:null,ids:new Map,appearance:r,geometryInstances:new Map},this.PrimitiveThemeMap.set(e.theme,i)}return i}initTheme(t){var r,s,o,n,l,c,d,u,m,g,p,f;let e=this.materialManager,i=this.Cesium;if(t.category=="polyline"){const w=((s=(r=t.properties)==null?void 0:r.lineType)==null?void 0:s.pattern)&&((n=(o=t.properties)==null?void 0:o.lineType)==null?void 0:n.patternLength);let y="";if(w){const C=((c=(l=t.properties)==null?void 0:l.lineType)==null?void 0:c.pattern)||[.25,-.125],b=((u=(d=t.properties)==null?void 0:d.lineType)==null?void 0:u.patternLength)||.375;let v=this.convertCadPatternToCesiumDash(C,b);y=`DashedLineMaterial_pattern_${v.dashPattern}_dashLength_${v.dashLength}_color_${(m=t.properties)==null?void 0:m.color}`,e.has(y)||e.register({themeKey:y,material:i.Material.fromType("PolylineDash",{color:i.Color.fromCssColorString(t.properties.color||"#FFFFFF").withAlpha(.8),dashLength:v.dashLength,dashPattern:v.dashPattern})})}else y=`LineMaterial_color_${(g=t.properties)==null?void 0:g.color}`,e.has(y)||e.register({themeKey:y,material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(t.properties.color||"#FFFFFF").withAlpha(.8)})})}else if(t.category=="polygon"){let w=`polygonMaterial_color_${(p=t.properties)==null?void 0:p.color}`;e.has(w)||e.register({themeKey:w,material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(((f=t.properties)==null?void 0:f.color)||"#FFFFFF").withAlpha(.8)})})}}convertCadPatternToCesiumDash(t,e){const r=e/16;let s=[],o=0;for(let l of t){const c=Math.floor(Math.abs(l)/r),d=l>=0?1:0;for(let u=0;u<c&&(s.push(d),o++,!(o>=16));u++);if(o>=16)break}for(;s.length<16;)s.push(0);s.length>16&&(s.length=16);let n=0;for(let l=0;l<16;l++)n=n<<1|s[l];return{dashPattern:n,dashLength:e}}async processBatch(t){const e=new Map;t.forEach(i=>{let{layerId:r,dataList:s}=i;Oe(s).forEach(n=>{let l=this.createGeometryInstance(n);if(l){let c=this.carateThemePrimitive(n);c.ids.set(n.id,n),c.geometryInstances.set(n.id,l);const d=this.layerMap.get(r);if(d)d.set(n.id,n);else{let u=new Map;this.layerMap.set(r,u),u.set(n.id,n)}e.set(n.theme,n)}})}),e.forEach(i=>{this.updatePrimitive(i)})}createPolyline(t){const e=Array.isArray(t.positions[0])?t.positions.flat():t.positions;return new this.Cesium.GeometryInstance({id:t.id,geometry:new this.Cesium.GroundPolylineGeometry({positions:this.Cesium.Cartesian3.fromDegreesArrayHeights(e),width:Math.max(t.width||2,2)})})}createPolygon(t){var o;const e=Array.isArray(t.hierarchy[0])?t.hierarchy.flat():t.hierarchy,i=this.Cesium.Cartesian3.fromDegreesArrayHeights(e),r=((o=t.holes)==null?void 0:o.map(n=>{let l=Array.isArray(n[0])?n.flat():n,c=this.Cesium.Cartesian3.fromDegreesArrayHeights(l.flat());return new this.Cesium.PolygonHierarchy(c)}))||[],s=new this.Cesium.PolygonHierarchy(i,r);return new this.Cesium.GeometryInstance({id:t.id,geometry:new this.Cesium.PolygonGeometry({polygonHierarchy:s})})}getMaterial(t){let e=this.materialManager.get({themeKey:t.theme,options:t});return e||(e=this.Cesium.Material.fromType("Color",{color:new this.Cesium.Color(1,0,0,1)})),e}updateGeometryInstance(t){let e=Oe(t);const i=this.layerMap.get(e.layerId);if(!i){console.warn(`没有找到图层 ${e.layerId}`);return}let r=i.get(e.id);if(i.set(e.id,e),!r){console.warn(`没有找到图元 ${e.id} 在图层 ${e.layerId} 中`);return}if(r.theme!==e.theme){let o=this.PrimitiveThemeMap.get(r.theme);o==null||o.geometryInstances.delete(e.id),o==null||o.ids.delete(e.id),this.updatePrimitive(r)}let s=this.carateThemePrimitive(e);if(s){const o=this.createGeometryInstance(e);s.geometryInstances.set(e.id,o),s.ids.set(e.id,e),this.updatePrimitive(e)}}deleteGeometryInstance(t){let e=new Set;t.forEach(i=>{let{layerId:r,ids:s}=i;const o=this.layerMap.get(r);if(!o){console.warn(`没有找到图层 ${r}`);return}s.forEach(n=>{let l=o.get(n);if(!l){console.warn(`没有找到图元 ${n} 在图层 ${r} 中`);return}let c=this.PrimitiveThemeMap.get(l.theme);c&&(c.geometryInstances.delete(l.id),c.ids.delete(l.id),e.add(l))})}),Array.from(e.values()).forEach(i=>{this.updatePrimitive(i)})}addGeometryInstance(t){let e=Oe(t);const i=this.layerMap.get(e.layerId);if(!i){console.warn(`没有找到图层 ${e.layerId}`);return}if(i.get(e.id)){console.warn(`图元 ${e.id} 已经存在图层 ${e.layerId} 中`);return}i.set(e.id,e);let s=this.carateThemePrimitive(e);if(s){const o=this.createGeometryInstance(e);s.geometryInstances.set(e.id,o),s.ids.set(e.id,e),this.updatePrimitive(e)}}createAppearance(t){let e=this.getMaterial({theme:t.theme}),i;return t.category==="polyline"?i=new this.Cesium.PolylineMaterialAppearance({material:e,translucent:!0}):t.category==="polygon"&&(i=new this.Cesium.MaterialAppearance({material:e,translucent:!0})),i}updatePrimitive(t){const e=this.PrimitiveThemeMap.get(t.theme);if(!e)return;e.Primitive&&(this.viewer.scene.primitives.remove(e.Primitive),e.Primitive=null);let r=Array.from(e.geometryInstances,([s,o])=>({key:s,value:o})).filter(s=>!Array.from(this.hideLayerMap.values()).some(o=>o.has(s.key))).map(s=>s.value);r.length<=0||(t.category==="polyline"?(e.Primitive=new this.Cesium.GroundPolylinePrimitive({geometryInstances:r,appearance:e.appearance}),this.viewer.scene.primitives.add(e.Primitive)):(e.Primitive=new this.Cesium.GroundPrimitive({geometryInstances:r,appearance:e.appearance}),this.viewer.scene.primitives.add(e.Primitive)))}hideByLayerAndId(t){let e=new Map;t.forEach(i=>{let{layerId:r,ids:s}=i,o=this.hideLayerMap.get(r);o||(o=new Set,this.hideLayerMap.set(r,o)),s.forEach(n=>{o.add(n);let l=this.getGeometryInstanceInfo(r,n);l&&e.set(l.theme,l)})}),Array.from(e.values()).forEach(i=>{this.updatePrimitive(i)})}showByLayerAndId(t){let e=new Map;t.forEach(i=>{let{layerId:r,ids:s}=i,o=this.hideLayerMap.get(r);o||(o=new Set,this.hideLayerMap.set(r,o)),s.forEach(n=>{o.delete(n);let l=this.getGeometryInstanceInfo(r,n);l&&e.set(l.theme,l)})}),Array.from(e.values()).forEach(i=>{this.updatePrimitive(i)})}hasGeometryInstance(t,e){const i=this.layerMap.get(t);if(!i)return!1;const r=i.get(e);if(!r)return!1;let s=this.PrimitiveThemeMap.get(r.theme);return!(!s||!s.geometryInstances.get(e))}getGeometryInstanceInfo(t,e){const i=this.layerMap.get(t);return i?i.get(e):null}focusOnGeometryInstance(t,e){const i=this.layerMap.get(t);if(!i){console.warn(`图层 ${t} 不存在`);return}const r=i.get(e);if(!r){console.warn(`没有找到图元 ${e} 在图层 ${t} 中`);return}let s=this.PrimitiveThemeMap.get(r.theme);if(!s){console.warn(`没有找到 ${e} 图元相关的Primitive`);return}const o=s.geometryInstances.get(e);if(!o){console.warn(`没有找到图元的几何体 ${e}`);return}const n=o.geometry,l=n._positions||n._polygonHierarchy.positions;if(l&&l.length>0){let c=l[0].x,d=l[0].y,u=l[0].z,m=l[0].x,g=l[0].y,p=l[0].z;l.forEach(b=>{c=Math.min(c,b.x),d=Math.min(d,b.y),u=Math.min(u,b.z),m=Math.max(m,b.x),g=Math.max(g,b.y),p=Math.max(p,b.z)});const f=new this.Cesium.Cartesian3((c+m)/2,(d+g)/2,(u+p)/2),y=new this.Cesium.Cartesian3(m-c,g-d,p-u).z,C=Math.abs(y||1)*1.5;this.viewer.camera.flyTo({destination:f,duration:2,complete:()=>{console.log(`已定位到图元 ${e}`)},offset:new this.Cesium.Cartesian3(0,0,C)})}else console.warn(`无法获取图元 ${e} 的顶点信息`)}}class Ye{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"positions",[]);h(this,"tempPoints",[]);h(this,"segmentEntities",[]);h(this,"segmentLabelIds",[]);h(this,"previewEntity",null);h(this,"previewGroundEntity",null);h(this,"hoverPos",null);h(this,"htmlLabelPool",null);h(this,"totalLabelId",null);h(this,"previewLabelId",null);h(this,"labelEntity",null);h(this,"firstHeight",null);h(this,"groundLineEntities",[]);h(this,"previewPos",null);h(this,"previewGroundPos",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-horizontal-total",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-horizontal-seg",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var f,w,y,C;const s=i.scene.pickPosition(r.position);if(!s)return;const o=e.Cartographic.fromCartesian(s),n=e.Math.toDegrees(o.longitude),l=e.Math.toDegrees(o.latitude);this.positions.length===0&&(this.firstHeight=o.height||0);const c=e.Cartesian3.fromDegrees(n,l,this.firstHeight||0);this.positions.push(c);const d=i.entities.add({position:c,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(d);const u=i.scene.globe.getHeight(new e.Cartographic(o.longitude,o.latitude,0))||0,m=e.Cartesian3.fromDegrees(n,l,u),g=((w=(f=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:w.call(f,.9))||e.Color.RED,p=i.entities.add({polyline:{positions:[m,c],width:t.width||3,material:new e.PolylineDashMaterialProperty({color:g,dashLength:12,dashPattern:255})}});if(this.groundLineEntities.push(p),this.positions.length>=2){const b=this.positions[this.positions.length-2],v=this.positions[this.positions.length-1],M=e.Cartographic.fromCartesian(b),P=e.Cartographic.fromCartesian(v),L=i.entities.add({polyline:{positions:[b,v],width:t.width||3,material:t.lineColor||t.color||e.Color.YELLOW,depthFailMaterial:new e.PolylineDashMaterialProperty({color:((C=(y=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:C.call(y,.9))||e.Color.RED,dashLength:12,dashPattern:255})}});this.segmentEntities.push(L);const I=new e.EllipsoidGeodesic(M,P).surfaceDistance,D=new e.Cartesian3((b.x+v.x)/2,(b.y+v.y)/2,(b.z+v.z)/2),A=e.Cartographic.fromCartesian(D),T=`measure_horizontal_seg_${this.segmentLabelIds.length}_${Date.now()}`;this.segmentLabelIds.push(T),this.htmlLabelPool.add({text:`${I.toFixed(2)} m`},{id:T,lon:e.Math.toDegrees(A.longitude),lat:e.Math.toDegrees(A.latitude),height:A.height||this.firstHeight||0,theme:"measure-horizontal-seg",show:!0})}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(()=>{var c;if(this.positions.length<2){this.stop();return}this.stop(),this.previewLabelId&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.hoverPos&&(this.hoverPos=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewGroundEntity&&(this.viewer.entities.remove(this.previewGroundEntity),this.previewGroundEntity=null);let r=0;for(let d=1;d<this.positions.length;d++){const u=this.positions[d-1],m=this.positions[d],g=e.Cartographic.fromCartesian(u),p=e.Cartographic.fromCartesian(m),f=new e.EllipsoidGeodesic(g,p);r+=f.surfaceDistance}const s=this.positions[this.positions.length-1],o=e.Cartographic.fromCartesian(s),n=this.totalLabelId||`measure_horizontal_total_${Date.now()}`;this.totalLabelId=n,this.htmlLabelPool.add({text:`${r.toFixed(2)} m`},{id:n,lon:e.Math.toDegrees(o.longitude),lat:e.Math.toDegrees(o.latitude),height:o.height||this.firstHeight||0,theme:"measure-horizontal-total",show:!0}),this.labelEntity=this.totalLabelId;const l={entity:this.segmentEntities,label:this.labelEntity,segmentLabels:this.segmentLabelIds,positions:this.positions,distance:r,clear:()=>this.clear()};(c=t.onComplete)==null||c.call(t,l)},e.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),this.handler.setInputAction(r=>{var M,P,L,E;if(this.positions.length===0)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;this.hoverPos=s;const o=e.Cartographic.fromCartesian(s),n=e.Math.toDegrees(o.longitude),l=e.Math.toDegrees(o.latitude),c=e.Cartesian3.fromDegrees(n,l,this.firstHeight||0);this.previewPos=c;const d=i.scene.globe.getHeight(new e.Cartographic(o.longitude,o.latitude,0))||0,u=e.Cartesian3.fromDegrees(n,l,d);this.previewGroundPos=u;const m=this.positions[this.positions.length-1],g=e.Cartographic.fromCartesian(m),p=e.Cartographic.fromCartesian(c),w=new e.EllipsoidGeodesic(g,p).surfaceDistance,y=new e.Cartesian3((m.x+c.x)/2,(m.y+c.y)/2,(m.z+c.z)/2),C=e.Cartographic.fromCartesian(y),b=this.previewLabelId||"measure_horizontal_preview";this.previewLabelId=b,this.htmlLabelPool.add({text:`${w.toFixed(2)} m`},{id:b,lon:e.Math.toDegrees(C.longitude),lat:e.Math.toDegrees(C.latitude),height:C.height||this.firstHeight||0,theme:"measure-horizontal-seg",show:!0});const v=((P=(M=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:P.call(M,.9))||e.Color.RED;this.previewGroundEntity||(this.previewGroundEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.previewGroundPos?[]:[this.previewGroundPos,this.previewPos],!1),width:t.width||3,material:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}})),this.previewEntity||(this.previewEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.positions.length?[]:[this.positions[this.positions.length-1],this.previewPos],!1),width:t.width||3,material:t.lineColor||t.color||e.Color.YELLOW,depthFailMaterial:new e.PolylineDashMaterialProperty({color:((E=(L=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:E.call(L,.9))||e.Color.RED,dashLength:12,dashPattern:255})}}))},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.segmentEntities.forEach(t=>this.viewer.entities.remove(t)),this.segmentEntities=[],this.groundLineEntities.forEach(t=>this.viewer.entities.remove(t)),this.groundLineEntities=[],this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.totalLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.totalLabelId]),this.totalLabelId=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewGroundEntity&&(this.viewer.entities.remove(this.previewGroundEntity),this.previewGroundEntity=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.segmentLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice()),this.segmentLabelIds=[],this.positions=[],this.hoverPos=null,this.labelEntity=null,this.firstHeight=null,this.previewPos=null,this.previewGroundPos=null}rehydrate(t,e){var p,f;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.YELLOW,n=((f=(p=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:f.call(p,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(w=>new i.Cartesian3(w[0],w[1],w[2]));if(!c.length)return;if(!this.htmlLabelPool){const w=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,w),this.htmlLabelPool.registerTheme("measure-horizontal-total",{createElement:(y,C)=>{var b;y.innerHTML=String(((b=C==null?void 0:C.data)==null?void 0:b.text)||""),y.style.background="rgba(0,0,0,0.6)",y.style.color="#fff",y.style.font="14px sans-serif",y.style.padding="4px 6px",y.style.borderRadius="4px",y.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-horizontal-seg",{createElement:(y,C)=>{var b;y.innerHTML=String(((b=C==null?void 0:C.data)==null?void 0:b.text)||""),y.style.background="rgba(0,0,0,0.6)",y.style.color="#fff",y.style.font="14px sans-serif",y.style.padding="4px 6px",y.style.borderRadius="4px",y.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}for(const w of c){const y=r.entities.add({position:w,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(y);const C=i.Cartographic.fromCartesian(w),b=i.Math.toDegrees(C.longitude),v=i.Math.toDegrees(C.latitude),M=r.scene.globe.getHeight(new i.Cartographic(C.longitude,C.latitude,0))||0,P=i.Cartesian3.fromDegrees(b,v,M),L=r.entities.add({polyline:{positions:[P,w],width:l,material:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.groundLineEntities.push(L)}for(let w=1;w<c.length;w++){const y=c[w-1],C=c[w],b=r.entities.add({polyline:{positions:[y,C],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.segmentEntities.push(b);const v=i.Cartographic.fromCartesian(y),M=i.Cartographic.fromCartesian(C),L=new i.EllipsoidGeodesic(v,M).surfaceDistance,E=new i.Cartesian3((y.x+C.x)/2,(y.y+C.y)/2,(y.z+C.z)/2),I=i.Cartographic.fromCartesian(E),D=t.id+`_seg_${w-1}`;this.segmentLabelIds.push(D),this.htmlLabelPool.add({text:`${L.toFixed(2)} m`},{id:D,lon:i.Math.toDegrees(I.longitude),lat:i.Math.toDegrees(I.latitude),height:I.height||0,theme:"measure-horizontal-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}let d=0;for(let w=1;w<c.length;w++){const y=i.Cartographic.fromCartesian(c[w-1]),C=i.Cartographic.fromCartesian(c[w]),b=new i.EllipsoidGeodesic(y,C);d+=b.surfaceDistance}const u=c[c.length-1],m=i.Cartographic.fromCartesian(u),g=t.id+"_total";this.totalLabelId=g,this.htmlLabelPool.add({text:`${d.toFixed(2)} m`},{id:g,lon:i.Math.toDegrees(m.longitude),lat:i.Math.toDegrees(m.latitude),height:m.height||0,theme:"measure-horizontal-total",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}}class Ve{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"labelEntity",null);h(this,"positions",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"previewLabelId",null);h(this,"baseCarto",null);h(this,"baseUp",null);h(this,"tempPoints",[]);h(this,"previewPointEntity",null);h(this,"previewEntity",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-vertical",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var n,l,c,d,u;const s=i.camera.getPickRay(r.position);let o=s?i.scene.globe.pick(s,i.scene):null;if(o||(o=i.camera.pickEllipsoid(r.position,e.Ellipsoid.WGS84)),o||(o=i.scene.pickPosition(r.position)),!!o)if(this.positions.length===0){const m=e.Cartographic.fromCartesian(o);this.baseCarto=new e.Cartographic(m.longitude,m.latitude,0);const g=e.Ellipsoid.WGS84.cartographicToCartesian(this.baseCarto);this.baseUp=e.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto),this.positions.push(g);const p=i.entities.add({position:g,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(p);const f=t.lineColor||t.color||e.Color.CYAN,w=((l=(n=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:l.call(n,.9))||e.Color.RED;this.previewEntity=i.entities.add({polyline:{positions:[g,g],width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}})}else{if(!this.baseCarto||!this.baseUp)return;const m=this.positions[0],g=i.camera.getPickRay(r.position);if(!g)return;const p=g.origin,f=e.Cartesian3.normalize(g.direction,new e.Cartesian3),w=m,y=this.baseUp,C=e.Cartesian3.subtract(p,w,new e.Cartesian3),b=e.Cartesian3.dot(f,f),v=-e.Cartesian3.dot(f,y),M=e.Cartesian3.dot(y,y),P=-e.Cartesian3.dot(f,C),L=e.Cartesian3.dot(y,C),E=b*M-v*v;if(Math.abs(E)<1e-6)return;const I=(b*L-v*P)/E,D=e.Cartesian3.add(w,e.Cartesian3.multiplyByScalar(y,I,new e.Cartesian3),new e.Cartesian3);this.positions[1]=D,this.stop(),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewPointEntity&&(this.viewer.entities.remove(this.previewPointEntity),this.previewPointEntity=null);const A=t.lineColor||t.color||e.Color.CYAN,T=((d=(c=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:d.call(c,.9))||e.Color.RED;this.entity=i.entities.add({polyline:{positions:[m,D],width:t.width||3,material:A,depthFailMaterial:new e.PolylineDashMaterialProperty({color:T,dashLength:12,dashPattern:255})}});const S=i.entities.add({position:D,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(S);const x=this.baseCarto,$=e.Cartographic.fromCartesian(D),F=Math.abs(($.height||0)-(x.height||0)),O=new e.Cartesian3((this.positions[0].x+this.positions[1].x)/2,(this.positions[0].y+this.positions[1].y)/2,(this.positions[0].z+this.positions[1].z)/2),R=e.Cartographic.fromCartesian(O);this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null);const Y=this.htmlLabelId||`measure_vertical_${Date.now()}`;this.htmlLabelId=Y,this.htmlLabelPool.add({text:`${F.toFixed(2)} m`},{id:Y,lon:e.Math.toDegrees(R.longitude),lat:e.Math.toDegrees(R.latitude),height:R.height||0,theme:"measure-vertical",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const V={entity:this.entity,label:this.labelEntity,positions:this.positions,vertical:F,clear:()=>this.clear()};(u=t.onComplete)==null||u.call(t,V)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var D,A;if(this.positions.length<1)return;if(!this.baseCarto||!this.baseUp){const T=e.Cartographic.fromCartesian(this.positions[0]);this.baseCarto=new e.Cartographic(T.longitude,T.latitude,T.height||0),this.baseUp=e.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto)}const s=this.positions[0],o=i.camera.getPickRay(r.endPosition);if(!o)return;const n=o.origin,l=e.Cartesian3.normalize(o.direction,new e.Cartesian3),c=s,d=this.baseUp,u=e.Cartesian3.subtract(n,c,new e.Cartesian3),m=e.Cartesian3.dot(l,l),g=-e.Cartesian3.dot(l,d),p=e.Cartesian3.dot(d,d),f=-e.Cartesian3.dot(l,u),w=e.Cartesian3.dot(d,u),y=m*p-g*g;if(Math.abs(y)<1e-6)return;const C=(m*w-g*f)/y,b=e.Cartesian3.add(c,e.Cartesian3.multiplyByScalar(d,C,new e.Cartesian3),new e.Cartesian3);if(this.positions[1]=b,!this.previewEntity){const T=t.lineColor||t.color||e.Color.CYAN,S=((A=(D=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:A.call(D,.9))||e.Color.RED;this.previewEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>this.positions.length<2?[]:[this.positions[0],this.positions[1]],!1),width:t.width||3,material:T,depthFailMaterial:new e.PolylineDashMaterialProperty({color:S,dashLength:12,dashPattern:255})}})}this.previewPointEntity?this.previewPointEntity.position=b:this.previewPointEntity=i.entities.add({position:b,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});const v=this.baseCarto,M=e.Cartographic.fromCartesian(b),P=Math.abs((M.height||0)-(v.height||0)),L=new e.Cartesian3((this.positions[0].x+b.x)/2,(this.positions[0].y+b.y)/2,(this.positions[0].z+b.z)/2),E=e.Cartographic.fromCartesian(L),I=this.previewLabelId||"measure_vertical_preview";this.previewLabelId=I,this.htmlLabelPool.add({text:`${P.toFixed(2)} m`},{id:I,lon:e.Math.toDegrees(E.longitude),lat:e.Math.toDegrees(E.latitude),height:E.height||0,theme:"measure-vertical",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.entity&&(this.viewer.entities.remove(this.entity),this.entity=null),this.labelEntity&&(this.viewer.entities.remove(this.labelEntity),this.labelEntity=null),this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.previewPointEntity&&(this.viewer.entities.remove(this.previewPointEntity),this.previewPointEntity=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.positions=[]}rehydrate(t,e){var v,M;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.CYAN,n=((M=(v=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:M.call(v,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(P=>new i.Cartesian3(P[0],P[1],P[2]));if(c.length<2)return;if(!this.htmlLabelPool){const P=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,P),this.htmlLabelPool.registerTheme("measure-vertical",{createElement:(L,E)=>{var I;L.innerHTML=String(((I=E==null?void 0:E.data)==null?void 0:I.text)||""),L.style.background="rgba(0,0,0,0.6)",L.style.color="#fff",L.style.font="14px sans-serif",L.style.padding="4px 6px",L.style.borderRadius="4px",L.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}const d=c[0],u=c[1],m=r.entities.add({position:d,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}}),g=r.entities.add({position:u,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(m),this.tempPoints.push(g),this.entity=r.entities.add({polyline:{positions:[d,u],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});const p=i.Cartographic.fromCartesian(d),f=i.Cartographic.fromCartesian(u),w=Math.abs((f.height||0)-(p.height||0)),y=new i.Cartesian3((d.x+u.x)/2,(d.y+u.y)/2,(d.z+u.z)/2),C=i.Cartographic.fromCartesian(y),b=t.id+"_label";this.htmlLabelId=b,this.htmlLabelPool.add({text:`${w.toFixed(2)} m`},{id:b,lon:i.Math.toDegrees(C.longitude),lat:i.Math.toDegrees(C.latitude),height:C.height||0,theme:"measure-vertical",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}}class We{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"positions",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"segmentEntities",[]);h(this,"angleMarkerEntities",[]);h(this,"pointEntities",[]);h(this,"segmentLabelIds",[]);h(this,"angleLabelIds",[]);h(this,"previewLabelId",null);h(this,"previewSegmentEntities",[]);h(this,"previewAngleMarkerEntities",[]);h(this,"previewPointEntity",null);h(this,"previewLow",null);h(this,"previewHigh",null);h(this,"previewThird",null);h(this,"previewMarkerP1",null);h(this,"previewMarkerP2",null);h(this,"previewMarkerCorner",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-triangle",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-seg",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-angle",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var n,l,c;const s=i.scene.pickPosition(r.position);if(!s)return;this.positions.push(s);const o=i.entities.add({position:s,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});if(this.pointEntities.push(o),this.positions.length===2){this.stop(),this.previewSegmentEntities.forEach(Z=>i.entities.remove(Z)),this.previewSegmentEntities=[],this.previewAngleMarkerEntities.forEach(Z=>i.entities.remove(Z)),this.previewAngleMarkerEntities=[],this.previewPointEntity&&(i.entities.remove(this.previewPointEntity),this.previewPointEntity=null);const d=e.Cartographic.fromCartesian(this.positions[0]),u=e.Cartographic.fromCartesian(this.positions[1]),m=d.height||0,g=u.height||0,p=m<=g?this.positions[0]:this.positions[1],f=m>g?this.positions[0]:this.positions[1],w=e.Cartographic.fromCartesian(p);e.Cartographic.fromCartesian(f);const y=Math.max(m,g),C=e.Cartesian3.fromDegrees(e.Math.toDegrees(w.longitude),e.Math.toDegrees(w.latitude),y),b=t.lineColor||t.color||e.Color.YELLOW,v=((l=(n=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:l.call(n,.9))||e.Color.RED,M=i.entities.add({polyline:{positions:[p,C],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}}),P=i.entities.add({polyline:{positions:[C,f],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}}),L=i.entities.add({polyline:{positions:[p,f],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}});this.segmentEntities.push(M,P,L);const E=e.Cartesian3.distance(p,C),I=e.Cartesian3.distance(C,f),D=e.Cartesian3.distance(p,f),A=new e.Cartesian3((p.x+C.x)/2,(p.y+C.y)/2,(p.z+C.z)/2),T=new e.Cartesian3((C.x+f.x)/2,(C.y+f.y)/2,(C.z+f.z)/2),S=new e.Cartesian3((p.x+f.x)/2,(p.y+f.y)/2,(p.z+f.z)/2),x=e.Cartographic.fromCartesian(A),$=e.Cartographic.fromCartesian(T),F=e.Cartographic.fromCartesian(S),O="measure_triangle_seg_v",R="measure_triangle_seg_h",Y="measure_triangle_seg_hyp";this.segmentLabelIds=[O,R,Y],this.htmlLabelPool.add({text:`${E.toFixed(2)} m`},{id:O,lon:e.Math.toDegrees(x.longitude),lat:e.Math.toDegrees(x.latitude),height:x.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${I.toFixed(2)} m`},{id:R,lon:e.Math.toDegrees($.longitude),lat:e.Math.toDegrees($.latitude),height:$.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${D.toFixed(2)} m`},{id:Y,lon:e.Math.toDegrees(F.longitude),lat:e.Math.toDegrees(F.latitude),height:F.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const V=e.Cartesian3.subtract(f,p,new e.Cartesian3),j=e.Cartesian3.subtract(C,p,new e.Cartesian3),W=e.Cartesian3.subtract(C,f,new e.Cartesian3),H=e.Cartesian3.subtract(p,f,new e.Cartesian3),ne=e.Cartesian3.dot(V,j),K=Math.sqrt(e.Cartesian3.dot(V,V))*Math.sqrt(e.Cartesian3.dot(j,j)),ce=e.Cartesian3.dot(W,H),ue=Math.sqrt(e.Cartesian3.dot(W,W))*Math.sqrt(e.Cartesian3.dot(H,H)),z=Math.acos(Math.min(Math.max(ne/(K||1),-1),1)),oe=Math.acos(Math.min(Math.max(ce/(ue||1),-1),1)),se=e.Cartographic.fromCartesian(p),q=e.Cartographic.fromCartesian(f),ee="measure_triangle_angle_a",de="measure_triangle_angle_b";this.angleLabelIds=[ee,de],this.htmlLabelPool.add({text:`${(z*180/Math.PI).toFixed(2)}°`},{id:ee,lon:e.Math.toDegrees(se.longitude),lat:e.Math.toDegrees(se.latitude),height:se.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${(oe*180/Math.PI).toFixed(2)}°`},{id:de,lon:e.Math.toDegrees(q.longitude),lat:e.Math.toDegrees(q.latitude),height:q.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const be=Math.max(.01,Math.min(.5,t.angleMarkerRatio??.2)),X=Math.min(E,I)*be;if(E>.001&&I>.001){const Z=e.Cartesian3.normalize(e.Cartesian3.subtract(p,C,new e.Cartesian3),new e.Cartesian3),pe=e.Cartesian3.normalize(e.Cartesian3.subtract(f,C,new e.Cartesian3),new e.Cartesian3),te=new e.Cartesian3(C.x+Z.x*X,C.y+Z.y*X,C.z+Z.z*X),k=new e.Cartesian3(C.x+pe.x*X,C.y+pe.y*X,C.z+pe.z*X),Q=new e.Cartesian3(C.x+Z.x*X+pe.x*X,C.y+Z.y*X+pe.y*X,C.z+Z.z*X+pe.z*X),re=i.entities.add({polyline:{positions:[te,Q],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}}),Fe=i.entities.add({polyline:{positions:[k,Q],width:t.width||3,material:b,depthFailMaterial:new e.PolylineDashMaterialProperty({color:v,dashLength:12,dashPattern:255})}});this.angleMarkerEntities.push(re,Fe)}this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null);const J={entity:this.segmentEntities,positions:[p,f,C],lengths:{vertical:E,horizontal:I,hypotenuse:D},angles:{acuteA:z,acuteB:oe},clear:()=>this.clear()};(c=t.onComplete)==null||c.call(t,J)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var oe,se;if(this.positions.length!==1)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;const o=e.Cartographic.fromCartesian(this.positions[0]),n=e.Cartographic.fromCartesian(s),l=o.height||0,c=n.height||0,d=l<=c?this.positions[0]:s,u=l>c?this.positions[0]:s,m=e.Cartographic.fromCartesian(d),g=Math.max(l,c),p=e.Cartesian3.fromDegrees(this.Cesium.Math.toDegrees(m.longitude),this.Cesium.Math.toDegrees(m.latitude),g);this.previewLow=d,this.previewHigh=u,this.previewThird=p;const f=t.lineColor||t.color||e.Color.YELLOW,w=((se=(oe=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:se.call(oe,.9))||e.Color.RED;if(this.previewPointEntity?this.previewPointEntity.position=s:this.previewPointEntity=i.entities.add({position:s,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}}),!this.previewSegmentEntities.length){const q=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewLow||!this.previewThird?[]:[this.previewLow,this.previewThird],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}}),ee=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewThird||!this.previewHigh?[]:[this.previewThird,this.previewHigh],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}}),de=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewLow||!this.previewHigh?[]:[this.previewLow,this.previewHigh],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}});this.previewSegmentEntities.push(q,ee,de)}const y=e.Cartesian3.distance(d,p),C=e.Cartesian3.distance(p,u),b=e.Cartesian3.distance(d,u),v=e.Cartesian3.subtract(u,d,new e.Cartesian3),M=e.Cartesian3.subtract(p,d,new e.Cartesian3),P=e.Cartesian3.subtract(p,u,new e.Cartesian3),L=e.Cartesian3.subtract(d,u,new e.Cartesian3),E=e.Cartesian3.dot(v,M),I=Math.sqrt(e.Cartesian3.dot(v,v))*Math.sqrt(e.Cartesian3.dot(M,M)),D=e.Cartesian3.dot(P,L),A=Math.sqrt(e.Cartesian3.dot(P,P))*Math.sqrt(e.Cartesian3.dot(L,L)),T=Math.acos(Math.min(Math.max(E/(I||1),-1),1)),S=Math.acos(Math.min(Math.max(D/(A||1),-1),1)),x=new e.Cartesian3((d.x+p.x)/2,(d.y+p.y)/2,(d.z+p.z)/2),$=new e.Cartesian3((p.x+u.x)/2,(p.y+u.y)/2,(p.z+u.z)/2),F=new e.Cartesian3((d.x+u.x)/2,(d.y+u.y)/2,(d.z+u.z)/2),O=e.Cartographic.fromCartesian(x),R=e.Cartographic.fromCartesian($),Y=e.Cartographic.fromCartesian(F),V=e.Cartographic.fromCartesian(d),j=e.Cartographic.fromCartesian(u),W="measure_triangle_seg_v",H="measure_triangle_seg_h",ne="measure_triangle_seg_hyp",K="measure_triangle_angle_a",ce="measure_triangle_angle_b";this.segmentLabelIds.length===0&&(this.segmentLabelIds=[W,H,ne]),this.angleLabelIds.length===0&&(this.angleLabelIds=[K,ce]),this.htmlLabelPool.add({text:`${y.toFixed(2)} m`},{id:W,lon:e.Math.toDegrees(O.longitude),lat:e.Math.toDegrees(O.latitude),height:O.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${C.toFixed(2)} m`},{id:H,lon:e.Math.toDegrees(R.longitude),lat:e.Math.toDegrees(R.latitude),height:R.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${b.toFixed(2)} m`},{id:ne,lon:e.Math.toDegrees(Y.longitude),lat:e.Math.toDegrees(Y.latitude),height:Y.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${(T*180/Math.PI).toFixed(2)}°`},{id:K,lon:e.Math.toDegrees(V.longitude),lat:e.Math.toDegrees(V.latitude),height:V.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${(S*180/Math.PI).toFixed(2)}°`},{id:ce,lon:e.Math.toDegrees(j.longitude),lat:e.Math.toDegrees(j.latitude),height:j.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const ue=Math.max(.01,Math.min(.5,t.angleMarkerRatio??.2)),z=Math.min(y,C)*ue;if(y>.001&&C>.001){const q=e.Cartesian3.normalize(e.Cartesian3.subtract(d,p,new e.Cartesian3),new e.Cartesian3),ee=e.Cartesian3.normalize(e.Cartesian3.subtract(u,p,new e.Cartesian3),new e.Cartesian3),de=new e.Cartesian3(p.x+q.x*z,p.y+q.y*z,p.z+q.z*z),be=new e.Cartesian3(p.x+ee.x*z,p.y+ee.y*z,p.z+ee.z*z),X=new e.Cartesian3(p.x+q.x*z+ee.x*z,p.y+q.y*z+ee.y*z,p.z+q.z*z+ee.z*z);if(this.previewMarkerP1=de,this.previewMarkerP2=be,this.previewMarkerCorner=X,!this.previewAngleMarkerEntities.length){const J=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewMarkerP1||!this.previewMarkerCorner?[]:[this.previewMarkerP1,this.previewMarkerCorner],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}}),Z=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewMarkerP2||!this.previewMarkerCorner?[]:[this.previewMarkerP2,this.previewMarkerCorner],!1),width:t.width||3,material:f,depthFailMaterial:new e.PolylineDashMaterialProperty({color:w,dashLength:12,dashPattern:255})}});this.previewAngleMarkerEntities.push(J,Z)}}},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.segmentEntities.forEach(t=>this.viewer.entities.remove(t)),this.segmentEntities=[],this.angleMarkerEntities.forEach(t=>this.viewer.entities.remove(t)),this.angleMarkerEntities=[],this.pointEntities.forEach(t=>this.viewer.entities.remove(t)),this.pointEntities=[],this.previewSegmentEntities.forEach(t=>this.viewer.entities.remove(t)),this.previewSegmentEntities=[],this.previewAngleMarkerEntities.forEach(t=>this.viewer.entities.remove(t)),this.previewAngleMarkerEntities=[],this.previewPointEntity&&(this.viewer.entities.remove(this.previewPointEntity),this.previewPointEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.segmentLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice()),this.angleLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.angleLabelIds.slice()),this.segmentLabelIds=[],this.angleLabelIds=[],this.positions=[]}rehydrate(t,e){var Z,pe;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.YELLOW,n=((pe=(Z=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:pe.call(Z,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(te=>new i.Cartesian3(te[0],te[1],te[2]));if(c.length<2)return;if(!this.htmlLabelPool){const te=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,te),this.htmlLabelPool.registerTheme("measure-triangle",{createElement:(k,Q)=>{var re;k.innerHTML=String(((re=Q==null?void 0:Q.data)==null?void 0:re.text)||""),k.style.background="rgba(0,0,0,0.6)",k.style.color="#fff",k.style.font="14px sans-serif",k.style.padding="4px 6px",k.style.borderRadius="4px",k.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-seg",{createElement:(k,Q)=>{var re;k.innerHTML=String(((re=Q==null?void 0:Q.data)==null?void 0:re.text)||""),k.style.background="rgba(0,0,0,0.6)",k.style.color="#fff",k.style.font="14px sans-serif",k.style.padding="4px 6px",k.style.borderRadius="4px",k.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-triangle-angle",{createElement:(k,Q)=>{var re;k.innerHTML=String(((re=Q==null?void 0:Q.data)==null?void 0:re.text)||""),k.style.background="rgba(0,0,0,0.6)",k.style.color="#fff",k.style.font="14px sans-serif",k.style.padding="4px 6px",k.style.borderRadius="4px",k.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}const d=i.Cartographic.fromCartesian(c[0]),u=i.Cartographic.fromCartesian(c[1]),m=d.height||0,g=u.height||0,p=m<=g?c[0]:c[1],f=m>g?c[0]:c[1],w=r.entities.add({position:p,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}}),y=r.entities.add({position:f,point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.pointEntities.push(w,y);const C=i.Cartographic.fromCartesian(p),b=Math.max(m,g),v=i.Cartesian3.fromDegrees(i.Math.toDegrees(C.longitude),i.Math.toDegrees(C.latitude),b),M=r.entities.add({polyline:{positions:[p,v],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}}),P=r.entities.add({polyline:{positions:[v,f],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}}),L=r.entities.add({polyline:{positions:[p,f],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.segmentEntities.push(M,P,L);const E=i.Cartesian3.distance(p,v),I=i.Cartesian3.distance(v,f),D=i.Cartesian3.distance(p,f),A=new i.Cartesian3((p.x+v.x)/2,(p.y+v.y)/2,(p.z+v.z)/2),T=new i.Cartesian3((v.x+f.x)/2,(v.y+f.y)/2,(v.z+f.z)/2),S=new i.Cartesian3((p.x+f.x)/2,(p.y+f.y)/2,(p.z+f.z)/2),x=i.Cartographic.fromCartesian(A),$=i.Cartographic.fromCartesian(T),F=i.Cartographic.fromCartesian(S),O=t.id+"_tri_v",R=t.id+"_tri_h",Y=t.id+"_tri_hyp";this.segmentLabelIds=[O,R,Y],this.htmlLabelPool.add({text:`${E.toFixed(2)} m`},{id:O,lon:i.Math.toDegrees(x.longitude),lat:i.Math.toDegrees(x.latitude),height:x.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${I.toFixed(2)} m`},{id:R,lon:i.Math.toDegrees($.longitude),lat:i.Math.toDegrees($.latitude),height:$.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${D.toFixed(2)} m`},{id:Y,lon:i.Math.toDegrees(F.longitude),lat:i.Math.toDegrees(F.latitude),height:F.height||0,theme:"measure-triangle-seg",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const V=i.Cartesian3.subtract(f,p,new i.Cartesian3),j=i.Cartesian3.subtract(v,p,new i.Cartesian3),W=i.Cartesian3.subtract(v,f,new i.Cartesian3),H=i.Cartesian3.subtract(p,f,new i.Cartesian3),ne=i.Cartesian3.dot(V,j),K=Math.sqrt(i.Cartesian3.dot(V,V))*Math.sqrt(i.Cartesian3.dot(j,j)),ce=i.Cartesian3.dot(W,H),ue=Math.sqrt(i.Cartesian3.dot(W,W))*Math.sqrt(i.Cartesian3.dot(H,H)),z=Math.acos(Math.min(Math.max(ne/(K||1),-1),1)),oe=Math.acos(Math.min(Math.max(ce/(ue||1),-1),1)),se=i.Cartographic.fromCartesian(p),q=i.Cartographic.fromCartesian(f),ee=s.labelText||{angle:"角度"},de=t.id+"_tri_angA",be=t.id+"_tri_angB";this.angleLabelIds=[de,be],this.htmlLabelPool.add({text:`${ee.angle}:${(z*180/Math.PI).toFixed(2)}°`},{id:de,lon:i.Math.toDegrees(se.longitude),lat:i.Math.toDegrees(se.latitude),height:se.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}}),this.htmlLabelPool.add({text:`${ee.angle}:${(oe*180/Math.PI).toFixed(2)}°`},{id:be,lon:i.Math.toDegrees(q.longitude),lat:i.Math.toDegrees(q.latitude),height:q.height||0,theme:"measure-triangle-angle",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const X=Math.max(.01,Math.min(.5,s.angleMarkerRatio??.2)),J=Math.min(E,I)*X;if(E>.001&&I>.001){const te=i.Cartesian3.normalize(i.Cartesian3.subtract(p,v,new i.Cartesian3),new i.Cartesian3),k=i.Cartesian3.normalize(i.Cartesian3.subtract(f,v,new i.Cartesian3),new i.Cartesian3),Q=new i.Cartesian3(v.x+te.x*J,v.y+te.y*J,v.z+te.z*J),re=new i.Cartesian3(v.x+k.x*J,v.y+k.y*J,v.z+k.z*J),Fe=new i.Cartesian3(v.x+te.x*J+k.x*J,v.y+te.y*J+k.y*J,v.z+te.z*J+k.z*J),Ar=r.entities.add({polyline:{positions:[Q,Fe],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}}),$r=r.entities.add({polyline:{positions:[re,Fe],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});this.angleMarkerEntities.push(Ar,$r)}}}class Ue{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"labelEntity",null);h(this,"positions",[]);h(this,"tempPoints",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"previewEntity",null);h(this,"previewPos",null);h(this,"previewLabelId",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-space",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var n,l,c;const s=i.scene.pickPosition(r.position);if(!s)return;this.positions.push(s);const o=i.entities.add({position:s,point:{pixelSize:8,color:t.pointColor||t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});if(this.tempPoints.push(o),this.positions.length===2){this.stop(),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null);const d=this.positions[0],u=this.positions[1],m=t.lineColor||t.color||e.Color.YELLOW,g=((l=(n=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:l.call(n,.9))||e.Color.RED;this.entity=i.entities.add({polyline:{positions:[d,u],width:t.width||3,material:m,depthFailMaterial:new e.PolylineDashMaterialProperty({color:g,dashLength:12,dashPattern:255})}});const p=e.Cartesian3.distance(d,u),f=u,w=e.Cartographic.fromCartesian(f),y=this.htmlLabelId||`measure_space_${Date.now()}`;this.htmlLabelId=y,this.htmlLabelPool.add({text:`${p.toFixed(2)} m`},{id:y,lon:e.Math.toDegrees(w.longitude),lat:e.Math.toDegrees(w.latitude),height:w.height||0,theme:"measure-space",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const C={entity:this.entity,label:this.labelEntity,positions:this.positions,distance:p,clear:()=>this.clear()};(c=t.onComplete)==null||c.call(t,C)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var g,p;if(this.positions.length!==1)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;this.previewPos=s;const o=this.positions[0],n=e.Cartesian3.distance(o,s),l=new e.Cartesian3((o.x+s.x)/2,(o.y+s.y)/2,(o.z+s.z)/2),c=e.Cartographic.fromCartesian(l),d=this.previewLabelId||"measure_space_preview";this.previewLabelId=d,this.htmlLabelPool.add({text:`${n.toFixed(2)} m`},{id:d,lon:e.Math.toDegrees(c.longitude),lat:e.Math.toDegrees(c.latitude),height:c.height||0,theme:"measure-space",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}});const u=t.lineColor||t.color||e.Color.YELLOW,m=((p=(g=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:p.call(g,.9))||e.Color.RED;this.previewEntity||(this.previewEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.positions.length?[]:[this.positions[0],this.previewPos],!1),width:t.width||3,material:u,depthFailMaterial:new e.PolylineDashMaterialProperty({color:m,dashLength:12,dashPattern:255})}}))},e.ScreenSpaceEventType.MOUSE_MOVE)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){this.stop(),this.entity&&(this.viewer.entities.remove(this.entity),this.entity=null),this.labelEntity&&(this.viewer.entities.remove(this.labelEntity),this.labelEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.positions=[]}rehydrate(t,e){var d,u;const i=this.Cesium,r=this.viewer,s=t.options||{},o=s.lineColor||s.color||i.Color.YELLOW,n=((u=(d=s.dashLineColor||s.lineColor||s.color||i.Color.RED).withAlpha)==null?void 0:u.call(d,.9))||i.Color.RED,l=s.width||3,c=(t.positions||[]).map(m=>new i.Cartesian3(m[0],m[1],m[2]));if(c.length){if(!this.htmlLabelPool){const m=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,m),this.htmlLabelPool.registerTheme("measure-space",{createElement:(g,p)=>{var f;g.innerHTML=String(((f=p==null?void 0:p.data)==null?void 0:f.text)||""),g.style.background="rgba(0,0,0,0.6)",g.style.color="#fff",g.style.font="14px sans-serif",g.style.padding="4px 6px",g.style.borderRadius="4px",g.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}if(c.length>=1){const m=r.entities.add({position:c[0],point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(m)}if(c.length>=2){const m=r.entities.add({position:c[1],point:{pixelSize:8,color:s.pointColor||s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(m),this.entity=r.entities.add({polyline:{positions:[c[0],c[1]],width:l,material:o,depthFailMaterial:new i.PolylineDashMaterialProperty({color:n,dashLength:12,dashPattern:255})}});const g=i.Cartesian3.distance(c[0],c[1]),p=i.Cartographic.fromCartesian(c[1]),f=t.id+"_label";this.htmlLabelId=f,this.htmlLabelPool.add({text:`${g.toFixed(2)} m`},{id:f,lon:i.Math.toDegrees(p.longitude),lat:i.Math.toDegrees(p.latitude),height:p.height||0,theme:"measure-space",show:!0,style:{pointerEvents:"none",userSelect:"none",cursor:"default"}})}}}}class Ke{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"labelEntity",null);h(this,"positions",[]);h(this,"tempPoints",[]);h(this,"primitive",null);h(this,"previewEntity",null);h(this,"previewPos",null);h(this,"edgeEntities",[]);h(this,"pointEntities",[]);h(this,"previewEdgeEntity",null);h(this,"previewPointEntities",[]);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);h(this,"previewLabelId",null);h(this,"segmentLabelIds",[]);h(this,"angleLabelIds",[]);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-area",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-seg",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-angle",{createElement:(s,o)=>{var n;s.innerHTML=String(((n=o==null?void 0:o.data)==null?void 0:n.text)||""),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var m,g;const s=i.scene.pickPosition(r.position);if(!s)return;this.positions.push(s);const o=i.entities.add({position:s,point:{pixelSize:8,color:t.color||e.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(o),this.primitive&&(i.scene.primitives.remove(this.primitive),this.primitive=null);const n=new e.PolygonHierarchy(this.positions.slice()),l=new e.PolygonGeometry({polygonHierarchy:n,vertexFormat:e.MaterialAppearance.VERTEX_FORMAT,perPositionHeight:!0,arcType:e.ArcType.NONE}),c=new e.GeometryInstance({geometry:l}),d=t.color||e.Color.YELLOW.withAlpha(.4),u=t.color&&t.color.withAlpha?t.color.withAlpha(.25):e.Color.RED.withAlpha(.4);if(this.primitive=new e.Primitive({geometryInstances:c,appearance:new e.MaterialAppearance({material:e.Material.fromType("Color",{color:d}),translucent:!0,closed:!0}),depthFailAppearance:new e.MaterialAppearance({material:e.Material.fromType("Color",{color:u}),translucent:!0,closed:!0})}),i.scene.primitives.add(this.primitive),this.positions.length>=2){if(this.edgeEntities.length){for(const C of this.edgeEntities)try{i.entities.remove(C)}catch{}this.edgeEntities=[]}const p=t.lineColor||t.color||e.Color.YELLOW,f=((g=(m=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:g.call(m,.9))||e.Color.RED,w=this.positions.concat([this.positions[0]]),y=i.entities.add({polyline:{positions:w,width:t.width||2,material:p,clampToGround:!1,arcType:e.ArcType.NONE,depthFailMaterial:new e.PolylineDashMaterialProperty({color:f,dashLength:12,dashPattern:255})}});this.edgeEntities.push(y)}},e.ScreenSpaceEventType.LEFT_CLICK),this.handler.setInputAction(r=>{var p,f;if(this.positions.length===0)return;const s=i.scene.pickPosition(r.endPosition);if(!s)return;this.previewPos=s;const o=this.positions.concat([s]),n=new e.Cartesian3(o.reduce((w,y)=>w+y.x,0)/o.length,o.reduce((w,y)=>w+y.y,0)/o.length,o.reduce((w,y)=>w+y.z,0)/o.length),c=new e.EllipsoidTangentPlane(n,e.Ellipsoid.WGS84).projectPointsOntoPlane(o);let d=0;for(let w=0;w<c.length;w++){const y=(w+1)%c.length;d+=c[w].x*c[y].y-c[y].x*c[w].y}d=Math.abs(d)/2;const u=e.Cartographic.fromCartesian(n),m=this.previewLabelId||"measure_area_preview";this.previewLabelId=m;const g=t.labelText||{area:"面积"};if(this.htmlLabelPool.add({text:`${g.area}:${d.toFixed(2)} m²`},{id:m,lon:e.Math.toDegrees(u.longitude),lat:e.Math.toDegrees(u.latitude),height:u.height||0,theme:"measure-area",show:!0}),!this.previewEntity){const w=t.color||e.Color.YELLOW.withAlpha(.4);this.previewEntity=i.entities.add({polygon:{hierarchy:new e.CallbackProperty(()=>{if(!this.previewPos||!this.positions.length)return;const M=this.positions.concat([this.previewPos]);return new e.PolygonHierarchy(M)},!1),material:w,perPositionHeight:!0,arcType:e.ArcType.NONE}});const y=t.lineColor||t.color||e.Color.YELLOW,C=((f=(p=t.dashLineColor||t.lineColor||t.color||e.Color.RED).withAlpha)==null?void 0:f.call(p,.9))||e.Color.RED;this.previewEdgeEntity=i.entities.add({polyline:{positions:new e.CallbackProperty(()=>!this.previewPos||!this.positions.length?[]:this.positions.concat([this.previewPos,this.positions[0]]),!1),width:t.width||2,material:y,clampToGround:!1,arcType:e.ArcType.NONE,depthFailMaterial:new e.PolylineDashMaterialProperty({color:C,dashLength:12,dashPattern:255})}});const b=t.pointColor||t.color||e.Color.YELLOW,v=i.entities.add({position:new e.CallbackProperty(()=>this.previewPos||this.positions[this.positions.length-1],!1),point:{pixelSize:8,color:b,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.previewPointEntities.push(v)}},e.ScreenSpaceEventType.MOUSE_MOVE),this.handler.setInputAction(()=>{var g;if(this.positions.length<3){this.stop();return}if(this.positions.length>=3){this.positions.pop();const p=this.tempPoints.pop();p&&this.viewer.entities.remove(p)}if(this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null),this.previewEdgeEntity&&(this.viewer.entities.remove(this.previewEdgeEntity),this.previewEdgeEntity=null),this.previewPointEntities.length){for(const p of this.previewPointEntities)try{this.viewer.entities.remove(p)}catch{}this.previewPointEntities=[]}this.previewPos=null,this.stop();const r=new e.Cartesian3(this.positions.reduce((p,f)=>p+f.x,0)/this.positions.length,this.positions.reduce((p,f)=>p+f.y,0)/this.positions.length,this.positions.reduce((p,f)=>p+f.z,0)/this.positions.length),o=new e.EllipsoidTangentPlane(r,e.Ellipsoid.WGS84).projectPointsOntoPlane(this.positions);let n=0;for(let p=0;p<o.length;p++){const f=(p+1)%o.length;n+=o[p].x*o[f].y-o[f].x*o[p].y}n=Math.abs(n)/2;const l=e.Cartographic.fromCartesian(r),c=this.htmlLabelId||`measure_area_${Date.now()}`;this.htmlLabelId=c;const d=t.labelText||{area:"面积",side:"边长",angle:"角度"};this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.htmlLabelPool.add({text:`${d.area}:${n.toFixed(2)} m²`},{id:c,lon:e.Math.toDegrees(l.longitude),lat:e.Math.toDegrees(l.latitude),height:l.height||0,theme:"measure-area",show:!0}),this.labelEntity=this.htmlLabelId;for(let p=0;p<this.positions.length;p++){const f=(p+1)%this.positions.length,w=this.positions[p],y=this.positions[f],C=e.Cartographic.fromCartesian(w),b=e.Cartographic.fromCartesian(y),M=new e.EllipsoidGeodesic(C,b).surfaceDistance,P=new e.Cartesian3((w.x+y.x)/2,(w.y+y.y)/2,(w.z+y.z)/2),L=e.Cartographic.fromCartesian(P),E=`measure_area_seg_${Date.now()}_${p}`;this.segmentLabelIds.push(E),this.htmlLabelPool.add({text:`${d.side}:${M.toFixed(2)} m`},{id:E,lon:e.Math.toDegrees(L.longitude),lat:e.Math.toDegrees(L.latitude),height:L.height||0,theme:"measure-area-seg",show:!0})}const u=o;for(let p=0;p<u.length;p++){const f=u[(p-1+u.length)%u.length],w=u[p],y=u[(p+1)%u.length],C=f.x-w.x,b=f.y-w.y,v=y.x-w.x,M=y.y-w.y,P=Math.sqrt(C*C+b*b),L=Math.sqrt(v*v+M*M);if(!P||!L)continue;const E=C/P*(v/L)+b/P*(M/L),I=Math.acos(Math.min(1,Math.max(-1,E)))*(180/Math.PI),D=e.Cartographic.fromCartesian(this.positions[p]),A=`measure_area_angle_${Date.now()}_${p}`;this.angleLabelIds.push(A),this.htmlLabelPool.add({text:`${d.angle}:${I.toFixed(2)} °`},{id:A,lon:e.Math.toDegrees(D.longitude),lat:e.Math.toDegrees(D.latitude),height:D.height||0,theme:"measure-area-angle",show:!0})}const m={entity:this.primitive,label:this.labelEntity,positions:this.positions,area:n,clear:()=>this.clear()};(g=t.onComplete)==null||g.call(t,m)},e.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)}stop(){this.handler&&(this.handler.destroy(),this.handler=null)}clear(){if(this.stop(),this.entity&&(this.viewer.entities.remove(this.entity),this.entity=null),this.primitive&&(this.viewer.scene.primitives.remove(this.primitive),this.primitive=null),this.edgeEntities.length){for(const t of this.edgeEntities)try{this.viewer.entities.remove(t)}catch{}this.edgeEntities=[]}if(this.pointEntities.length){for(const t of this.pointEntities)try{this.viewer.entities.remove(t)}catch{}this.pointEntities=[]}if(this.previewEntity&&(this.viewer.entities.remove(this.previewEntity),this.previewEntity=null,this.previewPos=null),this.previewEdgeEntity&&(this.viewer.entities.remove(this.previewEdgeEntity),this.previewEdgeEntity=null),this.previewPointEntities.length){for(const t of this.previewPointEntities)try{this.viewer.entities.remove(t)}catch{}this.previewPointEntities=[]}this.labelEntity&&(this.viewer.entities.remove(this.labelEntity),this.labelEntity=null),this.htmlLabelPool&&this.htmlLabelId&&(this.htmlLabelPool.removeByIds([this.htmlLabelId]),this.htmlLabelId=null),this.previewLabelId&&this.htmlLabelPool&&(this.htmlLabelPool.removeByIds([this.previewLabelId]),this.previewLabelId=null),this.segmentLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice()),this.angleLabelIds.length&&this.htmlLabelPool&&this.htmlLabelPool.removeByIds(this.angleLabelIds.slice()),this.segmentLabelIds=[],this.angleLabelIds=[],this.tempPoints.forEach(t=>this.viewer.entities.remove(t)),this.tempPoints=[],this.positions=[]}rehydrate(t,e){const i=this.Cesium,r=this.viewer,s=t.options||{},o=(t.positions||[]).map(M=>new i.Cartesian3(M[0],M[1],M[2]));if(o.length<3)return;if(!this.htmlLabelPool){const M=s.overlayContainerId||"html-label-container";this.htmlLabelPool=e||new B(i,r,M),this.htmlLabelPool.registerTheme("measure-area",{createElement:(P,L)=>{var E;P.innerHTML=String(((E=L==null?void 0:L.data)==null?void 0:E.text)||""),P.style.background="rgba(0,0,0,0.6)",P.style.color="#fff",P.style.font="14px sans-serif",P.style.padding="4px 6px",P.style.borderRadius="4px",P.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-seg",{createElement:(P,L)=>{var E;P.innerHTML=String(((E=L==null?void 0:L.data)==null?void 0:E.text)||""),P.style.background="rgba(0,0,0,0.6)",P.style.color="#fff",P.style.font="14px sans-serif",P.style.padding="4px 6px",P.style.borderRadius="4px",P.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}}),this.htmlLabelPool.registerTheme("measure-area-angle",{createElement:(P,L)=>{var E;P.innerHTML=String(((E=L==null?void 0:L.data)==null?void 0:E.text)||""),P.style.background="rgba(0,0,0,0.6)",P.style.color="#fff",P.style.font="14px sans-serif",P.style.padding="4px 6px",P.style.borderRadius="4px",P.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}for(const M of o){const P=r.entities.add({position:M,point:{pixelSize:8,color:s.color||i.Color.YELLOW,disableDepthTestDistance:Number.POSITIVE_INFINITY}});this.tempPoints.push(P)}const n=new i.Cartesian3(o.reduce((M,P)=>M+P.x,0)/o.length,o.reduce((M,P)=>M+P.y,0)/o.length,o.reduce((M,P)=>M+P.z,0)/o.length),c=new i.EllipsoidTangentPlane(n,i.Ellipsoid.WGS84).projectPointsOntoPlane(o);let d=0;for(let M=0;M<c.length;M++){const P=(M+1)%c.length;d+=c[M].x*c[P].y-c[P].x*c[M].y}d=Math.abs(d)/2;const u=i.Cartographic.fromCartesian(n),m=t.id+"_area";this.htmlLabelId=m;const g=s.labelText||{area:"面积",side:"边长",angle:"角度"};this.htmlLabelPool.add({text:`${g.area}:${d.toFixed(2)} m²`},{id:m,lon:i.Math.toDegrees(u.longitude),lat:i.Math.toDegrees(u.latitude),height:u.height||0,theme:"measure-area",show:!0});const p=new i.PolygonHierarchy(o),f=new i.PolygonGeometry({polygonHierarchy:p,vertexFormat:i.MaterialAppearance.VERTEX_FORMAT,perPositionHeight:!0}),w=new i.GeometryInstance({geometry:f}),y=s.color||i.Color.YELLOW.withAlpha(.4),C=s.color&&s.color.withAlpha?s.color.withAlpha(.25):i.Color.RED.withAlpha(.4),b=new i.Primitive({geometryInstances:w,appearance:new i.MaterialAppearance({material:i.Material.fromType("Color",{color:y}),translucent:!0,closed:!0}),depthFailAppearance:new i.MaterialAppearance({material:i.Material.fromType("Color",{color:C}),translucent:!0,closed:!0})});r.scene.primitives.add(b),this.primitive=b;for(let M=0;M<o.length;M++){const P=(M+1)%o.length,L=o[M],E=o[P],I=i.Cartographic.fromCartesian(L),D=i.Cartographic.fromCartesian(E),T=new i.EllipsoidGeodesic(I,D).surfaceDistance,S=new i.Cartesian3((L.x+E.x)/2,(L.y+E.y)/2,(L.z+E.z)/2),x=i.Cartographic.fromCartesian(S),$=t.id+`_area_seg_${M}`;this.segmentLabelIds.push($),this.htmlLabelPool.add({text:`${g.side}:${T.toFixed(2)} m`},{id:$,lon:i.Math.toDegrees(x.longitude),lat:i.Math.toDegrees(x.latitude),height:x.height||0,theme:"measure-area-seg",show:!0})}const v=c;for(let M=0;M<v.length;M++){const P=v[(M-1+v.length)%v.length],L=v[M],E=v[(M+1)%v.length],I=P.x-L.x,D=P.y-L.y,A=E.x-L.x,T=E.y-L.y,S=Math.sqrt(I*I+D*D),x=Math.sqrt(A*A+T*T);if(!S||!x)continue;const $=I/S*(A/x)+D/S*(T/x),F=Math.acos(Math.min(1,Math.max(-1,$)))*(180/Math.PI),O=i.Cartographic.fromCartesian(o[M]),R=t.id+`_area_angle_${M}`;this.angleLabelIds.push(R),this.htmlLabelPool.add({text:`${g.angle}:${F.toFixed(2)} °`},{id:R,lon:i.Math.toDegrees(O.longitude),lat:i.Math.toDegrees(O.latitude),height:O.height||0,theme:"measure-area-angle",show:!0})}}}class qe{constructor(t,e){h(this,"Cesium");h(this,"viewer");h(this,"handler",null);h(this,"entity",null);h(this,"positions",[]);h(this,"currentRadius",0);h(this,"labelEntity",null);h(this,"previewLabel",null);h(this,"ellipsePrimitive",null);h(this,"previewEntity",null);h(this,"isPrimitive",!1);h(this,"htmlLabelPool",null);h(this,"htmlLabelId",null);this.Cesium=t,this.viewer=e}start(t){this.clear();const e=this.Cesium,i=this.viewer;if(!this.htmlLabelPool){const r=t.overlayContainerId||"html-label-container";this.htmlLabelPool=new B(e,i,r),this.htmlLabelPool.registerTheme("measure-circle",{createElement:(s,o)=>{var l;const n=((l=o==null?void 0:o.data)==null?void 0:l.text)||"";s.innerHTML=String(n),s.style.background="rgba(0,0,0,0.6)",s.style.color="#fff",s.style.font="14px sans-serif",s.style.padding="4px 6px",s.style.borderRadius="4px",s.style.whiteSpace="pre"},options:{offset:{x:0,y:-10}}})}this.handler=new e.ScreenSpaceEventHandler(i.canvas),this.handler.setInputAction(r=>{var o;const s=i.scene.pickPosition(r.position);if(s&&(this.positions.push(s),this.positions.length===2)){this.stop();const n=this.positions[0],l=this.positions[1],c=e.Cartesian3.distance(n,l),d=Math.PI*c*c,u=2*Math.PI*c,m=t.labelText||{radius:"半径",area:"面积",circumference:"周长"},g=n;this.labelEntity?(this.labelEntity.position=g,this.labelEntity.label.text=`${m.radius}:${c.toFixed(2)} m
|
|
44
44
|
${m.area}:${d.toFixed(2)} m²
|
|
45
45
|
${m.circumference}:${u.toFixed(2)} m`):this.labelEntity=i.entities.add({position:g,label:{text:`${m.radius}:${c.toFixed(2)} m
|
|
46
46
|
${m.area}:${d.toFixed(2)} m²
|