map-ol-utils 1.1.0 → 1.1.2
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 +20 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +6 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -731,6 +731,8 @@ const unsubscribe = route.subscribe((state) => {
|
|
|
731
731
|
|
|
732
732
|
`getState(): RouteState` 返回普通数据快照。`subscribe(listener)` 立即通知一次初始状态,之后在数据、模式、选择、输入或实时飞机变化时通知,返回取消订阅函数;`destroy()` 自动清理订阅。
|
|
733
733
|
|
|
734
|
+
普通业务按钮、输入框或下拉框切换焦点不会单独触发订阅。只有当前存在库托管的按键或指针动作时,失焦、后台等清理才通知空动作状态;重复清理不再通知空动作。调用航线接口引起的模式、数据变化仍会正常通知,实时飞行也仍会持续通知;这不是对所有状态的全局去重。
|
|
735
|
+
|
|
734
736
|
| 字段 | 说明 |
|
|
735
737
|
| --- | --- |
|
|
736
738
|
| `mode` | 当前互斥操作模式 |
|
|
@@ -745,11 +747,23 @@ const unsubscribe = route.subscribe((state) => {
|
|
|
745
747
|
|
|
746
748
|
### 业务面板与输入
|
|
747
749
|
|
|
748
|
-
操作面板由业务创建、布局并根据状态控制显示。库不创建或删除业务 DOM
|
|
750
|
+
操作面板由业务创建、布局并根据状态控制显示。库不创建或删除业务 DOM,负责输入事件、可选激活颜色与生命周期。传入操控区和编辑区的公共容器,无需单独传编辑面板或调用绑定方法;也可以只配置 `input.keyboard: true` 使用键盘,或省略输入配置只使用地图绘制。
|
|
751
|
+
|
|
752
|
+
焦点监听仅在地图容器和 `input.container` 上绑定 `focusout`,不在 `document` 上监听 `focusin` / `focusout`。焦点在地图与面板的非表单区域之间切换时保留动作;进入输入框、下拉框等被排除的元素,或离开两个区域时停止动作。两个容器无需有父子关系,也支持嵌套。窗口失焦、页面后台及指针释放仍由全局事件兜底。
|
|
753
|
+
|
|
754
|
+
航线输入监听仅在 `control` / `edit` 模式启用,退出时解绑并恢复临时添加的 `tabindex`;其他模式仍校验容器 ID。`keydown` 仅绑定已启用快捷键的地图容器及业务 `container`,不绑定到 `document`,跳过已被阻止默认行为的事件,避免嵌套容器重复执行。关闭快捷键时,容器内按钮仍支持 Enter / Space。`keyup` 保留 document 捕获监听;未配置 `container` 时不绑定指针事件。输入期间的松键、指针释放、窗口失焦与页面后台清理仍保留。
|
|
749
755
|
|
|
750
756
|
```ts
|
|
751
757
|
const route = createRouteController({
|
|
752
|
-
input: {
|
|
758
|
+
input: {
|
|
759
|
+
keyboard: true,
|
|
760
|
+
container: 'route-controls',
|
|
761
|
+
activeStyle: {
|
|
762
|
+
backgroundColor: '#16a34a',
|
|
763
|
+
borderColor: '#22c55e',
|
|
764
|
+
color: '#fff'
|
|
765
|
+
}
|
|
766
|
+
}
|
|
753
767
|
})
|
|
754
768
|
```
|
|
755
769
|
|
|
@@ -763,6 +777,10 @@ const route = createRouteController({
|
|
|
763
777
|
|
|
764
778
|
`input.container` 可传容器 ID(不带 `#`)或 `HTMLElement`。ID 优先在所属地图容器的 document 中查找,地图尚未挂载时使用当前 document;找不到时明确报错,创建失败会回收本次图层与交互。容器必须已创建,Vue 中在 `onMounted()` 后初始化,无需额外保存面板 ref。事件代理允许内部按钮动态增删。键盘 W/S/A/D 移动、Q/E 转向、Z/C 升降、空格打点;操控模式按住动作持续执行,编辑模式只处理升降,每次 1 米。高度最低 0。键盘和指针分别记录并合并,松开一个来源不会清除其他来源。输入框、选择框、可编辑内容和链接不响应快捷键;失焦、后台、指针取消及模式切换清空动作,销毁时解绑监听和释放捕获,保留业务容器。显式启用键盘时,进入操作模式会聚焦地图容器;库临时添加的 tabindex 在解绑时恢复。未配置输入时,可直接使用 `setRouteControls()` 与 `addRouteWaypoint()` 接入其他设备。
|
|
765
779
|
|
|
780
|
+
`input.activeStyle` 可选配置按钮激活时的 `backgroundColor`、`borderColor`、`color`,值使用 CSS 颜色字符串。库根据合并后的键盘与指针动作,为容器内相同 `data-route-control` 的可用按钮临时应用内联颜色(`!important`);释放全部输入来源、失焦、切换模式或销毁时恢复原有颜色及优先级,不影响其他样式。不传或省略的颜色属性仍由业务 CSS 决定。该配置只处理库托管的输入高亮,不创建面板,也不替代 `activeControls` 状态订阅或业务无障碍属性。
|
|
781
|
+
|
|
782
|
+
按钮激活期间如需动态调整其他外观,优先切换业务 CSS class,避免新增或重写包含 `var()` 的内联简写声明;这些声明无法按颜色子属性可靠合并。激活前已有的 CSS 变量简写可正常恢复。
|
|
783
|
+
|
|
766
784
|
### 航线样式与数据约定
|
|
767
785
|
|
|
768
786
|
不传 `style` 时,库提供起飞点、普通点、连线、末点飞机与航向旋转的完整样式。显式传入整体 `style` 时,未配置的分类继承整体样式;`null` 隐藏整体样式,分类空数组隐藏该分类。`takeoffStyle`、`lineStyle`、`pointStyle`、`aircraftStyle` 和 `midpointStyle` 仍可分别覆盖。自定义飞机样式自行根据 `heading` 设置旋转。图层配置支持 `layerName`、`zIndex`、`visible`、`minZoom` 与 `maxZoom`。
|
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}`);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=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},d=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},f=()=>{o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)d(t,n);u()},p=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}},m=e=>!!e&&(!!n?.contains(e)||!!r?.contains(e))&&!e.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),h=t=>{e.getMode()===`edit`&&mt(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},g=e=>{if(!m(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){f();return}let n=p(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||r?.contains(c)&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),u(),h(s)))},_=e=>{o.delete(e.code)&&(e.preventDefault(),u())},v=e=>{if(e.button!==0||i.hidden)return;let t=p(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}u()}},y=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),d(e.pointerId,t.button),u())},b=e=>{let t=p(e.target);t&&!i.hidden&&h(t.action)},x=()=>{m(i.activeElement)||f()},S=e=>{m(e.relatedTarget)||f()},C=()=>{i.hidden&&f()};return i.addEventListener(`keydown`,g),i.addEventListener(`keyup`,_,!0),i.addEventListener(`focusin`,x),i.addEventListener(`focusout`,S),i.addEventListener(`visibilitychange`,C),i.addEventListener(`pointerup`,y),i.addEventListener(`pointercancel`,y),a.addEventListener(`blur`,f),r?.addEventListener(`pointerdown`,v),r?.addEventListener(`lostpointercapture`,y),r?.addEventListener(`click`,b),()=>{i.removeEventListener(`keydown`,g),i.removeEventListener(`keyup`,_,!0),i.removeEventListener(`focusin`,x),i.removeEventListener(`focusout`,S),i.removeEventListener(`visibilitychange`,C),i.removeEventListener(`pointerup`,y),i.removeEventListener(`pointercancel`,y),a.removeEventListener(`blur`,f),r?.removeEventListener(`pointerdown`,v),r?.removeEventListener(`lostpointercapture`,y),r?.removeEventListener(`click`,b),f(),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 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=/* @__PURE__ */ new Map,d={"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},f=e=>{for(let[e,{original:t,applied:n}]of u){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(u.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(d))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)}]));u.set(t,{original:n,applied:r})}},p=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];f(t),e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},m=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},h=()=>{if(!o.size&&!s.size)return;o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)m(t,n);p()},g=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}},_=e=>!!e&&(!!n?.contains(e)||!!r?.contains(e))&&!e.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),v=t=>{e.getMode()===`edit`&&mt(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},y=e=>{if(e.defaultPrevented||!_(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){h();return}let n=g(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||r?.contains(c)&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),p(),v(s)))},b=e=>{o.delete(e.code)&&(e.preventDefault(),p())},x=e=>{if(e.button!==0||i.hidden)return;let t=g(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}p()}},S=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),m(e.pointerId,t.button),p())},C=e=>{let t=g(e.target);t&&!i.hidden&&v(t.action)},w=e=>{_(e.relatedTarget)||h()},T=()=>{i.hidden&&h()},E=/* @__PURE__ */ new Set([t.keyboard?n:void 0,r]);for(let e of E)e?.addEventListener(`keydown`,y);i.addEventListener(`keyup`,b,!0);let D=/* @__PURE__ */ new Set([n,r]);for(let e of D)e?.addEventListener(`focusout`,w);return i.addEventListener(`visibilitychange`,T),r&&(i.addEventListener(`pointerup`,S),i.addEventListener(`pointercancel`,S)),a.addEventListener(`blur`,h),r?.addEventListener(`pointerdown`,x),r?.addEventListener(`lostpointercapture`,S),r?.addEventListener(`click`,C),()=>{for(let e of E)e?.removeEventListener(`keydown`,y);i.removeEventListener(`keyup`,b,!0);for(let e of D)e?.removeEventListener(`focusout`,w);i.removeEventListener(`visibilitychange`,T),r&&(i.removeEventListener(`pointerup`,S),i.removeEventListener(`pointercancel`,S)),a.removeEventListener(`blur`,h),r?.removeEventListener(`pointerdown`,x),r?.removeEventListener(`lostpointercapture`,S),r?.removeEventListener(`click`,C),h(),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]}})});
|
package/dist/index.d.cts
CHANGED
|
@@ -193,6 +193,12 @@ export type RouteInputConfig = {
|
|
|
193
193
|
keyboard?: boolean;
|
|
194
194
|
/** 业务操作区 DOM 或容器 ID(不带 #);绑定前须已存在。 */
|
|
195
195
|
container?: HTMLElement | string;
|
|
196
|
+
/** 按钮激活时临时应用的颜色;释放输入或解绑后恢复原有样式。 */
|
|
197
|
+
activeStyle?: {
|
|
198
|
+
backgroundColor?: string;
|
|
199
|
+
borderColor?: string;
|
|
200
|
+
color?: string;
|
|
201
|
+
};
|
|
196
202
|
};
|
|
197
203
|
/** 可直接用于界面展示的状态,不暴露地图要素。 */
|
|
198
204
|
export type RouteState = {
|
package/dist/index.d.mts
CHANGED
|
@@ -193,6 +193,12 @@ export type RouteInputConfig = {
|
|
|
193
193
|
keyboard?: boolean;
|
|
194
194
|
/** 业务操作区 DOM 或容器 ID(不带 #);绑定前须已存在。 */
|
|
195
195
|
container?: HTMLElement | string;
|
|
196
|
+
/** 按钮激活时临时应用的颜色;释放输入或解绑后恢复原有样式。 */
|
|
197
|
+
activeStyle?: {
|
|
198
|
+
backgroundColor?: string;
|
|
199
|
+
borderColor?: string;
|
|
200
|
+
color?: string;
|
|
201
|
+
};
|
|
196
202
|
};
|
|
197
203
|
/** 可直接用于界面展示的状态,不暴露地图要素。 */
|
|
198
204
|
export type RouteState = {
|
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}`);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=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},d=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},f=()=>{o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)d(t,n);u()},p=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}},m=e=>!!e&&(!!n?.contains(e)||!!r?.contains(e))&&!e.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),h=t=>{e.getMode()===`edit`&&Ct(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},g=e=>{if(!m(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){f();return}let n=p(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||r?.contains(c)&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),u(),h(s)))},_=e=>{o.delete(e.code)&&(e.preventDefault(),u())},v=e=>{if(e.button!==0||i.hidden)return;let t=p(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}u()}},y=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),d(e.pointerId,t.button),u())},b=e=>{let t=p(e.target);t&&!i.hidden&&h(t.action)},x=()=>{m(i.activeElement)||f()},S=e=>{m(e.relatedTarget)||f()},C=()=>{i.hidden&&f()};return i.addEventListener(`keydown`,g),i.addEventListener(`keyup`,_,!0),i.addEventListener(`focusin`,x),i.addEventListener(`focusout`,S),i.addEventListener(`visibilitychange`,C),i.addEventListener(`pointerup`,y),i.addEventListener(`pointercancel`,y),a.addEventListener(`blur`,f),r?.addEventListener(`pointerdown`,v),r?.addEventListener(`lostpointercapture`,y),r?.addEventListener(`click`,b),()=>{i.removeEventListener(`keydown`,g),i.removeEventListener(`keyup`,_,!0),i.removeEventListener(`focusin`,x),i.removeEventListener(`focusout`,S),i.removeEventListener(`visibilitychange`,C),i.removeEventListener(`pointerup`,y),i.removeEventListener(`pointercancel`,y),a.removeEventListener(`blur`,f),r?.removeEventListener(`pointerdown`,v),r?.removeEventListener(`lostpointercapture`,y),r?.removeEventListener(`click`,b),f(),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 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=/* @__PURE__ */ new Map,d={"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},f=e=>{for(let[e,{original:t,applied:n}]of u){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(u.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(d))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)}]));u.set(t,{original:n,applied:r})}},p=()=>{let t=[.../* @__PURE__ */ new Set([...o.values(),...[...s.values()].map(({action:e})=>e)])];f(t),e.setRouteControls(e.getMode()===`control`?t.filter(e=>e!==`waypoint`):[]),e.setActiveControls(t)},m=(e,t)=>{try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},h=()=>{if(!o.size&&!s.size)return;o.clear();let e=[...s.entries()];s.clear();for(let[t,{button:n}]of e)m(t,n);p()},g=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}},_=e=>!!e&&(!!n?.contains(e)||!!r?.contains(e))&&!e.closest(`input, textarea, select, a, [contenteditable]:not([contenteditable="false"])`),v=t=>{e.getMode()===`edit`&&Ct(t)?e.adjustWaypointHeight(t===`ascend`?1:-1):e.getMode()===`control`&&t===`waypoint`&&e.addRouteWaypoint()},y=e=>{if(e.defaultPrevented||!_(i.activeElement)||i.hidden)return;if(e.ctrlKey||e.altKey||e.metaKey||e.isComposing){h();return}let n=g(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||r?.contains(c)&&e.code!==`Space`&&e.code!==`Enter`)&&(e.preventDefault(),!(e.repeat||o.has(e.code))&&(o.set(e.code,s),p(),v(s)))},b=e=>{o.delete(e.code)&&(e.preventDefault(),p())},x=e=>{if(e.button!==0||i.hidden)return;let t=g(e.target);if(t){e.preventDefault(),t.button.focus({preventScroll:!0}),s.set(e.pointerId,t);try{t.button.setPointerCapture(e.pointerId)}catch{}p()}},S=e=>{let t=s.get(e.pointerId);t&&(s.delete(e.pointerId),m(e.pointerId,t.button),p())},C=e=>{let t=g(e.target);t&&!i.hidden&&v(t.action)},w=e=>{_(e.relatedTarget)||h()},T=()=>{i.hidden&&h()},E=/* @__PURE__ */ new Set([t.keyboard?n:void 0,r]);for(let e of E)e?.addEventListener(`keydown`,y);i.addEventListener(`keyup`,b,!0);let D=/* @__PURE__ */ new Set([n,r]);for(let e of D)e?.addEventListener(`focusout`,w);return i.addEventListener(`visibilitychange`,T),r&&(i.addEventListener(`pointerup`,S),i.addEventListener(`pointercancel`,S)),a.addEventListener(`blur`,h),r?.addEventListener(`pointerdown`,x),r?.addEventListener(`lostpointercapture`,S),r?.addEventListener(`click`,C),()=>{for(let e of E)e?.removeEventListener(`keydown`,y);i.removeEventListener(`keyup`,b,!0);for(let e of D)e?.removeEventListener(`focusout`,w);i.removeEventListener(`visibilitychange`,T),r&&(i.removeEventListener(`pointerup`,S),i.removeEventListener(`pointercancel`,S)),a.removeEventListener(`blur`,h),r?.removeEventListener(`pointerdown`,x),r?.removeEventListener(`lostpointercapture`,S),r?.removeEventListener(`click`,C),h(),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};
|