map-ol-utils 1.0.0 → 1.0.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 CHANGED
@@ -118,6 +118,8 @@ map.setTarget('map')
118
118
 
119
119
  始终新建一个 `CustomMap`。默认挂载杭州规自暗色底图,禁用旋转/双击缩放,并在 `pointermove` 时根据是否命中要素切换鼠标指针;挂载的图层查询、切换和删除方法绑定到当前地图。`config` 与以下默认值合并后作为 `ol/View` 选项:
120
120
 
121
+ 鼠标指针更新按帧合并;延迟回调执行时若地图已解除目标元素,会跳过命中检测与样式更新。
122
+
121
123
  ```ts
122
124
  function createMap(config?: Record<string, any>): CustomMap
123
125
  // 默认 View 配置:
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.js");l=s(l,1);let u=require("ol/layer/VectorTile.js");u=s(u,1);let d=require("ol/TileState.js");d=s(d,1);let f=require("ol/source/VectorTile.js");f=s(f,1);let p=require("mitt");p=s(p,1);let m=require("ol/source.js"),h=require("ol/layer/Tile.js");h=s(h,1);let g=require("ol/format.js"),_=require("ol/source/WMTS.js"),v=require("ol/tilegrid.js"),y=require("ol/layer.js"),b=require("ol/tilegrid/WMTS.js");b=s(b,1);let ee=require("ol/Observable.js"),x=require("ol/layer/Image.js");x=s(x,1);let S=require("ol/source/Raster.js");S=s(S,1);let C=require("ol/Map.js");C=s(C,1);let w=require("ol/View.js");w=s(w,1);let te=require("ol/control.js"),T=require("gcoord");T=s(T,1);let E=require("ol"),D=require("ol/interaction.js"),ne=require("ol/extent.js"),re=require("ol/events/condition.js"),O=require("ol/Feature.js");O=s(O,1);let k=require("ol/geom/Point.js");k=s(k,1);let A=require("ol/layer/Vector.js");A=s(A,1);let j=require("ol/source/Vector.js");j=s(j,1);let M=require("ol/style.js"),N=require("ol/interaction/Draw.js");N=s(N,1);let ie=require("ol/sphere.js"),P=require("ol/format/GeoJSON.js");P=s(P,1);let ae=require("ol/geom.js"),F=require("ol/source/Cluster.js");F=s(F,1);let I=require("ol/style/Circle.js");I=s(I,1);let oe=function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const se=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()},ce=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}},le=async e=>{let t=await se(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=ce({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}},L=(0,p.default)();let R;const ue=e=>{R=e},de=()=>{R=void 0},z=(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},fe=()=>R?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],pe=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`}},me=new g.WMTSCapabilities,he=new Map,ge=async e=>{let t=he.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=me.read(await n.text());return he.set(e,r),r},_e=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 ge(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)})},ve=`c77eddc667c5bed016fded560baf93e7`,B=(e,t)=>{let n=t.get(`_selectInteraction`);n&&(e.removeInteraction(n),n.dispose(),t.unset(`_selectInteraction`));let r=t.get(`_resolutionChangeKey`);r&&((0,ee.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()},V=(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=ve)=>{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=>R.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Ce=e=>{let t=Se(e);t&&B(R,t)},we=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),H=(e,t,n,r={})=>{let i=new S.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},Te=(e,t,n,r={})=>new x.default({source:H(e,t,n,r)}),U=(e=``)=>{R&&R.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>R.removeOverlay(e))},Ee=()=>U(`_isAnimationMarker`),De=(e,t)=>{Ee();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 E.Overlay({element:o,stopEvent:!1,positioning:`bottom-center`,position:T.default.transform([+i[0],+i[1]],a||T.default.WGS84,T.default.WGS84)});c.set(`_isAnimationMarker`,!0),R.addOverlay(c)},Oe=(e={id:`popup-container`,positioning:`top-center`})=>new E.Overlay(Object.assign({element:document.getElementById(e.id)||void 0},e)),ke=()=>{U(),R.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},Ae=()=>{U(),R&&R.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||B(R,e)})},je=()=>{U(),R.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())})},Me=e=>{let t=R.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 W=[119.71512016971076,30.122490541963536];const Ne=(e={})=>{if(R)return R;let t=Pe(e);return ue(t),t},Pe=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:W,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[V()],constrainResolution:!1,smoothExtentConstraint:!1,tk:ve},e||{}),n=new C.default({view:new w.default(t),controls:(0,te.defaults)({zoom:!1,rotate:!1,attribution:!1}),interactions:(0,D.defaults)({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[V()]});W=t.center||W,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&&B(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,a&&(n.getTargetElement().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},Fe=()=>{if(!R)return;let e=R;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>B(e,t)),e.setTarget(``),e.dispose(),de()},Ie=()=>Fe(),Le=()=>R,Re=(e=W)=>{R&&R.getView().animate({zoom:9.4,center:e,duration:1e3})},ze=(e={center:W,isClearAll:!0})=>{Ae(),Re(e.center||W)},G={padding:[50,50,50,50],duration:1e3},Be=(e,t=R,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=(0,ne.boundingExtent)(e);r.fit(t,{...G,...n||{}})}},Ve=(e,t=R,n)=>{t.getView().fit(e,{...G,...n||{}})},He=(e,t=R,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...G,...n||{}})},Ue=(e,t)=>{let n=R.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})},We=e=>new M.Text({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new M.Fill({color:`rgba(255, 255, 255, 0.8)`})}),K=(e,t=!1)=>new M.Style({image:new M.Icon({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?We(e):void 0}),q=(e,t)=>{let n=new O.default({geometry:new k.default([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(K(e)),n},Ge=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new j.default;return e.forEach(e=>a.addFeature(q(e,t))),new A.default({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},J=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(K({...t,img:t[n]},!1))})},Y=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?J([e],R.getView().getZoom()):e.setStyle(K(r,t))},Ke=e=>{e.forEach(e=>{Y(e,!1)}),e.clear()},qe=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=Ge(n,t),i=r.getSource().getFeatures(),a=R.getView();return J(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>J(i,a.getZoom()))),r},Je=(e,t)=>{let n=q(e,t),r=new A.default({className:t.layerName||`ol-layer`,source:new j.default({features:[n]})});return R.addLayer(r),{vectorLayer:r}},Ye=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),L.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`),L.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=R.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:(0,ne.getCenter)(t.getGeometry().getExtent())})}},X=e=>{let t=new D.Select({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!(0,re.singleClick)(t))return!1;let n=!1;return R.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&&Ye(e,n[0])}else Ye(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),R.addInteraction(t),e.set(`_selectInteraction`,t),t},Xe=(e,t,n)=>{let r=new D.Select({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];Y(t,!1),n?.(t)}if(r.length){let e=r[0];Y(e,!0),t?.(e)}}),r},Ze=e=>{let t=(0,ie.getArea)(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},Qe=e=>{let t=(0,ie.getLength)(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},$e=new M.Style({fill:new M.Fill({color:`rgba(255, 255, 255, 0.2)`}),stroke:new M.Stroke({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new M.Circle({radius:5,stroke:new M.Stroke({color:`rgba(0, 0, 0, 0.7)`}),fill:new M.Fill({color:`rgba(255, 255, 255, 0.2)`})})}),et=new WeakMap,tt=e=>{let t=et.get(e);if(t)return t;let n=new M.Style({text:new M.Text({font:`14px`,fill:new M.Fill({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new M.Fill({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new M.RegularShape({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new M.Fill({color:`rgba(0, 0, 0, 0.7)`})})});return et.set(e,n),n},nt=(e,t=$e)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=Ze(r)):r.getType()===`LineString`&&(i=new k.default(r.getLastCoordinate()),a=Qe(r)),i&&a){let t=tt(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},rt=(e=`Point`,t,n)=>new N.default({source:t.getSource(),type:e,style:n?e=>nt(e,void 0):void 0}),it=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new j.default({features:new P.default().readFeatures(e)}),style:t||new M.Style({stroke:new M.Stroke({color:`red`,lineDash:[10],width:3}),fill:new M.Fill({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new A.default(i)},Z=(e,t,n,r)=>t&&n?.get(e[t])||r,at=(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||pe(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),T.default.transform({type:`FeatureCollection`,features:i},r||T.default.WGS84,T.default.WGS84)},ot=(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 M.Style({stroke:new M.Stroke({width:f??c??4,color:d||Z(p,a,r,o)})}),h=new M.Style({stroke:new M.Stroke({width:c??2,color:Z(p,a,r,o)})});return n||(m.setFill(new M.Fill({color:z(l||i||``,u??s??1)||z(Z(p,a,r,i)||``,s??1)})),h.setFill(new M.Fill({color:z(Z(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},st=(e,t)=>{let n=at(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(ot(e,t))}),{features:r,acceptedData:i}},Q=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=st(e,t),s=new A.default({zIndex:5,className:r||`ol-layer`,source:new j.default({features:a})});return i&&X(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},ct=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=st(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])},lt=(e=[],t)=>Q(e,Object.assign({},t,{isLine:!1})),ut=(e=[],t)=>Q(e,Object.assign({},t,{isLine:!0})),dt=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 M.Style({zIndex:88+e,image:new M.Icon({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new M.Style({zIndex:120,image:new M.Icon({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},ft=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=T.default.transform([+e.lnglat[0],+e.lnglat[1]],n||T.default.WGS84,T.default.WGS84),i=new E.Feature({geometry:new ae.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=ft(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)))},$=(e,t=[])=>{let n=new A.default({zIndex:2e3,source:new j.default({features:ft(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},mt=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||dt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=$(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),X(v)),o){let e=Q(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));R.addLayer(e)}if(s){let e=Q(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));R.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),R.addLayer(v),v},ht=(e=[])=>{let t=new M.Style({}),n=new Set(e),r=[];return R.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},gt=(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 M.Style({image:new I.default({radius:i*20,stroke:new M.Stroke({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new M.Fill({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new M.Text({text:t.toString(),fill:new M.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 A.default({zIndex:200,className:u,source:new F.default({distance:i||80,minDistance:a||0,source:new j.default({features:e.map(e=>{let t=new E.Feature(new ae.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&&X(p),p};exports.GeometryType=oe,exports.activeFeatureByUid=Me,exports.addFeaturesByLayer=pt,exports.addMassMarksLayer=mt,exports.appendFeaturesByLayer=ct,exports.baseLayers=be,exports.buildMassMarksStyles=dt,exports.changeLayer=Te,exports.changeSource=H,exports.changeUnselectStyle=Ke,exports.createAnimationMarker=De,exports.createBaseLayer=V,exports.createBusinessLayer=Q,exports.createClusterLayer=gt,exports.createDrawInteraction=rt,exports.createElasticMarkerLayer=qe,exports.createGeoJsonLayer=it,exports.createIconStyle=K,exports.createLayerSelectByNames=Xe,exports.createMap=Pe,exports.createMapInstance=Ne,exports.createMapWorldLayer=ye,exports.createMarker=q,exports.createMarkersLayer=Ge,exports.createMassMarksLayer=$,exports.createMoveMarkerLayer=Je,exports.createOverlay=Oe,exports.createSelectByLayer=X,exports.createTdtVectorSource=ce,exports.createTdtVtsLayer=le,exports.createText=We,exports.createVectorFaceLayer=lt,exports.createVectorLineLayer=ut,exports.createWmtsLayer=_e,exports.createZheJiangLayer=xe,exports.disposeInstance=Ie,exports.disposeMap=Fe,exports.emitter=L,exports.flyToAnimate=Ue,exports.getDrawStyle=nt,exports.getLayerByName=Se,exports.getLayersDataList=fe,exports.getMapInstance=Le,Object.defineProperty(exports,"instance",{enumerable:!0,get:function(){return R}}),exports.removeAllLayers=Ae,exports.removeLayerByName=Ce,exports.removeOverlays=U,exports.resetActiveFeature=je,exports.resetActiveVector=ke,exports.resetMap=ze,exports.resetZoomAndCenter=Re,exports.setFitViewByCoords=Be,exports.setFitViewByGeom=Ve,exports.setFitViewByLayer=He,exports.updateMarksLayersByStatus=ht,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 ee=require("ol/Observable"),x=require("ol/layer/Image");x=s(x,1);let S=require("ol/source/Raster");S=s(S,1);let C=require("ol/Map");C=s(C,1);let w=require("ol/View");w=s(w,1);let te=require("ol/control"),T=require("gcoord");T=s(T,1);let E=require("ol"),D=require("ol/interaction"),ne=require("ol/extent"),re=require("ol/events/condition"),O=require("ol/Feature");O=s(O,1);let k=require("ol/geom/Point");k=s(k,1);let A=require("ol/layer/Vector");A=s(A,1);let j=require("ol/source/Vector");j=s(j,1);let M=require("ol/style"),N=require("ol/interaction/Draw");N=s(N,1);let ie=require("ol/sphere"),P=require("ol/format/GeoJSON");P=s(P,1);let ae=require("ol/geom"),F=require("ol/source/Cluster");F=s(F,1);let I=require("ol/style/Circle");I=s(I,1);let oe=/* @__PURE__ */ function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const se=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()},ce=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}},le=async e=>{let t=await se(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=ce({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}},L=(0,p.default)();let R;const ue=e=>{R=e},de=()=>{R=void 0},z=(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},fe=()=>R?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],pe=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`}},me=new g.WMTSCapabilities,he=/* @__PURE__ */ new Map,ge=async e=>{let t=he.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=me.read(await n.text());return he.set(e,r),r},_e=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 ge(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)})},B=(e,t)=>{let n=t.get(`_selectInteraction`);n&&(e.removeInteraction(n),n.dispose(),t.unset(`_selectInteraction`));let r=t.get(`_resolutionChangeKey`);r&&((0,ee.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()},ve=`c77eddc667c5bed016fded560baf93e7`,V=(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=ve)=>{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=>R.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Ce=e=>{R.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e).forEach(e=>{B(R,e)})},we=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),H=(e,t,n,r={})=>{let i=new S.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},Te=(e,t,n,r={})=>new x.default({source:H(e,t,n,r)}),U=(e=``)=>{R&&R.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>R.removeOverlay(e))},Ee=()=>U(`_isAnimationMarker`),De=(e,t)=>{Ee();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 E.Overlay({element:o,stopEvent:!1,positioning:`bottom-center`,position:T.default.transform([+i[0],+i[1]],a||T.default.WGS84,T.default.WGS84)});c.set(`_isAnimationMarker`,!0),R.addOverlay(c)},Oe=(e={id:`popup-container`,positioning:`top-center`})=>new E.Overlay(Object.assign({element:document.getElementById(e.id)||void 0},e)),ke=()=>{U(),R.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},Ae=()=>{U(),R&&R.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||B(R,e)})},je=()=>{U(),R.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())})},Me=e=>{let t=R.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 W=[119.71512016971076,30.122490541963536];const Ne=(e={})=>{if(R)return R;let t=Pe(e);return ue(t),t},Pe=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:W,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[V()],constrainResolution:!1,smoothExtentConstraint:!1,tk:ve},e||{}),n=new C.default({view:new w.default(t),controls:(0,te.defaults)({zoom:!1,rotate:!1,attribution:!1}),interactions:(0,D.defaults)({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[V()]});W=t.center||W,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&&B(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},Fe=()=>{if(!R)return;let e=R;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>B(e,t)),e.setTarget(``),e.dispose(),de()},Ie=()=>Fe(),Le=()=>R,Re=(e=W)=>{R&&R.getView().animate({zoom:9.4,center:e,duration:1e3})},ze=(e={center:W,isClearAll:!0})=>{Ae(),Re(e.center||W)},G={padding:[50,50,50,50],duration:1e3},Be=(e,t=R,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=(0,ne.boundingExtent)(e);r.fit(t,{...G,...n||{}})}},Ve=(e,t=R,n)=>{t.getView().fit(e,{...G,...n||{}})},He=(e,t=R,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...G,...n||{}})},Ue=(e,t)=>{let n=R.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})},We=e=>new M.Text({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new M.Fill({color:`rgba(255, 255, 255, 0.8)`})}),K=(e,t=!1)=>new M.Style({image:new M.Icon({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?We(e):void 0}),q=(e,t)=>{let n=new O.default({geometry:new k.default([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(K(e)),n},Ge=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new j.default;return e.forEach(e=>a.addFeature(q(e,t))),new A.default({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},J=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(K({...t,img:t[n]},!1))})},Y=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?J([e],R.getView().getZoom()):e.setStyle(K(r,t))},Ke=e=>{e.forEach(e=>{Y(e,!1)}),e.clear()},qe=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=Ge(n,t),i=r.getSource().getFeatures(),a=R.getView();return J(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>J(i,a.getZoom()))),r},Je=(e,t)=>{let n=q(e,t),r=new A.default({className:t.layerName||`ol-layer`,source:new j.default({features:[n]})});return R.addLayer(r),{vectorLayer:r}},Ye=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),L.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`),L.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=R.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:(0,ne.getCenter)(t.getGeometry().getExtent())})}},X=e=>{let t=new D.Select({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!(0,re.singleClick)(t))return!1;let n=!1;return R.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&&Ye(e,n[0])}else Ye(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),R.addInteraction(t),e.set(`_selectInteraction`,t),t},Xe=(e,t,n)=>{let r=new D.Select({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];Y(t,!1),n?.(t)}if(r.length){let e=r[0];Y(e,!0),t?.(e)}}),r},Ze=e=>{let t=(0,ie.getArea)(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},Qe=e=>{let t=(0,ie.getLength)(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},$e=new M.Style({fill:new M.Fill({color:`rgba(255, 255, 255, 0.2)`}),stroke:new M.Stroke({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new M.Circle({radius:5,stroke:new M.Stroke({color:`rgba(0, 0, 0, 0.7)`}),fill:new M.Fill({color:`rgba(255, 255, 255, 0.2)`})})}),et=/* @__PURE__ */ new WeakMap,tt=e=>{let t=et.get(e);if(t)return t;let n=new M.Style({text:new M.Text({font:`14px`,fill:new M.Fill({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new M.Fill({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new M.RegularShape({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new M.Fill({color:`rgba(0, 0, 0, 0.7)`})})});return et.set(e,n),n},nt=(e,t=$e)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=Ze(r)):r.getType()===`LineString`&&(i=new k.default(r.getLastCoordinate()),a=Qe(r)),i&&a){let t=tt(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},rt=(e=`Point`,t,n)=>new N.default({source:t.getSource(),type:e,style:n?e=>nt(e,void 0):void 0}),it=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new j.default({features:new P.default().readFeatures(e)}),style:t||new M.Style({stroke:new M.Stroke({color:`red`,lineDash:[10],width:3}),fill:new M.Fill({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new A.default(i)},Z=(e,t,n,r)=>t&&n?.get(e[t])||r,at=(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||pe(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),T.default.transform({type:`FeatureCollection`,features:i},r||T.default.WGS84,T.default.WGS84)},ot=(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 M.Style({stroke:new M.Stroke({width:f??c??4,color:d||Z(p,a,r,o)})}),h=new M.Style({stroke:new M.Stroke({width:c??2,color:Z(p,a,r,o)})});return n||(m.setFill(new M.Fill({color:z(l||i||``,u??s??1)||z(Z(p,a,r,i)||``,s??1)})),h.setFill(new M.Fill({color:z(Z(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},st=(e,t)=>{let n=at(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(ot(e,t))}),{features:r,acceptedData:i}},Q=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=st(e,t),s=new A.default({zIndex:5,className:r||`ol-layer`,source:new j.default({features:a})});return i&&X(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},ct=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=st(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])},lt=(e=[],t)=>Q(e,Object.assign({},t,{isLine:!1})),ut=(e=[],t)=>Q(e,Object.assign({},t,{isLine:!0})),dt=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 M.Style({zIndex:88+e,image:new M.Icon({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new M.Style({zIndex:120,image:new M.Icon({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},ft=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=T.default.transform([+e.lnglat[0],+e.lnglat[1]],n||T.default.WGS84,T.default.WGS84),i=new E.Feature({geometry:new ae.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=ft(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)))},$=(e,t=[])=>{let n=new A.default({zIndex:2e3,source:new j.default({features:ft(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},mt=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||dt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=$(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),X(v)),o){let e=Q(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));R.addLayer(e)}if(s){let e=Q(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));R.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),R.addLayer(v),v},ht=(e=[])=>{let t=new M.Style({}),n=new Set(e),r=[];return R.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},gt=(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 M.Style({image:new I.default({radius:i*20,stroke:new M.Stroke({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new M.Fill({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new M.Text({text:t.toString(),fill:new M.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 A.default({zIndex:200,className:u,source:new F.default({distance:i||80,minDistance:a||0,source:new j.default({features:e.map(e=>{let t=new E.Feature(new ae.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&&X(p),p};exports.GeometryType=oe,exports.activeFeatureByUid=Me,exports.addFeaturesByLayer=pt,exports.addMassMarksLayer=mt,exports.appendFeaturesByLayer=ct,exports.baseLayers=be,exports.buildMassMarksStyles=dt,exports.changeLayer=Te,exports.changeSource=H,exports.changeUnselectStyle=Ke,exports.createAnimationMarker=De,exports.createBaseLayer=V,exports.createBusinessLayer=Q,exports.createClusterLayer=gt,exports.createDrawInteraction=rt,exports.createElasticMarkerLayer=qe,exports.createGeoJsonLayer=it,exports.createIconStyle=K,exports.createLayerSelectByNames=Xe,exports.createMap=Pe,exports.createMapInstance=Ne,exports.createMapWorldLayer=ye,exports.createMarker=q,exports.createMarkersLayer=Ge,exports.createMassMarksLayer=$,exports.createMoveMarkerLayer=Je,exports.createOverlay=Oe,exports.createSelectByLayer=X,exports.createTdtVectorSource=ce,exports.createTdtVtsLayer=le,exports.createText=We,exports.createVectorFaceLayer=lt,exports.createVectorLineLayer=ut,exports.createWmtsLayer=_e,exports.createZheJiangLayer=xe,exports.disposeInstance=Ie,exports.disposeMap=Fe,exports.emitter=L,exports.flyToAnimate=Ue,exports.getDrawStyle=nt,exports.getLayerByName=Se,exports.getLayersDataList=fe,exports.getMapInstance=Le,Object.defineProperty(exports,"instance",{enumerable:!0,get:function(){return R}}),exports.removeAllLayers=Ae,exports.removeLayerByName=Ce,exports.removeOverlays=U,exports.resetActiveFeature=je,exports.resetActiveVector=ke,exports.resetMap=ze,exports.resetZoomAndCenter=Re,exports.setFitViewByCoords=Be,exports.setFitViewByGeom=Ve,exports.setFitViewByLayer=He,exports.updateMarksLayersByStatus=ht,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
@@ -1,43 +1,43 @@
1
- import { Layer, Tile } from "ol/layer.js";
2
- import { Style, Text } from "ol/style.js";
1
+ import { Layer, Tile } from "ol/layer";
2
+ import { Style, Text } from "ol/style";
3
3
  import { Feature, Map as Map$1, Overlay } from "ol";
4
4
  import { CRSTypes } from "gcoord";
5
- import { Source, WMTS, XYZ } from "ol/source.js";
6
- import { Coordinate } from "ol/coordinate.js";
7
- import Feature$1, { FeatureLike } from "ol/Feature.js";
5
+ import { Source, WMTS, XYZ } from "ol/source";
6
+ import { Coordinate } from "ol/coordinate";
7
+ import Feature$1, { FeatureLike } from "ol/Feature";
8
8
  import { NormalizeStats, RestoreMode, TdtDecoderWorkerClient, TdtDecoderWorkerClientOptions } from "tdt-vts-core";
9
- import VectorTileLayer from "ol/layer/VectorTile.js";
10
- import VectorTileSource from "ol/source/VectorTile.js";
9
+ import VectorTileLayer from "ol/layer/VectorTile";
10
+ import VectorTileSource from "ol/source/VectorTile";
11
11
  import { Emitter, EventType } from "mitt";
12
- import TileLayer from "ol/layer/Tile.js";
13
- import Layer$1 from "ol/layer/Layer.js";
14
- import VectorImageLayer from "ol/layer/Image.js";
15
- import RasterSource from "ol/source/Raster.js";
16
- import { Options } from "ol/Overlay.js";
17
- import VectorLayer from "ol/layer/Vector.js";
18
- import { Point, SimpleGeometry } from "ol/geom.js";
19
- import { AnimationOptions, FitOptions } from "ol/View.js";
20
- import { Select } from "ol/interaction.js";
21
- import Geometry, { Type } from "ol/geom/Geometry.js";
22
- import Draw from "ol/interaction/Draw.js";
23
- import VectorSource from "ol/source/Vector.js";
24
- import { FlatStyleLike } from "ol/style/flat.js";
25
- import { StyleLike } from "ol/style/Style.js";
26
- import Collection from "ol/Collection.js";
27
- import Point$1 from "ol/geom/Point.js";
28
- import Cluster from "ol/source/Cluster.js";
12
+ import TileLayer from "ol/layer/Tile";
13
+ import Layer$1 from "ol/layer/Layer";
14
+ import VectorImageLayer from "ol/layer/Image";
15
+ import RasterSource from "ol/source/Raster";
16
+ import { Options } from "ol/Overlay";
17
+ import VectorLayer from "ol/layer/Vector";
18
+ import { Point, SimpleGeometry } from "ol/geom";
19
+ import { AnimationOptions, FitOptions } from "ol/View";
20
+ import { Select } from "ol/interaction";
21
+ import Geometry, { Type } from "ol/geom/Geometry";
22
+ import Draw from "ol/interaction/Draw";
23
+ import VectorSource from "ol/source/Vector";
24
+ import { FlatStyleLike } from "ol/style/flat";
25
+ import { StyleLike } from "ol/style/Style";
26
+ import Collection from "ol/Collection";
27
+ import Point$1 from "ol/geom/Point";
28
+ import Cluster from "ol/source/Cluster";
29
29
  export * from "tdt-vts-core";
30
30
  //#region src/core/types.d.ts
31
- interface CustomMap extends Map$1 {
31
+ export interface CustomMap extends Map$1 {
32
32
  activeBaseLayer?: string;
33
33
  changeBaseLayer?: () => void;
34
34
  removeLayerByName?: (name: string) => void;
35
35
  getLayerByName?: (name: string) => Layer<Source> | undefined;
36
36
  changeLayersByNames?: (activeNames: Array<string>, allLayerNames: Array<string>) => void;
37
37
  }
38
- type GetImgUrl = (name: string, ext?: string) => string;
39
- type GetImgUrlFn = (baseUrl: string) => GetImgUrl;
40
- type VectorConfig = {
38
+ export type GetImgUrl = (name: string, ext?: string) => string;
39
+ export type GetImgUrlFn = (baseUrl: string) => GetImgUrl;
40
+ export type VectorConfig = {
41
41
  key: string;
42
42
  zIndex?: number;
43
43
  isRaw?: boolean;
@@ -59,7 +59,7 @@ type VectorConfig = {
59
59
  activeStrokeWeight?: number;
60
60
  colorMap?: Map<string, string>;
61
61
  };
62
- type ClusterData = {
62
+ export type ClusterData = {
63
63
  _uuid: string;
64
64
  name: string;
65
65
  style: number;
@@ -68,7 +68,7 @@ type ClusterData = {
68
68
  [key: string]: any;
69
69
  };
70
70
  };
71
- type ClusterConfig = {
71
+ export type ClusterConfig = {
72
72
  distance: number;
73
73
  layerName?: string;
74
74
  openClick?: boolean;
@@ -77,7 +77,7 @@ type ClusterConfig = {
77
77
  computedRadius?: (size: number) => number;
78
78
  buildStyle?: (feature: FeatureLike) => Style;
79
79
  };
80
- type IconConfig = {
80
+ export type IconConfig = {
81
81
  baseUrl: string;
82
82
  hasLine?: boolean;
83
83
  layerName?: string;
@@ -92,7 +92,7 @@ type IconConfig = {
92
92
  vectorConfig?: VectorConfig;
93
93
  markerSize: [number, number];
94
94
  };
95
- type MassData = {
95
+ export type MassData = {
96
96
  _uuid?: string;
97
97
  id: string;
98
98
  style: number;
@@ -106,26 +106,26 @@ type MassData = {
106
106
  };
107
107
  lnglat: [string, string] | [number, number];
108
108
  };
109
- type WmtsSourceOptions = {
109
+ export type WmtsSourceOptions = {
110
110
  style?: string;
111
111
  format?: string;
112
112
  version?: string;
113
113
  layerName: string;
114
114
  matrixSet?: string;
115
115
  };
116
- declare enum GeometryType {
116
+ export declare enum GeometryType {
117
117
  LineString = "LineString",
118
118
  MultiLineString = "MultiLineString",
119
119
  Polygon = "Polygon",
120
120
  MultiPolygon = "MultiPolygon",
121
121
  Invalid = "Invalid"
122
122
  }
123
- type GeometryCoordinates = Coordinate[] | Coordinate[][] | Coordinate[][][];
124
- type HzsyType = 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark';
125
- type ZheJiangType = 'emap' | 'emap_lab' | 'imgmap' | 'imgmap_lab';
126
- type WorldLayerType = 'vec_c' | 'cva_c' | 'img_c' | 'cia_c' | 'ter_c' | 'cta_c' | 'ibo_c';
123
+ export type GeometryCoordinates = Coordinate[] | Coordinate[][] | Coordinate[][][];
124
+ export type HzsyType = 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark';
125
+ export type ZheJiangType = 'emap' | 'emap_lab' | 'imgmap' | 'imgmap_lab';
126
+ export type WorldLayerType = 'vec_c' | 'cva_c' | 'img_c' | 'cia_c' | 'ter_c' | 'cta_c' | 'ibo_c';
127
127
  /** 通用图层配置。 */
128
- type LayerConfig = {
128
+ export type LayerConfig = {
129
129
  zIndex?: number;
130
130
  visible?: boolean;
131
131
  minZoom?: number;
@@ -133,7 +133,7 @@ type LayerConfig = {
133
133
  layerName: string;
134
134
  };
135
135
  /** Marker 数据结构。 */
136
- type DataItemConfig = {
136
+ export type DataItemConfig = {
137
137
  lng: string | number;
138
138
  lat: string | number;
139
139
  img: string | undefined;
@@ -147,7 +147,7 @@ type DataItemConfig = {
147
147
  rawData?: any;
148
148
  rotation?: number;
149
149
  };
150
- interface ElasticDataItemConfig extends DataItemConfig {
150
+ export interface ElasticDataItemConfig extends DataItemConfig {
151
151
  smallImg: string;
152
152
  largeImg: string;
153
153
  }
@@ -189,39 +189,39 @@ interface TdtVtsStyle {
189
189
  }>;
190
190
  [key: string]: unknown;
191
191
  }
192
- declare const createTdtVectorSource: (options: CreateTdtSourceOptions) => TdtSourceBundle;
193
- declare const createTdtVtsLayer: (options: CreateTdtVtsLayerOptions) => Promise<VectorTileLayer<VectorTileSource<FeatureLike>>>;
192
+ export declare const createTdtVectorSource: (options: CreateTdtSourceOptions) => TdtSourceBundle;
193
+ export declare const createTdtVtsLayer: (options: CreateTdtVtsLayerOptions) => Promise<VectorTileLayer<VectorTileSource<FeatureLike>>>;
194
194
  //#endregion
195
195
  //#region src/core/emitter.d.ts
196
196
  declare const emitter: Emitter<Record<EventType, any>>;
197
197
  //#endregion
198
198
  //#region src/core/helper.d.ts
199
- declare const getLayersDataList: () => any[];
199
+ export declare const getLayersDataList: () => any[];
200
200
  //#endregion
201
201
  //#region src/layer/ogc-utils.d.ts
202
202
  /**
203
203
  * 创建WMTS图层
204
204
  * @param serverUrl
205
205
  */
206
- declare const createWmtsLayer: (serverUrl: string) => (config: WmtsSourceOptions) => Promise<TileLayer>;
206
+ export declare const createWmtsLayer: (serverUrl: string) => (config: WmtsSourceOptions) => Promise<TileLayer>;
207
207
  //#endregion
208
208
  //#region src/layer/base-layer.d.ts
209
209
  /**
210
210
  * 创建杭州规自地图
211
211
  * @param layerName - 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark'
212
212
  */
213
- declare const createBaseLayer: (layerName?: HzsyType) => Tile<XYZ>;
213
+ export declare const createBaseLayer: (layerName?: HzsyType) => Tile<XYZ>;
214
214
  /**
215
215
  * 创建全国天地图
216
216
  * @param layerName - 图层名称
217
217
  * @param tk - 天地图TK
218
218
  */
219
- declare const createMapWorldLayer: (layerName: WorldLayerType, tk?: string) => Tile<WMTS>;
219
+ export declare const createMapWorldLayer: (layerName: WorldLayerType, tk?: string) => Tile<WMTS>;
220
220
  /**
221
221
  * 创建天地图矢量/影像底图组合。
222
222
  * @param tk - 天地图访问令牌
223
223
  */
224
- declare const baseLayers: (tk: string) => {
224
+ export declare const baseLayers: (tk: string) => {
225
225
  baseImgLayer: Tile<XYZ>;
226
226
  baseCiaLayer: Tile<XYZ>;
227
227
  baseVecLayer: Tile<XYZ>;
@@ -232,42 +232,42 @@ declare const baseLayers: (tk: string) => {
232
232
  * @param layerName - 图层名称
233
233
  * @param tk -
234
234
  */
235
- declare const createZheJiangLayer: (layerName?: ZheJiangType, tk?: string) => Tile<XYZ>;
235
+ export declare const createZheJiangLayer: (layerName?: ZheJiangType, tk?: string) => Tile<XYZ>;
236
236
  /**
237
237
  * 根据图层名称获取图层
238
238
  * @param name
239
239
  */
240
- declare const getLayerByName: (name: string) => Layer<import("ol/source").Source, import("ol/renderer/Layer").default<any>, {
240
+ export declare const getLayerByName: (name: string) => Layer<import("ol/source").Source, import("ol/renderer/Layer").default<any>, {
241
241
  [x: string]: any;
242
242
  }> | undefined;
243
243
  /**
244
244
  * 根据图层名称删除图层
245
245
  * @param name
246
246
  */
247
- declare const removeLayerByName: (name: string) => void;
247
+ export declare const removeLayerByName: (name: string) => void;
248
248
  //#endregion
249
249
  //#region src/layer/raster-layer.d.ts
250
250
  interface RasterTransformOptions {
251
251
  threads?: number;
252
252
  }
253
253
  /** 使用 RGB 比例和目标颜色转换栅格图层。 */
254
- declare const changeSource: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => RasterSource;
254
+ export declare const changeSource: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => RasterSource;
255
255
  /** 使用 changeSource 创建可显示的 VectorImageLayer。 */
256
- declare const changeLayer: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => VectorImageLayer<RasterSource>;
256
+ export declare const changeLayer: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => VectorImageLayer<RasterSource>;
257
257
  //#endregion
258
258
  //#region src/core/map-context.d.ts
259
259
  /** 当前 OpenLayers 单例。集中存放以避免业务模块之间互相引用。 */
260
- declare let instance: CustomMap;
260
+ export declare let instance: CustomMap;
261
261
  //#endregion
262
262
  //#region src/map/create-map.d.ts
263
- declare const createMapInstance: (config?: {}) => CustomMap;
264
- declare const createMap: (config?: {}) => CustomMap;
265
- declare const disposeMap: () => void;
263
+ export declare const createMapInstance: (config?: {}) => CustomMap;
264
+ export declare const createMap: (config?: {}) => CustomMap;
265
+ export declare const disposeMap: () => void;
266
266
  /** 兼容别名;复用 map-ol-utils 现有的完整销毁语义。 */
267
- declare const disposeInstance: () => void;
268
- declare const getMapInstance: () => CustomMap;
269
- declare const resetZoomAndCenter: (center?: [number, number]) => void;
270
- declare const resetMap: (config?: {
267
+ export declare const disposeInstance: () => void;
268
+ export declare const getMapInstance: () => CustomMap;
269
+ export declare const resetZoomAndCenter: (center?: [number, number]) => void;
270
+ export declare const resetMap: (config?: {
271
271
  center: [number, number];
272
272
  isClearAll: boolean;
273
273
  }) => void;
@@ -277,18 +277,18 @@ declare const resetMap: (config?: {
277
277
  * 移除带指定属性键的 Overlay(默认按 'position')
278
278
  * @param key
279
279
  */
280
- declare const removeOverlays: (key?: string) => void;
280
+ export declare const removeOverlays: (key?: string) => void;
281
281
  /**
282
282
  * 创建动画标注 Overlay
283
283
  * @param imgUrl
284
284
  * @param data
285
285
  */
286
- declare const createAnimationMarker: (imgUrl: string, data: MassData) => void;
286
+ export declare const createAnimationMarker: (imgUrl: string, data: MassData) => void;
287
287
  /**
288
288
  * 创建 Overlay
289
289
  * @param config
290
290
  */
291
- declare const createOverlay: (config?: Options) => Overlay;
291
+ export declare const createOverlay: (config?: Options) => Overlay;
292
292
  //#endregion
293
293
  //#region src/map/view-fit.d.ts
294
294
  /**
@@ -297,42 +297,42 @@ declare const createOverlay: (config?: Options) => Overlay;
297
297
  * @param mapInstance
298
298
  * @param fitOptions
299
299
  */
300
- declare const setFitViewByCoords: (coords: Array<Coordinate>, mapInstance?: CustomMap, fitOptions?: FitOptions | AnimationOptions) => void;
300
+ export declare const setFitViewByCoords: (coords: Array<Coordinate>, mapInstance?: CustomMap, fitOptions?: FitOptions | AnimationOptions) => void;
301
301
  /**
302
302
  * 根据 SimpleGeometry Fit
303
303
  * @param geom
304
304
  * @param mapInstance
305
305
  * @param fitOptions
306
306
  */
307
- declare const setFitViewByGeom: (geom: SimpleGeometry, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
307
+ export declare const setFitViewByGeom: (geom: SimpleGeometry, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
308
308
  /**
309
309
  * 根据 VectorLayer 要素的四至信息 Fit
310
310
  * @param layer
311
311
  * @param mapInstance
312
312
  * @param fitOptions
313
313
  */
314
- declare const setFitViewByLayer: (layer: VectorLayer, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
314
+ export declare const setFitViewByLayer: (layer: VectorLayer, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
315
315
  /** 使用两段缩放动画飞到目标位置。 */
316
- declare const flyToAnimate: (center: Array<any>[number], zoom?: number) => void;
316
+ export declare const flyToAnimate: (center: Array<any>[number], zoom?: number) => void;
317
317
  //#endregion
318
318
  //#region src/interaction/select.d.ts
319
319
  /**
320
320
  * 创建点击交互
321
321
  * @param vectorLayer
322
322
  */
323
- declare const createSelectByLayer: (vectorLayer: VectorLayer) => Select;
323
+ export declare const createSelectByLayer: (vectorLayer: VectorLayer) => Select;
324
324
  /** 按多个 className 创建选择交互。 */
325
- declare const createLayerSelectByNames: (layerNames: Array<string>, selectedHandler?: (feature: Feature) => void, unSelectHandler?: (feature: Feature) => void) => Select;
325
+ export declare const createLayerSelectByNames: (layerNames: Array<string>, selectedHandler?: (feature: Feature) => void, unSelectHandler?: (feature: Feature) => void) => Select;
326
326
  //#endregion
327
327
  //#region src/interaction/draw.d.ts
328
328
  /** 为绘制中的线和面追加长度/面积标签。 */
329
- declare const getDrawStyle: (feature: FeatureLike, drawStyle?: Style | undefined) => Style[];
329
+ export declare const getDrawStyle: (feature: FeatureLike, drawStyle?: Style | undefined) => Style[];
330
330
  /** 创建绘制交互。 */
331
- declare const createDrawInteraction: (type: Type | undefined, vectorLayer: VectorLayer, openTip?: boolean) => Draw;
331
+ export declare const createDrawInteraction: (type: Type | undefined, vectorLayer: VectorLayer, openTip?: boolean) => Draw;
332
332
  //#endregion
333
333
  //#region src/layer/geojson-layer.d.ts
334
334
  /** 直接从 GeoJSON 创建矢量图层。 */
335
- declare const createGeoJsonLayer: (geoJson: any, style: StyleLike | FlatStyleLike | null | undefined, config?: LayerConfig) => VectorLayer<VectorSource<import("ol").Feature<import("ol/geom").Geometry, {
335
+ export declare const createGeoJsonLayer: (geoJson: any, style: StyleLike | FlatStyleLike | null | undefined, config?: LayerConfig) => VectorLayer<VectorSource<import("ol").Feature<import("ol/geom").Geometry, {
336
336
  [x: string]: any;
337
337
  }>>, import("ol").Feature<import("ol/geom").Geometry, {
338
338
  [x: string]: any;
@@ -340,29 +340,29 @@ declare const createGeoJsonLayer: (geoJson: any, style: StyleLike | FlatStyleLik
340
340
  //#endregion
341
341
  //#region src/layer/marker-layer.d.ts
342
342
  /** 创建 Marker 文本标注。 */
343
- declare const createText: (item: DataItemConfig) => Text;
343
+ export declare const createText: (item: DataItemConfig) => Text;
344
344
  /** 创建 Marker 默认态或激活态样式。 */
345
- declare const createIconStyle: (item: DataItemConfig, active?: boolean) => Style;
345
+ export declare const createIconStyle: (item: DataItemConfig, active?: boolean) => Style;
346
346
  /** 创建带 data 属性约定的 Marker Feature。 */
347
- declare const createMarker: (item: DataItemConfig, config: LayerConfig) => Feature$1<Point$1, {
347
+ export declare const createMarker: (item: DataItemConfig, config: LayerConfig) => Feature$1<Point$1, {
348
348
  [x: string]: any;
349
349
  }>;
350
350
  /** 批量创建 Marker 矢量图层。 */
351
- declare const createMarkersLayer: (dataList: Array<DataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
351
+ export declare const createMarkersLayer: (dataList: Array<DataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
352
352
  [x: string]: any;
353
353
  }>>, Feature$1<Geometry, {
354
354
  [x: string]: any;
355
355
  }>>;
356
356
  /** 清空外部选择集合并恢复 Marker 未选中样式。 */
357
- declare const changeUnselectStyle: (featureList: Collection<Feature$1>) => void;
357
+ export declare const changeUnselectStyle: (featureList: Collection<Feature$1>) => void;
358
358
  /** 创建随缩放级别切换小图/大图的 Marker 图层。 */
359
- declare const createElasticMarkerLayer: (dataList: Array<ElasticDataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
359
+ export declare const createElasticMarkerLayer: (dataList: Array<ElasticDataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
360
360
  [x: string]: any;
361
361
  }>>, Feature$1<Geometry, {
362
362
  [x: string]: any;
363
363
  }>>;
364
364
  /** 创建单 Marker 图层并直接加入当前地图实例。 */
365
- declare const createMoveMarkerLayer: (dataItem: DataItemConfig, config: LayerConfig) => {
365
+ export declare const createMoveMarkerLayer: (dataItem: DataItemConfig, config: LayerConfig) => {
366
366
  vectorLayer: VectorLayer<VectorSource<Feature$1<Point$1, {
367
367
  [x: string]: any;
368
368
  }>>, Feature$1<Point$1, {
@@ -374,20 +374,20 @@ declare const createMoveMarkerLayer: (dataItem: DataItemConfig, config: LayerCon
374
374
  /**
375
375
  * 重置激活的矢量数据(清空 overlay 与各图层选择交互的要素集合)
376
376
  */
377
- declare const resetActiveVector: () => void;
377
+ export declare const resetActiveVector: () => void;
378
378
  /**
379
379
  * 移除覆盖物以及所有非底图自定义图层
380
380
  */
381
- declare const removeAllLayers: () => void;
381
+ export declare const removeAllLayers: () => void;
382
382
  /**
383
383
  * 重置激活 Feature
384
384
  */
385
- declare const resetActiveFeature: () => void;
385
+ export declare const resetActiveFeature: () => void;
386
386
  /**
387
387
  * 按 _uuid 激活要素
388
388
  * @param uid
389
389
  */
390
- declare const activeFeatureByUid: (uid: string) => void;
390
+ export declare const activeFeatureByUid: (uid: string) => void;
391
391
  //#endregion
392
392
  //#region src/layer/vector-layer.d.ts
393
393
  /**
@@ -395,7 +395,7 @@ declare const activeFeatureByUid: (uid: string) => void;
395
395
  * @param dataList
396
396
  * @param config
397
397
  */
398
- declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
398
+ export declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
399
399
  [x: string]: any;
400
400
  }>>, Feature<import("ol/geom").Geometry, {
401
401
  [x: string]: any;
@@ -406,13 +406,13 @@ declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig)
406
406
  * @param dataList
407
407
  * @param crsForm
408
408
  */
409
- declare const appendFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], crsForm?: CRSTypes) => void;
409
+ export declare const appendFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], crsForm?: CRSTypes) => void;
410
410
  /**
411
411
  * 创建面状图层
412
412
  * @param dataList
413
413
  * @param config
414
414
  */
415
- declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
415
+ export declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
416
416
  [x: string]: any;
417
417
  }>>, Feature<import("ol/geom").Geometry, {
418
418
  [x: string]: any;
@@ -422,7 +422,7 @@ declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config:
422
422
  * @param dataList
423
423
  * @param config
424
424
  */
425
- declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
425
+ export declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
426
426
  [x: string]: any;
427
427
  }>>, Feature<import("ol/geom").Geometry, {
428
428
  [x: string]: any;
@@ -432,14 +432,14 @@ declare const createVectorLineLayer: (dataList: MassData[] | undefined, config:
432
432
  /**
433
433
  * 构建 MassMarks 样式数组(默认段 + 激活段,长度 statusNum * 2)
434
434
  */
435
- declare const buildMassMarksStyles: (getImgUrlFn: GetImgUrlFn) => (iconConfig: IconConfig) => any[];
435
+ export declare const buildMassMarksStyles: (getImgUrlFn: GetImgUrlFn) => (iconConfig: IconConfig) => any[];
436
436
  /**
437
437
  * 向海量点图层增量添加 Features
438
438
  * @param targetLayer
439
439
  * @param dataList
440
440
  * @param config
441
441
  */
442
- declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], config?: {
442
+ export declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], config?: {
443
443
  clear?: boolean;
444
444
  }) => void;
445
445
  /**
@@ -447,7 +447,7 @@ declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[
447
447
  * @param dataList
448
448
  * @param styleList
449
449
  */
450
- declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point, {
450
+ export declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point, {
451
451
  [x: string]: any;
452
452
  }>>, Feature<Point, {
453
453
  [x: string]: any;
@@ -456,7 +456,7 @@ declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike
456
456
  * 添加 massMarksLayer(按需附带线/面图层)
457
457
  * @param getImgUrlFn
458
458
  */
459
- declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point, {
459
+ export declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point, {
460
460
  [x: string]: any;
461
461
  }>>, Feature<Point, {
462
462
  [x: string]: any;
@@ -465,7 +465,7 @@ declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[
465
465
  * 按选中状态列表更新海量点显隐
466
466
  * @param checkedStatusList
467
467
  */
468
- declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassData[];
468
+ export declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassData[];
469
469
  //#endregion
470
470
  //#region src/layer/cluster-layer.d.ts
471
471
  /**
@@ -473,10 +473,10 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
473
473
  * @param dataList
474
474
  * @param config
475
475
  */
476
- declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point, {
476
+ export declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point, {
477
477
  [x: string]: any;
478
478
  }>>, Feature<import("ol/geom").Geometry, {
479
479
  [x: string]: any;
480
480
  }>>;
481
481
  //#endregion
482
- export { ClusterConfig, ClusterData, type CreateTdtSourceOptions, type CreateTdtVtsLayerOptions, CustomMap, DataItemConfig, ElasticDataItemConfig, GeometryCoordinates, GeometryType, GetImgUrl, GetImgUrlFn, HzsyType, IconConfig, LayerConfig, MassData, type SourceDiagnostics, type TdtSourceBundle, type TdtVtsStyle, VectorConfig, WmtsSourceOptions, WorldLayerType, ZheJiangType, activeFeatureByUid, addFeaturesByLayer, addMassMarksLayer, appendFeaturesByLayer, baseLayers, buildMassMarksStyles, changeLayer, changeSource, changeUnselectStyle, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createDrawInteraction, createElasticMarkerLayer, createGeoJsonLayer, createIconStyle, createLayerSelectByNames, createMap, createMapInstance, createMapWorldLayer, createMarker, createMarkersLayer, createMassMarksLayer, createMoveMarkerLayer, createOverlay, createSelectByLayer, createTdtVectorSource, createTdtVtsLayer, createText, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, createZheJiangLayer, disposeInstance, disposeMap, emitter, flyToAnimate, getDrawStyle, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
482
+ export { type CreateTdtSourceOptions, type CreateTdtVtsLayerOptions, type SourceDiagnostics, type TdtSourceBundle, type TdtVtsStyle, emitter };
package/dist/index.d.mts CHANGED
@@ -1,43 +1,43 @@
1
1
  import { NormalizeStats, RestoreMode, TdtDecoderWorkerClient, TdtDecoderWorkerClientOptions } from "tdt-vts-core";
2
- import VectorTileLayer from "ol/layer/VectorTile.js";
3
- import VectorTileSource from "ol/source/VectorTile.js";
2
+ import VectorTileLayer from "ol/layer/VectorTile";
3
+ import VectorTileSource from "ol/source/VectorTile";
4
4
  import { Emitter, EventType } from "mitt";
5
- import { Source, WMTS, XYZ } from "ol/source.js";
6
- import TileLayer from "ol/layer/Tile.js";
7
- import { Layer, Tile } from "ol/layer.js";
8
- import VectorImageLayer from "ol/layer/Image.js";
9
- import RasterSource from "ol/source/Raster.js";
10
- import { AnimationOptions, FitOptions } from "ol/View.js";
5
+ import { Source, WMTS, XYZ } from "ol/source";
6
+ import TileLayer from "ol/layer/Tile";
7
+ import { Layer, Tile } from "ol/layer";
8
+ import VectorImageLayer from "ol/layer/Image";
9
+ import RasterSource from "ol/source/Raster";
10
+ import { AnimationOptions, FitOptions } from "ol/View";
11
11
  import { CRSTypes } from "gcoord";
12
12
  import { Feature, Map as Map$1, Overlay } from "ol";
13
- import { Select } from "ol/interaction.js";
14
- import Feature$1, { FeatureLike } from "ol/Feature.js";
15
- import Point from "ol/geom/Point.js";
16
- import VectorLayer from "ol/layer/Vector.js";
17
- import VectorSource from "ol/source/Vector.js";
18
- import { Style, Text } from "ol/style.js";
19
- import Draw from "ol/interaction/Draw.js";
20
- import { Point as Point$1, SimpleGeometry } from "ol/geom.js";
21
- import Cluster from "ol/source/Cluster.js";
22
- import { Coordinate } from "ol/coordinate.js";
23
- import Layer$1 from "ol/layer/Layer.js";
24
- import { Options } from "ol/Overlay.js";
25
- import Geometry, { Type } from "ol/geom/Geometry.js";
26
- import { FlatStyleLike } from "ol/style/flat.js";
27
- import { StyleLike } from "ol/style/Style.js";
28
- import Collection from "ol/Collection.js";
13
+ import { Select } from "ol/interaction";
14
+ import Feature$1, { FeatureLike } from "ol/Feature";
15
+ import Point from "ol/geom/Point";
16
+ import VectorLayer from "ol/layer/Vector";
17
+ import VectorSource from "ol/source/Vector";
18
+ import { Style, Text } from "ol/style";
19
+ import Draw from "ol/interaction/Draw";
20
+ import { Point as Point$1, SimpleGeometry } from "ol/geom";
21
+ import Cluster from "ol/source/Cluster";
22
+ import { Coordinate } from "ol/coordinate";
23
+ import Layer$1 from "ol/layer/Layer";
24
+ import { Options } from "ol/Overlay";
25
+ import Geometry, { Type } from "ol/geom/Geometry";
26
+ import { FlatStyleLike } from "ol/style/flat";
27
+ import { StyleLike } from "ol/style/Style";
28
+ import Collection from "ol/Collection";
29
29
  export * from "tdt-vts-core";
30
30
  //#region src/core/types.d.ts
31
- interface CustomMap extends Map$1 {
31
+ export interface CustomMap extends Map$1 {
32
32
  activeBaseLayer?: string;
33
33
  changeBaseLayer?: () => void;
34
34
  removeLayerByName?: (name: string) => void;
35
35
  getLayerByName?: (name: string) => Layer<Source> | undefined;
36
36
  changeLayersByNames?: (activeNames: Array<string>, allLayerNames: Array<string>) => void;
37
37
  }
38
- type GetImgUrl = (name: string, ext?: string) => string;
39
- type GetImgUrlFn = (baseUrl: string) => GetImgUrl;
40
- type VectorConfig = {
38
+ export type GetImgUrl = (name: string, ext?: string) => string;
39
+ export type GetImgUrlFn = (baseUrl: string) => GetImgUrl;
40
+ export type VectorConfig = {
41
41
  key: string;
42
42
  zIndex?: number;
43
43
  isRaw?: boolean;
@@ -59,7 +59,7 @@ type VectorConfig = {
59
59
  activeStrokeWeight?: number;
60
60
  colorMap?: Map<string, string>;
61
61
  };
62
- type ClusterData = {
62
+ export type ClusterData = {
63
63
  _uuid: string;
64
64
  name: string;
65
65
  style: number;
@@ -68,7 +68,7 @@ type ClusterData = {
68
68
  [key: string]: any;
69
69
  };
70
70
  };
71
- type ClusterConfig = {
71
+ export type ClusterConfig = {
72
72
  distance: number;
73
73
  layerName?: string;
74
74
  openClick?: boolean;
@@ -77,7 +77,7 @@ type ClusterConfig = {
77
77
  computedRadius?: (size: number) => number;
78
78
  buildStyle?: (feature: FeatureLike) => Style;
79
79
  };
80
- type IconConfig = {
80
+ export type IconConfig = {
81
81
  baseUrl: string;
82
82
  hasLine?: boolean;
83
83
  layerName?: string;
@@ -92,7 +92,7 @@ type IconConfig = {
92
92
  vectorConfig?: VectorConfig;
93
93
  markerSize: [number, number];
94
94
  };
95
- type MassData = {
95
+ export type MassData = {
96
96
  _uuid?: string;
97
97
  id: string;
98
98
  style: number;
@@ -106,26 +106,26 @@ type MassData = {
106
106
  };
107
107
  lnglat: [string, string] | [number, number];
108
108
  };
109
- type WmtsSourceOptions = {
109
+ export type WmtsSourceOptions = {
110
110
  style?: string;
111
111
  format?: string;
112
112
  version?: string;
113
113
  layerName: string;
114
114
  matrixSet?: string;
115
115
  };
116
- declare enum GeometryType {
116
+ export declare enum GeometryType {
117
117
  LineString = "LineString",
118
118
  MultiLineString = "MultiLineString",
119
119
  Polygon = "Polygon",
120
120
  MultiPolygon = "MultiPolygon",
121
121
  Invalid = "Invalid"
122
122
  }
123
- type GeometryCoordinates = Coordinate[] | Coordinate[][] | Coordinate[][][];
124
- type HzsyType = 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark';
125
- type ZheJiangType = 'emap' | 'emap_lab' | 'imgmap' | 'imgmap_lab';
126
- type WorldLayerType = 'vec_c' | 'cva_c' | 'img_c' | 'cia_c' | 'ter_c' | 'cta_c' | 'ibo_c';
123
+ export type GeometryCoordinates = Coordinate[] | Coordinate[][] | Coordinate[][][];
124
+ export type HzsyType = 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark';
125
+ export type ZheJiangType = 'emap' | 'emap_lab' | 'imgmap' | 'imgmap_lab';
126
+ export type WorldLayerType = 'vec_c' | 'cva_c' | 'img_c' | 'cia_c' | 'ter_c' | 'cta_c' | 'ibo_c';
127
127
  /** 通用图层配置。 */
128
- type LayerConfig = {
128
+ export type LayerConfig = {
129
129
  zIndex?: number;
130
130
  visible?: boolean;
131
131
  minZoom?: number;
@@ -133,7 +133,7 @@ type LayerConfig = {
133
133
  layerName: string;
134
134
  };
135
135
  /** Marker 数据结构。 */
136
- type DataItemConfig = {
136
+ export type DataItemConfig = {
137
137
  lng: string | number;
138
138
  lat: string | number;
139
139
  img: string | undefined;
@@ -147,7 +147,7 @@ type DataItemConfig = {
147
147
  rawData?: any;
148
148
  rotation?: number;
149
149
  };
150
- interface ElasticDataItemConfig extends DataItemConfig {
150
+ export interface ElasticDataItemConfig extends DataItemConfig {
151
151
  smallImg: string;
152
152
  largeImg: string;
153
153
  }
@@ -189,39 +189,39 @@ interface TdtVtsStyle {
189
189
  }>;
190
190
  [key: string]: unknown;
191
191
  }
192
- declare const createTdtVectorSource: (options: CreateTdtSourceOptions) => TdtSourceBundle;
193
- declare const createTdtVtsLayer: (options: CreateTdtVtsLayerOptions) => Promise<VectorTileLayer<VectorTileSource<FeatureLike>>>;
192
+ export declare const createTdtVectorSource: (options: CreateTdtSourceOptions) => TdtSourceBundle;
193
+ export declare const createTdtVtsLayer: (options: CreateTdtVtsLayerOptions) => Promise<VectorTileLayer<VectorTileSource<FeatureLike>>>;
194
194
  //#endregion
195
195
  //#region src/core/emitter.d.ts
196
196
  declare const emitter: Emitter<Record<EventType, any>>;
197
197
  //#endregion
198
198
  //#region src/core/helper.d.ts
199
- declare const getLayersDataList: () => any[];
199
+ export declare const getLayersDataList: () => any[];
200
200
  //#endregion
201
201
  //#region src/layer/ogc-utils.d.ts
202
202
  /**
203
203
  * 创建WMTS图层
204
204
  * @param serverUrl
205
205
  */
206
- declare const createWmtsLayer: (serverUrl: string) => (config: WmtsSourceOptions) => Promise<TileLayer>;
206
+ export declare const createWmtsLayer: (serverUrl: string) => (config: WmtsSourceOptions) => Promise<TileLayer>;
207
207
  //#endregion
208
208
  //#region src/layer/base-layer.d.ts
209
209
  /**
210
210
  * 创建杭州规自地图
211
211
  * @param layerName - 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark'
212
212
  */
213
- declare const createBaseLayer: (layerName?: HzsyType) => Tile<XYZ>;
213
+ export declare const createBaseLayer: (layerName?: HzsyType) => Tile<XYZ>;
214
214
  /**
215
215
  * 创建全国天地图
216
216
  * @param layerName - 图层名称
217
217
  * @param tk - 天地图TK
218
218
  */
219
- declare const createMapWorldLayer: (layerName: WorldLayerType, tk?: string) => Tile<WMTS>;
219
+ export declare const createMapWorldLayer: (layerName: WorldLayerType, tk?: string) => Tile<WMTS>;
220
220
  /**
221
221
  * 创建天地图矢量/影像底图组合。
222
222
  * @param tk - 天地图访问令牌
223
223
  */
224
- declare const baseLayers: (tk: string) => {
224
+ export declare const baseLayers: (tk: string) => {
225
225
  baseImgLayer: Tile<XYZ>;
226
226
  baseCiaLayer: Tile<XYZ>;
227
227
  baseVecLayer: Tile<XYZ>;
@@ -232,42 +232,42 @@ declare const baseLayers: (tk: string) => {
232
232
  * @param layerName - 图层名称
233
233
  * @param tk -
234
234
  */
235
- declare const createZheJiangLayer: (layerName?: ZheJiangType, tk?: string) => Tile<XYZ>;
235
+ export declare const createZheJiangLayer: (layerName?: ZheJiangType, tk?: string) => Tile<XYZ>;
236
236
  /**
237
237
  * 根据图层名称获取图层
238
238
  * @param name
239
239
  */
240
- declare const getLayerByName: (name: string) => Layer<import("ol/source").Source, import("ol/renderer/Layer").default<any>, {
240
+ export declare const getLayerByName: (name: string) => Layer<import("ol/source").Source, import("ol/renderer/Layer").default<any>, {
241
241
  [x: string]: any;
242
242
  }> | undefined;
243
243
  /**
244
244
  * 根据图层名称删除图层
245
245
  * @param name
246
246
  */
247
- declare const removeLayerByName: (name: string) => void;
247
+ export declare const removeLayerByName: (name: string) => void;
248
248
  //#endregion
249
249
  //#region src/layer/raster-layer.d.ts
250
250
  interface RasterTransformOptions {
251
251
  threads?: number;
252
252
  }
253
253
  /** 使用 RGB 比例和目标颜色转换栅格图层。 */
254
- declare const changeSource: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => RasterSource;
254
+ export declare const changeSource: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => RasterSource;
255
255
  /** 使用 changeSource 创建可显示的 VectorImageLayer。 */
256
- declare const changeLayer: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => VectorImageLayer<RasterSource>;
256
+ export declare const changeLayer: (layer: Layer$1, rgbColorArray: number[], ratioArray: number[], options?: RasterTransformOptions) => VectorImageLayer<RasterSource>;
257
257
  //#endregion
258
258
  //#region src/core/map-context.d.ts
259
259
  /** 当前 OpenLayers 单例。集中存放以避免业务模块之间互相引用。 */
260
- declare let instance: CustomMap;
260
+ export declare let instance: CustomMap;
261
261
  //#endregion
262
262
  //#region src/map/create-map.d.ts
263
- declare const createMapInstance: (config?: {}) => CustomMap;
264
- declare const createMap: (config?: {}) => CustomMap;
265
- declare const disposeMap: () => void;
263
+ export declare const createMapInstance: (config?: {}) => CustomMap;
264
+ export declare const createMap: (config?: {}) => CustomMap;
265
+ export declare const disposeMap: () => void;
266
266
  /** 兼容别名;复用 map-ol-utils 现有的完整销毁语义。 */
267
- declare const disposeInstance: () => void;
268
- declare const getMapInstance: () => CustomMap;
269
- declare const resetZoomAndCenter: (center?: [number, number]) => void;
270
- declare const resetMap: (config?: {
267
+ export declare const disposeInstance: () => void;
268
+ export declare const getMapInstance: () => CustomMap;
269
+ export declare const resetZoomAndCenter: (center?: [number, number]) => void;
270
+ export declare const resetMap: (config?: {
271
271
  center: [number, number];
272
272
  isClearAll: boolean;
273
273
  }) => void;
@@ -277,18 +277,18 @@ declare const resetMap: (config?: {
277
277
  * 移除带指定属性键的 Overlay(默认按 'position')
278
278
  * @param key
279
279
  */
280
- declare const removeOverlays: (key?: string) => void;
280
+ export declare const removeOverlays: (key?: string) => void;
281
281
  /**
282
282
  * 创建动画标注 Overlay
283
283
  * @param imgUrl
284
284
  * @param data
285
285
  */
286
- declare const createAnimationMarker: (imgUrl: string, data: MassData) => void;
286
+ export declare const createAnimationMarker: (imgUrl: string, data: MassData) => void;
287
287
  /**
288
288
  * 创建 Overlay
289
289
  * @param config
290
290
  */
291
- declare const createOverlay: (config?: Options) => Overlay;
291
+ export declare const createOverlay: (config?: Options) => Overlay;
292
292
  //#endregion
293
293
  //#region src/map/view-fit.d.ts
294
294
  /**
@@ -297,42 +297,42 @@ declare const createOverlay: (config?: Options) => Overlay;
297
297
  * @param mapInstance
298
298
  * @param fitOptions
299
299
  */
300
- declare const setFitViewByCoords: (coords: Array<Coordinate>, mapInstance?: CustomMap, fitOptions?: FitOptions | AnimationOptions) => void;
300
+ export declare const setFitViewByCoords: (coords: Array<Coordinate>, mapInstance?: CustomMap, fitOptions?: FitOptions | AnimationOptions) => void;
301
301
  /**
302
302
  * 根据 SimpleGeometry Fit
303
303
  * @param geom
304
304
  * @param mapInstance
305
305
  * @param fitOptions
306
306
  */
307
- declare const setFitViewByGeom: (geom: SimpleGeometry, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
307
+ export declare const setFitViewByGeom: (geom: SimpleGeometry, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
308
308
  /**
309
309
  * 根据 VectorLayer 要素的四至信息 Fit
310
310
  * @param layer
311
311
  * @param mapInstance
312
312
  * @param fitOptions
313
313
  */
314
- declare const setFitViewByLayer: (layer: VectorLayer, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
314
+ export declare const setFitViewByLayer: (layer: VectorLayer, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
315
315
  /** 使用两段缩放动画飞到目标位置。 */
316
- declare const flyToAnimate: (center: Array<any>[number], zoom?: number) => void;
316
+ export declare const flyToAnimate: (center: Array<any>[number], zoom?: number) => void;
317
317
  //#endregion
318
318
  //#region src/interaction/select.d.ts
319
319
  /**
320
320
  * 创建点击交互
321
321
  * @param vectorLayer
322
322
  */
323
- declare const createSelectByLayer: (vectorLayer: VectorLayer) => Select;
323
+ export declare const createSelectByLayer: (vectorLayer: VectorLayer) => Select;
324
324
  /** 按多个 className 创建选择交互。 */
325
- declare const createLayerSelectByNames: (layerNames: Array<string>, selectedHandler?: (feature: Feature) => void, unSelectHandler?: (feature: Feature) => void) => Select;
325
+ export declare const createLayerSelectByNames: (layerNames: Array<string>, selectedHandler?: (feature: Feature) => void, unSelectHandler?: (feature: Feature) => void) => Select;
326
326
  //#endregion
327
327
  //#region src/interaction/draw.d.ts
328
328
  /** 为绘制中的线和面追加长度/面积标签。 */
329
- declare const getDrawStyle: (feature: FeatureLike, drawStyle?: Style | undefined) => Style[];
329
+ export declare const getDrawStyle: (feature: FeatureLike, drawStyle?: Style | undefined) => Style[];
330
330
  /** 创建绘制交互。 */
331
- declare const createDrawInteraction: (type: Type | undefined, vectorLayer: VectorLayer, openTip?: boolean) => Draw;
331
+ export declare const createDrawInteraction: (type: Type | undefined, vectorLayer: VectorLayer, openTip?: boolean) => Draw;
332
332
  //#endregion
333
333
  //#region src/layer/geojson-layer.d.ts
334
334
  /** 直接从 GeoJSON 创建矢量图层。 */
335
- declare const createGeoJsonLayer: (geoJson: any, style: StyleLike | FlatStyleLike | null | undefined, config?: LayerConfig) => VectorLayer<VectorSource<import("ol").Feature<import("ol/geom").Geometry, {
335
+ export declare const createGeoJsonLayer: (geoJson: any, style: StyleLike | FlatStyleLike | null | undefined, config?: LayerConfig) => VectorLayer<VectorSource<import("ol").Feature<import("ol/geom").Geometry, {
336
336
  [x: string]: any;
337
337
  }>>, import("ol").Feature<import("ol/geom").Geometry, {
338
338
  [x: string]: any;
@@ -340,29 +340,29 @@ declare const createGeoJsonLayer: (geoJson: any, style: StyleLike | FlatStyleLik
340
340
  //#endregion
341
341
  //#region src/layer/marker-layer.d.ts
342
342
  /** 创建 Marker 文本标注。 */
343
- declare const createText: (item: DataItemConfig) => Text;
343
+ export declare const createText: (item: DataItemConfig) => Text;
344
344
  /** 创建 Marker 默认态或激活态样式。 */
345
- declare const createIconStyle: (item: DataItemConfig, active?: boolean) => Style;
345
+ export declare const createIconStyle: (item: DataItemConfig, active?: boolean) => Style;
346
346
  /** 创建带 data 属性约定的 Marker Feature。 */
347
- declare const createMarker: (item: DataItemConfig, config: LayerConfig) => Feature$1<Point, {
347
+ export declare const createMarker: (item: DataItemConfig, config: LayerConfig) => Feature$1<Point, {
348
348
  [x: string]: any;
349
349
  }>;
350
350
  /** 批量创建 Marker 矢量图层。 */
351
- declare const createMarkersLayer: (dataList: Array<DataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
351
+ export declare const createMarkersLayer: (dataList: Array<DataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
352
352
  [x: string]: any;
353
353
  }>>, Feature$1<Geometry, {
354
354
  [x: string]: any;
355
355
  }>>;
356
356
  /** 清空外部选择集合并恢复 Marker 未选中样式。 */
357
- declare const changeUnselectStyle: (featureList: Collection<Feature$1>) => void;
357
+ export declare const changeUnselectStyle: (featureList: Collection<Feature$1>) => void;
358
358
  /** 创建随缩放级别切换小图/大图的 Marker 图层。 */
359
- declare const createElasticMarkerLayer: (dataList: Array<ElasticDataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
359
+ export declare const createElasticMarkerLayer: (dataList: Array<ElasticDataItemConfig>, config: LayerConfig) => VectorLayer<VectorSource<Feature$1<Geometry, {
360
360
  [x: string]: any;
361
361
  }>>, Feature$1<Geometry, {
362
362
  [x: string]: any;
363
363
  }>>;
364
364
  /** 创建单 Marker 图层并直接加入当前地图实例。 */
365
- declare const createMoveMarkerLayer: (dataItem: DataItemConfig, config: LayerConfig) => {
365
+ export declare const createMoveMarkerLayer: (dataItem: DataItemConfig, config: LayerConfig) => {
366
366
  vectorLayer: VectorLayer<VectorSource<Feature$1<Point, {
367
367
  [x: string]: any;
368
368
  }>>, Feature$1<Point, {
@@ -374,20 +374,20 @@ declare const createMoveMarkerLayer: (dataItem: DataItemConfig, config: LayerCon
374
374
  /**
375
375
  * 重置激活的矢量数据(清空 overlay 与各图层选择交互的要素集合)
376
376
  */
377
- declare const resetActiveVector: () => void;
377
+ export declare const resetActiveVector: () => void;
378
378
  /**
379
379
  * 移除覆盖物以及所有非底图自定义图层
380
380
  */
381
- declare const removeAllLayers: () => void;
381
+ export declare const removeAllLayers: () => void;
382
382
  /**
383
383
  * 重置激活 Feature
384
384
  */
385
- declare const resetActiveFeature: () => void;
385
+ export declare const resetActiveFeature: () => void;
386
386
  /**
387
387
  * 按 _uuid 激活要素
388
388
  * @param uid
389
389
  */
390
- declare const activeFeatureByUid: (uid: string) => void;
390
+ export declare const activeFeatureByUid: (uid: string) => void;
391
391
  //#endregion
392
392
  //#region src/layer/vector-layer.d.ts
393
393
  /**
@@ -395,7 +395,7 @@ declare const activeFeatureByUid: (uid: string) => void;
395
395
  * @param dataList
396
396
  * @param config
397
397
  */
398
- declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
398
+ export declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
399
399
  [x: string]: any;
400
400
  }>>, Feature<import("ol/geom").Geometry, {
401
401
  [x: string]: any;
@@ -406,13 +406,13 @@ declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig)
406
406
  * @param dataList
407
407
  * @param crsForm
408
408
  */
409
- declare const appendFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], crsForm?: CRSTypes) => void;
409
+ export declare const appendFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], crsForm?: CRSTypes) => void;
410
410
  /**
411
411
  * 创建面状图层
412
412
  * @param dataList
413
413
  * @param config
414
414
  */
415
- declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
415
+ export declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
416
416
  [x: string]: any;
417
417
  }>>, Feature<import("ol/geom").Geometry, {
418
418
  [x: string]: any;
@@ -422,7 +422,7 @@ declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config:
422
422
  * @param dataList
423
423
  * @param config
424
424
  */
425
- declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
425
+ export declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<import("ol/geom").Geometry, {
426
426
  [x: string]: any;
427
427
  }>>, Feature<import("ol/geom").Geometry, {
428
428
  [x: string]: any;
@@ -432,14 +432,14 @@ declare const createVectorLineLayer: (dataList: MassData[] | undefined, config:
432
432
  /**
433
433
  * 构建 MassMarks 样式数组(默认段 + 激活段,长度 statusNum * 2)
434
434
  */
435
- declare const buildMassMarksStyles: (getImgUrlFn: GetImgUrlFn) => (iconConfig: IconConfig) => any[];
435
+ export declare const buildMassMarksStyles: (getImgUrlFn: GetImgUrlFn) => (iconConfig: IconConfig) => any[];
436
436
  /**
437
437
  * 向海量点图层增量添加 Features
438
438
  * @param targetLayer
439
439
  * @param dataList
440
440
  * @param config
441
441
  */
442
- declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], config?: {
442
+ export declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], config?: {
443
443
  clear?: boolean;
444
444
  }) => void;
445
445
  /**
@@ -447,7 +447,7 @@ declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[
447
447
  * @param dataList
448
448
  * @param styleList
449
449
  */
450
- declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point$1, {
450
+ export declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point$1, {
451
451
  [x: string]: any;
452
452
  }>>, Feature<Point$1, {
453
453
  [x: string]: any;
@@ -456,7 +456,7 @@ declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike
456
456
  * 添加 massMarksLayer(按需附带线/面图层)
457
457
  * @param getImgUrlFn
458
458
  */
459
- declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point$1, {
459
+ export declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point$1, {
460
460
  [x: string]: any;
461
461
  }>>, Feature<Point$1, {
462
462
  [x: string]: any;
@@ -465,7 +465,7 @@ declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[
465
465
  * 按选中状态列表更新海量点显隐
466
466
  * @param checkedStatusList
467
467
  */
468
- declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassData[];
468
+ export declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassData[];
469
469
  //#endregion
470
470
  //#region src/layer/cluster-layer.d.ts
471
471
  /**
@@ -473,10 +473,10 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
473
473
  * @param dataList
474
474
  * @param config
475
475
  */
476
- declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point$1, {
476
+ export declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point$1, {
477
477
  [x: string]: any;
478
478
  }>>, Feature<import("ol/geom").Geometry, {
479
479
  [x: string]: any;
480
480
  }>>;
481
481
  //#endregion
482
- export { ClusterConfig, ClusterData, type CreateTdtSourceOptions, type CreateTdtVtsLayerOptions, CustomMap, DataItemConfig, ElasticDataItemConfig, GeometryCoordinates, GeometryType, GetImgUrl, GetImgUrlFn, HzsyType, IconConfig, LayerConfig, MassData, type SourceDiagnostics, type TdtSourceBundle, type TdtVtsStyle, VectorConfig, WmtsSourceOptions, WorldLayerType, ZheJiangType, activeFeatureByUid, addFeaturesByLayer, addMassMarksLayer, appendFeaturesByLayer, baseLayers, buildMassMarksStyles, changeLayer, changeSource, changeUnselectStyle, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createDrawInteraction, createElasticMarkerLayer, createGeoJsonLayer, createIconStyle, createLayerSelectByNames, createMap, createMapInstance, createMapWorldLayer, createMarker, createMarkersLayer, createMassMarksLayer, createMoveMarkerLayer, createOverlay, createSelectByLayer, createTdtVectorSource, createTdtVtsLayer, createText, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, createZheJiangLayer, disposeInstance, disposeMap, emitter, flyToAnimate, getDrawStyle, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
482
+ export { type CreateTdtSourceOptions, type CreateTdtVtsLayerOptions, type SourceDiagnostics, type TdtSourceBundle, type TdtVtsStyle, emitter };
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.js";import i from"ol/layer/VectorTile.js";import a from"ol/TileState.js";import o from"ol/source/VectorTile.js";import s from"mitt";import{WMTS as c,XYZ as l}from"ol/source.js";import u from"ol/layer/Tile.js";import{GeoJSON as d,WMTSCapabilities as f}from"ol/format.js";import{optionsFromCapabilities as p}from"ol/source/WMTS.js";import{TileGrid as m}from"ol/tilegrid.js";import{Tile as h}from"ol/layer.js";import g from"ol/tilegrid/WMTS.js";import{unByKey as _}from"ol/Observable.js";import v from"ol/layer/Image.js";import ee from"ol/source/Raster.js";import te from"ol/Map.js";import ne from"ol/View.js";import{defaults as re}from"ol/control.js";import y from"gcoord";import{Feature as b,Overlay as ie}from"ol";import{Select as x,defaults as ae}from"ol/interaction.js";import{boundingExtent as oe,getCenter as se}from"ol/extent.js";import{singleClick as ce}from"ol/events/condition.js";import le from"ol/Feature.js";import ue from"ol/geom/Point.js";import S from"ol/layer/Vector.js";import C from"ol/source/Vector.js";import{Circle as de,Fill as w,Icon as T,RegularShape as fe,Stroke as E,Style as D,Text as O}from"ol/style.js";import pe from"ol/interaction/Draw.js";import{getArea as me,getLength as he}from"ol/sphere.js";import ge from"ol/format/GeoJSON.js";import{Point as k}from"ol/geom.js";import _e from"ol/source/Cluster.js";import ve from"ol/style/Circle.js";export*from"tdt-vts-core";let ye=function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const be=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()},A=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}},xe=async e=>{let t=await be(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=A({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}},j=s();let M;const Se=e=>{M=e},Ce=()=>{M=void 0},N=(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},we=()=>M?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],Te=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`}},Ee=new f,P=new Map,De=async e=>{let t=P.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=Ee.read(await n.text());return P.set(e,r),r},Oe=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 De(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)})},F=`c77eddc667c5bed016fded560baf93e7`,I=(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()},L=(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=F)=>{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=>M.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Ne=e=>{let t=Me(e);t&&I(M,t)},Pe=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),Fe=(e,t,n,r={})=>{let i=new ee({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)}),R=(e=``)=>{M&&M.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>M.removeOverlay(e))},Le=()=>R(`_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 ie({element:o,stopEvent:!1,positioning:`bottom-center`,position:y.transform([+i[0],+i[1]],a||y.WGS84,y.WGS84)});c.set(`_isAnimationMarker`,!0),M.addOverlay(c)},ze=(e={id:`popup-container`,positioning:`top-center`})=>new ie(Object.assign({element:document.getElementById(e.id)||void 0},e)),Be=()=>{R(),M.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},Ve=()=>{R(),M&&M.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||I(M,e)})},He=()=>{R(),M.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=M.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 z=[119.71512016971076,30.122490541963536];const We=(e={})=>{if(M)return M;let t=B(e);return Se(t),t},B=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:z,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[L()],constrainResolution:!1,smoothExtentConstraint:!1,tk:F},e||{}),n=new te({view:new ne(t),controls:re({zoom:!1,rotate:!1,attribution:!1}),interactions:ae({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[L()]});z=t.center||z,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&&I(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,a&&(n.getTargetElement().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},V=()=>{if(!M)return;let e=M;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>I(e,t)),e.setTarget(``),e.dispose(),Ce()},Ge=()=>V(),Ke=()=>M,H=(e=z)=>{M&&M.getView().animate({zoom:9.4,center:e,duration:1e3})},qe=(e={center:z,isClearAll:!0})=>{Ve(),H(e.center||z)},U={padding:[50,50,50,50],duration:1e3},Je=(e,t=M,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=oe(e);r.fit(t,{...U,...n||{}})}},Ye=(e,t=M,n)=>{t.getView().fit(e,{...U,...n||{}})},Xe=(e,t=M,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...U,...n||{}})},Ze=(e,t)=>{let n=M.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})},W=e=>new O({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new w({color:`rgba(255, 255, 255, 0.8)`})}),G=(e,t=!1)=>new D({image:new T({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?W(e):void 0}),K=(e,t)=>{let n=new le({geometry:new ue([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(G(e)),n},q=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new C;return e.forEach(e=>a.addFeature(K(e,t))),new S({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},J=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(G({...t,img:t[n]},!1))})},Y=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?J([e],M.getView().getZoom()):e.setStyle(G(r,t))},Qe=e=>{e.forEach(e=>{Y(e,!1)}),e.clear()},$e=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=q(n,t),i=r.getSource().getFeatures(),a=M.getView();return J(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>J(i,a.getZoom()))),r},et=(e,t)=>{let n=K(e,t),r=new S({className:t.layerName||`ol-layer`,source:new C({features:[n]})});return M.addLayer(r),{vectorLayer:r}},tt=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),j.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`),j.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=M.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:se(t.getGeometry().getExtent())})}},X=e=>{let t=new x({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!ce(t))return!1;let n=!1;return M.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&&tt(e,n[0])}else tt(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),M.addInteraction(t),e.set(`_selectInteraction`,t),t},nt=(e,t,n)=>{let r=new x({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];Y(t,!1),n?.(t)}if(r.length){let e=r[0];Y(e,!0),t?.(e)}}),r},rt=e=>{let t=me(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},it=e=>{let t=he(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},at=new D({fill:new w({color:`rgba(255, 255, 255, 0.2)`}),stroke:new E({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new de({radius:5,stroke:new E({color:`rgba(0, 0, 0, 0.7)`}),fill:new w({color:`rgba(255, 255, 255, 0.2)`})})}),ot=new WeakMap,st=e=>{let t=ot.get(e);if(t)return t;let n=new D({text:new O({font:`14px`,fill:new w({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new w({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new fe({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new w({color:`rgba(0, 0, 0, 0.7)`})})});return ot.set(e,n),n},ct=(e,t=at)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=rt(r)):r.getType()===`LineString`&&(i=new ue(r.getLastCoordinate()),a=it(r)),i&&a){let t=st(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},lt=(e=`Point`,t,n)=>new pe({source:t.getSource(),type:e,style:n?e=>ct(e,void 0):void 0}),ut=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new C({features:new ge().readFeatures(e)}),style:t||new D({stroke:new E({color:`red`,lineDash:[10],width:3}),fill:new w({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new S(i)},Z=(e,t,n,r)=>t&&n?.get(e[t])||r,dt=(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||Te(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),y.transform({type:`FeatureCollection`,features:i},r||y.WGS84,y.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 D({stroke:new E({width:f??c??4,color:d||Z(p,a,r,o)})}),h=new D({stroke:new E({width:c??2,color:Z(p,a,r,o)})});return n||(m.setFill(new w({color:N(l||i||``,u??s??1)||N(Z(p,a,r,i)||``,s??1)})),h.setFill(new w({color:N(Z(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},Q=(e,t)=>{let n=dt(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}=Q(e,t),s=new S({zIndex:5,className:r||`ol-layer`,source:new C({features:a})});return i&&X(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},pt=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=Q(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])},mt=(e=[],t)=>$(e,Object.assign({},t,{isLine:!1})),ht=(e=[],t)=>$(e,Object.assign({},t,{isLine:!0})),gt=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 D({zIndex:88+e,image:new T({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new D({zIndex:120,image:new T({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},_t=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=y.transform([+e.lnglat[0],+e.lnglat[1]],n||y.WGS84,y.WGS84),i=new b({geometry:new k(r)});return i.setProperties({...e,unActiveStyle:t[e.style],activeStyle:t[e.style+t.length/2]}),i.setStyle(t[e.style]),i}),vt=(e,t,n={})=>{let r=e.get(`_massMarksStyles`),i=e?.getSource(),{clear:a}=n,o=_t(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)))},yt=(e,t=[])=>{let n=new S({zIndex:2e3,source:new C({features:_t(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},bt=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||gt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=yt(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),X(v)),o){let e=$(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));M.addLayer(e)}if(s){let e=$(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));M.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),M.addLayer(v),v},xt=(e=[])=>{let t=new D({}),n=new Set(e),r=[];return M.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},St=(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 D({image:new ve({radius:i*20,stroke:new E({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new w({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new O({text:t.toString(),fill:new w({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 S({zIndex:200,className:u,source:new _e({distance:i||80,minDistance:a||0,source:new C({features:e.map(e=>{let t=new b(new k(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&&X(p),p};export{ye as GeometryType,Ue as activeFeatureByUid,vt as addFeaturesByLayer,bt as addMassMarksLayer,pt as appendFeaturesByLayer,Ae as baseLayers,gt as buildMassMarksStyles,Ie as changeLayer,Fe as changeSource,Qe as changeUnselectStyle,Re as createAnimationMarker,L as createBaseLayer,$ as createBusinessLayer,St as createClusterLayer,lt as createDrawInteraction,$e as createElasticMarkerLayer,ut as createGeoJsonLayer,G as createIconStyle,nt as createLayerSelectByNames,B as createMap,We as createMapInstance,ke as createMapWorldLayer,K as createMarker,q as createMarkersLayer,yt as createMassMarksLayer,et as createMoveMarkerLayer,ze as createOverlay,X as createSelectByLayer,A as createTdtVectorSource,xe as createTdtVtsLayer,W as createText,mt as createVectorFaceLayer,ht as createVectorLineLayer,Oe as createWmtsLayer,je as createZheJiangLayer,Ge as disposeInstance,V as disposeMap,j as emitter,Ze as flyToAnimate,ct as getDrawStyle,Me as getLayerByName,we as getLayersDataList,Ke as getMapInstance,M as instance,Ve as removeAllLayers,Ne as removeLayerByName,R as removeOverlays,He as resetActiveFeature,Be as resetActiveVector,qe as resetMap,H as resetZoomAndCenter,Je as setFitViewByCoords,Ye as setFitViewByGeom,Xe as setFitViewByLayer,xt 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 ee from"ol/source/Raster";import te from"ol/Map";import ne from"ol/View";import{defaults as re}from"ol/control";import y from"gcoord";import{Feature as b,Overlay as x}from"ol";import{Select as ie,defaults as ae}from"ol/interaction";import{boundingExtent as oe,getCenter as se}from"ol/extent";import{singleClick as ce}from"ol/events/condition";import le from"ol/Feature";import S from"ol/geom/Point";import C from"ol/layer/Vector";import w from"ol/source/Vector";import{Circle as ue,Fill as T,Icon as E,RegularShape as de,Stroke as D,Style as O,Text as k}from"ol/style";import fe from"ol/interaction/Draw";import{getArea as pe,getLength as me}from"ol/sphere";import he from"ol/format/GeoJSON";import{Point as ge}from"ol/geom";import _e from"ol/source/Cluster";import ve from"ol/style/Circle";export*from"tdt-vts-core";let ye=/* @__PURE__ */ function(e){return e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e.Invalid=`Invalid`,e}({});const be=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()},xe=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}},Se=async e=>{let t=await be(e.style);if(t?.version!==8||!t.sources||!Array.isArray(t.layers))throw TypeError(`style 必须是 Style v8 对象或其 JSON 地址`);let{source:n}=xe({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}},A=s();let j;const Ce=e=>{j=e},we=()=>{j=void 0},M=(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},Te=()=>j?.getAllLayers().map(e=>e.get(`_dataList`)||[]).flat(2)||[],Ee=e=>{let t=e=>!Array.isArray(e)||e.length===0?0:1+t(e[0]),n=e=>{if(!Array.isArray(e)||e.length<3)return!1;let t=e[0],n=e[e.length-1];return t[0]===n[0]&&t[1]===n[1]},r=e=>Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`,i=e=>Array.isArray(e)&&e.length>=2&&e.every(r),a=e=>Array.isArray(e)?(t(e)===2?[e]:e).every(e=>Array.isArray(e)&&e.length>=4&&n(e)&&e.every(r)):!1,o=t(e);try{return o<2||!e||e.length===0?`Invalid`:o===2&&i(e)?n(e)&&e.length>=4?`Polygon`:`LineString`:o===3&&Array.isArray(e)&&e.every(i)?a(e)?`Polygon`:e.every(e=>!n(e))?`MultiLineString`:`Invalid`:o===4&&Array.isArray(e)&&e.every(e=>a(e))?`MultiPolygon`:`Invalid`}catch(e){return console.error(`Error analyzing coordinates:`,e),`Invalid`}},De=new f,N=/* @__PURE__ */ new Map,Oe=async e=>{let t=N.get(e);if(t)return t;let n=await fetch(e);if(!n.ok)throw Error(`WMTS capabilities 请求失败:${n.status}`);let r=De.read(await n.text());return N.set(e,r),r},ke=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 Oe(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)})},P=(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()},F=`c77eddc667c5bed016fded560baf93e7`,I=(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)},Ae=(e,t=F)=>{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)},je=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})}),Me=(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}`})}),Ne=e=>j.getAllLayers().find(t=>(t.get(`_layerName`)||t.getClassName())===e),Pe=e=>{j.getAllLayers().filter(t=>(t.get(`_layerName`)||t.getClassName())===e).forEach(e=>{P(j,e)})},Fe=()=>Math.max(1,Math.min(4,globalThis.navigator?.hardwareConcurrency??2)),L=(e,t,n,r={})=>{let i=new ee({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??Fe()});return i.on(`beforeoperations`,e=>{e.data.ratioArray=n,e.data.rgbColorArray=t}),i},Ie=(e,t,n,r={})=>new v({source:L(e,t,n,r)}),R=(e=``)=>{j&&j.getOverlays().getArray().filter(t=>t.get(e||`position`)).forEach(e=>j.removeOverlay(e))},Le=()=>R(`_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 x({element:o,stopEvent:!1,positioning:`bottom-center`,position:y.transform([+i[0],+i[1]],a||y.WGS84,y.WGS84)});c.set(`_isAnimationMarker`,!0),j.addOverlay(c)},ze=(e={id:`popup-container`,positioning:`top-center`})=>new x(Object.assign({element:document.getElementById(e.id)||void 0},e)),Be=()=>{R(),j.getAllLayers().forEach(e=>{e.get(`_selectInteraction`)?.getFeatures().clear()})},z=()=>{R(),j&&j.getAllLayers().forEach(e=>{e.get(`_isBaseLayer`)||P(j,e)})},Ve=()=>{R(),j.getAllLayers().filter(e=>e.get(`_isVectorLayer`)).forEach(e=>{let t=e.get(`_selectInteraction`);t&&(t.dispatchEvent({type:`select`,selected:[],mapBrowserEvent:void 0,deselected:t.getFeatures().getArray()}),t.getFeatures().clear())})},He=e=>{let t=j.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 B=[119.71512016971076,30.122490541963536];const Ue=(e={})=>{if(j)return j;let t=V(e);return Ce(t),t},V=(e={})=>{let t=Object.assign({zoom:9.4,maxZoom:18,minZoom:9.4,center:B,baseLayer:`vec-layer`,projection:`EPSG:4326`,layers:[I()],constrainResolution:!1,smoothExtentConstraint:!1,tk:F},e||{}),n=new te({view:new ne(t),controls:re({zoom:!1,rotate:!1,attribution:!1}),interactions:ae({pinchRotate:!1,doubleClickZoom:!1,altShiftDragRotate:!1}),layers:t.layers||[I()]});B=t.center||B,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&&P(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},H=()=>{if(!j)return;let e=j;e.get(`_disposePointerMove`)?.(),e.unset(`_disposePointerMove`),e.getOverlays().forEach(t=>{e.removeOverlay(t)}),e.getInteractions().clear(),e.getAllLayers().forEach(t=>P(e,t)),e.setTarget(``),e.dispose(),we()},We=()=>H(),Ge=()=>j,U=(e=B)=>{j&&j.getView().animate({zoom:9.4,center:e,duration:1e3})},Ke=(e={center:B,isClearAll:!0})=>{z(),U(e.center||B)},W={padding:[50,50,50,50],duration:1e3},qe=(e,t=j,n)=>{let r=t.getView();if(e.length===1)r.animate({zoom:14,duration:1e3,center:e[0],...n||{}});else{let t=oe(e);r.fit(t,{...W,...n||{}})}},Je=(e,t=j,n)=>{t.getView().fit(e,{...W,...n||{}})},Ye=(e,t=j,n)=>{let r=e.getSource();if(!r||r.isEmpty())return;let i=r.getExtent();i&&t.getView().fit(i,{...W,...n||{}})},Xe=(e,t)=>{let n=j.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})},G=e=>new k({text:e.text,offsetY:e.offsetY,offsetX:e.offsetX,justify:`center`,textAlign:`center`,font:`16px PingFangSC-Semibold`,fill:new T({color:`rgba(255, 255, 255, 0.8)`})}),K=(e,t=!1)=>new O({image:new E({scale:e.scale||1,rotation:e.rotation||0,anchor:e.anchor||[.5,1],src:t&&e.activeImg||e.img}),text:e.showText?G(e):void 0}),q=(e,t)=>{let n=new le({geometry:new S([+e.lng,+e.lat]),data:Object.assign({},e||{},{layerName:t.layerName})});return n.setStyle(K(e)),n},J=(e,t)=>{let{layerName:n,visible:r=!0,zIndex:i=10}=t,a=new w;return e.forEach(e=>a.addFeature(q(e,t))),new C({zIndex:i,visible:r,source:a,className:n||`marker-layer`})},Y=(e,t)=>{let n=t>=14?`largeImg`:t>=11?`smallImg`:`img`;e.forEach(e=>{let t=e.get(`data`);t.isSelected||e.setStyle(K({...t,img:t[n]},!1))})},X=(e,t)=>{let n=e.get(`data`),r={...n,isSelected:t};e.set(`data`,r),n.isElastic?Y([e],j.getView().getZoom()):e.setStyle(K(r,t))},Ze=e=>{e.forEach(e=>{X(e,!1)}),e.clear()},Qe=(e,t)=>{let n=e.map(e=>({...e,isElastic:!0})),r=J(n,t),i=r.getSource().getFeatures(),a=j.getView();return Y(i,a.getZoom()),r.set(`_resolutionChangeKey`,a.on(`change:resolution`,()=>Y(i,a.getZoom()))),r},$e=(e,t)=>{let n=q(e,t),r=new C({className:t.layerName||`ol-layer`,source:new w({features:[n]})});return j.addLayer(r),{vectorLayer:r}},et=(e,t)=>{let n=t.getProperties(),{activeStyle:r}=n;if(t.setStyle(r),A.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`),A.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=j.getView();e.animate({duration:1e3,zoom:e.getZoom(),center:se(t.getGeometry().getExtent())})}},Z=e=>{let t=new ie({style:null,multi:!1,hitTolerance:10,layers:[e],condition:t=>{if(!ce(t))return!1;let n=!1;return j.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&&et(e,n[0])}else et(e,t)}if(r.length){let t=r[0],n=t.getProperties();t.setStyle(n.unActiveStyle),e.set(`_hasActive`,!1)}}),j.addInteraction(t),e.set(`_selectInteraction`,t),t},tt=(e,t,n)=>{let r=new ie({style:null,layers:t=>e.includes(t.getClassName())});return r.on(`select`,({deselected:e,selected:r})=>{if(e.length){let t=e[0];X(t,!1),n?.(t)}if(r.length){let e=r[0];X(e,!0),t?.(e)}}),r},nt=e=>{let t=pe(e,{projection:`EPSG:4326`});return t>1e4?`${Math.round(t/1e6*100)/100} km\xB2`:`${Math.round(t*100)/100} m\xB2`},rt=e=>{let t=me(e,{projection:`EPSG:4326`});return t>100?`${Math.round(t/1e3*100)/100} km`:`${Math.round(t*100)/100} m`},it=new O({fill:new T({color:`rgba(255, 255, 255, 0.2)`}),stroke:new D({color:`rgba(0, 0, 0, 0.5)`,lineDash:[10,10],width:2}),image:new ue({radius:5,stroke:new D({color:`rgba(0, 0, 0, 0.7)`}),fill:new T({color:`rgba(255, 255, 255, 0.2)`})})}),at=/* @__PURE__ */ new WeakMap,ot=e=>{let t=at.get(e);if(t)return t;let n=new O({text:new k({font:`14px`,fill:new T({color:`rgba(255, 255, 255, 1)`}),backgroundFill:new T({color:`rgba(0, 0, 0, 0.7)`}),padding:[3,3,3,3],textBaseline:`bottom`,offsetY:-15}),image:new de({radius:8,points:3,angle:Math.PI,displacement:[0,10],fill:new T({color:`rgba(0, 0, 0, 0.7)`})})});return at.set(e,n),n},st=(e,t=it)=>{let n=t?[t]:[],r=e.getGeometry(),i,a;if(r.getType()===`Polygon`?(i=r.getInteriorPoint(),a=nt(r)):r.getType()===`LineString`&&(i=new S(r.getLastCoordinate()),a=rt(r)),i&&a){let t=ot(e);t.setGeometry(i),t.getText().setText(a),n.push(t)}return n},ct=(e=`Point`,t,n)=>new fe({source:t.getSource(),type:e,style:n?e=>st(e,void 0):void 0}),lt=(e,t,n)=>{let{layerName:r}=n||{},i=Object.assign({className:r||`ol-layer`,source:new w({features:new he().readFeatures(e)}),style:t||new O({stroke:new D({color:`red`,lineDash:[10],width:3}),fill:new T({color:`rgba(0, 0, 255, 0.1)`})})},n||{});return new C(i)},Q=(e,t,n,r)=>t&&n?.get(e[t])||r,ut=(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||Ee(r);t!==`Invalid`&&i.push({type:`Feature`,properties:{...e},geometry:{type:t,coordinates:r}})}}catch(e){console.error(`创建线状数据失败:${e}`)}}),y.transform({type:`FeatureCollection`,features:i},r||y.WGS84,y.WGS84)},dt=(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 O({stroke:new D({width:f??c??4,color:d||Q(p,a,r,o)})}),h=new O({stroke:new D({width:c??2,color:Q(p,a,r,o)})});return n||(m.setFill(new T({color:M(l||i||``,u??s??1)||M(Q(p,a,r,i)||``,s??1)})),h.setFill(new T({color:M(Q(p,a,r,i)||``,s??1)}))),e.setProperties({activeStyle:m,unActiveStyle:h}),h},ft=(e,t)=>{let n=ut(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(dt(e,t))}),{features:r,acceptedData:i}},$=(e,t)=>{let{isAutoFit:n,layerName:r,openClick:i}=t,{features:a,acceptedData:o}=ft(e,t),s=new C({zIndex:5,className:r||`ol-layer`,source:new w({features:a})});return i&&Z(s),s.setProperties({_isCustom:!0,_isAutoFit:n,_isVectorLayer:!0,_vectorConfig:t,_layerName:r,_dataList:o,_uuidSet:new Set(o.map(e=>e._uuid))}),s},pt=(e,t,n)=>{let r=e.getSource(),{_vectorConfig:i}=e.getProperties()||{},{features:a,acceptedData:o}=ft(t,Object.assign({},i,{crsForm:n??i?.crsForm}));r.addFeatures(a);let s=new Set(e.get(`_uuidSet`)||[]);o.forEach(e=>s.add(e._uuid)),e.set(`_uuidSet`,s),e.set(`_dataList`,[...e.get(`_dataList`)||[],...o])},mt=(e=[],t)=>$(e,Object.assign({},t,{isLine:!1})),ht=(e=[],t)=>$(e,Object.assign({},t,{isLine:!0})),gt=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 O({zIndex:88+e,image:new E({width:c,height:l,src:t,anchor:[.5,1]})});let n=s(`${r}-${e}-active`,`.webp`);u[e+i]=new O({zIndex:120,image:new E({width:c*a,height:l*a,anchor:[.5,1],src:n||t})})}return u},_t=(e,t=[])=>e.map(e=>{let{crsForm:n}=e,r=y.transform([+e.lnglat[0],+e.lnglat[1]],n||y.WGS84,y.WGS84),i=new b({geometry:new ge(r)});return i.setProperties({...e,unActiveStyle:t[e.style],activeStyle:t[e.style+t.length/2]}),i.setStyle(t[e.style]),i}),vt=(e,t,n={})=>{let r=e.get(`_massMarksStyles`),i=e?.getSource(),{clear:a}=n,o=_t(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)))},yt=(e,t=[])=>{let n=new C({zIndex:2e3,source:new w({features:_t(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},bt=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||gt(e)({baseUrl:a,markerIcon:f,markerSize:m,statusNum:d||5,activeScale:h||1.3}),v=yt(t,_);if(r&&(v.setProperties({_offset:i,_isAutoFit:u}),Z(v)),o){let e=$(t,Object.assign({},{key:`line`,isLine:!0,openClick:!1,strokeWeight:4,strokeColor:`rgba(29, 235, 255, 0.8)`},g||{}));j.addLayer(e)}if(s){let e=$(t,Object.assign({},{isLine:!1,key:`faceList`,strokeWeight:1,openClick:!1,fillColor:`#4247DF`,strokeStyle:`dashed`,strokeColor:`#4247DF`},g||{}));j.addLayer(e)}return v.setProperties({_isCustom:!0,_offset:i,_hasLine:o,_hasFace:s,className:c,_layerName:c,_isVectorLayer:!0,_isDynamic:l,_massMarksStyles:_}),j.addLayer(v),v},xt=(e=[])=>{let t=new O({}),n=new Set(e),r=[];return j.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},St=(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 O({image:new ve({radius:i*20,stroke:new D({width:2,color:`hsla(${180-i*180}, 100%, 40%, 1)`}),fill:new T({color:`hsla(${180-i*180}, 100%, 50%, 1)`})}),text:new k({text:t.toString(),fill:new T({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 C({zIndex:200,className:u,source:new _e({distance:i||80,minDistance:a||0,source:new w({features:e.map(e=>{let t=new b(new ge(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&&Z(p),p};export{ye as GeometryType,He as activeFeatureByUid,vt as addFeaturesByLayer,bt as addMassMarksLayer,pt as appendFeaturesByLayer,je as baseLayers,gt as buildMassMarksStyles,Ie as changeLayer,L as changeSource,Ze as changeUnselectStyle,Re as createAnimationMarker,I as createBaseLayer,$ as createBusinessLayer,St as createClusterLayer,ct as createDrawInteraction,Qe as createElasticMarkerLayer,lt as createGeoJsonLayer,K as createIconStyle,tt as createLayerSelectByNames,V as createMap,Ue as createMapInstance,Ae as createMapWorldLayer,q as createMarker,J as createMarkersLayer,yt as createMassMarksLayer,$e as createMoveMarkerLayer,ze as createOverlay,Z as createSelectByLayer,xe as createTdtVectorSource,Se as createTdtVtsLayer,G as createText,mt as createVectorFaceLayer,ht as createVectorLineLayer,ke as createWmtsLayer,Me as createZheJiangLayer,We as disposeInstance,H as disposeMap,A as emitter,Xe as flyToAnimate,st as getDrawStyle,Ne as getLayerByName,Te as getLayersDataList,Ge as getMapInstance,j as instance,z as removeAllLayers,Pe as removeLayerByName,R as removeOverlays,Ve as resetActiveFeature,Be as resetActiveVector,Ke as resetMap,U as resetZoomAndCenter,qe as setFitViewByCoords,Je as setFitViewByGeom,Ye as setFitViewByLayer,xt as updateMarksLayersByStatus};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "map-ol-utils",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "description": "OpenLayers utilities with browser-side Tianditu private VTS loading and conversion",
6
6
  "files": [
@@ -38,7 +38,7 @@
38
38
  "dependencies": {
39
39
  "gcoord": "^1.0.7",
40
40
  "mitt": "^3.0.1",
41
- "ol-mapbox-style": "^13.4.3",
41
+ "ol-mapbox-style": "^13.5.1",
42
42
  "tdt-vts-core": "^1.0.0"
43
43
  },
44
44
  "peerDependencies": {