map-ol-utils 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -691,7 +691,22 @@ const route = createRouteController({
691
691
  speed: 10,
692
692
  turnSpeed: 60,
693
693
  verticalSpeed: 1,
694
- edit: { mode: 'snap', pixelTolerance: 10 }
694
+ edit: { mode: 'snap', pixelTolerance: 10 },
695
+ onWaypointAdd(waypoint) {
696
+ console.log(
697
+ '新增航点',
698
+ waypoint.uuid,
699
+ waypoint.indexNo,
700
+ waypoint.longitude,
701
+ waypoint.latitude
702
+ )
703
+ },
704
+ onBeforeWaypointRemove(waypoint) {
705
+ return window.confirm(`删除航点 ${waypoint.indexNo}?`) // false 阻止删除
706
+ },
707
+ onWaypointRemove(waypoint) {
708
+ console.log('已删除普通航点', waypoint.uuid, waypoint.indexNo)
709
+ }
695
710
  })
696
711
 
697
712
  // 业务自己的按钮直接调用:
@@ -727,6 +742,20 @@ const unsubscribe = route.subscribe((state) => {
727
742
 
728
743
  本次接口统一移除了旧的绘制开关和多个模式切换方法,所有模式通过 `setMode()` 管理,所有编辑配置通过 `setEditConfig()` 更新。
729
744
 
745
+ ### 新增航点回调
746
+
747
+ 创建时传入 `onWaypointAdd(waypoint: RouteWaypoint)`,每次成功新增普通航点(地图点击打点、飞控打点(键盘、面板或 `addRouteWaypoint()`)或编辑插点)后同步调用一次。设置或修改起飞点不触发。编辑插点仅在拖动结束且去重通过后通知;修改起飞点、拖动已有点、调整高度、删除、清空、批量导入、重复位置拒绝与取消插点均不触发。
748
+
749
+ 回调参数与 `exportWaypoints()` 的单项格式一致,包含 `uuid`、当前 `indexNo`、经纬度、高度及业务字段,是新的顶层对象;嵌套对象仍须只读使用。只序列化本次新增点,不导出整条航线。回调内可清空、导入或销毁控制器。此前的同步状态订阅若已移除该点或销毁控制器,则不再通知失效航点。回调抛错向调用方传播,已完成的新增不会回滚。
750
+
751
+ ### 普通航点删除回调
752
+
753
+ `onBeforeWaypointRemove(waypoint: RouteWaypoint)` 在 `removeWaypoint()` 通过校验后、执行删除前同步调用;`onWaypointRemove(waypoint: RouteWaypoint)` 在删除成功、点线和编辑状态更新完成后同步调用。两者仅针对普通航点,参数都是航点顶层副本,`indexNo` 保留各自通知阶段删除前的序号。嵌套业务数据应只读使用。
754
+
755
+ 起飞点不能删除,尝试删除时返回 `false`,两个回调都不触发。非编辑模式、未选中点、其他航线、已删除的点或尚未结束拖动的临时插点,以及清空航线、销毁、导入替换和取消插点也不触发。
756
+
757
+ 删除前回调同步返回 `boolean | void`:只有返回 `false` 才阻止删除,返回 `true`、不返回值或未配置回调都继续删除。被阻止时 `removeWaypoint()` 返回 `false`,保留航点、选择和编辑交互,不触发 `onWaypointRemove`;回调自身造成的修改不会撤销。不支持异步返回,不等待 Promise。回调抛错会中止删除并向调用方传播;若回调清空、导入、销毁或切换模式,当前删除停止并返回 `false`。删除后回调可清空、导入或销毁;抛错向调用方传播,已完成的删除不回滚。删除过程的同步状态通知若已销毁控制器,则不再调用删除后回调。
758
+
730
759
  ### 状态订阅
731
760
 
732
761
  `getState(): RouteState` 返回普通数据快照。`subscribe(listener)` 立即通知一次初始状态,之后在数据、模式、选择、输入或实时飞机变化时通知,返回取消订阅函数;`destroy()` 自动清理订阅。
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("tdt-vts-core"),l=require("ol/format/MVT");l=s(l,1);let u=require("ol/layer/VectorTile");u=s(u,1);let d=require("ol/TileState");d=s(d,1);let f=require("ol/source/VectorTile");f=s(f,1);let p=require("mitt");p=s(p,1);let m=require("ol/source"),h=require("ol/layer/Tile");h=s(h,1);let g=require("ol/format"),_=require("ol/source/WMTS"),v=require("ol/tilegrid"),y=require("ol/layer"),b=require("ol/tilegrid/WMTS");b=s(b,1);let x=require("ol/Observable"),S=require("ol/layer/Image");S=s(S,1);let C=require("ol/source/Raster");C=s(C,1);let w=require("ol/Map");w=s(w,1);let T=require("ol/View");T=s(T,1);let E=require("ol/control"),D=require("gcoord");D=s(D,1);let O=require("ol"),k=require("ol/interaction"),A=require("ol/extent"),j=require("ol/events/condition"),M=require("ol/Feature");M=s(M,1);let N=require("ol/geom/Point");N=s(N,1);let P=require("ol/layer/Vector");P=s(P,1);let F=require("ol/source/Vector");F=s(F,1);let I=require("ol/style"),L=require("ol/interaction/Draw");L=s(L,1);let R=require("ol/sphere"),ee=require("ol/geom/LineString");ee=s(ee,1);let z=require("ol/interaction/Interaction");z=s(z,1);let B=require("ol/style/Circle");B=s(B,1);let V=require("ol/style/Fill");V=s(V,1);let H=require("ol/style/Icon");H=s(H,1);let U=require("ol/style/Stroke");U=s(U,1);let W=require("ol/style/Style");W=s(W,1);let G=require("ol/style/Text");G=s(G,1);let K=require("ol/Collection");K=s(K,1);let q=require("ol/interaction/Select");q=s(q,1);let J=require("ol/interaction/Translate");J=s(J,1);let Y=require("ol/interaction/Snap");Y=s(Y,1);let X=require("ol/format/GeoJSON");X=s(X,1);let Z=require("ol/geom"),te=require("ol/source/Cluster");te=s(te,1);let ne=/* @__PURE__ */ function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const re=async e=>{if(typeof e!=`string`)return e;if(!e.trim())throw TypeError(`style 地址不能为空`);let t=await fetch(e);if(!t.ok)throw Error(`加载 style 失败:HTTP ${t.status}`);return await t.json()},ie=e=>{if(!e.hosts?.length||e.hosts.some(e=>!e.trim()))throw TypeError(`hosts 不能为空`);let t=new c.TdtDecoderWorkerClient(e.restoreMode,e.decoderOptions),n=new l.default({layerName:`mvt:layer`}),r=new f.default({projection:`EPSG:3857`,minZoom:e.minZoom??1,maxZoom:e.maxZoom??18,tileSize:512,wrapX:!0,format:n,attributions:`© <a href="https://www.tianditu.gov.cn/" target="_blank" rel="noopener">天地图</a>`,tileUrlFunction(t){if(!t)return;let[n,r,i]=t;if(n!==void 0&&r!==void 0&&i!==void 0)return(0,c.createTdtVtsUrl)([n,r,i],{token:e.token,hosts:e.hosts,maxZoom:e.maxZoom??18,wrapX:!0})},tileLoadFunction(r,i){let a=r;a.setLoader(async(r,o,s)=>{let l=(0,c.redactTdtToken)(i);try{let o=await t.decode(i),c=n.readFeatures(o.buffer,{extent:r,featureProjection:s});a.setFeatures(c),e.diagnostics?.onDecoded?.(o.stats,l)}catch(t){let n=t instanceof Error?t:Error(String(t));e.diagnostics?.onError?.(n,l),console.error(`天地图私有 VTS 加载失败`,l,n),a.setState(d.default.ERROR)}})}}),i=r.dispose.bind(r);return r.dispose=()=>{t.dispose(),i()},{source:r,decoder:t}},ae=async e=>{let t=await re(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=ie({token:e.token,hosts:e.hosts,restoreMode:`auto`}),r=new u.default({declutter:!0,source:n}),i=r.dispose.bind(r);r.dispose=()=>{n.dispose(),i()};try{let{applyBackground:e,applyStyle:n}=await import(`ol-mapbox-style`),i=structuredClone(t);for(let e of i.layers)e.type===`symbol`&&e.layout?.[`text-font`]&&(e.layout[`text-font`]=[`sans-serif`]);return await Promise.all([n(r,i,{projection:`EPSG:4326`,source:`base-tdt-vector-tile`,updateSource:!1}),e(r,i)]),r}catch(e){throw r.dispose(),e}},oe=(0,p.default)();let Q;const se=e=>{Q=e},ce=()=>{Q=void 0},le=(e,t)=>{if(e.startsWith(`#`)){let n=e.replace(`#`,``);return n.length===3&&(n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]),`rgba(${parseInt(n.substring(0,2),16)}, ${parseInt(n.substring(2,4),16)}, ${parseInt(n.substring(4,6),16)}, ${t})`}return e},ue=()=>Q?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],de=e=>{let t=e=>!Array.isArray(e)||e.length===0?0:1+t(e[0]),n=e=>{if(!Array.isArray(e)||e.length<3)return!1;let t=e[0],n=e[e.length-1];return t[0]===n[0]&&t[1]===n[1]},r=e=>Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`,i=e=>Array.isArray(e)&&e.length>=2&&e.every(r),a=e=>Array.isArray(e)?(t(e)===2?[e]:e).every(e=>Array.isArray(e)&&e.length>=4&&n(e)&&e.every(r)):!1,o=t(e);try{return o<2||!e||e.length===0?`Invalid`:o===2&&i(e)?n(e)&&e.length>=4?`Polygon`:`LineString`:o===3&&Array.isArray(e)&&e.every(i)?a(e)?`Polygon`:e.every(e=>!n(e))?`MultiLineString`:`Invalid`:o===4&&Array.isArray(e)&&e.every(e=>a(e))?`MultiPolygon`:`Invalid`}catch(e){return console.error(`Error analyzing coordinates:`,e),`Invalid`}},fe=new g.WMTSCapabilities,pe=/* @__PURE__ */ new Map,me=async e=>{let t=pe.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=fe.read(await n.text());return pe.set(e,r),r},he=e=>async t=>{let{style:n,format:r,version:i,layerName:a,matrixSet:o}=t,[s,c]=a.split(`:`),l=`${e}/${s}/${c}/gwc/service/wmts?request=GetCapabilities`,u=await me(l),d=(0,_.optionsFromCapabilities)(u,{style:n||``,layer:c,version:i||`1.1.0`,format:r||`image/png`,matrixSet:o||`EPSG:4326`});if(!d)throw Error(`Unable to create TileLayer`);return new h.default({zIndex:3,className:a,source:new m.WMTS(d)})},ge=(e,t)=>{let n=t.get(`_selectInteraction`);n&&(e.removeInteraction(n),n.dispose(),t.unset(`_selectInteraction`));let r=t.get(`_resolutionChangeKey`);r&&((0,x.unByKey)(r),t.unset(`_resolutionChangeKey`));let i=t.get(`_dynamicMarkerTimer`);i!==void 0&&(clearTimeout(i),t.unset(`_dynamicMarkerTimer`)),t.getSource()?.dispose(),e.removeLayer(t),t.dispose()},_e=`c77eddc667c5bed016fded560baf93e7`,ve=(e=`hzsyvector_dark`)=>{let t={zIndex:-5,preload:1,minZoom:8,maxZoom:21,source:new m.XYZ({tileGrid:new v.TileGrid({tileSize:256,resolutions:[.00549933137253187,.00274966568626595,.00137483284313297,.000687416421566485,.000343708210783242,.000171854105391621,859270526958104e-19,429635263479052e-19,214817631739526e-19,107408815869763e-19,537044079348816e-20,268522039674407e-20,134261019837204e-20],origin:[118.122911693886,31.2869311022836],extent:[116.43263049006,28.6201742126026,123.705594256347,31.9765041681924]}),projection:`EPSG:4326`,urls:[`https://ywtg.citybrain.hangzhou.gov.cn/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9456/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9457/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9458/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9459/${e}/{z}/{y}/{x}`]}),properties:{_isBaseLayer:!0,_layerName:e}};return new y.Tile(t)},ye=(e,t=_e)=>{let[n,r]=e.split(`_`),i={preload:1,zIndex:-10,cacheSize:20240,properties:{_isBaseLayer:!0,_layerName:e},source:new m.WMTS({crossOrigin:`anonymous`,projection:`EPSG:4326`,wrapX:!0,layer:n,style:`default`,version:`1.0.0`,format:`image/png`,matrixSet:r,tileGrid:new b.default({tileSize:256,origin:[-180,90],matrixIds:[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`,`13`,`14`,`15`,`16`,`17`,`18`,`19`],resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625,.010986328125,.0054931640625,.00274658203125,.001373291015625,.0006866455078125,.00034332275390625,.000171661376953125,858306884765625e-19,4291534423828125e-20,21457672119140625e-21,10728836059570312e-21,5364418029785156e-21,2682209014892578e-21]}),url:`https://t{0-7}.tianditu.gov.cn/${e}/wmts?tk=${t}`})};return new y.Tile(i)},be=e=>({baseImgLayer:new y.Tile({className:`img-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCiaLayer:new y.Tile({className:`img-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2}),baseVecLayer:new y.Tile({className:`vec-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCvaLayer:new y.Tile({className:`vec-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2})}),xe=(e=`emap`,t=`3b0cdd02-c366-4363-b6de-081a9f12b364`)=>new y.Tile({preload:1,minZoom:4,maxZoom:20,zIndex:-10,cacheSize:20240,source:new m.XYZ({wrapX:!0,projection:`EPSG:4326`,crossOrigin:`anonymous`,url:`https://ditu{0-6}.zjzwfw.gov.cn/services/wmts/${e}/default/oss/getTile/{z}/{y}/{x}?token=${t}`})}),Se=e=>Q.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Ce=e=>{Q.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e).forEach(e=>{ge(Q,e)})},we=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),Te=(e,t,n,r={})=>{let i=new C.default({sources:[e],operationType:`image`,operation:(e,t)=>(((e,t)=>{let n=t.ratioArray,r=t.rgbColorArray;if(n&&r){let[t=0,i=0,a=0]=n;for(let n=0;n<e.length;n+=4){let o=e[n],s=e[n+1],c=e[n+2],l=o*t+s*i+c*a;e[n]=r[0]-l,e[n+1]=r[1]-l,e[n+2]=r[2]-l}}})(e[0].data,t),e[0]),threads:r.threads??we()});return i.on(`beforeoperations`,e=>{e.data.ratioArray=n,e.data.rgbColorArray=t}),i},Ee=(e,t,n,r={})=>new S.default({source:Te(e,t,n,r)}),De=(e=``)=>{Q&&Q.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>Q.removeOverlay(e))},Oe=()=>De(`_isAnimationMarker`),ke=(e,t)=>{Oe();let{width:n,height:r,lnglat:i,crsForm:a}=t,o=document.createElement(`div`),s=document.createElement(`img`);s.src=e,s.alt=``,n!==void 0&&(s.width=n),r!==void 0&&(s.height=r),o.append(s);let c=new O.Overlay({element:o,stopEvent:!1,positioning:`bottom-center`,position:D.default.transform([+i[0],+i[1]],a||D.default.WGS84,D.default.WGS84)});c.set(`_isAnimationMarker`,!0),Q.addOverlay(c)},Ae=(e={id:`popup-container`,positioning:`top-center`})=>new O.Overlay(Object.assign({element:document.getElementById(e.id)||void 0},e)),je=()=>{De(),Q.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},Me=()=>{De(),Q&&Q.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||ge(Q,e)})},Ne=()=>{De(),Q.getAllLayers().filter(e=>e.get(`_isVectorLayer`)).forEach(e=>{let t=e.get(`_selectInteraction`);t&&(t.dispatchEvent({type:`select`,selected:[],mapBrowserEvent:void 0,deselected:t.getFeatures().getArray()}),t.getFeatures().clear())})},Pe=e=>{let t=Q.getAllLayers().filter(e=>e.get(`_isVectorLayer`));if(t.length){let n=t.find(t=>t.get(`_uuidSet`).has(e)&&t.get(`_selectInteraction`));if(n){let t=(n.getSource()?.getFeatures()||[]).find(t=>t.get(`_uuid`)===e),r=n.get(`_selectInteraction`);if(r){let n=r.getFeatures().getArray();n.find(t=>t.get(`_uuid`)===e)||(r.dispatchEvent({type:`select`,deselected:n,selected:[t],mapBrowserEvent:void 0}),r.getFeatures().push(t))}}}};let $=[119.71512016971076,30.122490541963536];const Fe=(e={})=>{if(Q)return Q;let t=Ie(e);return se(t),t},Ie=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:$,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[ve()],constrainResolution:!1,smoothExtentConstraint:!1,tk:_e},e||{}),n=new w.default({view:new T.default(t),controls:(0,E.defaults)({zoom:!1,rotate:!1,attribution:!1}),interactions:(0,k.defaults)({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[ve()]});$=t.center||$,n.activeBaseLayer=t.baseLayer;let r=e=>n.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e);n.getLayerByName=r,n.removeLayerByName=e=>{let t=r(e);t&&ge(n,t)},n.changeLayersByNames=(e,t)=>{n.getAllLayers().filter(e=>t.includes(e.getClassName())).forEach(t=>t.setVisible(e?.includes(t.getClassName())))};let i,a;return n.on(`pointermove`,e=>{if(a=e.pixel,i!==void 0)return;let t=()=>{i=void 0;let e=n.getTargetElement();a&&e&&(e.style.cursor=n.hasFeatureAtPixel(a)?`pointer`:``)};i=typeof globalThis.requestAnimationFrame==`function`?globalThis.requestAnimationFrame(t):setTimeout(t,16)}),n.set(`_disposePointerMove`,()=>{i!==void 0&&(typeof globalThis.cancelAnimationFrame==`function`?globalThis.cancelAnimationFrame(i):clearTimeout(i),i=void 0)}),n},Le=()=>{if(!Q)return;let e=Q;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>ge(e,t)),e.setTarget(``),e.dispose(),ce()},Re=()=>Le(),ze=()=>Q,Be=(e=$)=>{Q&&Q.getView().animate({zoom:9.4,center:e,duration:1e3})},Ve=(e={center:$,isClearAll:!0})=>{Me(),Be(e.center||$)},He={padding:[50,50,50,50],duration:1e3},Ue=(e,t=Q,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=(0,A.boundingExtent)(e);r.fit(t,{...He,...n||{}})}},We=(e,t=Q,n)=>{t.getView().fit(e,{...He,...n||{}})},Ge=(e,t=Q,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...He,...n||{}})},Ke=(e,t)=>{let n=Q.getView(),r=n.getZoom();n.animate({center:e,duration:2e3}),t?n.animate({zoom:t-2,duration:1e3},{zoom:t,duration:1e3}):n.animate({zoom:r-2,duration:1e3},{zoom:r+2>12?12:r+2,duration:1e3})},qe=e=>new I.Text({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new I.Fill({color:`rgba(255, 255, 255, 0.8)`})}),Je=(e,t=!1)=>new I.Style({image:new I.Icon({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?qe(e):void 0}),Ye=(e,t)=>{let n=new M.default({geometry:new N.default([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(Je(e)),n},Xe=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new F.default;return e.forEach(e=>a.addFeature(Ye(e,t))),new P.default({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},Ze=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(Je({...t,img:t[n]},!1))})},Qe=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?Ze([e],Q.getView().getZoom()):e.setStyle(Je(r,t))},$e=e=>{e.forEach(e=>{Qe(e,!1)}),e.clear()},et=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=Xe(n,t),i=r.getSource().getFeatures(),a=Q.getView();return Ze(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>Ze(i,a.getZoom()))),r},tt=(e,t)=>{let n=Ye(e,t),r=new P.default({className:t.layerName||`ol-layer`,source:new F.default({features:[n]})});return Q.addLayer(r),{vectorLayer:r}},nt=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),oe.emit(`selected-feature`,n),e.set(`_hasActive`,!0),e.get(`_isDynamic`)){let t=r.getImage(),i=e.get(`_dynamicMarkerTimer`);i!==void 0&&clearTimeout(i);let a=setTimeout(()=>{e.unset(`_dynamicMarkerTimer`),oe.emit(`dynamic-marker`,Object.assign({},n.rawData||{},{lnglat:n.lnglat,style:n.style,crsForm:n.crsForm,width:t.getWidth(),height:t.getHeight()}))},1e3);e.set(`_dynamicMarkerTimer`,a)}if(e.get(`_isAutoFit`)){let e=Q.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:(0,A.getCenter)(t.getGeometry().getExtent())})}},rt=e=>{let t=new k.Select({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!(0,j.singleClick)(t))return!1;let n=!1;return Q.forEachFeatureAtPixel(t.pixel,()=>{n=!0},{layerFilter:t=>t===e}),n}});return t.on(`select`,t=>{let{selected:n,deselected:r}=t;if(n.length){let t=n[0];if(e.get(`_isClusterLayer`)){let n=t.get(`features`);n.length===1&&nt(e,n[0])}else nt(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),Q.addInteraction(t),e.set(`_selectInteraction`,t),t},it=(e,t,n)=>{let r=new k.Select({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];Qe(t,!1),n?.(t)}if(r.length){let e=r[0];Qe(e,!0),t?.(e)}}),r},at=e=>{let t=(0,R.getArea)(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},ot=e=>{let t=(0,R.getLength)(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},st=new I.Style({fill:new I.Fill({color:`rgba(255, 255, 255, 0.2)`}),stroke:new I.Stroke({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new I.Circle({radius:5,stroke:new I.Stroke({color:`rgba(0, 0, 0, 0.7)`}),fill:new I.Fill({color:`rgba(255, 255, 255, 0.2)`})})}),ct=/* @__PURE__ */ new WeakMap,lt=e=>{let t=ct.get(e);if(t)return t;let n=new I.Style({text:new I.Text({font:`14px`,fill:new I.Fill({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new I.Fill({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new I.RegularShape({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new I.Fill({color:`rgba(0, 0, 0, 0.7)`})})});return ct.set(e,n),n},ut=(e,t=st)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=at(r)):r.getType()===`LineString`&&(i=new N.default(r.getLastCoordinate()),a=ot(r)),i&&a){let t=lt(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},dt=(e=`Point`,t,n)=>new L.default({source:t.getSource(),type:e,style:n?e=>ut(e,void 0):void 0}),ft=({geometry:e,interaction:t,isDestroyed:n,vectorLayer:r,aircraftStyle:i,speed:a,turnSpeed:o,verticalSpeed:s,getLastWaypoint:c})=>{let l,u,d=0,f,p,m,h=0,g=0,_=/* @__PURE__ */ new Set,v=()=>{_.clear(),m!==void 0&&f?.cancelAnimationFrame(m),m=void 0},y=e=>{m=void 0;let n=t.getMap();if(!l||!n||!t.getActive()){v();return}let r=l,c=Math.min(Math.max(0,e-h)/1e3,.1);h=e;let u=Number(_.has(`turnRight`))-Number(_.has(`turnLeft`));d=(d+u*o*c+360)%360,i===void 0&&l.getStyle().getImage().setRotation(d*Math.PI/180);let p=Number(_.has(`forward`))-Number(_.has(`backward`)),g=Number(_.has(`right`))-Number(_.has(`left`));if(p||g){let e=n.getView(),t=(0,R.offset)(r.getGeometry().getCoordinates(),a*c,d*Math.PI/180+Math.atan2(g,p));if(r.getGeometry().setCoordinates(t),l!==r||(e.setCenter(t),l!==r))return}let b=Number(_.has(`ascend`))-Number(_.has(`descend`));r.set(`height`,Math.max(0,r.get(`height`)+b*s*c)),l===r&&(l.set(`heading`,d),l===r&&(l.changed(),l===r&&_.size&&m===void 0&&(m=f.requestAnimationFrame(y))))},b=()=>{g++,v(),p?.(),p=void 0,f=void 0;let e=u;if(u=void 0,l=void 0,e){let t=e.getSource();e.setMap(null),e.clearRenderer(),e.setSource(null),t?.clear(!0),t?.dispose()}c()?.set(`isAircraft`,!0,!0),n()||r.changed()};return{get aircraft(){return l},get heading(){return d},get revision(){return g},startRouteControl(){let n=t.getMap(),o=n?.getTargetElement(),s=n?.getSize();if(!n||!o||!s||s[0]<=0||s[1]<=0||!t.getActive())throw Error(`请先将启用的航点交互添加到已就绪的地图`);let m=n.getView(),h=++g,_=()=>{if(h!==g||t.getMap()!==n||n.getView()!==m||!t.getActive()||n.getTargetElement()!==o)throw Error(`飞行操控启动已取消`)};if(l)return l;d=0,n.renderSync(),_();let v=e.getLastCoordinate();return l=new M.default({geometry:new N.default(v),isAircraft:!0,heading:d,height:c()?.get(`extData`)?.height??0,speed:a}),l.setStyle(i??new I.Style({image:new I.Icon({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0})})),u=new P.default({source:new F.default({features:[l]})}),u.setMap(n),_(),n.on(`change:view`,b),f=o.ownerDocument.defaultView,p=()=>n.un(`change:view`,b),c()?.set(`isAircraft`,!1,!0),r.changed(),_(),l},setRouteControls(e){let n=[`forward`,`backward`,`left`,`right`,`turnLeft`,`turnRight`,`ascend`,`descend`];if(e.some(e=>!n.includes(e)))throw Error(`不支持的飞行动作`);l&&t.getActive()&&(_=new Set(e),_.size?m===void 0&&(h=f.performance.now(),m=f.requestAnimationFrame(y)):v())},stopRouteControl:b}},pt={KeyW:`forward`,KeyS:`backward`,KeyA:`left`,KeyD:`right`,KeyQ:`turnLeft`,KeyE:`turnRight`,KeyZ:`descend`,KeyC:`ascend`,Space:`waypoint`},mt=e=>e===`ascend`||e===`descend`,ht=(e,t)=>{let n=e.getTarget(),r=typeof t.container==`string`?(n?.ownerDocument??globalThis.document)?.getElementById(t.container):t.container;if(typeof t.container==`string`&&!r)throw Error(`找不到航线输入容器:${t.container}`);if(e.getMode()!==`control`&&e.getMode()!==`edit`)return()=>void 0;let i=(n??r)?.ownerDocument,a=i?.defaultView;if(!i||!a)return()=>{e.setRouteControls([]),e.setActiveControls([])};let o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map,c=!!t.keyboard&&!!n&&!n.hasAttribute(`tabindex`);c&&(n.tabIndex=0);let l=t=>e.getMode()===`control`||e.getMode()===`edit`&&mt(t),u=!!t.keyboard&&e.getMode()===`control`,d=/* @__PURE__ */ new Map,f={"background-color":t.activeStyle?.backgroundColor,"border-top-color":t.activeStyle?.borderColor,"border-right-color":t.activeStyle?.borderColor,"border-bottom-color":t.activeStyle?.borderColor,"border-left-color":t.activeStyle?.borderColor,color:t.activeStyle?.color},p=e=>{for(let[e,{original:t,applied:n}]of d){let r=new Set(e.style),i=[.../* @__PURE__ */ new Set([...n.keys(),...r])].map(t=>({property:t,value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)})).filter(({property:e,value:t,priority:i})=>n.has(e)!==r.has(e)||t!==n.get(e)?.value||i!==n.get(e)?.priority);e.style.cssText=t;for(let{property:t,value:n,priority:r}of i)e.style.setProperty(t,n,r)}if(d.clear(),t.activeStyle&&e.length)for(let t of r?.querySelectorAll(`button[data-route-control]`)??[]){if(t.disabled||!e.includes(t.dataset.routeControl))continue;let n=t.style.cssText;for(let[e,n]of Object.entries(f))typeof n==`string`&&t.style.setProperty(e,n,`important`);let r=new Map(Array.from(t.style,e=>[e,{value:t.style.getPropertyValue(e),priority:t.style.getPropertyPriority(e)}]));d.set(t,{original:n,applied:r})}},m=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];p(t),e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},h=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},g=()=>{if(!o.size&&!s.size)return;o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)h(t,n);m()},_=e=>{let t=e?.closest?.(`button[data-route-control]`);if(!t||t.disabled||!r?.contains(t))return;let n=t.dataset.routeControl;if(Object.values(pt).includes(n)&&l(n))return{button:t,action:n}},v=e=>!!e?.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),y=t=>{e.getMode()===`edit`&&mt(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},b=e=>{if(e.defaultPrevented||v(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){g();return}let n=_(e.target),a=!!n&&(e.code===`Space`||e.code===`Enter`),s=a?n.action:t.keyboard?pt[e.code]:void 0;if(!s||!l(s))return;let c=i.activeElement?.closest(`button`);(a||!c||(u||r?.contains(c))&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),m(),y(s)))},x=e=>{o.delete(e.code)&&(e.preventDefault(),m())},S=e=>{if(e.button!==0||i.hidden)return;let t=_(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}m()}},C=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),h(e.pointerId,t.button),m())},w=e=>{let t=_(e.target);t&&!i.hidden&&y(t.action)},T=e=>{v(e.target)&&g()},E=()=>{i.hidden&&g()},D=new Set(u?[]:[t.keyboard?n:void 0,r]);u&&i.addEventListener(`keydown`,b);for(let e of D)e?.addEventListener(`keydown`,b);return i.addEventListener(`keyup`,x,!0),i.addEventListener(`focusin`,T),i.addEventListener(`visibilitychange`,E),r&&(i.addEventListener(`pointerup`,C),i.addEventListener(`pointercancel`,C)),r?.addEventListener(`pointerdown`,S),r?.addEventListener(`lostpointercapture`,C),r?.addEventListener(`click`,w),()=>{u&&i.removeEventListener(`keydown`,b);for(let e of D)e?.removeEventListener(`keydown`,b);i.removeEventListener(`keyup`,x,!0),i.removeEventListener(`focusin`,T),i.removeEventListener(`visibilitychange`,E),r&&(i.removeEventListener(`pointerup`,C),i.removeEventListener(`pointercancel`,C)),r?.removeEventListener(`pointerdown`,S),r?.removeEventListener(`lostpointercapture`,C),r?.removeEventListener(`click`,w),g(),c&&n.getAttribute(`tabindex`)===`0`&&n.removeAttribute(`tabindex`)}},gt=()=>{let e=new W.default({image:new B.default({radius:9,fill:new V.default({color:`#22c55e`}),stroke:new U.default({color:`#fff`,width:2})}),text:new G.default({text:`起飞`,offsetY:-20,fill:new V.default({color:`#15803d`}),stroke:new U.default({color:`#fff`,width:3})}),zIndex:2}),t,n=new W.default({fill:new V.default({color:`rgba(59, 130, 246, .2)`}),stroke:new U.default({color:`#3b82f6`,width:3}),image:new B.default({radius:6,fill:new V.default({color:`#3b82f6`})})}),r=e=>(t??=new W.default({image:new H.default({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0}),zIndex:3}),t.getImage().setRotation((e.get(`heading`)??0)*Math.PI/180),t);return{style:n,lineStyle:n,takeoffStyle:t=>t.get(`isAircraft`)?[e,r(t)]:e,pointStyle:e=>e.get(`isAircraft`)?r(e):n,aircraftStyle:r}},_t=()=>{let e=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},vt=e=>e.map((e,t)=>{let[n,r]=e.getGeometry().getCoordinates(),i=e.get(`extData`)??{};return{...i,uuid:e.get(`uuid`),waylineId:i.waylineId??``,indexNo:t,pointSpeed:i.pointSpeed??0,height:i.height??0,gimbalPichAngle:i.gimbalPichAngle??0,direction:i.direction??e.get(`heading`)??0,shootType:i.shootType??``,supportLightType:i.supportLightType??``,longitude:n,latitude:r}}),yt=(e,{takeoffStyle:t,pointStyle:n})=>{if(!Array.isArray(e))throw Error(`航点必须为数组`);let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let t of e){if(!t||typeof t!=`object`)throw Error(`航点必须为对象`);if(t.uuid!==void 0){if(typeof t.uuid!=`string`||!t.uuid.trim())throw Error(`uuid 必须为非空白字符串`);if(i.has(t.uuid))throw Error(`导入航点存在重复 uuid`);i.add(t.uuid)}if(!Number.isInteger(t.indexNo)||t.indexNo<0)throw Error(`indexNo 必须为非负整数`);if(!Number.isFinite(t.longitude)||Math.abs(t.longitude)>180||!Number.isFinite(t.latitude)||Math.abs(t.latitude)>90)throw Error(`航点经纬度必须为有效的 EPSG:4326 坐标`);for(let e of[`direction`,`pointSpeed`,`gimbalPichAngle`])if(t[e]!==void 0&&!Number.isFinite(t[e]))throw Error(`${e} 必须为有限数值`);if(t.pointSpeed!==void 0&&t.pointSpeed<0)throw Error(`pointSpeed 不能为负数`);if(t.height!==void 0&&(!Number.isFinite(t.height)||t.height<0))throw Error(`height 必须为有限非负数`);if(t.waylineId!==void 0&&typeof t.waylineId!=`string`)throw Error(`waylineId 必须为字符串`);if(t.shootType!==void 0&&![``,`time`,`distance`,`none`].includes(t.shootType))throw Error(`不支持的 shootType`);if(t.supportLightType!==void 0&&(typeof t.supportLightType!=`string`||t.supportLightType!==``&&t.supportLightType.split(`,`).some(e=>![`ir`,`visable`].includes(e))))throw Error(`supportLightType 仅支持 ir、visable 或逗号分隔的组合`);let e=`${t.longitude},${t.latitude}`;if(r.has(e))throw Error(`导入航点存在重复位置`);r.add(e)}return[...e].sort((e,t)=>e.indexNo-t.indexNo).map((r,i)=>{let a={...r,height:r.height??0};delete a.uuid,delete a.indexNo,delete a.longitude,delete a.latitude;let o=new M.default({uuid:r.uuid??_t(),geometry:new N.default([r.longitude,r.latitude]),extData:a,heading:r.direction??0,isTakeoff:i===0,isAircraft:i===e.length-1});return o.setStyle(i===0?t:n),o})},bt=(e={},t={mode:`midpoint`,pixelTolerance:10})=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`编辑配置必须为对象`);let{mode:n=t.mode,pixelTolerance:r=t.pixelTolerance}=e;if(n!==`midpoint`&&n!==`snap`)throw Error(`编辑模式必须为 midpoint 或 snap`);if(!Number.isFinite(r)||r<=0)throw Error(`吸附距离必须为有限正数`);return{mode:n,pixelTolerance:r}},xt=({interaction:e,vectorLayer:t,source:n,points:r,layerOptions:i,midpointStyle:a,pointStyle:o,onDuplicate:s,getTakeoff:c,isDestroyed:l,isEditing:u,getEditConfig:d,syncPath:f})=>{let p,m,h=()=>{let e=m;m=void 0,p=void 0,e?.()};return{get select(){return p},clearEditing:h,updateEditing:()=>{if(h(),l()||m)return;let g=e.getMap();if(!u()||!g||!e.getActive())return;let _=d(),v=new F.default,y=new P.default({...i,source:v,style:a??new I.Style({image:new I.Circle({radius:5,fill:new I.Fill({color:`#fff`}),stroke:new I.Stroke({color:`#3b82f6`,width:2})})}),zIndex:1/0}),b=()=>{y.setVisible(t.getVisible()),v.clear(),_.mode===`snap`?E():r.slice(1).forEach((e,t)=>{let n=r[t].getGeometry().getCoordinates(),i=e.getGeometry().getCoordinates();v.addFeature(new M.default({geometry:new N.default([(n[0]+i[0])/2,(n[1]+i[1])/2]),insertIndex:t+1}))})},x=new q.default({layers:[t],filter:e=>e!==c()&&r.includes(e),hitTolerance:6});p=x;let S=new J.default({condition:j.primaryAction,filter:e=>e!==c()&&(r.includes(e)||v.hasFeature(e)),hitTolerance:6}),C=new K.default,w=_.mode===`snap`?new Y.default({features:C,pixelTolerance:_.pixelTolerance}):void 0;w?.on(`snap`,e=>{if(T||!t.getVisible())return;let n=e.feature.get(`insertIndex`);if(!e.segment||typeof n!=`number`){v.clear();return}let r=v.getFeatures()[0];r||(r=new M.default(new N.default(e.vertex)),v.addFeature(r)),r.set(`insertIndex`,n),r.getGeometry().setCoordinates(e.vertex)}),w?.on(`unsnap`,()=>{T||v.clear()});let T,E=()=>{C.clear(),!T&&t.getVisible()&&r.forEach((e,t)=>{C.push(new M.default(e.getGeometry().clone())),t>0&&C.push(new M.default({geometry:new ee.default([r[t-1].getGeometry().getCoordinates(),e.getGeometry().getCoordinates()]),insertIndex:t}))})};if(w){let e=w.handleEvent.bind(w);w.handleEvent=t=>{let n=e(t);return t.type===`pointerdown`&&!T&&v.getFeatures().length&&g.renderSync(),n}}let D=()=>{if(!T)return;let e=T;T=void 0,!l()&&(e.inserted?(r.splice(r.indexOf(e.point),1),n.removeFeature(e.point)):e.point.getGeometry().setCoordinates(e.coordinate),f(),b())};S.on(`translatestart`,e=>{let t=e.features.item(0);T={point:t,coordinate:t.getGeometry().getCoordinates(),insertIndex:t.get(`insertIndex`),inserted:!1,moved:!1},C.clear()}),S.on(`translating`,e=>{let t=T;if(t&&(t.moved=!0,w&&t.point.getGeometry().setCoordinates(e.coordinate),T===t)){if(t.insertIndex!==void 0&&!t.inserted){let{point:e,insertIndex:i}=t;if(e.unset(`insertIndex`),e.setProperties({uuid:_t(),extData:{height:r[i-1].get(`extData`)?.height??0},isTakeoff:!1,isAircraft:!1,heading:r[i-1].get(`heading`)}),e.setStyle(o),r.splice(i,0,e),t.inserted=!0,n.addFeature(e),T!==t)return}f(),T===t&&b()}}),S.on(`translateend`,()=>{if(!T)return;let{point:t,moved:n}=T,i=t.getGeometry().getCoordinates();n&&r.some(e=>{let n=e.getGeometry().getCoordinates();return e!==t&&n[0]===i[0]&&n[1]===i[1]})?(D(),s?.(i.slice())):(T=void 0,b(),n&&e.changed())}),x.on(`select`,()=>e.changed());let O=()=>{x.getFeatures().clear(),D(),t.un(`change:visible`,b),g.removeInteraction(S),g.removeInteraction(x),w&&(g.removeInteraction(w),w.dispose()),C.clear(),S.dispose(),x.dispose(),y.setMap(null),y.clearRenderer(),y.setSource(null),v.clear(),v.dispose()};m=O,t.on(`change:visible`,b),b(),y.setMap(g),m===O&&(g.addInteraction(x),m===O&&(g.addInteraction(S),m===O&&w&&g.addInteraction(w)))}}},St=(e={})=>{let t=e.style===void 0?gt():{},{map:n=Q,layerName:r,style:i=t.style,takeoffStyle:a=t.takeoffStyle,lineStyle:o=t.lineStyle,pointStyle:s=t.pointStyle,aircraftStyle:c=t.aircraftStyle,midpointStyle:l,edit:u,onDuplicate:d,input:f,speed:p=10,turnSpeed:m=60,verticalSpeed:h=1,...g}=e,_=bt(u);if([p,m,h].some(e=>!Number.isFinite(e)||e<=0))throw Error(`飞行速度、转向速度和升降速度必须为有限正数`);if(!n)throw Error(`请先创建地图实例或通过 config.map 指定地图`);let v=new F.default,y=new P.default({...g,className:r||`ol-layer`,source:v,style:i});y.set(`_layerName`,r);let b=new ee.default([]),x=new M.default(b);x.setStyle(o);let S,C,w=[],T=!1,E=0,D=0,O=`idle`,k=[],A,j,I=0,L=/* @__PURE__ */ new Set,R=e=>{I++;try{return e()}finally{I--,!I&&!T&&q.changed()}},B=()=>{if(!(I||T))for(let e of[...L]){if(T)break;L.has(e)&&e(X.getState())}},V=()=>{let e=A;A=void 0,e?.(),k=[]},H=()=>{V(),!T&&q.getMap()&&q.getActive()&&(f?.keyboard||f?.container!==void 0)&&(A=ht({getMode:()=>O,getTarget:()=>n.getTargetElement()??void 0,setRouteControls:e=>X.setRouteControls(e),addRouteWaypoint:()=>X.addRouteWaypoint(),adjustWaypointHeight:e=>X.adjustWaypointHeight(e),setActiveControls:e=>{k=[...e],B()}},{...f}))},U=()=>{V(),j?.(),j=void 0,J.stopRouteControl(),Y.clearEditing()},W=e=>b.getCoordinates().findIndex(t=>t[0]===e[0]&&t[1]===e[1]),G=e=>{if(W(e)!==-1){d?.(e.slice());return}let t=E;if(b.appendCoordinate(e),T||t!==E)return;let n=new M.default({uuid:_t(),geometry:new N.default(e),extData:{height:J.aircraft?.get(`height`)??C?.get(`extData`)?.height??0},isTakeoff:b.getCoordinates().length===1,isAircraft:!J.aircraft,heading:J.heading});n.setStyle(n.get(`isTakeoff`)?a:s),C?.set(`isAircraft`,!1,!0),C=n,S||=n,w.push(n),v.addFeature(n),!(T||t!==E)&&(b.getCoordinates().length===2&&v.addFeature(x),q.changed())},K=()=>{if(T)return;let e=E;S=w[0],C=w.at(-1);for(let t of w){let n=t===S;if(t.get(`isTakeoff`)!==n&&t.setStyle(n?a:s),T||e!==E||(t.setProperties({isTakeoff:n,isAircraft:t===C}),T||e!==E))return}b.setCoordinates(w.map(e=>e.getGeometry().getCoordinates())),!(T||e!==E)&&(w.length>1&&!v.hasFeature(x)&&v.addFeature(x),w.length<2&&v.hasFeature(x)&&v.removeFeature(x))},q=new z.default({handleEvent(e){if(T||!q.getActive()||e.type!==`singleclick`||O!==`draw`&&O!==`takeoff`)return!0;let t=e.coordinate.slice();if(!Number.isFinite(t[0])||!Number.isFinite(t[1])||Math.abs(t[0])>180||Math.abs(t[1])>90)return!0;let n=O===`takeoff`,r=W(t);return r!==-1&&(!n||r>0)?(d?.(t.slice()),!1):(R(()=>{let e=E,r=D;if(n&&S){let n=b.getCoordinates();if(n[0]=t,b.setCoordinates(n),T||e!==E)return;S.getGeometry().setCoordinates(t)}else G(t);n&&!T&&e===E&&r===D&&X.setMode(`idle`)}),!1)}}),J=ft({speed:p,turnSpeed:m,verticalSpeed:h,interaction:q,geometry:b,vectorLayer:y,aircraftStyle:c,getLastWaypoint:()=>C,isDestroyed:()=>T}),Y=xt({interaction:q,vectorLayer:y,source:v,points:w,layerOptions:g,midpointStyle:l,pointStyle:s,onDuplicate:d,getTakeoff:()=>S,isDestroyed:()=>T,isEditing:()=>O===`edit`,getEditConfig:()=>_,syncPath:K});q.on(`change`,B),q.on(`change:active`,()=>{!q.getActive()&&!T&&X.setMode(`idle`)});let X=Object.assign(q,{getState(){let e=Y.select?.getFeatures().item(0),t=J.aircraft,n=t?.getGeometry().getCoordinates();return{mode:O,hasTakeoff:!!S,waypointCount:w.length,selectedWaypoint:e?{...vt([e])[0],indexNo:w.indexOf(e)}:null,aircraft:t&&n?{longitude:n[0],latitude:n[1],heading:t.get(`heading`),height:t.get(`height`),speed:t.get(`speed`)}:null,activeControls:[...k],editConfig:{..._}}},subscribe(e){if(T)throw Error(`航线已销毁`);L.add(e);try{e(X.getState())}catch(t){throw L.delete(e),t}return()=>{L.delete(e)}},setMode(e){if(T)throw Error(`航线已销毁`);if(![`idle`,`takeoff`,`draw`,`control`,`edit`].includes(e))throw Error(`不支持的航线模式`);if([`draw`,`control`,`edit`].includes(e)&&!S)throw Error(`请先设置起飞点`);if(e!==O){if(e!==`idle`&&q.getMap()!==n)throw Error(`航线交互已移除,请重新创建航线`);if(e===`control`){let e=n.getSize();if(!n.getTargetElement()||!e||e[0]<=0||e[1]<=0)throw Error(`请先将地图挂载到已就绪的容器`);if(n.getView().getProjection().getCode()!==`EPSG:4326`)throw Error(`航线仅支持 EPSG:4326`)}R(()=>{let t=++D,r=()=>T||t!==D,i=O;if(U(),!r()&&(O=e,e!==`idle`&&z.default.prototype.setActive.call(q,!0),!r()))try{if(e===`control`){let e=J.startRouteControl();if(r())return;e.on(`change`,B),j=()=>e.un(`change`,B)}if(Y.updateEditing(),r()||(H(),r()))return;f?.keyboard&&e!==`idle`&&n.getTargetElement()?.focus({preventScroll:!0})}catch(e){throw r()||(U(),r())||(O=i===`control`?`idle`:i,Y.updateEditing(),H()),e}})}},setEditConfig(e){if(T)throw Error(`航线已销毁`);let t=bt(e,_);R(()=>{_=t,O===`edit`&&Y.updateEditing()})},clear(){X.importWaypoints([])},exportWaypoints(){return vt(w)},importWaypoints(e){if(T)throw Error(`航线已销毁,请创建新的 Route`);let t=yt(e,{takeoffStyle:a,pointStyle:s});R(()=>{++D;let e=++E,n=()=>T||e!==E;if(U(),!n()&&(O=O===`edit`&&t.length?`edit`:`idle`,w.length=0,S=void 0,C=void 0,v.clear(!0),!n())){for(let e of t)w.push(e);S=w[0],C=w.at(-1),b.setCoordinates(w.map(e=>e.getGeometry().getCoordinates())),!n()&&(v.addFeatures(w.length>1?[...w,x]:w),!n()&&(Y.updateEditing(),n()||H()))}})},destroy(){T||(T=!0,++D,O=`idle`,L.clear(),U(),n.un(`change:target`,Z),n.un(`change:view`,Z),q.getMap()?.removeInteraction(q),z.default.prototype.setMap.call(q,null),q.setActive(!1),w.length=0,S=void 0,C=void 0,b.setCoordinates([]),n.removeLayer(y),y.clearRenderer(),y.setSource(null),v.clear(!0),v.dispose(),q.dispose())},setMap(e){if(T)e?.removeInteraction(q);else{if(e&&e!==n)throw Error(`航线不能迁移到其他地图`);e!==q.getMap()&&R(()=>{++D,U(),O=`idle`,z.default.prototype.setMap.call(q,e),H()})}},setActive(e){z.default.prototype.setActive.call(q,e&&!T)},getSelectedWaypoint(){return Y.select?.getFeatures().item(0)},adjustWaypointHeight(e,t=Y.select?.getFeatures().item(0)){if(!Number.isFinite(e))throw Error(`高度变化必须为有限数值`);if(T||O!==`edit`||!q.getActive()||!t||!w.includes(t))return!1;let n=t.get(`extData`)??{},r=Math.max(0,(n.height??0)+e);if(!Number.isFinite(r))throw Error(`高度必须为有限数值`);return r!==(n.height??0)&&(t.set(`extData`,{...n,height:r}),!T&&w.includes(t)&&q.changed(),!0)},removeWaypoint(e=Y.select?.getFeatures().item(0)){return!Y.select||!e||e===S||!w.includes(e)?!1:(Y.clearEditing(),w.includes(e)?(w.splice(w.indexOf(e),1),v.removeFeature(e),K(),Y.updateEditing(),q.changed(),!0):(Y.updateEditing(),q.changed(),!1))},getLayer(){return y},hasTakeoff(){return!!S},setRouteControls(e){J.setRouteControls(e)},addRouteWaypoint(){J.aircraft&&q.getActive()&&G(J.aircraft.getGeometry().getCoordinates())}}),Z=()=>{T||R(()=>{++D,U(),O=`idle`,H()})};try{n.addLayer(y),n.addInteraction(X),n.on(`change:target`,Z),n.on(`change:view`,Z),H()}catch(e){throw X.destroy(),e}return X},Ct=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new F.default({features:new X.default().readFeatures(e)}),style:t||new I.Style({stroke:new I.Stroke({color:`red`,lineDash:[10],width:3}),fill:new I.Fill({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new P.default(i)},wt=(e,t,n,r)=>t&&n?.get(e[t])||r,Tt=(e,t)=>{let{key:n,crsForm:r}=t,i=[];return e.forEach(e=>{try{let t=e[n],r=Array.isArray(t)?t:JSON.parse(t||`[]`);if(r.length){let t=e.geoType||de(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),D.default.transform({type:`FeatureCollection`,features:i},r||D.default.WGS84,D.default.WGS84)},Et=(e,t)=>{let{isLine:n,colorMap:r,fillColor:i,colorKey:a,strokeColor:o,fillOpacity:s,strokeWeight:c,activeFillColor:l,activeFillOpacity:u,activeStrokeColor:d,activeStrokeWeight:f}=t||{},p=e.getProperties(),m=new I.Style({stroke:new I.Stroke({width:f??c??4,color:d||wt(p,a,r,o)})}),h=new I.Style({stroke:new I.Stroke({width:c??2,color:wt(p,a,r,o)})});return n||(m.setFill(new I.Fill({color:le(l||i||``,u??s??1)||le(wt(p,a,r,i)||``,s??1)})),h.setFill(new I.Fill({color:le(wt(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},Dt=(e,t)=>{let n=Tt(e,t),r=new g.GeoJSON().readFeatures(n),i=r.map(e=>{let t={...e.getProperties()};return delete t.geometry,t});return r.forEach(e=>{e.setStyle(Et(e,t))}),{features:r,acceptedData:i}},Ot=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=Dt(e,t),s=new P.default({zIndex:5,className:r||`ol-layer`,source:new F.default({features:a})});return i&&rt(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},kt=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=Dt(t,Object.assign({},i,{crsForm:n??i?.crsForm}));r.addFeatures(a);let s=new Set(e.get(`_uuidSet`)||[]);o.forEach(e=>s.add(e._uuid)),e.set(`_uuidSet`,s),e.set(`_dataList`,[...e.get(`_dataList`)||[],...o])},At=(e=[],t)=>Ot(e,Object.assign({},t,{isLine:!1})),jt=(e=[],t)=>Ot(e,Object.assign({},t,{isLine:!0})),Mt=e=>t=>{let{baseUrl:n,markerIcon:r,statusNum:i=5,activeScale:a=1.3,markerSize:o=[32,32]}=t,s=e(n),[c,l]=o,u=Array(i*2);for(let e=0;e<i;e++){let t=s(`${r}-${e}`,`.webp`);u[e]=new I.Style({zIndex:88+e,image:new I.Icon({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new I.Style({zIndex:120,image:new I.Icon({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},Nt=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=D.default.transform([+e.lnglat[0],+e.lnglat[1]],n||D.default.WGS84,D.default.WGS84),i=new O.Feature({geometry:new Z.Point(r)});return i.setProperties({...e,unActiveStyle:t[e.style],activeStyle:t[e.style+t.length/2]}),i.setStyle(t[e.style]),i}),Pt=(e,t,n={})=>{let r=e.get(`_massMarksStyles`),i=e?.getSource(),{clear:a}=n,o=Nt(t,r);a&&i?.clear(),i?.addFeatures(o);let s=[...a?[]:e.get(`_dataList`)||[],...t];e.set(`_dataList`,s),e.set(`_uuidSet`,new Set(s.map(e=>e._uuid)))},Ft=(e,t=[])=>{let n=new P.default({zIndex:2e3,source:new F.default({features:Nt(e,t)})});return n.setProperties({_isCustom:!0,_isVectorLayer:!0,_isMassMarksLayer:!0,_statusNum:t.length/2,_dataList:[...e],_uuidSet:new Set(e.map(e=>e._uuid)||[])}),n},It=e=>(t=[],n,r=!0)=>{let{offset:i=[0,0],baseUrl:a,hasLine:o,hasFace:s,layerName:c,isDynamic:l,isAutoFit:u,statusNum:d,markerIcon:f,marksStyles:p,markerSize:m,activeScale:h,vectorConfig:g}=n,_=p||Mt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=Ft(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),rt(v)),o){let e=Ot(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));Q.addLayer(e)}if(s){let e=Ot(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));Q.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),Q.addLayer(v),v},Lt=(e=[])=>{let t=new I.Style({}),n=new Set(e),r=[];return Q.getAllLayers().filter(e=>e.get(`_isMassMarksLayer`)).forEach(e=>{e.getSource().getFeatures().forEach(e=>{let i=e.getProperties();n.has(i.status)?(r.push(i),e.setStyle(i.unActiveStyle)):e.setStyle(t)})}),r},Rt=(e,t)=>{let n=Q.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e&&t.get(`_isMassMarksLayer`)),r=new I.Style({});n.forEach(e=>{e.getSource().getFeatures().forEach(e=>{let n=e.getProperties();t.has(n.id)?e.setStyle(n.unActiveStyle):e.setStyle(r)})})},zt=(e,t)=>{let n=e.length,r={},{distance:i,minDistance:a,openClick:o,buildStyle:s,singleStyles:c,computedRadius:l,layerName:u=`cluster-layer`}=t,d=e=>(e/n)**(1/18);r[1]=c;let f=e=>{let t=e.get(`features`).length,n=r[t],i=l?l(t):d(t);if(n||(n=new I.Style({image:new B.default({radius:i*20,stroke:new I.Stroke({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new I.Fill({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new I.Text({text:t.toString(),fill:new I.Fill({color:`hsla(${180-i*180}, 100%, 10%, 1)`}),textBaseline:`middle`})}),r[t]=n),Array.isArray(n)){let t=e.get(`features`)[0].get(`styleIndex`)??0;return n[t]}return n},p=new P.default({zIndex:200,className:u,source:new te.default({distance:i||80,minDistance:a||0,source:new F.default({features:e.map(e=>{let t=new O.Feature(new Z.Point(e.lnglat));t.setProperties(e);let n=e.style??0;return t.setProperties({unActiveStyle:c[n],activeStyle:c[n+c.length/2]}),t})})}),style:e=>s?s(e):f(e)});return p.setProperties({_isCustom:!0,_isVectorLayer:!0,_isClusterLayer:!0}),o&&rt(p),p};exports.GeometryType=ne,exports.activeFeatureByUid=Pe,exports.addFeaturesByLayer=Pt,exports.addMassMarksLayer=It,exports.appendFeaturesByLayer=kt,exports.baseLayers=be,exports.buildMassMarksStyles=Mt,exports.changeFeaturesVisibleByIds=Rt,exports.changeLayer=Ee,exports.changeSource=Te,exports.changeUnselectStyle=$e,exports.createAnimationMarker=ke,exports.createBaseLayer=ve,exports.createBusinessLayer=Ot,exports.createClusterLayer=zt,exports.createDrawInteraction=dt,exports.createElasticMarkerLayer=et,exports.createGeoJsonLayer=Ct,exports.createIconStyle=Je,exports.createLayerSelectByNames=it,exports.createMap=Ie,exports.createMapInstance=Fe,exports.createMapWorldLayer=ye,exports.createMarker=Ye,exports.createMarkersLayer=Xe,exports.createMassMarksLayer=Ft,exports.createMoveMarkerLayer=tt,exports.createOverlay=Ae,exports.createRouteController=St,exports.createSelectByLayer=rt,exports.createTdtVectorSource=ie,exports.createTdtVtsLayer=ae,exports.createText=qe,exports.createVectorFaceLayer=At,exports.createVectorLineLayer=jt,exports.createWmtsLayer=he,exports.createZheJiangLayer=xe,exports.disposeInstance=Re,exports.disposeMap=Le,exports.emitter=oe,exports.flyToAnimate=Ke,exports.getDrawStyle=ut,exports.getLayerByName=Se,exports.getLayersDataList=ue,exports.getMapInstance=ze,Object.defineProperty(exports,"instance",{enumerable:!0,get:function(){return Q}}),exports.removeAllLayers=Me,exports.removeLayerByName=Ce,exports.removeOverlays=De,exports.resetActiveFeature=Ne,exports.resetActiveVector=je,exports.resetMap=Ve,exports.resetZoomAndCenter=Be,exports.setFitViewByCoords=Ue,exports.setFitViewByGeom=We,exports.setFitViewByLayer=Ge,exports.updateMarksLayersByStatus=Lt,Object.keys(c).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return c[e]}})});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("tdt-vts-core"),l=require("ol/format/MVT");l=s(l,1);let u=require("ol/layer/VectorTile");u=s(u,1);let d=require("ol/TileState");d=s(d,1);let f=require("ol/source/VectorTile");f=s(f,1);let p=require("mitt");p=s(p,1);let m=require("ol/source"),h=require("ol/layer/Tile");h=s(h,1);let g=require("ol/format"),_=require("ol/source/WMTS"),v=require("ol/tilegrid"),y=require("ol/layer"),b=require("ol/tilegrid/WMTS");b=s(b,1);let x=require("ol/Observable"),S=require("ol/layer/Image");S=s(S,1);let C=require("ol/source/Raster");C=s(C,1);let w=require("ol/Map");w=s(w,1);let T=require("ol/View");T=s(T,1);let E=require("ol/control"),D=require("gcoord");D=s(D,1);let O=require("ol"),k=require("ol/interaction"),A=require("ol/extent"),j=require("ol/events/condition"),M=require("ol/Feature");M=s(M,1);let N=require("ol/geom/Point");N=s(N,1);let P=require("ol/layer/Vector");P=s(P,1);let F=require("ol/source/Vector");F=s(F,1);let I=require("ol/style"),L=require("ol/interaction/Draw");L=s(L,1);let R=require("ol/sphere"),ee=require("ol/geom/LineString");ee=s(ee,1);let z=require("ol/interaction/Interaction");z=s(z,1);let B=require("ol/style/Circle");B=s(B,1);let V=require("ol/style/Fill");V=s(V,1);let H=require("ol/style/Icon");H=s(H,1);let U=require("ol/style/Stroke");U=s(U,1);let W=require("ol/style/Style");W=s(W,1);let G=require("ol/style/Text");G=s(G,1);let K=require("ol/Collection");K=s(K,1);let te=require("ol/interaction/Select");te=s(te,1);let q=require("ol/interaction/Translate");q=s(q,1);let ne=require("ol/interaction/Snap");ne=s(ne,1);let re=require("ol/format/GeoJSON");re=s(re,1);let J=require("ol/geom"),Y=require("ol/source/Cluster");Y=s(Y,1);let X=/* @__PURE__ */ function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const Z=async e=>{if(typeof e!=`string`)return e;if(!e.trim())throw TypeError(`style 地址不能为空`);let t=await fetch(e);if(!t.ok)throw Error(`加载 style 失败:HTTP ${t.status}`);return await t.json()},Q=e=>{if(!e.hosts?.length||e.hosts.some(e=>!e.trim()))throw TypeError(`hosts 不能为空`);let t=new c.TdtDecoderWorkerClient(e.restoreMode,e.decoderOptions),n=new l.default({layerName:`mvt:layer`}),r=new f.default({projection:`EPSG:3857`,minZoom:e.minZoom??1,maxZoom:e.maxZoom??18,tileSize:512,wrapX:!0,format:n,attributions:`© <a href="https://www.tianditu.gov.cn/" target="_blank" rel="noopener">天地图</a>`,tileUrlFunction(t){if(!t)return;let[n,r,i]=t;if(n!==void 0&&r!==void 0&&i!==void 0)return(0,c.createTdtVtsUrl)([n,r,i],{token:e.token,hosts:e.hosts,maxZoom:e.maxZoom??18,wrapX:!0})},tileLoadFunction(r,i){let a=r;a.setLoader(async(r,o,s)=>{let l=(0,c.redactTdtToken)(i);try{let o=await t.decode(i),c=n.readFeatures(o.buffer,{extent:r,featureProjection:s});a.setFeatures(c),e.diagnostics?.onDecoded?.(o.stats,l)}catch(t){let n=t instanceof Error?t:Error(String(t));e.diagnostics?.onError?.(n,l),console.error(`天地图私有 VTS 加载失败`,l,n),a.setState(d.default.ERROR)}})}}),i=r.dispose.bind(r);return r.dispose=()=>{t.dispose(),i()},{source:r,decoder:t}},ie=async e=>{let t=await Z(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=Q({token:e.token,hosts:e.hosts,restoreMode:`auto`}),r=new u.default({declutter:!0,source:n}),i=r.dispose.bind(r);r.dispose=()=>{n.dispose(),i()};try{let{applyBackground:e,applyStyle:n}=await import(`ol-mapbox-style`),i=structuredClone(t);for(let e of i.layers)e.type===`symbol`&&e.layout?.[`text-font`]&&(e.layout[`text-font`]=[`sans-serif`]);return await Promise.all([n(r,i,{projection:`EPSG:4326`,source:`base-tdt-vector-tile`,updateSource:!1}),e(r,i)]),r}catch(e){throw r.dispose(),e}},ae=(0,p.default)();let $;const oe=e=>{$=e},se=()=>{$=void 0},ce=(e,t)=>{if(e.startsWith(`#`)){let n=e.replace(`#`,``);return n.length===3&&(n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]),`rgba(${parseInt(n.substring(0,2),16)}, ${parseInt(n.substring(2,4),16)}, ${parseInt(n.substring(4,6),16)}, ${t})`}return e},le=()=>$?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],ue=e=>{let t=e=>!Array.isArray(e)||e.length===0?0:1+t(e[0]),n=e=>{if(!Array.isArray(e)||e.length<3)return!1;let t=e[0],n=e[e.length-1];return t[0]===n[0]&&t[1]===n[1]},r=e=>Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`,i=e=>Array.isArray(e)&&e.length>=2&&e.every(r),a=e=>Array.isArray(e)?(t(e)===2?[e]:e).every(e=>Array.isArray(e)&&e.length>=4&&n(e)&&e.every(r)):!1,o=t(e);try{return o<2||!e||e.length===0?`Invalid`:o===2&&i(e)?n(e)&&e.length>=4?`Polygon`:`LineString`:o===3&&Array.isArray(e)&&e.every(i)?a(e)?`Polygon`:e.every(e=>!n(e))?`MultiLineString`:`Invalid`:o===4&&Array.isArray(e)&&e.every(e=>a(e))?`MultiPolygon`:`Invalid`}catch(e){return console.error(`Error analyzing coordinates:`,e),`Invalid`}},de=new g.WMTSCapabilities,fe=/* @__PURE__ */ new Map,pe=async e=>{let t=fe.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=de.read(await n.text());return fe.set(e,r),r},me=e=>async t=>{let{style:n,format:r,version:i,layerName:a,matrixSet:o}=t,[s,c]=a.split(`:`),l=`${e}/${s}/${c}/gwc/service/wmts?request=GetCapabilities`,u=await pe(l),d=(0,_.optionsFromCapabilities)(u,{style:n||``,layer:c,version:i||`1.1.0`,format:r||`image/png`,matrixSet:o||`EPSG:4326`});if(!d)throw Error(`Unable to create TileLayer`);return new h.default({zIndex:3,className:a,source:new m.WMTS(d)})},he=(e,t)=>{let n=t.get(`_selectInteraction`);n&&(e.removeInteraction(n),n.dispose(),t.unset(`_selectInteraction`));let r=t.get(`_resolutionChangeKey`);r&&((0,x.unByKey)(r),t.unset(`_resolutionChangeKey`));let i=t.get(`_dynamicMarkerTimer`);i!==void 0&&(clearTimeout(i),t.unset(`_dynamicMarkerTimer`)),t.getSource()?.dispose(),e.removeLayer(t),t.dispose()},ge=`c77eddc667c5bed016fded560baf93e7`,_e=(e=`hzsyvector_dark`)=>{let t={zIndex:-5,preload:1,minZoom:8,maxZoom:21,source:new m.XYZ({tileGrid:new v.TileGrid({tileSize:256,resolutions:[.00549933137253187,.00274966568626595,.00137483284313297,.000687416421566485,.000343708210783242,.000171854105391621,859270526958104e-19,429635263479052e-19,214817631739526e-19,107408815869763e-19,537044079348816e-20,268522039674407e-20,134261019837204e-20],origin:[118.122911693886,31.2869311022836],extent:[116.43263049006,28.6201742126026,123.705594256347,31.9765041681924]}),projection:`EPSG:4326`,urls:[`https://ywtg.citybrain.hangzhou.gov.cn/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9456/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9457/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9458/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9459/${e}/{z}/{y}/{x}`]}),properties:{_isBaseLayer:!0,_layerName:e}};return new y.Tile(t)},ve=(e,t=ge)=>{let[n,r]=e.split(`_`),i={preload:1,zIndex:-10,cacheSize:20240,properties:{_isBaseLayer:!0,_layerName:e},source:new m.WMTS({crossOrigin:`anonymous`,projection:`EPSG:4326`,wrapX:!0,layer:n,style:`default`,version:`1.0.0`,format:`image/png`,matrixSet:r,tileGrid:new b.default({tileSize:256,origin:[-180,90],matrixIds:[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`,`13`,`14`,`15`,`16`,`17`,`18`,`19`],resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625,.010986328125,.0054931640625,.00274658203125,.001373291015625,.0006866455078125,.00034332275390625,.000171661376953125,858306884765625e-19,4291534423828125e-20,21457672119140625e-21,10728836059570312e-21,5364418029785156e-21,2682209014892578e-21]}),url:`https://t{0-7}.tianditu.gov.cn/${e}/wmts?tk=${t}`})};return new y.Tile(i)},ye=e=>({baseImgLayer:new y.Tile({className:`img-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCiaLayer:new y.Tile({className:`img-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2}),baseVecLayer:new y.Tile({className:`vec-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCvaLayer:new y.Tile({className:`vec-layer`,source:new m.XYZ({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2})}),be=(e=`emap`,t=`3b0cdd02-c366-4363-b6de-081a9f12b364`)=>new y.Tile({preload:1,minZoom:4,maxZoom:20,zIndex:-10,cacheSize:20240,source:new m.XYZ({wrapX:!0,projection:`EPSG:4326`,crossOrigin:`anonymous`,url:`https://ditu{0-6}.zjzwfw.gov.cn/services/wmts/${e}/default/oss/getTile/{z}/{y}/{x}?token=${t}`})}),xe=e=>$.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Se=e=>{$.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e).forEach(e=>{he($,e)})},Ce=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),we=(e,t,n,r={})=>{let i=new C.default({sources:[e],operationType:`image`,operation:(e,t)=>(((e,t)=>{let n=t.ratioArray,r=t.rgbColorArray;if(n&&r){let[t=0,i=0,a=0]=n;for(let n=0;n<e.length;n+=4){let o=e[n],s=e[n+1],c=e[n+2],l=o*t+s*i+c*a;e[n]=r[0]-l,e[n+1]=r[1]-l,e[n+2]=r[2]-l}}})(e[0].data,t),e[0]),threads:r.threads??Ce()});return i.on(`beforeoperations`,e=>{e.data.ratioArray=n,e.data.rgbColorArray=t}),i},Te=(e,t,n,r={})=>new S.default({source:we(e,t,n,r)}),Ee=(e=``)=>{$&&$.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>$.removeOverlay(e))},De=()=>Ee(`_isAnimationMarker`),Oe=(e,t)=>{De();let{width:n,height:r,lnglat:i,crsForm:a}=t,o=document.createElement(`div`),s=document.createElement(`img`);s.src=e,s.alt=``,n!==void 0&&(s.width=n),r!==void 0&&(s.height=r),o.append(s);let c=new O.Overlay({element:o,stopEvent:!1,positioning:`bottom-center`,position:D.default.transform([+i[0],+i[1]],a||D.default.WGS84,D.default.WGS84)});c.set(`_isAnimationMarker`,!0),$.addOverlay(c)},ke=(e={id:`popup-container`,positioning:`top-center`})=>new O.Overlay(Object.assign({element:document.getElementById(e.id)||void 0},e)),Ae=()=>{Ee(),$.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},je=()=>{Ee(),$&&$.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||he($,e)})},Me=()=>{Ee(),$.getAllLayers().filter(e=>e.get(`_isVectorLayer`)).forEach(e=>{let t=e.get(`_selectInteraction`);t&&(t.dispatchEvent({type:`select`,selected:[],mapBrowserEvent:void 0,deselected:t.getFeatures().getArray()}),t.getFeatures().clear())})},Ne=e=>{let t=$.getAllLayers().filter(e=>e.get(`_isVectorLayer`));if(t.length){let n=t.find(t=>t.get(`_uuidSet`).has(e)&&t.get(`_selectInteraction`));if(n){let t=(n.getSource()?.getFeatures()||[]).find(t=>t.get(`_uuid`)===e),r=n.get(`_selectInteraction`);if(r){let n=r.getFeatures().getArray();n.find(t=>t.get(`_uuid`)===e)||(r.dispatchEvent({type:`select`,deselected:n,selected:[t],mapBrowserEvent:void 0}),r.getFeatures().push(t))}}}};let Pe=[119.71512016971076,30.122490541963536];const Fe=(e={})=>{if($)return $;let t=Ie(e);return oe(t),t},Ie=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:Pe,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[_e()],constrainResolution:!1,smoothExtentConstraint:!1,tk:ge},e||{}),n=new w.default({view:new T.default(t),controls:(0,E.defaults)({zoom:!1,rotate:!1,attribution:!1}),interactions:(0,k.defaults)({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[_e()]});Pe=t.center||Pe,n.activeBaseLayer=t.baseLayer;let r=e=>n.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e);n.getLayerByName=r,n.removeLayerByName=e=>{let t=r(e);t&&he(n,t)},n.changeLayersByNames=(e,t)=>{n.getAllLayers().filter(e=>t.includes(e.getClassName())).forEach(t=>t.setVisible(e?.includes(t.getClassName())))};let i,a;return n.on(`pointermove`,e=>{if(a=e.pixel,i!==void 0)return;let t=()=>{i=void 0;let e=n.getTargetElement();a&&e&&(e.style.cursor=n.hasFeatureAtPixel(a)?`pointer`:``)};i=typeof globalThis.requestAnimationFrame==`function`?globalThis.requestAnimationFrame(t):setTimeout(t,16)}),n.set(`_disposePointerMove`,()=>{i!==void 0&&(typeof globalThis.cancelAnimationFrame==`function`?globalThis.cancelAnimationFrame(i):clearTimeout(i),i=void 0)}),n},Le=()=>{if(!$)return;let e=$;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>he(e,t)),e.setTarget(``),e.dispose(),se()},Re=()=>Le(),ze=()=>$,Be=(e=Pe)=>{$&&$.getView().animate({zoom:9.4,center:e,duration:1e3})},Ve=(e={center:Pe,isClearAll:!0})=>{je(),Be(e.center||Pe)},He={padding:[50,50,50,50],duration:1e3},Ue=(e,t=$,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=(0,A.boundingExtent)(e);r.fit(t,{...He,...n||{}})}},We=(e,t=$,n)=>{t.getView().fit(e,{...He,...n||{}})},Ge=(e,t=$,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...He,...n||{}})},Ke=(e,t)=>{let n=$.getView(),r=n.getZoom();n.animate({center:e,duration:2e3}),t?n.animate({zoom:t-2,duration:1e3},{zoom:t,duration:1e3}):n.animate({zoom:r-2,duration:1e3},{zoom:r+2>12?12:r+2,duration:1e3})},qe=e=>new I.Text({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new I.Fill({color:`rgba(255, 255, 255, 0.8)`})}),Je=(e,t=!1)=>new I.Style({image:new I.Icon({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?qe(e):void 0}),Ye=(e,t)=>{let n=new M.default({geometry:new N.default([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(Je(e)),n},Xe=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new F.default;return e.forEach(e=>a.addFeature(Ye(e,t))),new P.default({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},Ze=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(Je({...t,img:t[n]},!1))})},Qe=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?Ze([e],$.getView().getZoom()):e.setStyle(Je(r,t))},$e=e=>{e.forEach(e=>{Qe(e,!1)}),e.clear()},et=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=Xe(n,t),i=r.getSource().getFeatures(),a=$.getView();return Ze(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>Ze(i,a.getZoom()))),r},tt=(e,t)=>{let n=Ye(e,t),r=new P.default({className:t.layerName||`ol-layer`,source:new F.default({features:[n]})});return $.addLayer(r),{vectorLayer:r}},nt=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),ae.emit(`selected-feature`,n),e.set(`_hasActive`,!0),e.get(`_isDynamic`)){let t=r.getImage(),i=e.get(`_dynamicMarkerTimer`);i!==void 0&&clearTimeout(i);let a=setTimeout(()=>{e.unset(`_dynamicMarkerTimer`),ae.emit(`dynamic-marker`,Object.assign({},n.rawData||{},{lnglat:n.lnglat,style:n.style,crsForm:n.crsForm,width:t.getWidth(),height:t.getHeight()}))},1e3);e.set(`_dynamicMarkerTimer`,a)}if(e.get(`_isAutoFit`)){let e=$.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:(0,A.getCenter)(t.getGeometry().getExtent())})}},rt=e=>{let t=new k.Select({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!(0,j.singleClick)(t))return!1;let n=!1;return $.forEachFeatureAtPixel(t.pixel,()=>{n=!0},{layerFilter:t=>t===e}),n}});return t.on(`select`,t=>{let{selected:n,deselected:r}=t;if(n.length){let t=n[0];if(e.get(`_isClusterLayer`)){let n=t.get(`features`);n.length===1&&nt(e,n[0])}else nt(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),$.addInteraction(t),e.set(`_selectInteraction`,t),t},it=(e,t,n)=>{let r=new k.Select({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];Qe(t,!1),n?.(t)}if(r.length){let e=r[0];Qe(e,!0),t?.(e)}}),r},at=e=>{let t=(0,R.getArea)(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},ot=e=>{let t=(0,R.getLength)(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},st=new I.Style({fill:new I.Fill({color:`rgba(255, 255, 255, 0.2)`}),stroke:new I.Stroke({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new I.Circle({radius:5,stroke:new I.Stroke({color:`rgba(0, 0, 0, 0.7)`}),fill:new I.Fill({color:`rgba(255, 255, 255, 0.2)`})})}),ct=/* @__PURE__ */ new WeakMap,lt=e=>{let t=ct.get(e);if(t)return t;let n=new I.Style({text:new I.Text({font:`14px`,fill:new I.Fill({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new I.Fill({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new I.RegularShape({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new I.Fill({color:`rgba(0, 0, 0, 0.7)`})})});return ct.set(e,n),n},ut=(e,t=st)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=at(r)):r.getType()===`LineString`&&(i=new N.default(r.getLastCoordinate()),a=ot(r)),i&&a){let t=lt(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},dt=(e=`Point`,t,n)=>new L.default({source:t.getSource(),type:e,style:n?e=>ut(e,void 0):void 0}),ft=({geometry:e,interaction:t,isDestroyed:n,vectorLayer:r,aircraftStyle:i,speed:a,turnSpeed:o,verticalSpeed:s,getLastWaypoint:c})=>{let l,u,d=0,f,p,m,h=0,g=0,_=/* @__PURE__ */ new Set,v=()=>{_.clear(),m!==void 0&&f?.cancelAnimationFrame(m),m=void 0},y=e=>{m=void 0;let n=t.getMap();if(!l||!n||!t.getActive()){v();return}let r=l,c=Math.min(Math.max(0,e-h)/1e3,.1);h=e;let u=Number(_.has(`turnRight`))-Number(_.has(`turnLeft`));d=(d+u*o*c+360)%360,i===void 0&&l.getStyle().getImage().setRotation(d*Math.PI/180);let p=Number(_.has(`forward`))-Number(_.has(`backward`)),g=Number(_.has(`right`))-Number(_.has(`left`));if(p||g){let e=n.getView(),t=(0,R.offset)(r.getGeometry().getCoordinates(),a*c,d*Math.PI/180+Math.atan2(g,p));if(r.getGeometry().setCoordinates(t),l!==r||(e.setCenter(t),l!==r))return}let b=Number(_.has(`ascend`))-Number(_.has(`descend`));r.set(`height`,Math.max(0,r.get(`height`)+b*s*c)),l===r&&(l.set(`heading`,d),l===r&&(l.changed(),l===r&&_.size&&m===void 0&&(m=f.requestAnimationFrame(y))))},b=()=>{g++,v(),p?.(),p=void 0,f=void 0;let e=u;if(u=void 0,l=void 0,e){let t=e.getSource();e.setMap(null),e.clearRenderer(),e.setSource(null),t?.clear(!0),t?.dispose()}c()?.set(`isAircraft`,!0,!0),n()||r.changed()};return{get aircraft(){return l},get heading(){return d},get revision(){return g},startRouteControl(){let n=t.getMap(),o=n?.getTargetElement(),s=n?.getSize();if(!n||!o||!s||s[0]<=0||s[1]<=0||!t.getActive())throw Error(`请先将启用的航点交互添加到已就绪的地图`);let m=n.getView(),h=++g,_=()=>{if(h!==g||t.getMap()!==n||n.getView()!==m||!t.getActive()||n.getTargetElement()!==o)throw Error(`飞行操控启动已取消`)};if(l)return l;d=0,n.renderSync(),_();let v=e.getLastCoordinate();return l=new M.default({geometry:new N.default(v),isAircraft:!0,heading:d,height:c()?.get(`extData`)?.height??0,speed:a}),l.setStyle(i??new I.Style({image:new I.Icon({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0})})),u=new P.default({source:new F.default({features:[l]})}),u.setMap(n),_(),n.on(`change:view`,b),f=o.ownerDocument.defaultView,p=()=>n.un(`change:view`,b),c()?.set(`isAircraft`,!1,!0),r.changed(),_(),l},setRouteControls(e){let n=[`forward`,`backward`,`left`,`right`,`turnLeft`,`turnRight`,`ascend`,`descend`];if(e.some(e=>!n.includes(e)))throw Error(`不支持的飞行动作`);l&&t.getActive()&&(_=new Set(e),_.size?m===void 0&&(h=f.performance.now(),m=f.requestAnimationFrame(y)):v())},stopRouteControl:b}},pt={KeyW:`forward`,KeyS:`backward`,KeyA:`left`,KeyD:`right`,KeyQ:`turnLeft`,KeyE:`turnRight`,KeyZ:`descend`,KeyC:`ascend`,Space:`waypoint`},mt=e=>e===`ascend`||e===`descend`,ht=(e,t)=>{let n=e.getTarget(),r=typeof t.container==`string`?(n?.ownerDocument??globalThis.document)?.getElementById(t.container):t.container;if(typeof t.container==`string`&&!r)throw Error(`找不到航线输入容器:${t.container}`);if(e.getMode()!==`control`&&e.getMode()!==`edit`)return()=>void 0;let i=(n??r)?.ownerDocument,a=i?.defaultView;if(!i||!a)return()=>{e.setRouteControls([]),e.setActiveControls([])};let o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map,c=!!t.keyboard&&!!n&&!n.hasAttribute(`tabindex`);c&&(n.tabIndex=0);let l=t=>e.getMode()===`control`||e.getMode()===`edit`&&mt(t),u=!!t.keyboard&&e.getMode()===`control`,d=/* @__PURE__ */ new Map,f={"background-color":t.activeStyle?.backgroundColor,"border-top-color":t.activeStyle?.borderColor,"border-right-color":t.activeStyle?.borderColor,"border-bottom-color":t.activeStyle?.borderColor,"border-left-color":t.activeStyle?.borderColor,color:t.activeStyle?.color},p=e=>{for(let[e,{original:t,applied:n}]of d){let r=new Set(e.style),i=[.../* @__PURE__ */ new Set([...n.keys(),...r])].map(t=>({property:t,value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)})).filter(({property:e,value:t,priority:i})=>n.has(e)!==r.has(e)||t!==n.get(e)?.value||i!==n.get(e)?.priority);e.style.cssText=t;for(let{property:t,value:n,priority:r}of i)e.style.setProperty(t,n,r)}if(d.clear(),t.activeStyle&&e.length)for(let t of r?.querySelectorAll(`button[data-route-control]`)??[]){if(t.disabled||!e.includes(t.dataset.routeControl))continue;let n=t.style.cssText;for(let[e,n]of Object.entries(f))typeof n==`string`&&t.style.setProperty(e,n,`important`);let r=new Map(Array.from(t.style,e=>[e,{value:t.style.getPropertyValue(e),priority:t.style.getPropertyPriority(e)}]));d.set(t,{original:n,applied:r})}},m=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];p(t),e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},h=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},g=()=>{if(!o.size&&!s.size)return;o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)h(t,n);m()},_=e=>{let t=e?.closest?.(`button[data-route-control]`);if(!t||t.disabled||!r?.contains(t))return;let n=t.dataset.routeControl;if(Object.values(pt).includes(n)&&l(n))return{button:t,action:n}},v=e=>!!e?.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),y=t=>{e.getMode()===`edit`&&mt(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},b=e=>{if(e.defaultPrevented||v(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){g();return}let n=_(e.target),a=!!n&&(e.code===`Space`||e.code===`Enter`),s=a?n.action:t.keyboard?pt[e.code]:void 0;if(!s||!l(s))return;let c=i.activeElement?.closest(`button`);(a||!c||(u||r?.contains(c))&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),m(),y(s)))},x=e=>{o.delete(e.code)&&(e.preventDefault(),m())},S=e=>{if(e.button!==0||i.hidden)return;let t=_(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}m()}},C=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),h(e.pointerId,t.button),m())},w=e=>{let t=_(e.target);t&&!i.hidden&&y(t.action)},T=e=>{v(e.target)&&g()},E=()=>{i.hidden&&g()},D=new Set(u?[]:[t.keyboard?n:void 0,r]);u&&i.addEventListener(`keydown`,b);for(let e of D)e?.addEventListener(`keydown`,b);return i.addEventListener(`keyup`,x,!0),i.addEventListener(`focusin`,T),i.addEventListener(`visibilitychange`,E),r&&(i.addEventListener(`pointerup`,C),i.addEventListener(`pointercancel`,C)),r?.addEventListener(`pointerdown`,S),r?.addEventListener(`lostpointercapture`,C),r?.addEventListener(`click`,w),()=>{u&&i.removeEventListener(`keydown`,b);for(let e of D)e?.removeEventListener(`keydown`,b);i.removeEventListener(`keyup`,x,!0),i.removeEventListener(`focusin`,T),i.removeEventListener(`visibilitychange`,E),r&&(i.removeEventListener(`pointerup`,C),i.removeEventListener(`pointercancel`,C)),r?.removeEventListener(`pointerdown`,S),r?.removeEventListener(`lostpointercapture`,C),r?.removeEventListener(`click`,w),g(),c&&n.getAttribute(`tabindex`)===`0`&&n.removeAttribute(`tabindex`)}},gt=()=>{let e=new W.default({image:new B.default({radius:9,fill:new V.default({color:`#22c55e`}),stroke:new U.default({color:`#fff`,width:2})}),text:new G.default({text:`起飞`,offsetY:-20,fill:new V.default({color:`#15803d`}),stroke:new U.default({color:`#fff`,width:3})}),zIndex:2}),t,n=new W.default({fill:new V.default({color:`rgba(59, 130, 246, .2)`}),stroke:new U.default({color:`#3b82f6`,width:3}),image:new B.default({radius:6,fill:new V.default({color:`#3b82f6`})})}),r=e=>(t??=new W.default({image:new H.default({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0}),zIndex:3}),t.getImage().setRotation((e.get(`heading`)??0)*Math.PI/180),t);return{style:n,lineStyle:n,takeoffStyle:t=>t.get(`isAircraft`)?[e,r(t)]:e,pointStyle:e=>e.get(`isAircraft`)?r(e):n,aircraftStyle:r}},_t=()=>{let e=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},vt=e=>e.map((e,t)=>{let[n,r]=e.getGeometry().getCoordinates(),i=e.get(`extData`)??{};return{...i,uuid:e.get(`uuid`),waylineId:i.waylineId??``,indexNo:t,pointSpeed:i.pointSpeed??0,height:i.height??0,gimbalPichAngle:i.gimbalPichAngle??0,direction:i.direction??e.get(`heading`)??0,shootType:i.shootType??``,supportLightType:i.supportLightType??``,longitude:n,latitude:r}}),yt=(e,{takeoffStyle:t,pointStyle:n})=>{if(!Array.isArray(e))throw Error(`航点必须为数组`);let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let t of e){if(!t||typeof t!=`object`)throw Error(`航点必须为对象`);if(t.uuid!==void 0){if(typeof t.uuid!=`string`||!t.uuid.trim())throw Error(`uuid 必须为非空白字符串`);if(i.has(t.uuid))throw Error(`导入航点存在重复 uuid`);i.add(t.uuid)}if(!Number.isInteger(t.indexNo)||t.indexNo<0)throw Error(`indexNo 必须为非负整数`);if(!Number.isFinite(t.longitude)||Math.abs(t.longitude)>180||!Number.isFinite(t.latitude)||Math.abs(t.latitude)>90)throw Error(`航点经纬度必须为有效的 EPSG:4326 坐标`);for(let e of[`direction`,`pointSpeed`,`gimbalPichAngle`])if(t[e]!==void 0&&!Number.isFinite(t[e]))throw Error(`${e} 必须为有限数值`);if(t.pointSpeed!==void 0&&t.pointSpeed<0)throw Error(`pointSpeed 不能为负数`);if(t.height!==void 0&&(!Number.isFinite(t.height)||t.height<0))throw Error(`height 必须为有限非负数`);if(t.waylineId!==void 0&&typeof t.waylineId!=`string`)throw Error(`waylineId 必须为字符串`);if(t.shootType!==void 0&&![``,`time`,`distance`,`none`].includes(t.shootType))throw Error(`不支持的 shootType`);if(t.supportLightType!==void 0&&(typeof t.supportLightType!=`string`||t.supportLightType!==``&&t.supportLightType.split(`,`).some(e=>![`ir`,`visable`].includes(e))))throw Error(`supportLightType 仅支持 ir、visable 或逗号分隔的组合`);let e=`${t.longitude},${t.latitude}`;if(r.has(e))throw Error(`导入航点存在重复位置`);r.add(e)}return[...e].sort((e,t)=>e.indexNo-t.indexNo).map((r,i)=>{let a={...r,height:r.height??0};delete a.uuid,delete a.indexNo,delete a.longitude,delete a.latitude;let o=new M.default({uuid:r.uuid??_t(),geometry:new N.default([r.longitude,r.latitude]),extData:a,heading:r.direction??0,isTakeoff:i===0,isAircraft:i===e.length-1});return o.setStyle(i===0?t:n),o})},bt=(e={},t={mode:`midpoint`,pixelTolerance:10})=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`编辑配置必须为对象`);let{mode:n=t.mode,pixelTolerance:r=t.pixelTolerance}=e;if(n!==`midpoint`&&n!==`snap`)throw Error(`编辑模式必须为 midpoint 或 snap`);if(!Number.isFinite(r)||r<=0)throw Error(`吸附距离必须为有限正数`);return{mode:n,pixelTolerance:r}},xt=({interaction:e,vectorLayer:t,source:n,points:r,layerOptions:i,midpointStyle:a,pointStyle:o,onDuplicate:s,onInsert:c,getTakeoff:l,isDestroyed:u,isEditing:d,getEditConfig:f,syncPath:p})=>{let m,h,g,_=()=>{let e=h;h=void 0,m=void 0,g=void 0,e?.()};return{get pendingInsertion(){return g?.()},get select(){return m},clearEditing:_,updateEditing:()=>{if(_(),u()||h)return;let v=e.getMap();if(!d()||!v||!e.getActive())return;let y=f(),b=new F.default,x=new P.default({...i,source:b,style:a??new I.Style({image:new I.Circle({radius:5,fill:new I.Fill({color:`#fff`}),stroke:new I.Stroke({color:`#3b82f6`,width:2})})}),zIndex:1/0}),S=()=>{x.setVisible(t.getVisible()),b.clear(),y.mode===`snap`?O():r.slice(1).forEach((e,t)=>{let n=r[t].getGeometry().getCoordinates(),i=e.getGeometry().getCoordinates();b.addFeature(new M.default({geometry:new N.default([(n[0]+i[0])/2,(n[1]+i[1])/2]),insertIndex:t+1}))})},C=new te.default({layers:[t],filter:e=>e!==l()&&r.includes(e),hitTolerance:6});m=C;let w=new q.default({condition:j.primaryAction,filter:e=>e!==l()&&(r.includes(e)||b.hasFeature(e)),hitTolerance:6}),T=new K.default,E=y.mode===`snap`?new ne.default({features:T,pixelTolerance:y.pixelTolerance}):void 0;E?.on(`snap`,e=>{if(D||!t.getVisible())return;let n=e.feature.get(`insertIndex`);if(!e.segment||typeof n!=`number`){b.clear();return}let r=b.getFeatures()[0];r||(r=new M.default(new N.default(e.vertex)),b.addFeature(r)),r.set(`insertIndex`,n),r.getGeometry().setCoordinates(e.vertex)}),E?.on(`unsnap`,()=>{D||b.clear()});let D;g=()=>D?.inserted?D.point:void 0;let O=()=>{T.clear(),!D&&t.getVisible()&&r.forEach((e,t)=>{T.push(new M.default(e.getGeometry().clone())),t>0&&T.push(new M.default({geometry:new ee.default([r[t-1].getGeometry().getCoordinates(),e.getGeometry().getCoordinates()]),insertIndex:t}))})};if(E){let e=E.handleEvent.bind(E);E.handleEvent=t=>{let n=e(t);return t.type===`pointerdown`&&!D&&b.getFeatures().length&&v.renderSync(),n}}let k=()=>{if(!D)return;let e=D;D=void 0,!u()&&(e.inserted?(r.splice(r.indexOf(e.point),1),n.removeFeature(e.point)):e.point.getGeometry().setCoordinates(e.coordinate),p(),S())};w.on(`translatestart`,e=>{let t=e.features.item(0);D={point:t,coordinate:t.getGeometry().getCoordinates(),insertIndex:t.get(`insertIndex`),inserted:!1,moved:!1},T.clear()}),w.on(`translating`,e=>{let t=D;if(t&&(t.moved=!0,E&&t.point.getGeometry().setCoordinates(e.coordinate),D===t)){if(t.insertIndex!==void 0&&!t.inserted){let{point:e,insertIndex:i}=t;if(e.unset(`insertIndex`),e.setProperties({uuid:_t(),extData:{height:r[i-1].get(`extData`)?.height??0},isTakeoff:!1,isAircraft:!1,heading:r[i-1].get(`heading`)}),e.setStyle(o),r.splice(i,0,e),t.inserted=!0,n.addFeature(e),D!==t)return}p(),D===t&&S()}}),w.on(`translateend`,()=>{if(!D)return;let{point:t,moved:n,inserted:i}=D,a=t.getGeometry().getCoordinates();n&&r.some(e=>{let n=e.getGeometry().getCoordinates();return e!==t&&n[0]===a[0]&&n[1]===a[1]})?(k(),s?.(a.slice())):(D=void 0,S(),n&&e.changed(),i&&c(t))}),C.on(`select`,()=>e.changed());let A=()=>{C.getFeatures().clear(),k(),t.un(`change:visible`,S),v.removeInteraction(w),v.removeInteraction(C),E&&(v.removeInteraction(E),E.dispose()),T.clear(),w.dispose(),C.dispose(),x.setMap(null),x.clearRenderer(),x.setSource(null),b.clear(),b.dispose()};h=A,t.on(`change:visible`,S),S(),x.setMap(v),h===A&&(v.addInteraction(C),h===A&&(v.addInteraction(w),h===A&&E&&v.addInteraction(E)))}}},St=(e={})=>{let t=e.style===void 0?gt():{},{map:n=$,layerName:r,style:i=t.style,takeoffStyle:a=t.takeoffStyle,lineStyle:o=t.lineStyle,pointStyle:s=t.pointStyle,aircraftStyle:c=t.aircraftStyle,midpointStyle:l,edit:u,onDuplicate:d,onWaypointAdd:f,onBeforeWaypointRemove:p,onWaypointRemove:m,input:h,speed:g=10,turnSpeed:_=60,verticalSpeed:v=1,...y}=e,b=bt(u);if([g,_,v].some(e=>!Number.isFinite(e)||e<=0))throw Error(`飞行速度、转向速度和升降速度必须为有限正数`);if(!n)throw Error(`请先创建地图实例或通过 config.map 指定地图`);let x=new F.default,S=new P.default({...y,className:r||`ol-layer`,source:x,style:i});S.set(`_layerName`,r);let C=new ee.default([]),w=new M.default(C);w.setStyle(o);let T,E,D=[],O=!1,k=0,A=0,j=`idle`,I=[],L,R,B=0,V=/* @__PURE__ */ new Set,H=e=>{B++;try{return e()}finally{B--,!B&&!O&&J.changed()}},U=()=>{if(!(B||O))for(let e of[...V]){if(O)break;V.has(e)&&e(Z.getState())}},W=()=>{let e=L;L=void 0,e?.(),I=[]},G=()=>{W(),!O&&J.getMap()&&J.getActive()&&(h?.keyboard||h?.container!==void 0)&&(L=ht({getMode:()=>j,getTarget:()=>n.getTargetElement()??void 0,setRouteControls:e=>Z.setRouteControls(e),addRouteWaypoint:()=>Z.addRouteWaypoint(),adjustWaypointHeight:e=>Z.adjustWaypointHeight(e),setActiveControls:e=>{I=[...e],U()}},{...h}))},K=()=>{W(),R?.(),R=void 0,Y.stopRouteControl(),X.clearEditing()},te=e=>C.getCoordinates().findIndex(t=>t[0]===e[0]&&t[1]===e[1]),q=e=>{if(!f||O||!e||e===T)return;let t=D.indexOf(e);t!==-1&&f({...vt([e])[0],indexNo:t})},ne=e=>{if(te(e)!==-1){d?.(e.slice());return}let t=k;if(C.appendCoordinate(e),O||t!==k)return;let n=new M.default({uuid:_t(),geometry:new N.default(e),extData:{height:Y.aircraft?.get(`height`)??E?.get(`extData`)?.height??0},isTakeoff:C.getCoordinates().length===1,isAircraft:!Y.aircraft,heading:Y.heading});if(n.setStyle(n.get(`isTakeoff`)?a:s),E?.set(`isAircraft`,!1,!0),E=n,T||=n,D.push(n),x.addFeature(n),!(O||t!==k))return C.getCoordinates().length===2&&x.addFeature(w),J.changed(),n},re=()=>{if(O)return;let e=k;T=D[0],E=D.at(-1);for(let t of D){let n=t===T;if(t.get(`isTakeoff`)!==n&&t.setStyle(n?a:s),O||e!==k||(t.setProperties({isTakeoff:n,isAircraft:t===E}),O||e!==k))return}C.setCoordinates(D.map(e=>e.getGeometry().getCoordinates())),!(O||e!==k)&&(D.length>1&&!x.hasFeature(w)&&x.addFeature(w),D.length<2&&x.hasFeature(w)&&x.removeFeature(w))},J=new z.default({handleEvent(e){if(O||!J.getActive()||e.type!==`singleclick`||j!==`draw`&&j!==`takeoff`)return!0;let t=e.coordinate.slice();if(!Number.isFinite(t[0])||!Number.isFinite(t[1])||Math.abs(t[0])>180||Math.abs(t[1])>90)return!0;let n=j===`takeoff`,r=te(t);if(r!==-1&&(!n||r>0))return d?.(t.slice()),!1;let i;return H(()=>{let e=k,r=A;if(n&&T){let n=C.getCoordinates();if(n[0]=t,C.setCoordinates(n),O||e!==k)return;T.getGeometry().setCoordinates(t)}else i=ne(t);n&&!O&&e===k&&r===A&&Z.setMode(`idle`)}),q(i),!1}}),Y=ft({speed:g,turnSpeed:_,verticalSpeed:v,interaction:J,geometry:C,vectorLayer:S,aircraftStyle:c,getLastWaypoint:()=>E,isDestroyed:()=>O}),X=xt({interaction:J,vectorLayer:S,source:x,points:D,layerOptions:y,midpointStyle:l,pointStyle:s,onDuplicate:d,onInsert:q,getTakeoff:()=>T,isDestroyed:()=>O,isEditing:()=>j===`edit`,getEditConfig:()=>b,syncPath:re});J.on(`change`,U),J.on(`change:active`,()=>{!J.getActive()&&!O&&Z.setMode(`idle`)});let Z=Object.assign(J,{getState(){let e=X.select?.getFeatures().item(0),t=Y.aircraft,n=t?.getGeometry().getCoordinates();return{mode:j,hasTakeoff:!!T,waypointCount:D.length,selectedWaypoint:e?{...vt([e])[0],indexNo:D.indexOf(e)}:null,aircraft:t&&n?{longitude:n[0],latitude:n[1],heading:t.get(`heading`),height:t.get(`height`),speed:t.get(`speed`)}:null,activeControls:[...I],editConfig:{...b}}},subscribe(e){if(O)throw Error(`航线已销毁`);V.add(e);try{e(Z.getState())}catch(t){throw V.delete(e),t}return()=>{V.delete(e)}},setMode(e){if(O)throw Error(`航线已销毁`);if(![`idle`,`takeoff`,`draw`,`control`,`edit`].includes(e))throw Error(`不支持的航线模式`);if([`draw`,`control`,`edit`].includes(e)&&!T)throw Error(`请先设置起飞点`);if(e!==j){if(e!==`idle`&&J.getMap()!==n)throw Error(`航线交互已移除,请重新创建航线`);if(e===`control`){let e=n.getSize();if(!n.getTargetElement()||!e||e[0]<=0||e[1]<=0)throw Error(`请先将地图挂载到已就绪的容器`);if(n.getView().getProjection().getCode()!==`EPSG:4326`)throw Error(`航线仅支持 EPSG:4326`)}H(()=>{let t=++A,r=()=>O||t!==A,i=j;if(K(),!r()&&(j=e,e!==`idle`&&z.default.prototype.setActive.call(J,!0),!r()))try{if(e===`control`){let e=Y.startRouteControl();if(r())return;e.on(`change`,U),R=()=>e.un(`change`,U)}if(X.updateEditing(),r()||(G(),r()))return;h?.keyboard&&e!==`idle`&&n.getTargetElement()?.focus({preventScroll:!0})}catch(e){throw r()||(K(),r())||(j=i===`control`?`idle`:i,X.updateEditing(),G()),e}})}},setEditConfig(e){if(O)throw Error(`航线已销毁`);let t=bt(e,b);H(()=>{b=t,j===`edit`&&X.updateEditing()})},clear(){Z.importWaypoints([])},exportWaypoints(){return vt(D)},importWaypoints(e){if(O)throw Error(`航线已销毁,请创建新的 Route`);let t=yt(e,{takeoffStyle:a,pointStyle:s});H(()=>{++A;let e=++k,n=()=>O||e!==k;if(K(),!n()&&(j=j===`edit`&&t.length?`edit`:`idle`,D.length=0,T=void 0,E=void 0,x.clear(!0),!n())){for(let e of t)D.push(e);T=D[0],E=D.at(-1),C.setCoordinates(D.map(e=>e.getGeometry().getCoordinates())),!n()&&(x.addFeatures(D.length>1?[...D,w]:D),!n()&&(X.updateEditing(),n()||G()))}})},destroy(){O||(O=!0,++A,j=`idle`,V.clear(),K(),n.un(`change:target`,Q),n.un(`change:view`,Q),J.getMap()?.removeInteraction(J),z.default.prototype.setMap.call(J,null),J.setActive(!1),D.length=0,T=void 0,E=void 0,C.setCoordinates([]),n.removeLayer(S),S.clearRenderer(),S.setSource(null),x.clear(!0),x.dispose(),J.dispose())},setMap(e){if(O)e?.removeInteraction(J);else{if(e&&e!==n)throw Error(`航线不能迁移到其他地图`);e!==J.getMap()&&H(()=>{++A,K(),j=`idle`,z.default.prototype.setMap.call(J,e),G()})}},setActive(e){z.default.prototype.setActive.call(J,e&&!O)},getSelectedWaypoint(){return X.select?.getFeatures().item(0)},adjustWaypointHeight(e,t=X.select?.getFeatures().item(0)){if(!Number.isFinite(e))throw Error(`高度变化必须为有限数值`);if(O||j!==`edit`||!J.getActive()||!t||!D.includes(t))return!1;let n=t.get(`extData`)??{},r=Math.max(0,(n.height??0)+e);if(!Number.isFinite(r))throw Error(`高度必须为有限数值`);return r!==(n.height??0)&&(t.set(`extData`,{...n,height:r}),!O&&D.includes(t)&&J.changed(),!0)},removeWaypoint(e=X.select?.getFeatures().item(0)){if(!X.select||!e||e===T||e===X.pendingInsertion||!D.includes(e))return!1;let t=A,n=k;if(p?.({...vt([e])[0],indexNo:D.indexOf(e)})===!1||O||t!==A||n!==k||!D.includes(e))return!1;if(X.clearEditing(),!D.includes(e))return X.updateEditing(),J.changed(),!1;let r=D.indexOf(e),i=m?{...vt([e])[0],indexNo:r}:void 0;return D.splice(r,1),x.removeFeature(e),re(),X.updateEditing(),J.changed(),!O&&i&&m?.(i),!0},getLayer(){return S},hasTakeoff(){return!!T},setRouteControls(e){Y.setRouteControls(e)},addRouteWaypoint(){Y.aircraft&&J.getActive()&&q(ne(Y.aircraft.getGeometry().getCoordinates()))}}),Q=()=>{O||H(()=>{++A,K(),j=`idle`,G()})};try{n.addLayer(S),n.addInteraction(Z),n.on(`change:target`,Q),n.on(`change:view`,Q),G()}catch(e){throw Z.destroy(),e}return Z},Ct=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new F.default({features:new re.default().readFeatures(e)}),style:t||new I.Style({stroke:new I.Stroke({color:`red`,lineDash:[10],width:3}),fill:new I.Fill({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new P.default(i)},wt=(e,t,n,r)=>t&&n?.get(e[t])||r,Tt=(e,t)=>{let{key:n,crsForm:r}=t,i=[];return e.forEach(e=>{try{let t=e[n],r=Array.isArray(t)?t:JSON.parse(t||`[]`);if(r.length){let t=e.geoType||ue(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),D.default.transform({type:`FeatureCollection`,features:i},r||D.default.WGS84,D.default.WGS84)},Et=(e,t)=>{let{isLine:n,colorMap:r,fillColor:i,colorKey:a,strokeColor:o,fillOpacity:s,strokeWeight:c,activeFillColor:l,activeFillOpacity:u,activeStrokeColor:d,activeStrokeWeight:f}=t||{},p=e.getProperties(),m=new I.Style({stroke:new I.Stroke({width:f??c??4,color:d||wt(p,a,r,o)})}),h=new I.Style({stroke:new I.Stroke({width:c??2,color:wt(p,a,r,o)})});return n||(m.setFill(new I.Fill({color:ce(l||i||``,u??s??1)||ce(wt(p,a,r,i)||``,s??1)})),h.setFill(new I.Fill({color:ce(wt(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},Dt=(e,t)=>{let n=Tt(e,t),r=new g.GeoJSON().readFeatures(n),i=r.map(e=>{let t={...e.getProperties()};return delete t.geometry,t});return r.forEach(e=>{e.setStyle(Et(e,t))}),{features:r,acceptedData:i}},Ot=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=Dt(e,t),s=new P.default({zIndex:5,className:r||`ol-layer`,source:new F.default({features:a})});return i&&rt(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},kt=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=Dt(t,Object.assign({},i,{crsForm:n??i?.crsForm}));r.addFeatures(a);let s=new Set(e.get(`_uuidSet`)||[]);o.forEach(e=>s.add(e._uuid)),e.set(`_uuidSet`,s),e.set(`_dataList`,[...e.get(`_dataList`)||[],...o])},At=(e=[],t)=>Ot(e,Object.assign({},t,{isLine:!1})),jt=(e=[],t)=>Ot(e,Object.assign({},t,{isLine:!0})),Mt=e=>t=>{let{baseUrl:n,markerIcon:r,statusNum:i=5,activeScale:a=1.3,markerSize:o=[32,32]}=t,s=e(n),[c,l]=o,u=Array(i*2);for(let e=0;e<i;e++){let t=s(`${r}-${e}`,`.webp`);u[e]=new I.Style({zIndex:88+e,image:new I.Icon({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new I.Style({zIndex:120,image:new I.Icon({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},Nt=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=D.default.transform([+e.lnglat[0],+e.lnglat[1]],n||D.default.WGS84,D.default.WGS84),i=new O.Feature({geometry:new J.Point(r)});return i.setProperties({...e,unActiveStyle:t[e.style],activeStyle:t[e.style+t.length/2]}),i.setStyle(t[e.style]),i}),Pt=(e,t,n={})=>{let r=e.get(`_massMarksStyles`),i=e?.getSource(),{clear:a}=n,o=Nt(t,r);a&&i?.clear(),i?.addFeatures(o);let s=[...a?[]:e.get(`_dataList`)||[],...t];e.set(`_dataList`,s),e.set(`_uuidSet`,new Set(s.map(e=>e._uuid)))},Ft=(e,t=[])=>{let n=new P.default({zIndex:2e3,source:new F.default({features:Nt(e,t)})});return n.setProperties({_isCustom:!0,_isVectorLayer:!0,_isMassMarksLayer:!0,_statusNum:t.length/2,_dataList:[...e],_uuidSet:new Set(e.map(e=>e._uuid)||[])}),n},It=e=>(t=[],n,r=!0)=>{let{offset:i=[0,0],baseUrl:a,hasLine:o,hasFace:s,layerName:c,isDynamic:l,isAutoFit:u,statusNum:d,markerIcon:f,marksStyles:p,markerSize:m,activeScale:h,vectorConfig:g}=n,_=p||Mt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=Ft(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),rt(v)),o){let e=Ot(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));$.addLayer(e)}if(s){let e=Ot(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));$.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),$.addLayer(v),v},Lt=(e=[])=>{let t=new I.Style({}),n=new Set(e),r=[];return $.getAllLayers().filter(e=>e.get(`_isMassMarksLayer`)).forEach(e=>{e.getSource().getFeatures().forEach(e=>{let i=e.getProperties();n.has(i.status)?(r.push(i),e.setStyle(i.unActiveStyle)):e.setStyle(t)})}),r},Rt=(e,t)=>{let n=$.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e&&t.get(`_isMassMarksLayer`)),r=new I.Style({});n.forEach(e=>{e.getSource().getFeatures().forEach(e=>{let n=e.getProperties();t.has(n.id)?e.setStyle(n.unActiveStyle):e.setStyle(r)})})},zt=(e,t)=>{let n=e.length,r={},{distance:i,minDistance:a,openClick:o,buildStyle:s,singleStyles:c,computedRadius:l,layerName:u=`cluster-layer`}=t,d=e=>(e/n)**(1/18);r[1]=c;let f=e=>{let t=e.get(`features`).length,n=r[t],i=l?l(t):d(t);if(n||(n=new I.Style({image:new B.default({radius:i*20,stroke:new I.Stroke({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new I.Fill({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new I.Text({text:t.toString(),fill:new I.Fill({color:`hsla(${180-i*180}, 100%, 10%, 1)`}),textBaseline:`middle`})}),r[t]=n),Array.isArray(n)){let t=e.get(`features`)[0].get(`styleIndex`)??0;return n[t]}return n},p=new P.default({zIndex:200,className:u,source:new Y.default({distance:i||80,minDistance:a||0,source:new F.default({features:e.map(e=>{let t=new O.Feature(new J.Point(e.lnglat));t.setProperties(e);let n=e.style??0;return t.setProperties({unActiveStyle:c[n],activeStyle:c[n+c.length/2]}),t})})}),style:e=>s?s(e):f(e)});return p.setProperties({_isCustom:!0,_isVectorLayer:!0,_isClusterLayer:!0}),o&&rt(p),p};exports.GeometryType=X,exports.activeFeatureByUid=Ne,exports.addFeaturesByLayer=Pt,exports.addMassMarksLayer=It,exports.appendFeaturesByLayer=kt,exports.baseLayers=ye,exports.buildMassMarksStyles=Mt,exports.changeFeaturesVisibleByIds=Rt,exports.changeLayer=Te,exports.changeSource=we,exports.changeUnselectStyle=$e,exports.createAnimationMarker=Oe,exports.createBaseLayer=_e,exports.createBusinessLayer=Ot,exports.createClusterLayer=zt,exports.createDrawInteraction=dt,exports.createElasticMarkerLayer=et,exports.createGeoJsonLayer=Ct,exports.createIconStyle=Je,exports.createLayerSelectByNames=it,exports.createMap=Ie,exports.createMapInstance=Fe,exports.createMapWorldLayer=ve,exports.createMarker=Ye,exports.createMarkersLayer=Xe,exports.createMassMarksLayer=Ft,exports.createMoveMarkerLayer=tt,exports.createOverlay=ke,exports.createRouteController=St,exports.createSelectByLayer=rt,exports.createTdtVectorSource=Q,exports.createTdtVtsLayer=ie,exports.createText=qe,exports.createVectorFaceLayer=At,exports.createVectorLineLayer=jt,exports.createWmtsLayer=me,exports.createZheJiangLayer=be,exports.disposeInstance=Re,exports.disposeMap=Le,exports.emitter=ae,exports.flyToAnimate=Ke,exports.getDrawStyle=ut,exports.getLayerByName=xe,exports.getLayersDataList=le,exports.getMapInstance=ze,Object.defineProperty(exports,"instance",{enumerable:!0,get:function(){return $}}),exports.removeAllLayers=je,exports.removeLayerByName=Se,exports.removeOverlays=Ee,exports.resetActiveFeature=Me,exports.resetActiveVector=Ae,exports.resetMap=Ve,exports.resetZoomAndCenter=Be,exports.setFitViewByCoords=Ue,exports.setFitViewByGeom=We,exports.setFitViewByLayer=Ge,exports.updateMarksLayersByStatus=Lt,Object.keys(c).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return c[e]}})});
package/dist/index.d.cts CHANGED
@@ -244,6 +244,12 @@ export type RouteConfig = Partial<LayerConfig> & {
244
244
  midpointStyle?: StyleLike;
245
245
  /** 重复位置被拒绝时调用,参数为 EPSG:4326 经纬度副本。 */
246
246
  onDuplicate?: (coordinate: Coordinate) => void;
247
+ /** 普通航点打点或编辑插点成功后调用;参数为航点顶层副本,起飞点、修改、导入和回滚不触发。 */
248
+ onWaypointAdd?: (waypoint: RouteWaypoint) => void;
249
+ /** 普通航点删除前同步调用;false 阻止删除,true 或无返回值继续;起飞点、清空和导入不触发。 */
250
+ onBeforeWaypointRemove?: (waypoint: RouteWaypoint) => boolean | void;
251
+ /** 普通航点删除完成后同步调用,参数保留删除前序号;起飞点、清空和导入不触发。 */
252
+ onWaypointRemove?: (waypoint: RouteWaypoint) => void;
247
253
  };
248
254
  /** 飞行操控动作,与键盘或面板输入无关。 */
249
255
  export type RouteControl = 'forward' | 'backward' | 'left' | 'right' | 'turnLeft' | 'turnRight' | 'ascend' | 'descend';
package/dist/index.d.mts CHANGED
@@ -244,6 +244,12 @@ export type RouteConfig = Partial<LayerConfig> & {
244
244
  midpointStyle?: StyleLike;
245
245
  /** 重复位置被拒绝时调用,参数为 EPSG:4326 经纬度副本。 */
246
246
  onDuplicate?: (coordinate: Coordinate) => void;
247
+ /** 普通航点打点或编辑插点成功后调用;参数为航点顶层副本,起飞点、修改、导入和回滚不触发。 */
248
+ onWaypointAdd?: (waypoint: RouteWaypoint) => void;
249
+ /** 普通航点删除前同步调用;false 阻止删除,true 或无返回值继续;起飞点、清空和导入不触发。 */
250
+ onBeforeWaypointRemove?: (waypoint: RouteWaypoint) => boolean | void;
251
+ /** 普通航点删除完成后同步调用,参数保留删除前序号;起飞点、清空和导入不触发。 */
252
+ onWaypointRemove?: (waypoint: RouteWaypoint) => void;
247
253
  };
248
254
  /** 飞行操控动作,与键盘或面板输入无关。 */
249
255
  export type RouteControl = 'forward' | 'backward' | 'left' | 'right' | 'turnLeft' | 'turnRight' | 'ascend' | 'descend';
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{TdtDecoderWorkerClient as e,createTdtVtsUrl as t,redactTdtToken as n}from"tdt-vts-core";import r from"ol/format/MVT";import i from"ol/layer/VectorTile";import a from"ol/TileState";import o from"ol/source/VectorTile";import s from"mitt";import{WMTS as c,XYZ as l}from"ol/source";import u from"ol/layer/Tile";import{GeoJSON as d,WMTSCapabilities as f}from"ol/format";import{optionsFromCapabilities as p}from"ol/source/WMTS";import{TileGrid as m}from"ol/tilegrid";import{Tile as h}from"ol/layer";import g from"ol/tilegrid/WMTS";import{unByKey as _}from"ol/Observable";import v from"ol/layer/Image";import y from"ol/source/Raster";import b from"ol/Map";import x from"ol/View";import{defaults as S}from"ol/control";import C from"gcoord";import{Feature as w,Overlay as T}from"ol";import{Select as E,defaults as D}from"ol/interaction";import{boundingExtent as O,getCenter as k}from"ol/extent";import{primaryAction as A,singleClick as j}from"ol/events/condition";import M from"ol/Feature";import N from"ol/geom/Point";import P from"ol/layer/Vector";import F from"ol/source/Vector";import{Circle as I,Fill as L,Icon as R,RegularShape as z,Stroke as B,Style as V,Text as H}from"ol/style";import ee from"ol/interaction/Draw";import{getArea as te,getLength as ne,offset as U}from"ol/sphere";import re from"ol/geom/LineString";import W from"ol/interaction/Interaction";import G from"ol/style/Circle";import K from"ol/style/Fill";import q from"ol/style/Icon";import J from"ol/style/Stroke";import ie from"ol/style/Style";import ae from"ol/style/Text";import oe from"ol/Collection";import se from"ol/interaction/Select";import ce from"ol/interaction/Translate";import le from"ol/interaction/Snap";import ue from"ol/format/GeoJSON";import{Point as de}from"ol/geom";import fe from"ol/source/Cluster";export*from"tdt-vts-core";let pe=/* @__PURE__ */ function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const me=async e=>{if(typeof e!=`string`)return e;if(!e.trim())throw TypeError(`style 地址不能为空`);let t=await fetch(e);if(!t.ok)throw Error(`加载 style 失败:HTTP ${t.status}`);return await t.json()},he=i=>{if(!i.hosts?.length||i.hosts.some(e=>!e.trim()))throw TypeError(`hosts 不能为空`);let s=new e(i.restoreMode,i.decoderOptions),c=new r({layerName:`mvt:layer`}),l=new o({projection:`EPSG:3857`,minZoom:i.minZoom??1,maxZoom:i.maxZoom??18,tileSize:512,wrapX:!0,format:c,attributions:`© <a href="https://www.tianditu.gov.cn/" target="_blank" rel="noopener">天地图</a>`,tileUrlFunction(e){if(!e)return;let[n,r,a]=e;if(n!==void 0&&r!==void 0&&a!==void 0)return t([n,r,a],{token:i.token,hosts:i.hosts,maxZoom:i.maxZoom??18,wrapX:!0})},tileLoadFunction(e,t){let r=e;r.setLoader(async(e,o,l)=>{let u=n(t);try{let n=await s.decode(t),a=c.readFeatures(n.buffer,{extent:e,featureProjection:l});r.setFeatures(a),i.diagnostics?.onDecoded?.(n.stats,u)}catch(e){let t=e instanceof Error?e:Error(String(e));i.diagnostics?.onError?.(t,u),console.error(`天地图私有 VTS 加载失败`,u,t),r.setState(a.ERROR)}})}}),u=l.dispose.bind(l);return l.dispose=()=>{s.dispose(),u()},{source:l,decoder:s}},ge=async e=>{let t=await me(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=he({token:e.token,hosts:e.hosts,restoreMode:`auto`}),r=new i({declutter:!0,source:n}),a=r.dispose.bind(r);r.dispose=()=>{n.dispose(),a()};try{let{applyBackground:e,applyStyle:n}=await import(`ol-mapbox-style`),i=structuredClone(t);for(let e of i.layers)e.type===`symbol`&&e.layout?.[`text-font`]&&(e.layout[`text-font`]=[`sans-serif`]);return await Promise.all([n(r,i,{projection:`EPSG:4326`,source:`base-tdt-vector-tile`,updateSource:!1}),e(r,i)]),r}catch(e){throw r.dispose(),e}},_e=s();let Y;const ve=e=>{Y=e},ye=()=>{Y=void 0},be=(e,t)=>{if(e.startsWith(`#`)){let n=e.replace(`#`,``);return n.length===3&&(n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]),`rgba(${parseInt(n.substring(0,2),16)}, ${parseInt(n.substring(2,4),16)}, ${parseInt(n.substring(4,6),16)}, ${t})`}return e},xe=()=>Y?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],Se=e=>{let t=e=>!Array.isArray(e)||e.length===0?0:1+t(e[0]),n=e=>{if(!Array.isArray(e)||e.length<3)return!1;let t=e[0],n=e[e.length-1];return t[0]===n[0]&&t[1]===n[1]},r=e=>Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`,i=e=>Array.isArray(e)&&e.length>=2&&e.every(r),a=e=>Array.isArray(e)?(t(e)===2?[e]:e).every(e=>Array.isArray(e)&&e.length>=4&&n(e)&&e.every(r)):!1,o=t(e);try{return o<2||!e||e.length===0?`Invalid`:o===2&&i(e)?n(e)&&e.length>=4?`Polygon`:`LineString`:o===3&&Array.isArray(e)&&e.every(i)?a(e)?`Polygon`:e.every(e=>!n(e))?`MultiLineString`:`Invalid`:o===4&&Array.isArray(e)&&e.every(e=>a(e))?`MultiPolygon`:`Invalid`}catch(e){return console.error(`Error analyzing coordinates:`,e),`Invalid`}},Ce=new f,we=/* @__PURE__ */ new Map,Te=async e=>{let t=we.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=Ce.read(await n.text());return we.set(e,r),r},Ee=e=>async t=>{let{style:n,format:r,version:i,layerName:a,matrixSet:o}=t,[s,l]=a.split(`:`),d=`${e}/${s}/${l}/gwc/service/wmts?request=GetCapabilities`,f=await Te(d),m=p(f,{style:n||``,layer:l,version:i||`1.1.0`,format:r||`image/png`,matrixSet:o||`EPSG:4326`});if(!m)throw Error(`Unable to create TileLayer`);return new u({zIndex:3,className:a,source:new c(m)})},X=(e,t)=>{let n=t.get(`_selectInteraction`);n&&(e.removeInteraction(n),n.dispose(),t.unset(`_selectInteraction`));let r=t.get(`_resolutionChangeKey`);r&&(_(r),t.unset(`_resolutionChangeKey`));let i=t.get(`_dynamicMarkerTimer`);i!==void 0&&(clearTimeout(i),t.unset(`_dynamicMarkerTimer`)),t.getSource()?.dispose(),e.removeLayer(t),t.dispose()},De=`c77eddc667c5bed016fded560baf93e7`,Oe=(e=`hzsyvector_dark`)=>{let t={zIndex:-5,preload:1,minZoom:8,maxZoom:21,source:new l({tileGrid:new m({tileSize:256,resolutions:[.00549933137253187,.00274966568626595,.00137483284313297,.000687416421566485,.000343708210783242,.000171854105391621,859270526958104e-19,429635263479052e-19,214817631739526e-19,107408815869763e-19,537044079348816e-20,268522039674407e-20,134261019837204e-20],origin:[118.122911693886,31.2869311022836],extent:[116.43263049006,28.6201742126026,123.705594256347,31.9765041681924]}),projection:`EPSG:4326`,urls:[`https://ywtg.citybrain.hangzhou.gov.cn/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9456/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9457/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9458/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9459/${e}/{z}/{y}/{x}`]}),properties:{_isBaseLayer:!0,_layerName:e}};return new h(t)},ke=(e,t=De)=>{let[n,r]=e.split(`_`),i={preload:1,zIndex:-10,cacheSize:20240,properties:{_isBaseLayer:!0,_layerName:e},source:new c({crossOrigin:`anonymous`,projection:`EPSG:4326`,wrapX:!0,layer:n,style:`default`,version:`1.0.0`,format:`image/png`,matrixSet:r,tileGrid:new g({tileSize:256,origin:[-180,90],matrixIds:[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`,`13`,`14`,`15`,`16`,`17`,`18`,`19`],resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625,.010986328125,.0054931640625,.00274658203125,.001373291015625,.0006866455078125,.00034332275390625,.000171661376953125,858306884765625e-19,4291534423828125e-20,21457672119140625e-21,10728836059570312e-21,5364418029785156e-21,2682209014892578e-21]}),url:`https://t{0-7}.tianditu.gov.cn/${e}/wmts?tk=${t}`})};return new h(i)},Ae=e=>({baseImgLayer:new h({className:`img-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCiaLayer:new h({className:`img-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2}),baseVecLayer:new h({className:`vec-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCvaLayer:new h({className:`vec-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2})}),je=(e=`emap`,t=`3b0cdd02-c366-4363-b6de-081a9f12b364`)=>new h({preload:1,minZoom:4,maxZoom:20,zIndex:-10,cacheSize:20240,source:new l({wrapX:!0,projection:`EPSG:4326`,crossOrigin:`anonymous`,url:`https://ditu{0-6}.zjzwfw.gov.cn/services/wmts/${e}/default/oss/getTile/{z}/{y}/{x}?token=${t}`})}),Me=e=>Y.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Ne=e=>{Y.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e).forEach(e=>{X(Y,e)})},Pe=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),Fe=(e,t,n,r={})=>{let i=new y({sources:[e],operationType:`image`,operation:(e,t)=>(((e,t)=>{let n=t.ratioArray,r=t.rgbColorArray;if(n&&r){let[t=0,i=0,a=0]=n;for(let n=0;n<e.length;n+=4){let o=e[n],s=e[n+1],c=e[n+2],l=o*t+s*i+c*a;e[n]=r[0]-l,e[n+1]=r[1]-l,e[n+2]=r[2]-l}}})(e[0].data,t),e[0]),threads:r.threads??Pe()});return i.on(`beforeoperations`,e=>{e.data.ratioArray=n,e.data.rgbColorArray=t}),i},Ie=(e,t,n,r={})=>new v({source:Fe(e,t,n,r)}),Z=(e=``)=>{Y&&Y.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>Y.removeOverlay(e))},Le=()=>Z(`_isAnimationMarker`),Re=(e,t)=>{Le();let{width:n,height:r,lnglat:i,crsForm:a}=t,o=document.createElement(`div`),s=document.createElement(`img`);s.src=e,s.alt=``,n!==void 0&&(s.width=n),r!==void 0&&(s.height=r),o.append(s);let c=new T({element:o,stopEvent:!1,positioning:`bottom-center`,position:C.transform([+i[0],+i[1]],a||C.WGS84,C.WGS84)});c.set(`_isAnimationMarker`,!0),Y.addOverlay(c)},ze=(e={id:`popup-container`,positioning:`top-center`})=>new T(Object.assign({element:document.getElementById(e.id)||void 0},e)),Be=()=>{Z(),Y.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},Ve=()=>{Z(),Y&&Y.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||X(Y,e)})},He=()=>{Z(),Y.getAllLayers().filter(e=>e.get(`_isVectorLayer`)).forEach(e=>{let t=e.get(`_selectInteraction`);t&&(t.dispatchEvent({type:`select`,selected:[],mapBrowserEvent:void 0,deselected:t.getFeatures().getArray()}),t.getFeatures().clear())})},Ue=e=>{let t=Y.getAllLayers().filter(e=>e.get(`_isVectorLayer`));if(t.length){let n=t.find(t=>t.get(`_uuidSet`).has(e)&&t.get(`_selectInteraction`));if(n){let t=(n.getSource()?.getFeatures()||[]).find(t=>t.get(`_uuid`)===e),r=n.get(`_selectInteraction`);if(r){let n=r.getFeatures().getArray();n.find(t=>t.get(`_uuid`)===e)||(r.dispatchEvent({type:`select`,deselected:n,selected:[t],mapBrowserEvent:void 0}),r.getFeatures().push(t))}}}};let Q=[119.71512016971076,30.122490541963536];const We=(e={})=>{if(Y)return Y;let t=Ge(e);return ve(t),t},Ge=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:Q,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[Oe()],constrainResolution:!1,smoothExtentConstraint:!1,tk:De},e||{}),n=new b({view:new x(t),controls:S({zoom:!1,rotate:!1,attribution:!1}),interactions:D({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[Oe()]});Q=t.center||Q,n.activeBaseLayer=t.baseLayer;let r=e=>n.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e);n.getLayerByName=r,n.removeLayerByName=e=>{let t=r(e);t&&X(n,t)},n.changeLayersByNames=(e,t)=>{n.getAllLayers().filter(e=>t.includes(e.getClassName())).forEach(t=>t.setVisible(e?.includes(t.getClassName())))};let i,a;return n.on(`pointermove`,e=>{if(a=e.pixel,i!==void 0)return;let t=()=>{i=void 0;let e=n.getTargetElement();a&&e&&(e.style.cursor=n.hasFeatureAtPixel(a)?`pointer`:``)};i=typeof globalThis.requestAnimationFrame==`function`?globalThis.requestAnimationFrame(t):setTimeout(t,16)}),n.set(`_disposePointerMove`,()=>{i!==void 0&&(typeof globalThis.cancelAnimationFrame==`function`?globalThis.cancelAnimationFrame(i):clearTimeout(i),i=void 0)}),n},Ke=()=>{if(!Y)return;let e=Y;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>X(e,t)),e.setTarget(``),e.dispose(),ye()},qe=()=>Ke(),Je=()=>Y,Ye=(e=Q)=>{Y&&Y.getView().animate({zoom:9.4,center:e,duration:1e3})},Xe=(e={center:Q,isClearAll:!0})=>{Ve(),Ye(e.center||Q)},Ze={padding:[50,50,50,50],duration:1e3},Qe=(e,t=Y,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=O(e);r.fit(t,{...Ze,...n||{}})}},$e=(e,t=Y,n)=>{t.getView().fit(e,{...Ze,...n||{}})},et=(e,t=Y,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...Ze,...n||{}})},tt=(e,t)=>{let n=Y.getView(),r=n.getZoom();n.animate({center:e,duration:2e3}),t?n.animate({zoom:t-2,duration:1e3},{zoom:t,duration:1e3}):n.animate({zoom:r-2,duration:1e3},{zoom:r+2>12?12:r+2,duration:1e3})},nt=e=>new H({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new L({color:`rgba(255, 255, 255, 0.8)`})}),rt=(e,t=!1)=>new V({image:new R({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?nt(e):void 0}),it=(e,t)=>{let n=new M({geometry:new N([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(rt(e)),n},at=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new F;return e.forEach(e=>a.addFeature(it(e,t))),new P({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},ot=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(rt({...t,img:t[n]},!1))})},st=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?ot([e],Y.getView().getZoom()):e.setStyle(rt(r,t))},ct=e=>{e.forEach(e=>{st(e,!1)}),e.clear()},lt=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=at(n,t),i=r.getSource().getFeatures(),a=Y.getView();return ot(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>ot(i,a.getZoom()))),r},ut=(e,t)=>{let n=it(e,t),r=new P({className:t.layerName||`ol-layer`,source:new F({features:[n]})});return Y.addLayer(r),{vectorLayer:r}},dt=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),_e.emit(`selected-feature`,n),e.set(`_hasActive`,!0),e.get(`_isDynamic`)){let t=r.getImage(),i=e.get(`_dynamicMarkerTimer`);i!==void 0&&clearTimeout(i);let a=setTimeout(()=>{e.unset(`_dynamicMarkerTimer`),_e.emit(`dynamic-marker`,Object.assign({},n.rawData||{},{lnglat:n.lnglat,style:n.style,crsForm:n.crsForm,width:t.getWidth(),height:t.getHeight()}))},1e3);e.set(`_dynamicMarkerTimer`,a)}if(e.get(`_isAutoFit`)){let e=Y.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:k(t.getGeometry().getExtent())})}},ft=e=>{let t=new E({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!j(t))return!1;let n=!1;return Y.forEachFeatureAtPixel(t.pixel,()=>{n=!0},{layerFilter:t=>t===e}),n}});return t.on(`select`,t=>{let{selected:n,deselected:r}=t;if(n.length){let t=n[0];if(e.get(`_isClusterLayer`)){let n=t.get(`features`);n.length===1&&dt(e,n[0])}else dt(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),Y.addInteraction(t),e.set(`_selectInteraction`,t),t},pt=(e,t,n)=>{let r=new E({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];st(t,!1),n?.(t)}if(r.length){let e=r[0];st(e,!0),t?.(e)}}),r},mt=e=>{let t=te(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},ht=e=>{let t=ne(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},gt=new V({fill:new L({color:`rgba(255, 255, 255, 0.2)`}),stroke:new B({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new I({radius:5,stroke:new B({color:`rgba(0, 0, 0, 0.7)`}),fill:new L({color:`rgba(255, 255, 255, 0.2)`})})}),_t=/* @__PURE__ */ new WeakMap,vt=e=>{let t=_t.get(e);if(t)return t;let n=new V({text:new H({font:`14px`,fill:new L({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new L({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new z({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new L({color:`rgba(0, 0, 0, 0.7)`})})});return _t.set(e,n),n},yt=(e,t=gt)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=mt(r)):r.getType()===`LineString`&&(i=new N(r.getLastCoordinate()),a=ht(r)),i&&a){let t=vt(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},bt=(e=`Point`,t,n)=>new ee({source:t.getSource(),type:e,style:n?e=>yt(e,void 0):void 0}),xt=({geometry:e,interaction:t,isDestroyed:n,vectorLayer:r,aircraftStyle:i,speed:a,turnSpeed:o,verticalSpeed:s,getLastWaypoint:c})=>{let l,u,d=0,f,p,m,h=0,g=0,_=/* @__PURE__ */ new Set,v=()=>{_.clear(),m!==void 0&&f?.cancelAnimationFrame(m),m=void 0},y=e=>{m=void 0;let n=t.getMap();if(!l||!n||!t.getActive()){v();return}let r=l,c=Math.min(Math.max(0,e-h)/1e3,.1);h=e;let u=Number(_.has(`turnRight`))-Number(_.has(`turnLeft`));d=(d+u*o*c+360)%360,i===void 0&&l.getStyle().getImage().setRotation(d*Math.PI/180);let p=Number(_.has(`forward`))-Number(_.has(`backward`)),g=Number(_.has(`right`))-Number(_.has(`left`));if(p||g){let e=n.getView(),t=U(r.getGeometry().getCoordinates(),a*c,d*Math.PI/180+Math.atan2(g,p));if(r.getGeometry().setCoordinates(t),l!==r||(e.setCenter(t),l!==r))return}let b=Number(_.has(`ascend`))-Number(_.has(`descend`));r.set(`height`,Math.max(0,r.get(`height`)+b*s*c)),l===r&&(l.set(`heading`,d),l===r&&(l.changed(),l===r&&_.size&&m===void 0&&(m=f.requestAnimationFrame(y))))},b=()=>{g++,v(),p?.(),p=void 0,f=void 0;let e=u;if(u=void 0,l=void 0,e){let t=e.getSource();e.setMap(null),e.clearRenderer(),e.setSource(null),t?.clear(!0),t?.dispose()}c()?.set(`isAircraft`,!0,!0),n()||r.changed()};return{get aircraft(){return l},get heading(){return d},get revision(){return g},startRouteControl(){let n=t.getMap(),o=n?.getTargetElement(),s=n?.getSize();if(!n||!o||!s||s[0]<=0||s[1]<=0||!t.getActive())throw Error(`请先将启用的航点交互添加到已就绪的地图`);let m=n.getView(),h=++g,_=()=>{if(h!==g||t.getMap()!==n||n.getView()!==m||!t.getActive()||n.getTargetElement()!==o)throw Error(`飞行操控启动已取消`)};if(l)return l;d=0,n.renderSync(),_();let v=e.getLastCoordinate();return l=new M({geometry:new N(v),isAircraft:!0,heading:d,height:c()?.get(`extData`)?.height??0,speed:a}),l.setStyle(i??new V({image:new R({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0})})),u=new P({source:new F({features:[l]})}),u.setMap(n),_(),n.on(`change:view`,b),f=o.ownerDocument.defaultView,p=()=>n.un(`change:view`,b),c()?.set(`isAircraft`,!1,!0),r.changed(),_(),l},setRouteControls(e){let n=[`forward`,`backward`,`left`,`right`,`turnLeft`,`turnRight`,`ascend`,`descend`];if(e.some(e=>!n.includes(e)))throw Error(`不支持的飞行动作`);l&&t.getActive()&&(_=new Set(e),_.size?m===void 0&&(h=f.performance.now(),m=f.requestAnimationFrame(y)):v())},stopRouteControl:b}},St={KeyW:`forward`,KeyS:`backward`,KeyA:`left`,KeyD:`right`,KeyQ:`turnLeft`,KeyE:`turnRight`,KeyZ:`descend`,KeyC:`ascend`,Space:`waypoint`},Ct=e=>e===`ascend`||e===`descend`,wt=(e,t)=>{let n=e.getTarget(),r=typeof t.container==`string`?(n?.ownerDocument??globalThis.document)?.getElementById(t.container):t.container;if(typeof t.container==`string`&&!r)throw Error(`找不到航线输入容器:${t.container}`);if(e.getMode()!==`control`&&e.getMode()!==`edit`)return()=>void 0;let i=(n??r)?.ownerDocument,a=i?.defaultView;if(!i||!a)return()=>{e.setRouteControls([]),e.setActiveControls([])};let o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map,c=!!t.keyboard&&!!n&&!n.hasAttribute(`tabindex`);c&&(n.tabIndex=0);let l=t=>e.getMode()===`control`||e.getMode()===`edit`&&Ct(t),u=!!t.keyboard&&e.getMode()===`control`,d=/* @__PURE__ */ new Map,f={"background-color":t.activeStyle?.backgroundColor,"border-top-color":t.activeStyle?.borderColor,"border-right-color":t.activeStyle?.borderColor,"border-bottom-color":t.activeStyle?.borderColor,"border-left-color":t.activeStyle?.borderColor,color:t.activeStyle?.color},p=e=>{for(let[e,{original:t,applied:n}]of d){let r=new Set(e.style),i=[.../* @__PURE__ */ new Set([...n.keys(),...r])].map(t=>({property:t,value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)})).filter(({property:e,value:t,priority:i})=>n.has(e)!==r.has(e)||t!==n.get(e)?.value||i!==n.get(e)?.priority);e.style.cssText=t;for(let{property:t,value:n,priority:r}of i)e.style.setProperty(t,n,r)}if(d.clear(),t.activeStyle&&e.length)for(let t of r?.querySelectorAll(`button[data-route-control]`)??[]){if(t.disabled||!e.includes(t.dataset.routeControl))continue;let n=t.style.cssText;for(let[e,n]of Object.entries(f))typeof n==`string`&&t.style.setProperty(e,n,`important`);let r=new Map(Array.from(t.style,e=>[e,{value:t.style.getPropertyValue(e),priority:t.style.getPropertyPriority(e)}]));d.set(t,{original:n,applied:r})}},m=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];p(t),e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},h=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},g=()=>{if(!o.size&&!s.size)return;o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)h(t,n);m()},_=e=>{let t=e?.closest?.(`button[data-route-control]`);if(!t||t.disabled||!r?.contains(t))return;let n=t.dataset.routeControl;if(Object.values(St).includes(n)&&l(n))return{button:t,action:n}},v=e=>!!e?.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),y=t=>{e.getMode()===`edit`&&Ct(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},b=e=>{if(e.defaultPrevented||v(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){g();return}let n=_(e.target),a=!!n&&(e.code===`Space`||e.code===`Enter`),s=a?n.action:t.keyboard?St[e.code]:void 0;if(!s||!l(s))return;let c=i.activeElement?.closest(`button`);(a||!c||(u||r?.contains(c))&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),m(),y(s)))},x=e=>{o.delete(e.code)&&(e.preventDefault(),m())},S=e=>{if(e.button!==0||i.hidden)return;let t=_(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}m()}},C=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),h(e.pointerId,t.button),m())},w=e=>{let t=_(e.target);t&&!i.hidden&&y(t.action)},T=e=>{v(e.target)&&g()},E=()=>{i.hidden&&g()},D=new Set(u?[]:[t.keyboard?n:void 0,r]);u&&i.addEventListener(`keydown`,b);for(let e of D)e?.addEventListener(`keydown`,b);return i.addEventListener(`keyup`,x,!0),i.addEventListener(`focusin`,T),i.addEventListener(`visibilitychange`,E),r&&(i.addEventListener(`pointerup`,C),i.addEventListener(`pointercancel`,C)),r?.addEventListener(`pointerdown`,S),r?.addEventListener(`lostpointercapture`,C),r?.addEventListener(`click`,w),()=>{u&&i.removeEventListener(`keydown`,b);for(let e of D)e?.removeEventListener(`keydown`,b);i.removeEventListener(`keyup`,x,!0),i.removeEventListener(`focusin`,T),i.removeEventListener(`visibilitychange`,E),r&&(i.removeEventListener(`pointerup`,C),i.removeEventListener(`pointercancel`,C)),r?.removeEventListener(`pointerdown`,S),r?.removeEventListener(`lostpointercapture`,C),r?.removeEventListener(`click`,w),g(),c&&n.getAttribute(`tabindex`)===`0`&&n.removeAttribute(`tabindex`)}},Tt=()=>{let e=new ie({image:new G({radius:9,fill:new K({color:`#22c55e`}),stroke:new J({color:`#fff`,width:2})}),text:new ae({text:`起飞`,offsetY:-20,fill:new K({color:`#15803d`}),stroke:new J({color:`#fff`,width:3})}),zIndex:2}),t,n=new ie({fill:new K({color:`rgba(59, 130, 246, .2)`}),stroke:new J({color:`#3b82f6`,width:3}),image:new G({radius:6,fill:new K({color:`#3b82f6`})})}),r=e=>(t??=new ie({image:new q({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0}),zIndex:3}),t.getImage().setRotation((e.get(`heading`)??0)*Math.PI/180),t);return{style:n,lineStyle:n,takeoffStyle:t=>t.get(`isAircraft`)?[e,r(t)]:e,pointStyle:e=>e.get(`isAircraft`)?r(e):n,aircraftStyle:r}},Et=()=>{let e=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},Dt=e=>e.map((e,t)=>{let[n,r]=e.getGeometry().getCoordinates(),i=e.get(`extData`)??{};return{...i,uuid:e.get(`uuid`),waylineId:i.waylineId??``,indexNo:t,pointSpeed:i.pointSpeed??0,height:i.height??0,gimbalPichAngle:i.gimbalPichAngle??0,direction:i.direction??e.get(`heading`)??0,shootType:i.shootType??``,supportLightType:i.supportLightType??``,longitude:n,latitude:r}}),Ot=(e,{takeoffStyle:t,pointStyle:n})=>{if(!Array.isArray(e))throw Error(`航点必须为数组`);let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let t of e){if(!t||typeof t!=`object`)throw Error(`航点必须为对象`);if(t.uuid!==void 0){if(typeof t.uuid!=`string`||!t.uuid.trim())throw Error(`uuid 必须为非空白字符串`);if(i.has(t.uuid))throw Error(`导入航点存在重复 uuid`);i.add(t.uuid)}if(!Number.isInteger(t.indexNo)||t.indexNo<0)throw Error(`indexNo 必须为非负整数`);if(!Number.isFinite(t.longitude)||Math.abs(t.longitude)>180||!Number.isFinite(t.latitude)||Math.abs(t.latitude)>90)throw Error(`航点经纬度必须为有效的 EPSG:4326 坐标`);for(let e of[`direction`,`pointSpeed`,`gimbalPichAngle`])if(t[e]!==void 0&&!Number.isFinite(t[e]))throw Error(`${e} 必须为有限数值`);if(t.pointSpeed!==void 0&&t.pointSpeed<0)throw Error(`pointSpeed 不能为负数`);if(t.height!==void 0&&(!Number.isFinite(t.height)||t.height<0))throw Error(`height 必须为有限非负数`);if(t.waylineId!==void 0&&typeof t.waylineId!=`string`)throw Error(`waylineId 必须为字符串`);if(t.shootType!==void 0&&![``,`time`,`distance`,`none`].includes(t.shootType))throw Error(`不支持的 shootType`);if(t.supportLightType!==void 0&&(typeof t.supportLightType!=`string`||t.supportLightType!==``&&t.supportLightType.split(`,`).some(e=>![`ir`,`visable`].includes(e))))throw Error(`supportLightType 仅支持 ir、visable 或逗号分隔的组合`);let e=`${t.longitude},${t.latitude}`;if(r.has(e))throw Error(`导入航点存在重复位置`);r.add(e)}return[...e].sort((e,t)=>e.indexNo-t.indexNo).map((r,i)=>{let a={...r,height:r.height??0};delete a.uuid,delete a.indexNo,delete a.longitude,delete a.latitude;let o=new M({uuid:r.uuid??Et(),geometry:new N([r.longitude,r.latitude]),extData:a,heading:r.direction??0,isTakeoff:i===0,isAircraft:i===e.length-1});return o.setStyle(i===0?t:n),o})},kt=(e={},t={mode:`midpoint`,pixelTolerance:10})=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`编辑配置必须为对象`);let{mode:n=t.mode,pixelTolerance:r=t.pixelTolerance}=e;if(n!==`midpoint`&&n!==`snap`)throw Error(`编辑模式必须为 midpoint 或 snap`);if(!Number.isFinite(r)||r<=0)throw Error(`吸附距离必须为有限正数`);return{mode:n,pixelTolerance:r}},At=({interaction:e,vectorLayer:t,source:n,points:r,layerOptions:i,midpointStyle:a,pointStyle:o,onDuplicate:s,getTakeoff:c,isDestroyed:l,isEditing:u,getEditConfig:d,syncPath:f})=>{let p,m,h=()=>{let e=m;m=void 0,p=void 0,e?.()};return{get select(){return p},clearEditing:h,updateEditing:()=>{if(h(),l()||m)return;let g=e.getMap();if(!u()||!g||!e.getActive())return;let _=d(),v=new F,y=new P({...i,source:v,style:a??new V({image:new I({radius:5,fill:new L({color:`#fff`}),stroke:new B({color:`#3b82f6`,width:2})})}),zIndex:1/0}),b=()=>{y.setVisible(t.getVisible()),v.clear(),_.mode===`snap`?E():r.slice(1).forEach((e,t)=>{let n=r[t].getGeometry().getCoordinates(),i=e.getGeometry().getCoordinates();v.addFeature(new M({geometry:new N([(n[0]+i[0])/2,(n[1]+i[1])/2]),insertIndex:t+1}))})},x=new se({layers:[t],filter:e=>e!==c()&&r.includes(e),hitTolerance:6});p=x;let S=new ce({condition:A,filter:e=>e!==c()&&(r.includes(e)||v.hasFeature(e)),hitTolerance:6}),C=new oe,w=_.mode===`snap`?new le({features:C,pixelTolerance:_.pixelTolerance}):void 0;w?.on(`snap`,e=>{if(T||!t.getVisible())return;let n=e.feature.get(`insertIndex`);if(!e.segment||typeof n!=`number`){v.clear();return}let r=v.getFeatures()[0];r||(r=new M(new N(e.vertex)),v.addFeature(r)),r.set(`insertIndex`,n),r.getGeometry().setCoordinates(e.vertex)}),w?.on(`unsnap`,()=>{T||v.clear()});let T,E=()=>{C.clear(),!T&&t.getVisible()&&r.forEach((e,t)=>{C.push(new M(e.getGeometry().clone())),t>0&&C.push(new M({geometry:new re([r[t-1].getGeometry().getCoordinates(),e.getGeometry().getCoordinates()]),insertIndex:t}))})};if(w){let e=w.handleEvent.bind(w);w.handleEvent=t=>{let n=e(t);return t.type===`pointerdown`&&!T&&v.getFeatures().length&&g.renderSync(),n}}let D=()=>{if(!T)return;let e=T;T=void 0,!l()&&(e.inserted?(r.splice(r.indexOf(e.point),1),n.removeFeature(e.point)):e.point.getGeometry().setCoordinates(e.coordinate),f(),b())};S.on(`translatestart`,e=>{let t=e.features.item(0);T={point:t,coordinate:t.getGeometry().getCoordinates(),insertIndex:t.get(`insertIndex`),inserted:!1,moved:!1},C.clear()}),S.on(`translating`,e=>{let t=T;if(t&&(t.moved=!0,w&&t.point.getGeometry().setCoordinates(e.coordinate),T===t)){if(t.insertIndex!==void 0&&!t.inserted){let{point:e,insertIndex:i}=t;if(e.unset(`insertIndex`),e.setProperties({uuid:Et(),extData:{height:r[i-1].get(`extData`)?.height??0},isTakeoff:!1,isAircraft:!1,heading:r[i-1].get(`heading`)}),e.setStyle(o),r.splice(i,0,e),t.inserted=!0,n.addFeature(e),T!==t)return}f(),T===t&&b()}}),S.on(`translateend`,()=>{if(!T)return;let{point:t,moved:n}=T,i=t.getGeometry().getCoordinates();n&&r.some(e=>{let n=e.getGeometry().getCoordinates();return e!==t&&n[0]===i[0]&&n[1]===i[1]})?(D(),s?.(i.slice())):(T=void 0,b(),n&&e.changed())}),x.on(`select`,()=>e.changed());let O=()=>{x.getFeatures().clear(),D(),t.un(`change:visible`,b),g.removeInteraction(S),g.removeInteraction(x),w&&(g.removeInteraction(w),w.dispose()),C.clear(),S.dispose(),x.dispose(),y.setMap(null),y.clearRenderer(),y.setSource(null),v.clear(),v.dispose()};m=O,t.on(`change:visible`,b),b(),y.setMap(g),m===O&&(g.addInteraction(x),m===O&&(g.addInteraction(S),m===O&&w&&g.addInteraction(w)))}}},jt=(e={})=>{let t=e.style===void 0?Tt():{},{map:n=Y,layerName:r,style:i=t.style,takeoffStyle:a=t.takeoffStyle,lineStyle:o=t.lineStyle,pointStyle:s=t.pointStyle,aircraftStyle:c=t.aircraftStyle,midpointStyle:l,edit:u,onDuplicate:d,input:f,speed:p=10,turnSpeed:m=60,verticalSpeed:h=1,...g}=e,_=kt(u);if([p,m,h].some(e=>!Number.isFinite(e)||e<=0))throw Error(`飞行速度、转向速度和升降速度必须为有限正数`);if(!n)throw Error(`请先创建地图实例或通过 config.map 指定地图`);let v=new F,y=new P({...g,className:r||`ol-layer`,source:v,style:i});y.set(`_layerName`,r);let b=new re([]),x=new M(b);x.setStyle(o);let S,C,w=[],T=!1,E=0,D=0,O=`idle`,k=[],A,j,I=0,L=/* @__PURE__ */ new Set,R=e=>{I++;try{return e()}finally{I--,!I&&!T&&U.changed()}},z=()=>{if(!(I||T))for(let e of[...L]){if(T)break;L.has(e)&&e(q.getState())}},B=()=>{let e=A;A=void 0,e?.(),k=[]},V=()=>{B(),!T&&U.getMap()&&U.getActive()&&(f?.keyboard||f?.container!==void 0)&&(A=wt({getMode:()=>O,getTarget:()=>n.getTargetElement()??void 0,setRouteControls:e=>q.setRouteControls(e),addRouteWaypoint:()=>q.addRouteWaypoint(),adjustWaypointHeight:e=>q.adjustWaypointHeight(e),setActiveControls:e=>{k=[...e],z()}},{...f}))},H=()=>{B(),j?.(),j=void 0,G.stopRouteControl(),K.clearEditing()},ee=e=>b.getCoordinates().findIndex(t=>t[0]===e[0]&&t[1]===e[1]),te=e=>{if(ee(e)!==-1){d?.(e.slice());return}let t=E;if(b.appendCoordinate(e),T||t!==E)return;let n=new M({uuid:Et(),geometry:new N(e),extData:{height:G.aircraft?.get(`height`)??C?.get(`extData`)?.height??0},isTakeoff:b.getCoordinates().length===1,isAircraft:!G.aircraft,heading:G.heading});n.setStyle(n.get(`isTakeoff`)?a:s),C?.set(`isAircraft`,!1,!0),C=n,S||=n,w.push(n),v.addFeature(n),!(T||t!==E)&&(b.getCoordinates().length===2&&v.addFeature(x),U.changed())},ne=()=>{if(T)return;let e=E;S=w[0],C=w.at(-1);for(let t of w){let n=t===S;if(t.get(`isTakeoff`)!==n&&t.setStyle(n?a:s),T||e!==E||(t.setProperties({isTakeoff:n,isAircraft:t===C}),T||e!==E))return}b.setCoordinates(w.map(e=>e.getGeometry().getCoordinates())),!(T||e!==E)&&(w.length>1&&!v.hasFeature(x)&&v.addFeature(x),w.length<2&&v.hasFeature(x)&&v.removeFeature(x))},U=new W({handleEvent(e){if(T||!U.getActive()||e.type!==`singleclick`||O!==`draw`&&O!==`takeoff`)return!0;let t=e.coordinate.slice();if(!Number.isFinite(t[0])||!Number.isFinite(t[1])||Math.abs(t[0])>180||Math.abs(t[1])>90)return!0;let n=O===`takeoff`,r=ee(t);return r!==-1&&(!n||r>0)?(d?.(t.slice()),!1):(R(()=>{let e=E,r=D;if(n&&S){let n=b.getCoordinates();if(n[0]=t,b.setCoordinates(n),T||e!==E)return;S.getGeometry().setCoordinates(t)}else te(t);n&&!T&&e===E&&r===D&&q.setMode(`idle`)}),!1)}}),G=xt({speed:p,turnSpeed:m,verticalSpeed:h,interaction:U,geometry:b,vectorLayer:y,aircraftStyle:c,getLastWaypoint:()=>C,isDestroyed:()=>T}),K=At({interaction:U,vectorLayer:y,source:v,points:w,layerOptions:g,midpointStyle:l,pointStyle:s,onDuplicate:d,getTakeoff:()=>S,isDestroyed:()=>T,isEditing:()=>O===`edit`,getEditConfig:()=>_,syncPath:ne});U.on(`change`,z),U.on(`change:active`,()=>{!U.getActive()&&!T&&q.setMode(`idle`)});let q=Object.assign(U,{getState(){let e=K.select?.getFeatures().item(0),t=G.aircraft,n=t?.getGeometry().getCoordinates();return{mode:O,hasTakeoff:!!S,waypointCount:w.length,selectedWaypoint:e?{...Dt([e])[0],indexNo:w.indexOf(e)}:null,aircraft:t&&n?{longitude:n[0],latitude:n[1],heading:t.get(`heading`),height:t.get(`height`),speed:t.get(`speed`)}:null,activeControls:[...k],editConfig:{..._}}},subscribe(e){if(T)throw Error(`航线已销毁`);L.add(e);try{e(q.getState())}catch(t){throw L.delete(e),t}return()=>{L.delete(e)}},setMode(e){if(T)throw Error(`航线已销毁`);if(![`idle`,`takeoff`,`draw`,`control`,`edit`].includes(e))throw Error(`不支持的航线模式`);if([`draw`,`control`,`edit`].includes(e)&&!S)throw Error(`请先设置起飞点`);if(e!==O){if(e!==`idle`&&U.getMap()!==n)throw Error(`航线交互已移除,请重新创建航线`);if(e===`control`){let e=n.getSize();if(!n.getTargetElement()||!e||e[0]<=0||e[1]<=0)throw Error(`请先将地图挂载到已就绪的容器`);if(n.getView().getProjection().getCode()!==`EPSG:4326`)throw Error(`航线仅支持 EPSG:4326`)}R(()=>{let t=++D,r=()=>T||t!==D,i=O;if(H(),!r()&&(O=e,e!==`idle`&&W.prototype.setActive.call(U,!0),!r()))try{if(e===`control`){let e=G.startRouteControl();if(r())return;e.on(`change`,z),j=()=>e.un(`change`,z)}if(K.updateEditing(),r()||(V(),r()))return;f?.keyboard&&e!==`idle`&&n.getTargetElement()?.focus({preventScroll:!0})}catch(e){throw r()||(H(),r())||(O=i===`control`?`idle`:i,K.updateEditing(),V()),e}})}},setEditConfig(e){if(T)throw Error(`航线已销毁`);let t=kt(e,_);R(()=>{_=t,O===`edit`&&K.updateEditing()})},clear(){q.importWaypoints([])},exportWaypoints(){return Dt(w)},importWaypoints(e){if(T)throw Error(`航线已销毁,请创建新的 Route`);let t=Ot(e,{takeoffStyle:a,pointStyle:s});R(()=>{++D;let e=++E,n=()=>T||e!==E;if(H(),!n()&&(O=O===`edit`&&t.length?`edit`:`idle`,w.length=0,S=void 0,C=void 0,v.clear(!0),!n())){for(let e of t)w.push(e);S=w[0],C=w.at(-1),b.setCoordinates(w.map(e=>e.getGeometry().getCoordinates())),!n()&&(v.addFeatures(w.length>1?[...w,x]:w),!n()&&(K.updateEditing(),n()||V()))}})},destroy(){T||(T=!0,++D,O=`idle`,L.clear(),H(),n.un(`change:target`,J),n.un(`change:view`,J),U.getMap()?.removeInteraction(U),W.prototype.setMap.call(U,null),U.setActive(!1),w.length=0,S=void 0,C=void 0,b.setCoordinates([]),n.removeLayer(y),y.clearRenderer(),y.setSource(null),v.clear(!0),v.dispose(),U.dispose())},setMap(e){if(T)e?.removeInteraction(U);else{if(e&&e!==n)throw Error(`航线不能迁移到其他地图`);e!==U.getMap()&&R(()=>{++D,H(),O=`idle`,W.prototype.setMap.call(U,e),V()})}},setActive(e){W.prototype.setActive.call(U,e&&!T)},getSelectedWaypoint(){return K.select?.getFeatures().item(0)},adjustWaypointHeight(e,t=K.select?.getFeatures().item(0)){if(!Number.isFinite(e))throw Error(`高度变化必须为有限数值`);if(T||O!==`edit`||!U.getActive()||!t||!w.includes(t))return!1;let n=t.get(`extData`)??{},r=Math.max(0,(n.height??0)+e);if(!Number.isFinite(r))throw Error(`高度必须为有限数值`);return r!==(n.height??0)&&(t.set(`extData`,{...n,height:r}),!T&&w.includes(t)&&U.changed(),!0)},removeWaypoint(e=K.select?.getFeatures().item(0)){return!K.select||!e||e===S||!w.includes(e)?!1:(K.clearEditing(),w.includes(e)?(w.splice(w.indexOf(e),1),v.removeFeature(e),ne(),K.updateEditing(),U.changed(),!0):(K.updateEditing(),U.changed(),!1))},getLayer(){return y},hasTakeoff(){return!!S},setRouteControls(e){G.setRouteControls(e)},addRouteWaypoint(){G.aircraft&&U.getActive()&&te(G.aircraft.getGeometry().getCoordinates())}}),J=()=>{T||R(()=>{++D,H(),O=`idle`,V()})};try{n.addLayer(y),n.addInteraction(q),n.on(`change:target`,J),n.on(`change:view`,J),V()}catch(e){throw q.destroy(),e}return q},Mt=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new F({features:new ue().readFeatures(e)}),style:t||new V({stroke:new B({color:`red`,lineDash:[10],width:3}),fill:new L({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new P(i)},Nt=(e,t,n,r)=>t&&n?.get(e[t])||r,Pt=(e,t)=>{let{key:n,crsForm:r}=t,i=[];return e.forEach(e=>{try{let t=e[n],r=Array.isArray(t)?t:JSON.parse(t||`[]`);if(r.length){let t=e.geoType||Se(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),C.transform({type:`FeatureCollection`,features:i},r||C.WGS84,C.WGS84)},Ft=(e,t)=>{let{isLine:n,colorMap:r,fillColor:i,colorKey:a,strokeColor:o,fillOpacity:s,strokeWeight:c,activeFillColor:l,activeFillOpacity:u,activeStrokeColor:d,activeStrokeWeight:f}=t||{},p=e.getProperties(),m=new V({stroke:new B({width:f??c??4,color:d||Nt(p,a,r,o)})}),h=new V({stroke:new B({width:c??2,color:Nt(p,a,r,o)})});return n||(m.setFill(new L({color:be(l||i||``,u??s??1)||be(Nt(p,a,r,i)||``,s??1)})),h.setFill(new L({color:be(Nt(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},It=(e,t)=>{let n=Pt(e,t),r=new d().readFeatures(n),i=r.map(e=>{let t={...e.getProperties()};return delete t.geometry,t});return r.forEach(e=>{e.setStyle(Ft(e,t))}),{features:r,acceptedData:i}},$=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=It(e,t),s=new P({zIndex:5,className:r||`ol-layer`,source:new F({features:a})});return i&&ft(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},Lt=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=It(t,Object.assign({},i,{crsForm:n??i?.crsForm}));r.addFeatures(a);let s=new Set(e.get(`_uuidSet`)||[]);o.forEach(e=>s.add(e._uuid)),e.set(`_uuidSet`,s),e.set(`_dataList`,[...e.get(`_dataList`)||[],...o])},Rt=(e=[],t)=>$(e,Object.assign({},t,{isLine:!1})),zt=(e=[],t)=>$(e,Object.assign({},t,{isLine:!0})),Bt=e=>t=>{let{baseUrl:n,markerIcon:r,statusNum:i=5,activeScale:a=1.3,markerSize:o=[32,32]}=t,s=e(n),[c,l]=o,u=Array(i*2);for(let e=0;e<i;e++){let t=s(`${r}-${e}`,`.webp`);u[e]=new V({zIndex:88+e,image:new R({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new V({zIndex:120,image:new R({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},Vt=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=C.transform([+e.lnglat[0],+e.lnglat[1]],n||C.WGS84,C.WGS84),i=new w({geometry:new de(r)});return i.setProperties({...e,unActiveStyle:t[e.style],activeStyle:t[e.style+t.length/2]}),i.setStyle(t[e.style]),i}),Ht=(e,t,n={})=>{let r=e.get(`_massMarksStyles`),i=e?.getSource(),{clear:a}=n,o=Vt(t,r);a&&i?.clear(),i?.addFeatures(o);let s=[...a?[]:e.get(`_dataList`)||[],...t];e.set(`_dataList`,s),e.set(`_uuidSet`,new Set(s.map(e=>e._uuid)))},Ut=(e,t=[])=>{let n=new P({zIndex:2e3,source:new F({features:Vt(e,t)})});return n.setProperties({_isCustom:!0,_isVectorLayer:!0,_isMassMarksLayer:!0,_statusNum:t.length/2,_dataList:[...e],_uuidSet:new Set(e.map(e=>e._uuid)||[])}),n},Wt=e=>(t=[],n,r=!0)=>{let{offset:i=[0,0],baseUrl:a,hasLine:o,hasFace:s,layerName:c,isDynamic:l,isAutoFit:u,statusNum:d,markerIcon:f,marksStyles:p,markerSize:m,activeScale:h,vectorConfig:g}=n,_=p||Bt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=Ut(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),ft(v)),o){let e=$(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));Y.addLayer(e)}if(s){let e=$(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));Y.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),Y.addLayer(v),v},Gt=(e=[])=>{let t=new V({}),n=new Set(e),r=[];return Y.getAllLayers().filter(e=>e.get(`_isMassMarksLayer`)).forEach(e=>{e.getSource().getFeatures().forEach(e=>{let i=e.getProperties();n.has(i.status)?(r.push(i),e.setStyle(i.unActiveStyle)):e.setStyle(t)})}),r},Kt=(e,t)=>{let n=Y.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e&&t.get(`_isMassMarksLayer`)),r=new V({});n.forEach(e=>{e.getSource().getFeatures().forEach(e=>{let n=e.getProperties();t.has(n.id)?e.setStyle(n.unActiveStyle):e.setStyle(r)})})},qt=(e,t)=>{let n=e.length,r={},{distance:i,minDistance:a,openClick:o,buildStyle:s,singleStyles:c,computedRadius:l,layerName:u=`cluster-layer`}=t,d=e=>(e/n)**(1/18);r[1]=c;let f=e=>{let t=e.get(`features`).length,n=r[t],i=l?l(t):d(t);if(n||(n=new V({image:new G({radius:i*20,stroke:new B({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new L({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new H({text:t.toString(),fill:new L({color:`hsla(${180-i*180}, 100%, 10%, 1)`}),textBaseline:`middle`})}),r[t]=n),Array.isArray(n)){let t=e.get(`features`)[0].get(`styleIndex`)??0;return n[t]}return n},p=new P({zIndex:200,className:u,source:new fe({distance:i||80,minDistance:a||0,source:new F({features:e.map(e=>{let t=new w(new de(e.lnglat));t.setProperties(e);let n=e.style??0;return t.setProperties({unActiveStyle:c[n],activeStyle:c[n+c.length/2]}),t})})}),style:e=>s?s(e):f(e)});return p.setProperties({_isCustom:!0,_isVectorLayer:!0,_isClusterLayer:!0}),o&&ft(p),p};export{pe as GeometryType,Ue as activeFeatureByUid,Ht as addFeaturesByLayer,Wt as addMassMarksLayer,Lt as appendFeaturesByLayer,Ae as baseLayers,Bt as buildMassMarksStyles,Kt as changeFeaturesVisibleByIds,Ie as changeLayer,Fe as changeSource,ct as changeUnselectStyle,Re as createAnimationMarker,Oe as createBaseLayer,$ as createBusinessLayer,qt as createClusterLayer,bt as createDrawInteraction,lt as createElasticMarkerLayer,Mt as createGeoJsonLayer,rt as createIconStyle,pt as createLayerSelectByNames,Ge as createMap,We as createMapInstance,ke as createMapWorldLayer,it as createMarker,at as createMarkersLayer,Ut as createMassMarksLayer,ut as createMoveMarkerLayer,ze as createOverlay,jt as createRouteController,ft as createSelectByLayer,he as createTdtVectorSource,ge as createTdtVtsLayer,nt as createText,Rt as createVectorFaceLayer,zt as createVectorLineLayer,Ee as createWmtsLayer,je as createZheJiangLayer,qe as disposeInstance,Ke as disposeMap,_e as emitter,tt as flyToAnimate,yt as getDrawStyle,Me as getLayerByName,xe as getLayersDataList,Je as getMapInstance,Y as instance,Ve as removeAllLayers,Ne as removeLayerByName,Z as removeOverlays,He as resetActiveFeature,Be as resetActiveVector,Xe as resetMap,Ye as resetZoomAndCenter,Qe as setFitViewByCoords,$e as setFitViewByGeom,et as setFitViewByLayer,Gt as updateMarksLayersByStatus};
1
+ import{TdtDecoderWorkerClient as e,createTdtVtsUrl as t,redactTdtToken as n}from"tdt-vts-core";import r from"ol/format/MVT";import i from"ol/layer/VectorTile";import a from"ol/TileState";import o from"ol/source/VectorTile";import s from"mitt";import{WMTS as c,XYZ as l}from"ol/source";import u from"ol/layer/Tile";import{GeoJSON as d,WMTSCapabilities as f}from"ol/format";import{optionsFromCapabilities as p}from"ol/source/WMTS";import{TileGrid as m}from"ol/tilegrid";import{Tile as h}from"ol/layer";import g from"ol/tilegrid/WMTS";import{unByKey as _}from"ol/Observable";import v from"ol/layer/Image";import y from"ol/source/Raster";import b from"ol/Map";import x from"ol/View";import{defaults as S}from"ol/control";import C from"gcoord";import{Feature as w,Overlay as T}from"ol";import{Select as E,defaults as D}from"ol/interaction";import{boundingExtent as O,getCenter as k}from"ol/extent";import{primaryAction as A,singleClick as j}from"ol/events/condition";import M from"ol/Feature";import N from"ol/geom/Point";import P from"ol/layer/Vector";import F from"ol/source/Vector";import{Circle as I,Fill as L,Icon as R,RegularShape as z,Stroke as B,Style as V,Text as H}from"ol/style";import ee from"ol/interaction/Draw";import{getArea as U,getLength as W,offset as te}from"ol/sphere";import ne from"ol/geom/LineString";import G from"ol/interaction/Interaction";import K from"ol/style/Circle";import q from"ol/style/Fill";import re from"ol/style/Icon";import J from"ol/style/Stroke";import Y from"ol/style/Style";import X from"ol/style/Text";import Z from"ol/Collection";import ie from"ol/interaction/Select";import ae from"ol/interaction/Translate";import oe from"ol/interaction/Snap";import se from"ol/format/GeoJSON";import{Point as ce}from"ol/geom";import le from"ol/source/Cluster";export*from"tdt-vts-core";let ue=/* @__PURE__ */ function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const de=async e=>{if(typeof e!=`string`)return e;if(!e.trim())throw TypeError(`style 地址不能为空`);let t=await fetch(e);if(!t.ok)throw Error(`加载 style 失败:HTTP ${t.status}`);return await t.json()},fe=i=>{if(!i.hosts?.length||i.hosts.some(e=>!e.trim()))throw TypeError(`hosts 不能为空`);let s=new e(i.restoreMode,i.decoderOptions),c=new r({layerName:`mvt:layer`}),l=new o({projection:`EPSG:3857`,minZoom:i.minZoom??1,maxZoom:i.maxZoom??18,tileSize:512,wrapX:!0,format:c,attributions:`© <a href="https://www.tianditu.gov.cn/" target="_blank" rel="noopener">天地图</a>`,tileUrlFunction(e){if(!e)return;let[n,r,a]=e;if(n!==void 0&&r!==void 0&&a!==void 0)return t([n,r,a],{token:i.token,hosts:i.hosts,maxZoom:i.maxZoom??18,wrapX:!0})},tileLoadFunction(e,t){let r=e;r.setLoader(async(e,o,l)=>{let u=n(t);try{let n=await s.decode(t),a=c.readFeatures(n.buffer,{extent:e,featureProjection:l});r.setFeatures(a),i.diagnostics?.onDecoded?.(n.stats,u)}catch(e){let t=e instanceof Error?e:Error(String(e));i.diagnostics?.onError?.(t,u),console.error(`天地图私有 VTS 加载失败`,u,t),r.setState(a.ERROR)}})}}),u=l.dispose.bind(l);return l.dispose=()=>{s.dispose(),u()},{source:l,decoder:s}},pe=async e=>{let t=await de(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=fe({token:e.token,hosts:e.hosts,restoreMode:`auto`}),r=new i({declutter:!0,source:n}),a=r.dispose.bind(r);r.dispose=()=>{n.dispose(),a()};try{let{applyBackground:e,applyStyle:n}=await import(`ol-mapbox-style`),i=structuredClone(t);for(let e of i.layers)e.type===`symbol`&&e.layout?.[`text-font`]&&(e.layout[`text-font`]=[`sans-serif`]);return await Promise.all([n(r,i,{projection:`EPSG:4326`,source:`base-tdt-vector-tile`,updateSource:!1}),e(r,i)]),r}catch(e){throw r.dispose(),e}},me=s();let Q;const he=e=>{Q=e},ge=()=>{Q=void 0},_e=(e,t)=>{if(e.startsWith(`#`)){let n=e.replace(`#`,``);return n.length===3&&(n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]),`rgba(${parseInt(n.substring(0,2),16)}, ${parseInt(n.substring(2,4),16)}, ${parseInt(n.substring(4,6),16)}, ${t})`}return e},ve=()=>Q?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],ye=e=>{let t=e=>!Array.isArray(e)||e.length===0?0:1+t(e[0]),n=e=>{if(!Array.isArray(e)||e.length<3)return!1;let t=e[0],n=e[e.length-1];return t[0]===n[0]&&t[1]===n[1]},r=e=>Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`,i=e=>Array.isArray(e)&&e.length>=2&&e.every(r),a=e=>Array.isArray(e)?(t(e)===2?[e]:e).every(e=>Array.isArray(e)&&e.length>=4&&n(e)&&e.every(r)):!1,o=t(e);try{return o<2||!e||e.length===0?`Invalid`:o===2&&i(e)?n(e)&&e.length>=4?`Polygon`:`LineString`:o===3&&Array.isArray(e)&&e.every(i)?a(e)?`Polygon`:e.every(e=>!n(e))?`MultiLineString`:`Invalid`:o===4&&Array.isArray(e)&&e.every(e=>a(e))?`MultiPolygon`:`Invalid`}catch(e){return console.error(`Error analyzing coordinates:`,e),`Invalid`}},be=new f,xe=/* @__PURE__ */ new Map,Se=async e=>{let t=xe.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=be.read(await n.text());return xe.set(e,r),r},Ce=e=>async t=>{let{style:n,format:r,version:i,layerName:a,matrixSet:o}=t,[s,l]=a.split(`:`),d=`${e}/${s}/${l}/gwc/service/wmts?request=GetCapabilities`,f=await Se(d),m=p(f,{style:n||``,layer:l,version:i||`1.1.0`,format:r||`image/png`,matrixSet:o||`EPSG:4326`});if(!m)throw Error(`Unable to create TileLayer`);return new u({zIndex:3,className:a,source:new c(m)})},we=(e,t)=>{let n=t.get(`_selectInteraction`);n&&(e.removeInteraction(n),n.dispose(),t.unset(`_selectInteraction`));let r=t.get(`_resolutionChangeKey`);r&&(_(r),t.unset(`_resolutionChangeKey`));let i=t.get(`_dynamicMarkerTimer`);i!==void 0&&(clearTimeout(i),t.unset(`_dynamicMarkerTimer`)),t.getSource()?.dispose(),e.removeLayer(t),t.dispose()},Te=`c77eddc667c5bed016fded560baf93e7`,Ee=(e=`hzsyvector_dark`)=>{let t={zIndex:-5,preload:1,minZoom:8,maxZoom:21,source:new l({tileGrid:new m({tileSize:256,resolutions:[.00549933137253187,.00274966568626595,.00137483284313297,.000687416421566485,.000343708210783242,.000171854105391621,859270526958104e-19,429635263479052e-19,214817631739526e-19,107408815869763e-19,537044079348816e-20,268522039674407e-20,134261019837204e-20],origin:[118.122911693886,31.2869311022836],extent:[116.43263049006,28.6201742126026,123.705594256347,31.9765041681924]}),projection:`EPSG:4326`,urls:[`https://ywtg.citybrain.hangzhou.gov.cn/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9456/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9457/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9458/${e}/{z}/{y}/{x}`,`https://ywtg.citybrain.hangzhou.gov.cn:9459/${e}/{z}/{y}/{x}`]}),properties:{_isBaseLayer:!0,_layerName:e}};return new h(t)},De=(e,t=Te)=>{let[n,r]=e.split(`_`),i={preload:1,zIndex:-10,cacheSize:20240,properties:{_isBaseLayer:!0,_layerName:e},source:new c({crossOrigin:`anonymous`,projection:`EPSG:4326`,wrapX:!0,layer:n,style:`default`,version:`1.0.0`,format:`image/png`,matrixSet:r,tileGrid:new g({tileSize:256,origin:[-180,90],matrixIds:[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`,`13`,`14`,`15`,`16`,`17`,`18`,`19`],resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625,.010986328125,.0054931640625,.00274658203125,.001373291015625,.0006866455078125,.00034332275390625,.000171661376953125,858306884765625e-19,4291534423828125e-20,21457672119140625e-21,10728836059570312e-21,5364418029785156e-21,2682209014892578e-21]}),url:`https://t{0-7}.tianditu.gov.cn/${e}/wmts?tk=${t}`})};return new h(i)},Oe=e=>({baseImgLayer:new h({className:`img-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCiaLayer:new h({className:`img-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2}),baseVecLayer:new h({className:`vec-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:1}),baseCvaLayer:new h({className:`vec-layer`,source:new l({crossOrigin:`anonymous`,tileSize:256,url:`https://t{0-7}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=${e}`}),zIndex:2})}),ke=(e=`emap`,t=`3b0cdd02-c366-4363-b6de-081a9f12b364`)=>new h({preload:1,minZoom:4,maxZoom:20,zIndex:-10,cacheSize:20240,source:new l({wrapX:!0,projection:`EPSG:4326`,crossOrigin:`anonymous`,url:`https://ditu{0-6}.zjzwfw.gov.cn/services/wmts/${e}/default/oss/getTile/{z}/{y}/{x}?token=${t}`})}),Ae=e=>Q.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),je=e=>{Q.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e).forEach(e=>{we(Q,e)})},Me=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),Ne=(e,t,n,r={})=>{let i=new y({sources:[e],operationType:`image`,operation:(e,t)=>(((e,t)=>{let n=t.ratioArray,r=t.rgbColorArray;if(n&&r){let[t=0,i=0,a=0]=n;for(let n=0;n<e.length;n+=4){let o=e[n],s=e[n+1],c=e[n+2],l=o*t+s*i+c*a;e[n]=r[0]-l,e[n+1]=r[1]-l,e[n+2]=r[2]-l}}})(e[0].data,t),e[0]),threads:r.threads??Me()});return i.on(`beforeoperations`,e=>{e.data.ratioArray=n,e.data.rgbColorArray=t}),i},Pe=(e,t,n,r={})=>new v({source:Ne(e,t,n,r)}),Fe=(e=``)=>{Q&&Q.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>Q.removeOverlay(e))},Ie=()=>Fe(`_isAnimationMarker`),Le=(e,t)=>{Ie();let{width:n,height:r,lnglat:i,crsForm:a}=t,o=document.createElement(`div`),s=document.createElement(`img`);s.src=e,s.alt=``,n!==void 0&&(s.width=n),r!==void 0&&(s.height=r),o.append(s);let c=new T({element:o,stopEvent:!1,positioning:`bottom-center`,position:C.transform([+i[0],+i[1]],a||C.WGS84,C.WGS84)});c.set(`_isAnimationMarker`,!0),Q.addOverlay(c)},Re=(e={id:`popup-container`,positioning:`top-center`})=>new T(Object.assign({element:document.getElementById(e.id)||void 0},e)),ze=()=>{Fe(),Q.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},Be=()=>{Fe(),Q&&Q.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||we(Q,e)})},Ve=()=>{Fe(),Q.getAllLayers().filter(e=>e.get(`_isVectorLayer`)).forEach(e=>{let t=e.get(`_selectInteraction`);t&&(t.dispatchEvent({type:`select`,selected:[],mapBrowserEvent:void 0,deselected:t.getFeatures().getArray()}),t.getFeatures().clear())})},He=e=>{let t=Q.getAllLayers().filter(e=>e.get(`_isVectorLayer`));if(t.length){let n=t.find(t=>t.get(`_uuidSet`).has(e)&&t.get(`_selectInteraction`));if(n){let t=(n.getSource()?.getFeatures()||[]).find(t=>t.get(`_uuid`)===e),r=n.get(`_selectInteraction`);if(r){let n=r.getFeatures().getArray();n.find(t=>t.get(`_uuid`)===e)||(r.dispatchEvent({type:`select`,deselected:n,selected:[t],mapBrowserEvent:void 0}),r.getFeatures().push(t))}}}};let $=[119.71512016971076,30.122490541963536];const Ue=(e={})=>{if(Q)return Q;let t=We(e);return he(t),t},We=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:$,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[Ee()],constrainResolution:!1,smoothExtentConstraint:!1,tk:Te},e||{}),n=new b({view:new x(t),controls:S({zoom:!1,rotate:!1,attribution:!1}),interactions:D({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[Ee()]});$=t.center||$,n.activeBaseLayer=t.baseLayer;let r=e=>n.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e);n.getLayerByName=r,n.removeLayerByName=e=>{let t=r(e);t&&we(n,t)},n.changeLayersByNames=(e,t)=>{n.getAllLayers().filter(e=>t.includes(e.getClassName())).forEach(t=>t.setVisible(e?.includes(t.getClassName())))};let i,a;return n.on(`pointermove`,e=>{if(a=e.pixel,i!==void 0)return;let t=()=>{i=void 0;let e=n.getTargetElement();a&&e&&(e.style.cursor=n.hasFeatureAtPixel(a)?`pointer`:``)};i=typeof globalThis.requestAnimationFrame==`function`?globalThis.requestAnimationFrame(t):setTimeout(t,16)}),n.set(`_disposePointerMove`,()=>{i!==void 0&&(typeof globalThis.cancelAnimationFrame==`function`?globalThis.cancelAnimationFrame(i):clearTimeout(i),i=void 0)}),n},Ge=()=>{if(!Q)return;let e=Q;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>we(e,t)),e.setTarget(``),e.dispose(),ge()},Ke=()=>Ge(),qe=()=>Q,Je=(e=$)=>{Q&&Q.getView().animate({zoom:9.4,center:e,duration:1e3})},Ye=(e={center:$,isClearAll:!0})=>{Be(),Je(e.center||$)},Xe={padding:[50,50,50,50],duration:1e3},Ze=(e,t=Q,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=O(e);r.fit(t,{...Xe,...n||{}})}},Qe=(e,t=Q,n)=>{t.getView().fit(e,{...Xe,...n||{}})},$e=(e,t=Q,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...Xe,...n||{}})},et=(e,t)=>{let n=Q.getView(),r=n.getZoom();n.animate({center:e,duration:2e3}),t?n.animate({zoom:t-2,duration:1e3},{zoom:t,duration:1e3}):n.animate({zoom:r-2,duration:1e3},{zoom:r+2>12?12:r+2,duration:1e3})},tt=e=>new H({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new L({color:`rgba(255, 255, 255, 0.8)`})}),nt=(e,t=!1)=>new V({image:new R({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?tt(e):void 0}),rt=(e,t)=>{let n=new M({geometry:new N([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(nt(e)),n},it=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new F;return e.forEach(e=>a.addFeature(rt(e,t))),new P({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},at=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(nt({...t,img:t[n]},!1))})},ot=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?at([e],Q.getView().getZoom()):e.setStyle(nt(r,t))},st=e=>{e.forEach(e=>{ot(e,!1)}),e.clear()},ct=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=it(n,t),i=r.getSource().getFeatures(),a=Q.getView();return at(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>at(i,a.getZoom()))),r},lt=(e,t)=>{let n=rt(e,t),r=new P({className:t.layerName||`ol-layer`,source:new F({features:[n]})});return Q.addLayer(r),{vectorLayer:r}},ut=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),me.emit(`selected-feature`,n),e.set(`_hasActive`,!0),e.get(`_isDynamic`)){let t=r.getImage(),i=e.get(`_dynamicMarkerTimer`);i!==void 0&&clearTimeout(i);let a=setTimeout(()=>{e.unset(`_dynamicMarkerTimer`),me.emit(`dynamic-marker`,Object.assign({},n.rawData||{},{lnglat:n.lnglat,style:n.style,crsForm:n.crsForm,width:t.getWidth(),height:t.getHeight()}))},1e3);e.set(`_dynamicMarkerTimer`,a)}if(e.get(`_isAutoFit`)){let e=Q.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:k(t.getGeometry().getExtent())})}},dt=e=>{let t=new E({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!j(t))return!1;let n=!1;return Q.forEachFeatureAtPixel(t.pixel,()=>{n=!0},{layerFilter:t=>t===e}),n}});return t.on(`select`,t=>{let{selected:n,deselected:r}=t;if(n.length){let t=n[0];if(e.get(`_isClusterLayer`)){let n=t.get(`features`);n.length===1&&ut(e,n[0])}else ut(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),Q.addInteraction(t),e.set(`_selectInteraction`,t),t},ft=(e,t,n)=>{let r=new E({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];ot(t,!1),n?.(t)}if(r.length){let e=r[0];ot(e,!0),t?.(e)}}),r},pt=e=>{let t=U(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},mt=e=>{let t=W(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},ht=new V({fill:new L({color:`rgba(255, 255, 255, 0.2)`}),stroke:new B({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new I({radius:5,stroke:new B({color:`rgba(0, 0, 0, 0.7)`}),fill:new L({color:`rgba(255, 255, 255, 0.2)`})})}),gt=/* @__PURE__ */ new WeakMap,_t=e=>{let t=gt.get(e);if(t)return t;let n=new V({text:new H({font:`14px`,fill:new L({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new L({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new z({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new L({color:`rgba(0, 0, 0, 0.7)`})})});return gt.set(e,n),n},vt=(e,t=ht)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=pt(r)):r.getType()===`LineString`&&(i=new N(r.getLastCoordinate()),a=mt(r)),i&&a){let t=_t(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},yt=(e=`Point`,t,n)=>new ee({source:t.getSource(),type:e,style:n?e=>vt(e,void 0):void 0}),bt=({geometry:e,interaction:t,isDestroyed:n,vectorLayer:r,aircraftStyle:i,speed:a,turnSpeed:o,verticalSpeed:s,getLastWaypoint:c})=>{let l,u,d=0,f,p,m,h=0,g=0,_=/* @__PURE__ */ new Set,v=()=>{_.clear(),m!==void 0&&f?.cancelAnimationFrame(m),m=void 0},y=e=>{m=void 0;let n=t.getMap();if(!l||!n||!t.getActive()){v();return}let r=l,c=Math.min(Math.max(0,e-h)/1e3,.1);h=e;let u=Number(_.has(`turnRight`))-Number(_.has(`turnLeft`));d=(d+u*o*c+360)%360,i===void 0&&l.getStyle().getImage().setRotation(d*Math.PI/180);let p=Number(_.has(`forward`))-Number(_.has(`backward`)),g=Number(_.has(`right`))-Number(_.has(`left`));if(p||g){let e=n.getView(),t=te(r.getGeometry().getCoordinates(),a*c,d*Math.PI/180+Math.atan2(g,p));if(r.getGeometry().setCoordinates(t),l!==r||(e.setCenter(t),l!==r))return}let b=Number(_.has(`ascend`))-Number(_.has(`descend`));r.set(`height`,Math.max(0,r.get(`height`)+b*s*c)),l===r&&(l.set(`heading`,d),l===r&&(l.changed(),l===r&&_.size&&m===void 0&&(m=f.requestAnimationFrame(y))))},b=()=>{g++,v(),p?.(),p=void 0,f=void 0;let e=u;if(u=void 0,l=void 0,e){let t=e.getSource();e.setMap(null),e.clearRenderer(),e.setSource(null),t?.clear(!0),t?.dispose()}c()?.set(`isAircraft`,!0,!0),n()||r.changed()};return{get aircraft(){return l},get heading(){return d},get revision(){return g},startRouteControl(){let n=t.getMap(),o=n?.getTargetElement(),s=n?.getSize();if(!n||!o||!s||s[0]<=0||s[1]<=0||!t.getActive())throw Error(`请先将启用的航点交互添加到已就绪的地图`);let m=n.getView(),h=++g,_=()=>{if(h!==g||t.getMap()!==n||n.getView()!==m||!t.getActive()||n.getTargetElement()!==o)throw Error(`飞行操控启动已取消`)};if(l)return l;d=0,n.renderSync(),_();let v=e.getLastCoordinate();return l=new M({geometry:new N(v),isAircraft:!0,heading:d,height:c()?.get(`extData`)?.height??0,speed:a}),l.setStyle(i??new V({image:new R({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0})})),u=new P({source:new F({features:[l]})}),u.setMap(n),_(),n.on(`change:view`,b),f=o.ownerDocument.defaultView,p=()=>n.un(`change:view`,b),c()?.set(`isAircraft`,!1,!0),r.changed(),_(),l},setRouteControls(e){let n=[`forward`,`backward`,`left`,`right`,`turnLeft`,`turnRight`,`ascend`,`descend`];if(e.some(e=>!n.includes(e)))throw Error(`不支持的飞行动作`);l&&t.getActive()&&(_=new Set(e),_.size?m===void 0&&(h=f.performance.now(),m=f.requestAnimationFrame(y)):v())},stopRouteControl:b}},xt={KeyW:`forward`,KeyS:`backward`,KeyA:`left`,KeyD:`right`,KeyQ:`turnLeft`,KeyE:`turnRight`,KeyZ:`descend`,KeyC:`ascend`,Space:`waypoint`},St=e=>e===`ascend`||e===`descend`,Ct=(e,t)=>{let n=e.getTarget(),r=typeof t.container==`string`?(n?.ownerDocument??globalThis.document)?.getElementById(t.container):t.container;if(typeof t.container==`string`&&!r)throw Error(`找不到航线输入容器:${t.container}`);if(e.getMode()!==`control`&&e.getMode()!==`edit`)return()=>void 0;let i=(n??r)?.ownerDocument,a=i?.defaultView;if(!i||!a)return()=>{e.setRouteControls([]),e.setActiveControls([])};let o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map,c=!!t.keyboard&&!!n&&!n.hasAttribute(`tabindex`);c&&(n.tabIndex=0);let l=t=>e.getMode()===`control`||e.getMode()===`edit`&&St(t),u=!!t.keyboard&&e.getMode()===`control`,d=/* @__PURE__ */ new Map,f={"background-color":t.activeStyle?.backgroundColor,"border-top-color":t.activeStyle?.borderColor,"border-right-color":t.activeStyle?.borderColor,"border-bottom-color":t.activeStyle?.borderColor,"border-left-color":t.activeStyle?.borderColor,color:t.activeStyle?.color},p=e=>{for(let[e,{original:t,applied:n}]of d){let r=new Set(e.style),i=[.../* @__PURE__ */ new Set([...n.keys(),...r])].map(t=>({property:t,value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)})).filter(({property:e,value:t,priority:i})=>n.has(e)!==r.has(e)||t!==n.get(e)?.value||i!==n.get(e)?.priority);e.style.cssText=t;for(let{property:t,value:n,priority:r}of i)e.style.setProperty(t,n,r)}if(d.clear(),t.activeStyle&&e.length)for(let t of r?.querySelectorAll(`button[data-route-control]`)??[]){if(t.disabled||!e.includes(t.dataset.routeControl))continue;let n=t.style.cssText;for(let[e,n]of Object.entries(f))typeof n==`string`&&t.style.setProperty(e,n,`important`);let r=new Map(Array.from(t.style,e=>[e,{value:t.style.getPropertyValue(e),priority:t.style.getPropertyPriority(e)}]));d.set(t,{original:n,applied:r})}},m=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];p(t),e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},h=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},g=()=>{if(!o.size&&!s.size)return;o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)h(t,n);m()},_=e=>{let t=e?.closest?.(`button[data-route-control]`);if(!t||t.disabled||!r?.contains(t))return;let n=t.dataset.routeControl;if(Object.values(xt).includes(n)&&l(n))return{button:t,action:n}},v=e=>!!e?.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),y=t=>{e.getMode()===`edit`&&St(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},b=e=>{if(e.defaultPrevented||v(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){g();return}let n=_(e.target),a=!!n&&(e.code===`Space`||e.code===`Enter`),s=a?n.action:t.keyboard?xt[e.code]:void 0;if(!s||!l(s))return;let c=i.activeElement?.closest(`button`);(a||!c||(u||r?.contains(c))&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),m(),y(s)))},x=e=>{o.delete(e.code)&&(e.preventDefault(),m())},S=e=>{if(e.button!==0||i.hidden)return;let t=_(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}m()}},C=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),h(e.pointerId,t.button),m())},w=e=>{let t=_(e.target);t&&!i.hidden&&y(t.action)},T=e=>{v(e.target)&&g()},E=()=>{i.hidden&&g()},D=new Set(u?[]:[t.keyboard?n:void 0,r]);u&&i.addEventListener(`keydown`,b);for(let e of D)e?.addEventListener(`keydown`,b);return i.addEventListener(`keyup`,x,!0),i.addEventListener(`focusin`,T),i.addEventListener(`visibilitychange`,E),r&&(i.addEventListener(`pointerup`,C),i.addEventListener(`pointercancel`,C)),r?.addEventListener(`pointerdown`,S),r?.addEventListener(`lostpointercapture`,C),r?.addEventListener(`click`,w),()=>{u&&i.removeEventListener(`keydown`,b);for(let e of D)e?.removeEventListener(`keydown`,b);i.removeEventListener(`keyup`,x,!0),i.removeEventListener(`focusin`,T),i.removeEventListener(`visibilitychange`,E),r&&(i.removeEventListener(`pointerup`,C),i.removeEventListener(`pointercancel`,C)),r?.removeEventListener(`pointerdown`,S),r?.removeEventListener(`lostpointercapture`,C),r?.removeEventListener(`click`,w),g(),c&&n.getAttribute(`tabindex`)===`0`&&n.removeAttribute(`tabindex`)}},wt=()=>{let e=new Y({image:new K({radius:9,fill:new q({color:`#22c55e`}),stroke:new J({color:`#fff`,width:2})}),text:new X({text:`起飞`,offsetY:-20,fill:new q({color:`#15803d`}),stroke:new J({color:`#fff`,width:3})}),zIndex:2}),t,n=new Y({fill:new q({color:`rgba(59, 130, 246, .2)`}),stroke:new J({color:`#3b82f6`,width:3}),image:new K({radius:6,fill:new q({color:`#3b82f6`})})}),r=e=>(t??=new Y({image:new re({src:`data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2236%22%20viewBox%3D%220%200%2028%2036%22%3E%3Cpath%20d%3D%22M14%202%2024%2032%2014%2025%204%2032Z%22%20fill%3D%22%23f97316%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E`,rotateWithView:!0}),zIndex:3}),t.getImage().setRotation((e.get(`heading`)??0)*Math.PI/180),t);return{style:n,lineStyle:n,takeoffStyle:t=>t.get(`isAircraft`)?[e,r(t)]:e,pointStyle:e=>e.get(`isAircraft`)?r(e):n,aircraftStyle:r}},Tt=()=>{let e=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},Et=e=>e.map((e,t)=>{let[n,r]=e.getGeometry().getCoordinates(),i=e.get(`extData`)??{};return{...i,uuid:e.get(`uuid`),waylineId:i.waylineId??``,indexNo:t,pointSpeed:i.pointSpeed??0,height:i.height??0,gimbalPichAngle:i.gimbalPichAngle??0,direction:i.direction??e.get(`heading`)??0,shootType:i.shootType??``,supportLightType:i.supportLightType??``,longitude:n,latitude:r}}),Dt=(e,{takeoffStyle:t,pointStyle:n})=>{if(!Array.isArray(e))throw Error(`航点必须为数组`);let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let t of e){if(!t||typeof t!=`object`)throw Error(`航点必须为对象`);if(t.uuid!==void 0){if(typeof t.uuid!=`string`||!t.uuid.trim())throw Error(`uuid 必须为非空白字符串`);if(i.has(t.uuid))throw Error(`导入航点存在重复 uuid`);i.add(t.uuid)}if(!Number.isInteger(t.indexNo)||t.indexNo<0)throw Error(`indexNo 必须为非负整数`);if(!Number.isFinite(t.longitude)||Math.abs(t.longitude)>180||!Number.isFinite(t.latitude)||Math.abs(t.latitude)>90)throw Error(`航点经纬度必须为有效的 EPSG:4326 坐标`);for(let e of[`direction`,`pointSpeed`,`gimbalPichAngle`])if(t[e]!==void 0&&!Number.isFinite(t[e]))throw Error(`${e} 必须为有限数值`);if(t.pointSpeed!==void 0&&t.pointSpeed<0)throw Error(`pointSpeed 不能为负数`);if(t.height!==void 0&&(!Number.isFinite(t.height)||t.height<0))throw Error(`height 必须为有限非负数`);if(t.waylineId!==void 0&&typeof t.waylineId!=`string`)throw Error(`waylineId 必须为字符串`);if(t.shootType!==void 0&&![``,`time`,`distance`,`none`].includes(t.shootType))throw Error(`不支持的 shootType`);if(t.supportLightType!==void 0&&(typeof t.supportLightType!=`string`||t.supportLightType!==``&&t.supportLightType.split(`,`).some(e=>![`ir`,`visable`].includes(e))))throw Error(`supportLightType 仅支持 ir、visable 或逗号分隔的组合`);let e=`${t.longitude},${t.latitude}`;if(r.has(e))throw Error(`导入航点存在重复位置`);r.add(e)}return[...e].sort((e,t)=>e.indexNo-t.indexNo).map((r,i)=>{let a={...r,height:r.height??0};delete a.uuid,delete a.indexNo,delete a.longitude,delete a.latitude;let o=new M({uuid:r.uuid??Tt(),geometry:new N([r.longitude,r.latitude]),extData:a,heading:r.direction??0,isTakeoff:i===0,isAircraft:i===e.length-1});return o.setStyle(i===0?t:n),o})},Ot=(e={},t={mode:`midpoint`,pixelTolerance:10})=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`编辑配置必须为对象`);let{mode:n=t.mode,pixelTolerance:r=t.pixelTolerance}=e;if(n!==`midpoint`&&n!==`snap`)throw Error(`编辑模式必须为 midpoint 或 snap`);if(!Number.isFinite(r)||r<=0)throw Error(`吸附距离必须为有限正数`);return{mode:n,pixelTolerance:r}},kt=({interaction:e,vectorLayer:t,source:n,points:r,layerOptions:i,midpointStyle:a,pointStyle:o,onDuplicate:s,onInsert:c,getTakeoff:l,isDestroyed:u,isEditing:d,getEditConfig:f,syncPath:p})=>{let m,h,g,_=()=>{let e=h;h=void 0,m=void 0,g=void 0,e?.()};return{get pendingInsertion(){return g?.()},get select(){return m},clearEditing:_,updateEditing:()=>{if(_(),u()||h)return;let v=e.getMap();if(!d()||!v||!e.getActive())return;let y=f(),b=new F,x=new P({...i,source:b,style:a??new V({image:new I({radius:5,fill:new L({color:`#fff`}),stroke:new B({color:`#3b82f6`,width:2})})}),zIndex:1/0}),S=()=>{x.setVisible(t.getVisible()),b.clear(),y.mode===`snap`?O():r.slice(1).forEach((e,t)=>{let n=r[t].getGeometry().getCoordinates(),i=e.getGeometry().getCoordinates();b.addFeature(new M({geometry:new N([(n[0]+i[0])/2,(n[1]+i[1])/2]),insertIndex:t+1}))})},C=new ie({layers:[t],filter:e=>e!==l()&&r.includes(e),hitTolerance:6});m=C;let w=new ae({condition:A,filter:e=>e!==l()&&(r.includes(e)||b.hasFeature(e)),hitTolerance:6}),T=new Z,E=y.mode===`snap`?new oe({features:T,pixelTolerance:y.pixelTolerance}):void 0;E?.on(`snap`,e=>{if(D||!t.getVisible())return;let n=e.feature.get(`insertIndex`);if(!e.segment||typeof n!=`number`){b.clear();return}let r=b.getFeatures()[0];r||(r=new M(new N(e.vertex)),b.addFeature(r)),r.set(`insertIndex`,n),r.getGeometry().setCoordinates(e.vertex)}),E?.on(`unsnap`,()=>{D||b.clear()});let D;g=()=>D?.inserted?D.point:void 0;let O=()=>{T.clear(),!D&&t.getVisible()&&r.forEach((e,t)=>{T.push(new M(e.getGeometry().clone())),t>0&&T.push(new M({geometry:new ne([r[t-1].getGeometry().getCoordinates(),e.getGeometry().getCoordinates()]),insertIndex:t}))})};if(E){let e=E.handleEvent.bind(E);E.handleEvent=t=>{let n=e(t);return t.type===`pointerdown`&&!D&&b.getFeatures().length&&v.renderSync(),n}}let k=()=>{if(!D)return;let e=D;D=void 0,!u()&&(e.inserted?(r.splice(r.indexOf(e.point),1),n.removeFeature(e.point)):e.point.getGeometry().setCoordinates(e.coordinate),p(),S())};w.on(`translatestart`,e=>{let t=e.features.item(0);D={point:t,coordinate:t.getGeometry().getCoordinates(),insertIndex:t.get(`insertIndex`),inserted:!1,moved:!1},T.clear()}),w.on(`translating`,e=>{let t=D;if(t&&(t.moved=!0,E&&t.point.getGeometry().setCoordinates(e.coordinate),D===t)){if(t.insertIndex!==void 0&&!t.inserted){let{point:e,insertIndex:i}=t;if(e.unset(`insertIndex`),e.setProperties({uuid:Tt(),extData:{height:r[i-1].get(`extData`)?.height??0},isTakeoff:!1,isAircraft:!1,heading:r[i-1].get(`heading`)}),e.setStyle(o),r.splice(i,0,e),t.inserted=!0,n.addFeature(e),D!==t)return}p(),D===t&&S()}}),w.on(`translateend`,()=>{if(!D)return;let{point:t,moved:n,inserted:i}=D,a=t.getGeometry().getCoordinates();n&&r.some(e=>{let n=e.getGeometry().getCoordinates();return e!==t&&n[0]===a[0]&&n[1]===a[1]})?(k(),s?.(a.slice())):(D=void 0,S(),n&&e.changed(),i&&c(t))}),C.on(`select`,()=>e.changed());let j=()=>{C.getFeatures().clear(),k(),t.un(`change:visible`,S),v.removeInteraction(w),v.removeInteraction(C),E&&(v.removeInteraction(E),E.dispose()),T.clear(),w.dispose(),C.dispose(),x.setMap(null),x.clearRenderer(),x.setSource(null),b.clear(),b.dispose()};h=j,t.on(`change:visible`,S),S(),x.setMap(v),h===j&&(v.addInteraction(C),h===j&&(v.addInteraction(w),h===j&&E&&v.addInteraction(E)))}}},At=(e={})=>{let t=e.style===void 0?wt():{},{map:n=Q,layerName:r,style:i=t.style,takeoffStyle:a=t.takeoffStyle,lineStyle:o=t.lineStyle,pointStyle:s=t.pointStyle,aircraftStyle:c=t.aircraftStyle,midpointStyle:l,edit:u,onDuplicate:d,onWaypointAdd:f,onBeforeWaypointRemove:p,onWaypointRemove:m,input:h,speed:g=10,turnSpeed:_=60,verticalSpeed:v=1,...y}=e,b=Ot(u);if([g,_,v].some(e=>!Number.isFinite(e)||e<=0))throw Error(`飞行速度、转向速度和升降速度必须为有限正数`);if(!n)throw Error(`请先创建地图实例或通过 config.map 指定地图`);let x=new F,S=new P({...y,className:r||`ol-layer`,source:x,style:i});S.set(`_layerName`,r);let C=new ne([]),w=new M(C);w.setStyle(o);let T,E,D=[],O=!1,k=0,A=0,j=`idle`,I=[],L,R,z=0,B=/* @__PURE__ */ new Set,V=e=>{z++;try{return e()}finally{z--,!z&&!O&&J.changed()}},H=()=>{if(!(z||O))for(let e of[...B]){if(O)break;B.has(e)&&e(Z.getState())}},ee=()=>{let e=L;L=void 0,e?.(),I=[]},U=()=>{ee(),!O&&J.getMap()&&J.getActive()&&(h?.keyboard||h?.container!==void 0)&&(L=Ct({getMode:()=>j,getTarget:()=>n.getTargetElement()??void 0,setRouteControls:e=>Z.setRouteControls(e),addRouteWaypoint:()=>Z.addRouteWaypoint(),adjustWaypointHeight:e=>Z.adjustWaypointHeight(e),setActiveControls:e=>{I=[...e],H()}},{...h}))},W=()=>{ee(),R?.(),R=void 0,Y.stopRouteControl(),X.clearEditing()},te=e=>C.getCoordinates().findIndex(t=>t[0]===e[0]&&t[1]===e[1]),K=e=>{if(!f||O||!e||e===T)return;let t=D.indexOf(e);t!==-1&&f({...Et([e])[0],indexNo:t})},q=e=>{if(te(e)!==-1){d?.(e.slice());return}let t=k;if(C.appendCoordinate(e),O||t!==k)return;let n=new M({uuid:Tt(),geometry:new N(e),extData:{height:Y.aircraft?.get(`height`)??E?.get(`extData`)?.height??0},isTakeoff:C.getCoordinates().length===1,isAircraft:!Y.aircraft,heading:Y.heading});if(n.setStyle(n.get(`isTakeoff`)?a:s),E?.set(`isAircraft`,!1,!0),E=n,T||=n,D.push(n),x.addFeature(n),!(O||t!==k))return C.getCoordinates().length===2&&x.addFeature(w),J.changed(),n},re=()=>{if(O)return;let e=k;T=D[0],E=D.at(-1);for(let t of D){let n=t===T;if(t.get(`isTakeoff`)!==n&&t.setStyle(n?a:s),O||e!==k||(t.setProperties({isTakeoff:n,isAircraft:t===E}),O||e!==k))return}C.setCoordinates(D.map(e=>e.getGeometry().getCoordinates())),!(O||e!==k)&&(D.length>1&&!x.hasFeature(w)&&x.addFeature(w),D.length<2&&x.hasFeature(w)&&x.removeFeature(w))},J=new G({handleEvent(e){if(O||!J.getActive()||e.type!==`singleclick`||j!==`draw`&&j!==`takeoff`)return!0;let t=e.coordinate.slice();if(!Number.isFinite(t[0])||!Number.isFinite(t[1])||Math.abs(t[0])>180||Math.abs(t[1])>90)return!0;let n=j===`takeoff`,r=te(t);if(r!==-1&&(!n||r>0))return d?.(t.slice()),!1;let i;return V(()=>{let e=k,r=A;if(n&&T){let n=C.getCoordinates();if(n[0]=t,C.setCoordinates(n),O||e!==k)return;T.getGeometry().setCoordinates(t)}else i=q(t);n&&!O&&e===k&&r===A&&Z.setMode(`idle`)}),K(i),!1}}),Y=bt({speed:g,turnSpeed:_,verticalSpeed:v,interaction:J,geometry:C,vectorLayer:S,aircraftStyle:c,getLastWaypoint:()=>E,isDestroyed:()=>O}),X=kt({interaction:J,vectorLayer:S,source:x,points:D,layerOptions:y,midpointStyle:l,pointStyle:s,onDuplicate:d,onInsert:K,getTakeoff:()=>T,isDestroyed:()=>O,isEditing:()=>j===`edit`,getEditConfig:()=>b,syncPath:re});J.on(`change`,H),J.on(`change:active`,()=>{!J.getActive()&&!O&&Z.setMode(`idle`)});let Z=Object.assign(J,{getState(){let e=X.select?.getFeatures().item(0),t=Y.aircraft,n=t?.getGeometry().getCoordinates();return{mode:j,hasTakeoff:!!T,waypointCount:D.length,selectedWaypoint:e?{...Et([e])[0],indexNo:D.indexOf(e)}:null,aircraft:t&&n?{longitude:n[0],latitude:n[1],heading:t.get(`heading`),height:t.get(`height`),speed:t.get(`speed`)}:null,activeControls:[...I],editConfig:{...b}}},subscribe(e){if(O)throw Error(`航线已销毁`);B.add(e);try{e(Z.getState())}catch(t){throw B.delete(e),t}return()=>{B.delete(e)}},setMode(e){if(O)throw Error(`航线已销毁`);if(![`idle`,`takeoff`,`draw`,`control`,`edit`].includes(e))throw Error(`不支持的航线模式`);if([`draw`,`control`,`edit`].includes(e)&&!T)throw Error(`请先设置起飞点`);if(e!==j){if(e!==`idle`&&J.getMap()!==n)throw Error(`航线交互已移除,请重新创建航线`);if(e===`control`){let e=n.getSize();if(!n.getTargetElement()||!e||e[0]<=0||e[1]<=0)throw Error(`请先将地图挂载到已就绪的容器`);if(n.getView().getProjection().getCode()!==`EPSG:4326`)throw Error(`航线仅支持 EPSG:4326`)}V(()=>{let t=++A,r=()=>O||t!==A,i=j;if(W(),!r()&&(j=e,e!==`idle`&&G.prototype.setActive.call(J,!0),!r()))try{if(e===`control`){let e=Y.startRouteControl();if(r())return;e.on(`change`,H),R=()=>e.un(`change`,H)}if(X.updateEditing(),r()||(U(),r()))return;h?.keyboard&&e!==`idle`&&n.getTargetElement()?.focus({preventScroll:!0})}catch(e){throw r()||(W(),r())||(j=i===`control`?`idle`:i,X.updateEditing(),U()),e}})}},setEditConfig(e){if(O)throw Error(`航线已销毁`);let t=Ot(e,b);V(()=>{b=t,j===`edit`&&X.updateEditing()})},clear(){Z.importWaypoints([])},exportWaypoints(){return Et(D)},importWaypoints(e){if(O)throw Error(`航线已销毁,请创建新的 Route`);let t=Dt(e,{takeoffStyle:a,pointStyle:s});V(()=>{++A;let e=++k,n=()=>O||e!==k;if(W(),!n()&&(j=j===`edit`&&t.length?`edit`:`idle`,D.length=0,T=void 0,E=void 0,x.clear(!0),!n())){for(let e of t)D.push(e);T=D[0],E=D.at(-1),C.setCoordinates(D.map(e=>e.getGeometry().getCoordinates())),!n()&&(x.addFeatures(D.length>1?[...D,w]:D),!n()&&(X.updateEditing(),n()||U()))}})},destroy(){O||(O=!0,++A,j=`idle`,B.clear(),W(),n.un(`change:target`,ie),n.un(`change:view`,ie),J.getMap()?.removeInteraction(J),G.prototype.setMap.call(J,null),J.setActive(!1),D.length=0,T=void 0,E=void 0,C.setCoordinates([]),n.removeLayer(S),S.clearRenderer(),S.setSource(null),x.clear(!0),x.dispose(),J.dispose())},setMap(e){if(O)e?.removeInteraction(J);else{if(e&&e!==n)throw Error(`航线不能迁移到其他地图`);e!==J.getMap()&&V(()=>{++A,W(),j=`idle`,G.prototype.setMap.call(J,e),U()})}},setActive(e){G.prototype.setActive.call(J,e&&!O)},getSelectedWaypoint(){return X.select?.getFeatures().item(0)},adjustWaypointHeight(e,t=X.select?.getFeatures().item(0)){if(!Number.isFinite(e))throw Error(`高度变化必须为有限数值`);if(O||j!==`edit`||!J.getActive()||!t||!D.includes(t))return!1;let n=t.get(`extData`)??{},r=Math.max(0,(n.height??0)+e);if(!Number.isFinite(r))throw Error(`高度必须为有限数值`);return r!==(n.height??0)&&(t.set(`extData`,{...n,height:r}),!O&&D.includes(t)&&J.changed(),!0)},removeWaypoint(e=X.select?.getFeatures().item(0)){if(!X.select||!e||e===T||e===X.pendingInsertion||!D.includes(e))return!1;let t=A,n=k;if(p?.({...Et([e])[0],indexNo:D.indexOf(e)})===!1||O||t!==A||n!==k||!D.includes(e))return!1;if(X.clearEditing(),!D.includes(e))return X.updateEditing(),J.changed(),!1;let r=D.indexOf(e),i=m?{...Et([e])[0],indexNo:r}:void 0;return D.splice(r,1),x.removeFeature(e),re(),X.updateEditing(),J.changed(),!O&&i&&m?.(i),!0},getLayer(){return S},hasTakeoff(){return!!T},setRouteControls(e){Y.setRouteControls(e)},addRouteWaypoint(){Y.aircraft&&J.getActive()&&K(q(Y.aircraft.getGeometry().getCoordinates()))}}),ie=()=>{O||V(()=>{++A,W(),j=`idle`,U()})};try{n.addLayer(S),n.addInteraction(Z),n.on(`change:target`,ie),n.on(`change:view`,ie),U()}catch(e){throw Z.destroy(),e}return Z},jt=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new F({features:new se().readFeatures(e)}),style:t||new V({stroke:new B({color:`red`,lineDash:[10],width:3}),fill:new L({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new P(i)},Mt=(e,t,n,r)=>t&&n?.get(e[t])||r,Nt=(e,t)=>{let{key:n,crsForm:r}=t,i=[];return e.forEach(e=>{try{let t=e[n],r=Array.isArray(t)?t:JSON.parse(t||`[]`);if(r.length){let t=e.geoType||ye(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),C.transform({type:`FeatureCollection`,features:i},r||C.WGS84,C.WGS84)},Pt=(e,t)=>{let{isLine:n,colorMap:r,fillColor:i,colorKey:a,strokeColor:o,fillOpacity:s,strokeWeight:c,activeFillColor:l,activeFillOpacity:u,activeStrokeColor:d,activeStrokeWeight:f}=t||{},p=e.getProperties(),m=new V({stroke:new B({width:f??c??4,color:d||Mt(p,a,r,o)})}),h=new V({stroke:new B({width:c??2,color:Mt(p,a,r,o)})});return n||(m.setFill(new L({color:_e(l||i||``,u??s??1)||_e(Mt(p,a,r,i)||``,s??1)})),h.setFill(new L({color:_e(Mt(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},Ft=(e,t)=>{let n=Nt(e,t),r=new d().readFeatures(n),i=r.map(e=>{let t={...e.getProperties()};return delete t.geometry,t});return r.forEach(e=>{e.setStyle(Pt(e,t))}),{features:r,acceptedData:i}},It=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=Ft(e,t),s=new P({zIndex:5,className:r||`ol-layer`,source:new F({features:a})});return i&&dt(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},Lt=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=Ft(t,Object.assign({},i,{crsForm:n??i?.crsForm}));r.addFeatures(a);let s=new Set(e.get(`_uuidSet`)||[]);o.forEach(e=>s.add(e._uuid)),e.set(`_uuidSet`,s),e.set(`_dataList`,[...e.get(`_dataList`)||[],...o])},Rt=(e=[],t)=>It(e,Object.assign({},t,{isLine:!1})),zt=(e=[],t)=>It(e,Object.assign({},t,{isLine:!0})),Bt=e=>t=>{let{baseUrl:n,markerIcon:r,statusNum:i=5,activeScale:a=1.3,markerSize:o=[32,32]}=t,s=e(n),[c,l]=o,u=Array(i*2);for(let e=0;e<i;e++){let t=s(`${r}-${e}`,`.webp`);u[e]=new V({zIndex:88+e,image:new R({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new V({zIndex:120,image:new R({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},Vt=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=C.transform([+e.lnglat[0],+e.lnglat[1]],n||C.WGS84,C.WGS84),i=new w({geometry:new ce(r)});return i.setProperties({...e,unActiveStyle:t[e.style],activeStyle:t[e.style+t.length/2]}),i.setStyle(t[e.style]),i}),Ht=(e,t,n={})=>{let r=e.get(`_massMarksStyles`),i=e?.getSource(),{clear:a}=n,o=Vt(t,r);a&&i?.clear(),i?.addFeatures(o);let s=[...a?[]:e.get(`_dataList`)||[],...t];e.set(`_dataList`,s),e.set(`_uuidSet`,new Set(s.map(e=>e._uuid)))},Ut=(e,t=[])=>{let n=new P({zIndex:2e3,source:new F({features:Vt(e,t)})});return n.setProperties({_isCustom:!0,_isVectorLayer:!0,_isMassMarksLayer:!0,_statusNum:t.length/2,_dataList:[...e],_uuidSet:new Set(e.map(e=>e._uuid)||[])}),n},Wt=e=>(t=[],n,r=!0)=>{let{offset:i=[0,0],baseUrl:a,hasLine:o,hasFace:s,layerName:c,isDynamic:l,isAutoFit:u,statusNum:d,markerIcon:f,marksStyles:p,markerSize:m,activeScale:h,vectorConfig:g}=n,_=p||Bt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=Ut(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),dt(v)),o){let e=It(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));Q.addLayer(e)}if(s){let e=It(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));Q.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),Q.addLayer(v),v},Gt=(e=[])=>{let t=new V({}),n=new Set(e),r=[];return Q.getAllLayers().filter(e=>e.get(`_isMassMarksLayer`)).forEach(e=>{e.getSource().getFeatures().forEach(e=>{let i=e.getProperties();n.has(i.status)?(r.push(i),e.setStyle(i.unActiveStyle)):e.setStyle(t)})}),r},Kt=(e,t)=>{let n=Q.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e&&t.get(`_isMassMarksLayer`)),r=new V({});n.forEach(e=>{e.getSource().getFeatures().forEach(e=>{let n=e.getProperties();t.has(n.id)?e.setStyle(n.unActiveStyle):e.setStyle(r)})})},qt=(e,t)=>{let n=e.length,r={},{distance:i,minDistance:a,openClick:o,buildStyle:s,singleStyles:c,computedRadius:l,layerName:u=`cluster-layer`}=t,d=e=>(e/n)**(1/18);r[1]=c;let f=e=>{let t=e.get(`features`).length,n=r[t],i=l?l(t):d(t);if(n||(n=new V({image:new K({radius:i*20,stroke:new B({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new L({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new H({text:t.toString(),fill:new L({color:`hsla(${180-i*180}, 100%, 10%, 1)`}),textBaseline:`middle`})}),r[t]=n),Array.isArray(n)){let t=e.get(`features`)[0].get(`styleIndex`)??0;return n[t]}return n},p=new P({zIndex:200,className:u,source:new le({distance:i||80,minDistance:a||0,source:new F({features:e.map(e=>{let t=new w(new ce(e.lnglat));t.setProperties(e);let n=e.style??0;return t.setProperties({unActiveStyle:c[n],activeStyle:c[n+c.length/2]}),t})})}),style:e=>s?s(e):f(e)});return p.setProperties({_isCustom:!0,_isVectorLayer:!0,_isClusterLayer:!0}),o&&dt(p),p};export{ue as GeometryType,He as activeFeatureByUid,Ht as addFeaturesByLayer,Wt as addMassMarksLayer,Lt as appendFeaturesByLayer,Oe as baseLayers,Bt as buildMassMarksStyles,Kt as changeFeaturesVisibleByIds,Pe as changeLayer,Ne as changeSource,st as changeUnselectStyle,Le as createAnimationMarker,Ee as createBaseLayer,It as createBusinessLayer,qt as createClusterLayer,yt as createDrawInteraction,ct as createElasticMarkerLayer,jt as createGeoJsonLayer,nt as createIconStyle,ft as createLayerSelectByNames,We as createMap,Ue as createMapInstance,De as createMapWorldLayer,rt as createMarker,it as createMarkersLayer,Ut as createMassMarksLayer,lt as createMoveMarkerLayer,Re as createOverlay,At as createRouteController,dt as createSelectByLayer,fe as createTdtVectorSource,pe as createTdtVtsLayer,tt as createText,Rt as createVectorFaceLayer,zt as createVectorLineLayer,Ce as createWmtsLayer,ke as createZheJiangLayer,Ke as disposeInstance,Ge as disposeMap,me as emitter,et as flyToAnimate,vt as getDrawStyle,Ae as getLayerByName,ve as getLayersDataList,qe as getMapInstance,Q as instance,Be as removeAllLayers,je as removeLayerByName,Fe as removeOverlays,Ve as resetActiveFeature,ze as resetActiveVector,Ye as resetMap,Je as resetZoomAndCenter,Ze as setFitViewByCoords,Qe as setFitViewByGeom,$e as setFitViewByLayer,Gt as updateMarksLayersByStatus};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "map-ol-utils",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "type": "module",
5
5
  "description": "OpenLayers utilities with browser-side Tianditu private VTS loading and conversion",
6
6
  "files": [