@teeechina/teee-map 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/teee-map.mjs CHANGED
@@ -46531,20 +46531,20 @@ var li = 20037508.34, ui = (e, t) => [e / li * 180, Math.atan(Math.exp(t / li *
46531
46531
  };
46532
46532
  this.initMap(a);
46533
46533
  }
46534
- async createGeoJsonStationMap(e, t, n) {
46535
- let r = e.map((e) => `geojson_${e}`);
46536
- this.mapConfigs = oi.geojson("geojson"), this.mapConfigs.layers = e, this.mapConfigs.sourceLayers = r;
46537
- let i = await Promise.all(e.map(async (e, n) => {
46538
- let i = r[n];
46539
- if (this.map.getSource(i)) return;
46540
- let a = t[n], o;
46541
- return o = fi(typeof a == "string" ? await (await fetch(a)).json() : a), E.geojson(o);
46542
- })), a = {
46534
+ async createGeoJsonStationMap(e) {
46535
+ let t = e.map((e) => e.name), n = t.map((e) => `geojson_${e}`);
46536
+ this.mapConfigs = oi.geojson("geojson"), this.mapConfigs.layers = t, this.mapConfigs.sourceLayers = n;
46537
+ let r = await Promise.all(e.map(async (e, t) => {
46538
+ let r = n[t];
46539
+ if (this.map.getSource(r)) return;
46540
+ let i = e.data, a;
46541
+ return a = fi(typeof i == "string" ? await (await fetch(i)).json() : i), E.geojson(a);
46542
+ })), i = {
46543
46543
  id: this.mapConfigs.id,
46544
- source: i,
46545
- layers: fe.geojson(e, r)
46544
+ source: r,
46545
+ layers: fe.geojson(t, n)
46546
46546
  };
46547
- this.initMap(a), ai.geojson(this);
46547
+ this.initMap(i), ai.geojson(this);
46548
46548
  }
46549
46549
  createRasterMap(e) {
46550
46550
  this.mapConfigs = oi.raster(e);
@@ -758,4 +758,4 @@ in vec3 view_direction;uniform vec3 u_sun_pos;uniform vec3 u_globe_position;unif
758
758
  Alt. `,[`to-string`,[`floor`,[`get`,`elevation`]]],` `,[`get`,`elevationUnit`]],``]],"symbol-placement":`point`,"text-size":[`interpolate`,[`linear`],[`zoom`],5,10,10,12,13,14,14,16,18,18],"text-overlap":`always`,"text-variable-anchor":[`left`,`right`,`top`,`bottom`],"text-radial-offset":.5,"text-justify":`center`,"text-letter-spacing":.05},paint:{"text-halo-color":`#F7F7F7`,"text-halo-width":2,"text-color":`#232E3D`}},routingLineLayerNodeSpec:{id:`{prefix}-line-node`,type:`circle`,source:`{prefix}-line-source`,filter:[`==`,`$type`,`Point`],layout:{},paint:{"circle-radius":3,"circle-color":`#FFFFFF`,"circle-stroke-color":`#000000`,"circle-stroke-width":1}},polygonLayerSpec:{id:`{prefix}-polygon-label`,type:`symbol`,source:`{prefix}-polygon-source`,filter:[`==`,`$type`,`Point`],layout:{"text-field":[`concat`,[`to-string`,[`get`,`area`]],` `,[`get`,`unit`]],"symbol-placement":`point`,"text-size":[`interpolate`,[`linear`],[`zoom`],5,10,10,12,13,14,14,16,18,18],"text-overlap":`always`,"text-letter-spacing":.05},paint:{"text-halo-color":`#F7F7F7`,"text-halo-width":2,"text-color":`#232E3D`}},computeElevation:!1,terrainSource:{url:`https://tiles.mapterhorn.com/{z}/{x}/{y}.webp`,encoding:`terrarium`,tileSize:512,minzoom:0,maxzoom:12,tms:!1},measureUnitType:`metric`,distancePrecision:2,distanceUnit:void 0,areaPrecision:2,areaUnit:void 0,measureUnitSymbols:JSON.parse(JSON.stringify({kilometer:`km`,meter:`m`,centimeter:`cm`,mile:`mi`,foot:`ft`,inch:`in`,"square meters":`m²`,"square kilometers":`km²`,ares:`a`,hectares:`ha`,"square feet":`ft²`,"square yards":`yd²`,acres:`acres`,"square miles":`mi²`})),elevationCacheConfig:{enabled:!0,maxSize:1e3,ttl:3600*1e3,precision:9},adapterOptions:{prefixId:`td-measure`}},Xr={modes:[`render`,`routing`,`time-isochrone`,`distance-isochrone`,`select`,`delete-selection`,`delete`,`download`,`settings`],open:!1,modeOptions:{"time-isochrone":new hn({modeName:`time-isochrone`,editable:!1,styles:{pointColor:`#FFFFFF`,pointWidth:5,pointOutlineColor:`#666666`,pointOutlineWidth:1}}),"distance-isochrone":new hn({modeName:`distance-isochrone`,editable:!1,styles:{pointColor:`#FFFFFF`,pointWidth:5,pointOutlineColor:`#666666`,pointOutlineWidth:1}}),routing:new cn({modeName:`routing`,editable:!1,styles:{lineStringColor:`#FF0000`,lineStringWidth:2,closingPointColor:`#FF0000`,closingPointWidth:3,closingPointOutlineColor:`#666666`,closingPointOutlineWidth:1}}),select:new Wn({flags:{"time-isochrone":{feature:{draggable:!1}},"distance-isochrone":{feature:{draggable:!1}},routing:{feature:{draggable:!1,rotateable:!1,scaleable:!1,coordinates:{midpoints:!1,draggable:!1,deletable:!1}}}}}),settings:new Sn({modeName:`settings`,styles:{}})},valhallaOptions:{url:``,routingOptions:{costingModel:`auto`,distanceUnit:`kilometers`},isochroneOptions:{timeCostingModel:`auto`,distanceCostingModel:`auto`,contours:[{time:3,distance:1,color:`#ff0000`},{time:5,distance:2,color:`#ffff00`},{time:10,distance:3,color:`#0000ff`},{time:15,distance:4,color:`#ff00ff`}]}},adapterOptions:{prefixId:`td-valhalla`},routingLineLayerNodeLabelSpec:{id:`{prefix}-routing-node-label`,type:`symbol`,source:`{prefix}-routing-source`,filter:[`==`,`$type`,`Point`],layout:{"text-field":[`case`,[`all`,[`has`,`distance`],[`has`,`distance_unit`],[`has`,`time`]],[`concat`,[`to-string`,[`get`,`text`]],`
759
759
  `,[`to-string`,[`/`,[`round`,[`*`,[`get`,`distance`],10]],10]],[`to-string`,[`get`,`distance_unit`]],`
760
760
  `,[`to-string`,[`get`,`time`]],`min`],[`all`,[`has`,`costingModel`]],[`concat`,[`to-string`,[`get`,`text`]],`
761
- (`,[`to-string`,[`get`,`costingModel`]],`)`],[`concat`,[`to-string`,[`get`,`text`]]]],"symbol-placement":`point`,"text-size":[`interpolate`,[`linear`],[`zoom`],5,10,10,12,13,14,14,16,18,18],"text-overlap":`always`,"text-variable-anchor":[`left`,`right`,`top`,`bottom`],"text-radial-offset":.5,"text-justify":`left`,"text-letter-spacing":.05},paint:{"text-halo-color":`#F7F7F7`,"text-halo-width":2,"text-color":`#232E3D`}},routingLineLayerNodeSpec:{id:`{prefix}-routing-node`,type:`circle`,source:`{prefix}-routing-source`,filter:[`==`,`$type`,`Point`],layout:{},paint:{"circle-radius":3,"circle-color":[`case`,[`==`,[`get`,`text`],`Start`],`#0000FF`,[`==`,[`get`,`text`],`Goal`],`#FFFF00`,`#FFFFFF`],"circle-stroke-color":`#000000`,"circle-stroke-width":1}},timeIsochronePolygonLayerSpec:{id:`{prefix}-time-isochrone-polygon`,type:`fill`,source:`{prefix}-time-isochrone-source`,layout:{},paint:{"fill-color":[`get`,`fillColor`],"fill-opacity":[`get`,`fillOpacity`]}},timeIsochroneLineLayerSpec:{id:`{prefix}-time-isochrone-line`,type:`line`,source:`{prefix}-time-isochrone-source`,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":[`get`,`fillColor`],"line-width":3}},timeIsochroneLabelLayerSpec:{id:`{prefix}-time-isochrone-label`,type:`symbol`,source:`{prefix}-time-isochrone-source`,layout:{"symbol-placement":`line`,"text-pitch-alignment":`viewport`,"text-field":[`concat`,[`get`,`contour`],` `,`min`],"text-size":12,"symbol-spacing":100,"text-max-angle":45},paint:{"text-color":`rgb(0, 0, 0)`,"text-halo-width":1,"text-halo-color":`rgb(255, 255, 255)`}},distanceIsochronePolygonLayerSpec:{id:`{prefix}-distance-isochrone-polygon`,type:`fill`,source:`{prefix}-distance-isochrone-source`,layout:{},paint:{"fill-color":[`get`,`fillColor`],"fill-opacity":[`get`,`fillOpacity`]}},distanceIsochroneLineLayerSpec:{id:`{prefix}-distance-isochrone-line`,type:`line`,source:`{prefix}-distance-isochrone-source`,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":[`get`,`fillColor`],"line-width":3}},distanceIsochroneLabelLayerSpec:{id:`{prefix}-distance-isochrone-label`,type:`symbol`,source:`{prefix}-distance-isochrone-source`,layout:{"symbol-placement":`line`,"text-pitch-alignment":`viewport`,"text-field":[`concat`,[`get`,`contour`],` `,`km`],"text-size":12,"symbol-spacing":100,"text-max-angle":45},paint:{"text-color":`rgb(0, 0, 0)`,"text-halo-width":1,"text-halo-color":`rgb(255, 255, 255)`}}},Zr=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20xmlns:dc='http://purl.org/dc/elements/1.1/'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20inkscape:version='1.0%20(4035a4fb49,%202020-05-01)'%20sodipodi:docname='poi.svg'%20id='svg4460'%20height='100'%20width='100'%20version='1.1'%3e%3csodipodi:namedview%20inkscape:document-rotation='0'%20inkscape:current-layer='svg4460'%20inkscape:window-maximized='1'%20inkscape:window-y='-8'%20inkscape:window-x='-8'%20inkscape:cy='70.031285'%20inkscape:cx='-78.460726'%20inkscape:zoom='2.02'%20showgrid='false'%20id='namedview11'%20inkscape:window-height='1017'%20inkscape:window-width='1920'%20inkscape:pageshadow='2'%20inkscape:pageopacity='0'%20guidetolerance='10'%20gridtolerance='10'%20objecttolerance='10'%20borderopacity='1'%20bordercolor='%23666666'%20pagecolor='%23ffffff'%20/%3e%3cdefs%20id='defs4462'%20/%3e%3cmetadata%20id='metadata4465'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3cdc:title%3e%3c/dc:title%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cpath%20d='M%2050.001528,3.3861402e-7%20C%2030.763177,3.3861402e-7%2015,15.718144%2015,34.901534%20c%200,7.432782%202.373565,14.339962%206.391689,20.019029%20l%2024.338528,42.073163%20c%203.40849,4.452814%205.674917,3.607154%208.509014,-0.23458%20L%2081.083105,51.075788%20C%2081.625418,50.0948%2082.050328,49.050173%2082.421327,47.983517%2084.078241,43.936622%2085.000002,39.521943%2085,34.901534%2085,15.718144%2069.23988,3.3861402e-7%2050.001528,3.3861402e-7%20Z%20m%200,16.35400066138598%20c%2010.359296,0%2018.597616,8.21783%2018.597618,18.547533%200,10.329703%20-8.238322,18.544487%20-18.597618,18.544487%20-10.359299,0%20-18.600672,-8.214784%20-18.600672,-18.544487%200,-10.329703%208.241373,-18.547533%2018.600672,-18.547533%20z'%20style='fill:%233FB1CE;stroke-width:4.26019'%20id='path4135'%20/%3e%3c/svg%3e`,Qr=(e,t)=>{let n=t.updateType;return n===`finish`||n===`commit`?mr(e):{valid:!0}},$r=()=>({render:new Sn({modeName:`render`,styles:{}}),point:new hn({editable:!0}),marker:new Nr({editable:!0,styles:{markerUrl:Zr,markerWidth:27,markerHeight:27}}),linestring:new cn({editable:!0}),polygon:new vn({editable:!0,validation:Qr}),rectangle:new xn,"angled-rectangle":new vr,circle:new At,freehand:new Ft,"freehand-linestring":new Ar,sensor:new Tr,sector:new Sr,select:new Wn({flags:{point:{feature:{draggable:!0}},marker:{feature:{draggable:!0}},polygon:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},linestring:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},freehand:{feature:{draggable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},"freehand-linestring":{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},circle:{feature:{draggable:!0,coordinates:{resizable:`center`,deletable:!1,midpoints:!1}}},rectangle:{feature:{draggable:!0,rotateable:!0,coordinates:{resizable:`opposite`,deletable:!1,midpoints:!1}}},"angled-rectangle":{feature:{draggable:!0,rotateable:!0,coordinates:{resizable:`opposite`,deletable:!1,midpoints:!1}}},sensor:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},sector:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}}}}),delete:new Sn({modeName:`delete`,styles:{}}),"delete-selection":new Sn({modeName:`delete-selection`,styles:{}}),download:new Sn({modeName:`download`,styles:{}}),undo:new Sn({modeName:`undo`,styles:{}}),redo:new Sn({modeName:`redo`,styles:{}})}),ei=6371008.8;ei*100,ei*100,360/(2*Math.PI),ei*3.28084,ei*39.37,ei/1e3,ei/1e3,ei/1609.344,ei*1e3,ei*1e3,ei/1852,ei*1.0936,ei*ei/2,Math.PI/180;var ti=e=>e.charAt(0).toUpperCase()+e.slice(1),ni=[`{prefix}-point`,`{prefix}-point-lower`,`{prefix}-linestring`,`{prefix}-polygon`,`{prefix}-polygon-outline`];[...ni,Yr.polygonLayerSpec?.source,Yr.lineLayerLabelSpec?.source],[...ni,Xr.routingLineLayerNodeLabelSpec?.source,Xr.routingLineLayerNodeSpec?.source,Xr.timeIsochronePolygonLayerSpec?.source,Xr.timeIsochroneLineLayerSpec?.source,Xr.timeIsochroneLabelLayerSpec?.source,Xr.distanceIsochronePolygonLayerSpec?.source,Xr.distanceIsochroneLineLayerSpec?.source,Xr.distanceIsochroneLabelLayerSpec?.source];var ri=(e,t,n=ni,r=`td`)=>{n=n.map(e=>e.replace(`{prefix}`,r));let i=JSON.parse(JSON.stringify(e));return t&&(t.onlyTerraDrawLayers===!0?(i.layers=i.layers.filter(e=>`source`in e&&n.includes(e.source)),Object.keys(i.sources).forEach(e=>{n.includes(e)||delete i.sources[e]})):t.excludeTerraDrawLayers===!0&&(i.layers=i.layers.filter(e=>`source`in e&&!n.includes(e.source)||e.type===`background`),Object.keys(i.sources).forEach(e=>{n.includes(e)&&delete i.sources[e]}))),i},ii=class{className;dialog;title;constructor(e,t){this.className=e,this.title=t}create(e,t){let n=document.getElementsByClassName(this.className);n.length>0&&Array.from(n).forEach(e=>{e.remove()}),this.dialog=document.createElement(`dialog`),this.dialog.classList.add(this.className);let r=document.createElement(`div`);r.classList.add(`dialog-header`);let i=document.createElement(`h3`);i.textContent=this.title,i.classList.add(`dialog-title`),r.appendChild(i);let a=document.createElement(`button`);a.type=`button`,a.classList.add(`close-button`),a.innerHTML=`×`,a.setAttribute(`aria-label`,`Close dialog`),a.addEventListener(`click`,()=>{this.close()}),r.appendChild(a),this.dialog.appendChild(r);let o=document.createElement(`div`);o.classList.add(`content`),this.dialog.appendChild(t(o)),this.dialog.addEventListener(`click`,e=>{let t=e.target?.getBoundingClientRect();t&&(t.left>e.clientX||t.right<e.clientX||t.top>e.clientY||t.bottom<e.clientY)&&this.close()}),e.appendChild(this.dialog)}open(){this.dialog?.showModal()}close(){this.dialog?.close()}createSegmentButtons(e,t,n=()=>{}){let r=document.createElement(`div`);return r.classList.add(`segment-buttons`),e.forEach(e=>{let i=document.createElement(`button`);i.type=`button`,i.classList.add(`segment-button`),i.value=e.value,i.textContent=e.label,e.value===t&&i.classList.add(`active`),i.addEventListener(`click`,()=>{r.querySelectorAll(`.segment-button`).forEach(e=>e.classList.remove(`active`)),i.classList.add(`active`),n(i.value)}),r.appendChild(i)}),r}};2*Math.PI*6378137/2;var ai=class{controlContainer;map;modeButtons={};_isExpanded=!1;_cssPrefix=``;get isExpanded(){return this._isExpanded}get cssPrefix(){return this._cssPrefix}set isExpanded(e){this._isExpanded=e;let t=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-control`);for(let e=0;e<t.length;e++){let n=t.item(e);n&&(this.isExpanded?n.classList.remove(`hidden`):n.classList.add(`hidden`))}let n=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}render-button`);n&&n.length>0&&(this.isExpanded?n.item(0)?.classList.add(`enabled`):(n.item(0)?.classList.remove(`enabled`),this.resetActiveMode())),this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature(),this.isExpanded?this.dispatchEvent(`expanded`):this.dispatchEvent(`collapsed`)}get showDeleteConfirmation(){return this.options.showDeleteConfirmation===!0}set showDeleteConfirmation(e){this.options.showDeleteConfirmation=e}terradraw;options;events={};defaultMode=`render`;constructor(e){this.modeButtons={},this.options={...Jr,modes:[...Jr.modes??[]],...e};let t=this.options.adapterOptions?.prefixId??`td`;this.options.adapterOptions||(this.options.adapterOptions={}),this.options.adapterOptions?.prefixId||(this.options.adapterOptions.prefixId=t),this.options.undoRedo||(this.options.undoRedo={modeLevel:new Wr({maxStackSize:100}),sessionLevel:new Gr({maxStackSize:100}),keyboardShortcuts:new Lr})}getDefaultPosition(){return`top-right`}onAdd(e){if(this.options&&this.options.modes&&this.options.modes.length===0)throw Error(`At least a mode must be enabled.`);this.map=e;let t=$r(),n=[];return this.options?.modes?.forEach(e=>{if(this.options.modeOptions&&this.options.modeOptions[e]){let r=this.options.modeOptions[e];if(e===`select`){let n=t[e];if(n){let e=n.flags;Object.keys(e).forEach(t=>{r.flags[t]||(r.flags[t]=e[t])})}}n.push(r)}else t[e]&&n.push(t[e])}),n.forEach(e=>{e.state!==`unregistered`&&(e._state=`unregistered`)}),this.options?.modes?.includes(`render`)||(n.push(new Sn({modeName:`default`,styles:{}})),this.defaultMode=`default`),this.isExpanded=this.options.open===!0,this.terradraw=new qr({adapter:new Y({map:e,...this.options.adapterOptions}),modes:n,undoRedo:this.options.undoRedo}),this.map?.loaded()?this.terradraw.start():this.map?.once(`load`,()=>{this.terradraw?.start()}),this.controlContainer=document.createElement(`div`),this.controlContainer.classList.add(`maplibregl-ctrl`),this.controlContainer.classList.add(`maplibregl-ctrl-group`),n.forEach(e=>{e.mode!==`default`&&this.addTerradrawButton(e.mode)}),Object.values(this.modeButtons).forEach(e=>{this.controlContainer?.appendChild(e)}),this.toggleButtonsWhenNoFeature(),this.terradraw?.on(`finish`,this.toggleButtonsWhenNoFeature.bind(this)),this.terradraw?.on(`history`,this.handleHistoryChange.bind(this)),this.map.once(`idle`,()=>{this.toggleButtonsWhenNoFeature()}),this.controlContainer}onRemove(){!this.controlContainer||!this.controlContainer.parentNode||!this.map||(this.deactivate(),this.modeButtons={},this.terradraw=void 0,this.map=void 0,this.controlContainer.parentNode.removeChild(this.controlContainer))}on(e,t){this.events[e]?this.events[e].push(t):this.events[e]=[t]}off(e,t){if(!this.events[e])return;let n=this.events[e].findIndex(e=>e===t);n!==-1&&this.events[e].splice(n,1)}dispatchEvent(e,t){this.events[e]&&this.events[e].forEach(e=>{let n=(this.terradraw?.getSnapshot())?.filter(e=>e.properties.selected===!0);e({feature:n,mode:this.terradraw?.getMode(),...t})})}activate(){this.terradraw&&(this.terradraw.enabled||this.terradraw.start())}deactivate(){this.terradraw&&this.terradraw.enabled&&(this.resetActiveMode(),this.dispatchEvent(`mode-changed`),this.terradraw.stop())}handleModeChange(e,t){let n=t.setMode(e);return this.syncButtonStates(e),e!==this.defaultMode&&this.activate(),this.dispatchEvent(`mode-changed`),n}syncButtonStates(e){if(!this.controlContainer)return;let t=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-control`);for(let e=0;e<t.length;e++){let n=t.item(e);n&&n.classList.remove(`active`)}if(e!==this.defaultMode&&e!==`render`){let t=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-${e}-button`);t&&t.length>0&&t[0].classList.add(`active`)}this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature()}getTerraDrawInstance(){return this.terradraw?new Proxy(this.terradraw,{get:(e,t,n)=>t===`setMode`?t=>this.handleModeChange(t,e):t===`clearUndoRedoHistory`?()=>{e.clearUndoRedoHistory(),this.handleHistoryChange({undoSize:0,redoSize:0})}:Reflect.get(e,t,n)}):this.terradraw}handleHistoryChange(e){if(!this.controlContainer)return;let t=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}undo-button`);for(let n=0;n<t.length;n++){let r=t.item(n);r&&(r.disabled=e.undoSize===0)}let n=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}redo-button`);for(let t=0;t<n.length;t++){let r=n.item(t);r&&(r.disabled=e.redoSize===0)}}toggleEditor(){this.terradraw&&(this.isExpanded=!this.isExpanded)}resetActiveMode(){this.terradraw&&(this.terradraw.enabled||this.terradraw.start(),this.terradraw?.setMode(this.defaultMode),this.syncButtonStates(this.defaultMode))}addTerradrawButton(e){let t=document.createElement(`button`);t.type=`button`,this.modeButtons[e]=t,e===`render`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),this.isExpanded&&t.classList.add(`enabled`),t.type=`button`,t.title=ti(`expand or collapse drawing tool`),t.addEventListener(`click`,this.toggleEditor.bind(this))):(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}add-control`),this.isExpanded||t.classList.add(`hidden`),t.title=ti(e.replace(/-/g,` `)),e===`delete`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.addEventListener(`click`,this.handleDeleteAllFeatures.bind(this))):e===`delete-selection`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.classList.add(`hidden-delete-selection`),t.addEventListener(`click`,this.handleDeleteSelectedFeatures.bind(this))):e===`download`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.addEventListener(`click`,this.handleDownload.bind(this))):[`undo`,`redo`].includes(e)?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.disabled=!0,t.addEventListener(`click`,()=>{this.terradraw&&(e===`undo`?this.terradraw.undo():this.terradraw.redo())})):(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}add-${e}-button`),t.addEventListener(`click`,()=>{if(!this.terradraw)return;let n=t.classList.contains(`active`);this.activate(),this.resetActiveMode(),n||(this.terradraw.setMode(e),this.syncButtonStates(e)),this.dispatchEvent(`mode-changed`)})))}getFeatures(e=!1){if(!this.terradraw)return;let t={type:`FeatureCollection`,features:(this.terradraw?.getSnapshot()).filter(e=>e.properties.mode!==`select`)};return e===!0&&(t.features=t.features.filter(e=>e.properties.selected===!0)),t}cleanStyle(e,t){return ri(e,t,ni,this.options.adapterOptions?.prefixId)}showDeleteConfirmationDialog(e){let t=new ii(`maplibre-terradraw-delete-confirmation-dialog`,`Delete All Features`);t.create(document.body,n=>{let r=document.createElement(`p`);r.textContent=`Are you sure you want to delete all features?`,n.appendChild(r);let i=document.createElement(`div`);i.classList.add(`dialog-buttons`);let a=document.createElement(`button`);a.type=`button`,a.textContent=`Cancel`,a.classList.add(`dialog-button-cancel`),a.addEventListener(`click`,()=>{t.close()});let o=document.createElement(`button`);return o.type=`button`,o.textContent=`Delete`,o.classList.add(`dialog-button-delete`),o.addEventListener(`click`,()=>{e(),t.close()}),i.appendChild(a),i.appendChild(o),n.appendChild(i),n}),t.open()}handleDeleteAllFeatures(){if(!this.terradraw||!this.terradraw.enabled)return;let e=()=>{this.terradraw?.clear(),this.resetActiveMode(),this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature(),this.dispatchEvent(`feature-deleted`)};this.options.showDeleteConfirmation===!0?this.showDeleteConfirmationDialog(e):e()}handleDeleteSelectedFeatures(){if(!this.terradraw||!this.terradraw.enabled)return;let e=(this.terradraw?.getSnapshot()).filter(e=>e.properties.selected===!0);if(e.length>0){let t=e.map(e=>e.id);this.terradraw.removeFeatures(t);for(let e of t)this.terradraw.deselectFeature(e);this.dispatchEvent(`feature-deleted`,{deletedIds:t})}this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature()}handleDownload(){let e=this.getFeatures(!1),t=`data:application/json;charset=utf-8,`+encodeURIComponent(JSON.stringify(e)),n=document.createElement(`a`);n.setAttribute(`href`,t),n.setAttribute(`download`,`data.geojson`),document.body.appendChild(n),n.click(),n.remove()}toggleButtonsWhenNoFeature(){if(!this.controlContainer)return;let e=(this.terradraw?.getSnapshot())?.filter(e=>e.properties.mode!==`select`),t=!!(e&&e.length>0),n=[`maplibregl-terradraw-${this.cssPrefix}add-select-button`,`maplibregl-terradraw-${this.cssPrefix}download-button`,`maplibregl-terradraw-${this.cssPrefix}delete-button`];for(let e of n){let n=this.controlContainer.getElementsByClassName(e);for(let e=0;e<n.length;e++){let r=n.item(e);r&&(r.disabled=!t)}}}toggleDeleteSelectionButton(){let e=this.terradraw?.enabled||!1,t=this.terradraw?.getMode(),n=this.getFeatures(!1),r=n&&n.features.length>0,i=r&&e&&t===`select`,a=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}delete-selection-button`);for(let e=0;e<a.length;e++){let t=a.item(e);t&&(i?t.classList.remove(`hidden-delete-selection`):t.classList.add(`hidden-delete-selection`))}if(!r){let e=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-select-button`);for(let t=0;t<e.length;t++){let n=e.item(t);n&&n.classList.remove(`active`)}}}clearExtendedFeatures(e,t=void 0){if(this.map)for(let n of e){let e=this.map.getStyle().sources[n];e&&typeof e.data!=`string`&&e.data.type===`FeatureCollection`&&(t===void 0?e.data.features=[]:e.data.features=e.data.features.filter(e=>e.properties?.originalId?!t.includes(e.properties.originalId):!t.includes(e.id)),this.map.getSource(n)?.setData(e.data))}}},oi={base:Oe,ctc:_e,graph:Re,geojson:Ve,draw:class{constructor(e){this.drawControl=null,this.changeTimer=null,this.lastFeatureCount=0,this.forcedCoordinate=null,this.mapInstance=e.map}async addToMap(e=!0){this.drawControl||(this.drawControl=new ai({open:e}),this.mapInstance.addControl(this.drawControl,`top-right`),await new Promise(e=>{this.mapInstance.isStyleLoaded()?e():this.mapInstance.once(`idle`,()=>e())}),this.bindEvents())}bindEvents(){if(!this.drawControl)return;let e=this.drawControl.getTerraDrawInstance();e.on(`change`,()=>{let t=e.getSnapshot(),n=this.toGeoJSON(t);t.length<this.lastFeatureCount?this.onDeleteCallback?.(n):t.length>this.lastFeatureCount&&this.onFinishCallback?.(n),this.lastFeatureCount=t.length,this.changeTimer&&clearTimeout(this.changeTimer),this.changeTimer=setTimeout(()=>{this.onChangeCallback?.(n)},50)}),e.on(`select`,e=>this.onSelectCallback?.(e)),e.on(`deselect`,()=>this.onSelectCallback?.(null))}toGeoJSON(e){return{type:`FeatureCollection`,features:e.map(e=>({type:`Feature`,geometry:e.geometry,properties:{...e.properties||{},id:e.id}}))}}changeMode(e){if(!this.drawControl)return;let t=this.drawControl.getTerraDrawInstance();if(e===`undo`){t.undo?.();return}if(e===`redo`){t.redo?.();return}if(e===`download`){this.downloadGeoJSON();return}t.setMode(e)}setEnabled(e){if(!this.drawControl)return;let t=this.drawControl.getTerraDrawInstance();e?t.setMode(`select`):t.setMode(`render`)}getFeatureById(e){if(this.drawControl)return this.drawControl.getTerraDrawInstance().getSnapshot().find(t=>t.id===e)}deleteFeatureById(e){if(!this.drawControl)return;let t=this.drawControl.getTerraDrawInstance(),n=Array.isArray(e)?e:[e];t.removeFeatures(n)}updateModeStyles(e,t){this.drawControl&&this.drawControl.getTerraDrawInstance().updateModeOptions(e,{styles:t})}drawWithForcedCoordinates(e,t){if(!this.drawControl)return;let n=this.drawControl.getTerraDrawInstance(),r;e===`point`?r={type:`Point`,coordinates:t[0]}:e===`linestring`?r={type:`LineString`,coordinates:t}:e===`polygon`&&(r={type:`Polygon`,coordinates:[[...t,t[0]]]}),r&&n.addFeatures([{type:`Feature`,geometry:r,properties:{}}])}addFeatures(e){if(!this.drawControl||!e.features.length)return;let t=this.drawControl.getTerraDrawInstance();t.addFeatures(e.features),this.lastFeatureCount=t.getSnapshot().length}clear(){this.drawControl&&(this.drawControl.getTerraDrawInstance().clear(),this.lastFeatureCount=0)}downloadGeoJSON(){let e=this.toGeoJSON(this.drawControl?.getTerraDrawInstance().getSnapshot()||[]),t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`draw_data_${Date.now()}.geojson`,r.click(),URL.revokeObjectURL(n)}destroy(){this.drawControl&&(this.changeTimer&&clearTimeout(this.changeTimer),this.mapInstance.removeControl(this.drawControl),this.drawControl=null,this.onFinishCallback=void 0,this.onChangeCallback=void 0,this.onDeleteCallback=void 0,this.onSelectCallback=void 0)}setOnFinish(e){this.onFinishCallback=e}setOnChange(e){this.onChangeCallback=e}setOnDelete(e){this.onDeleteCallback=e}setOnSelect(e){this.onSelectCallback=e}}},si={ctc:(e,t,n)=>({id:`ctc`,sourceUrl:t,layers:n,sourceLayers:n.map(t=>t===`switch_loc`?`${e}_SG_t_${t}`:`${e}_SG_t_${t}_graph`)}),raster:e=>({id:`raster`,sourceUrl:e,zoom:20}),geom:(e,t,n)=>({id:`geom`,sourceUrl:t,layers:n,sourceLayers:n.map(t=>t===`switch_loc`?`${e}_t_${t}`:`${e}_t_${t}_geom`)}),graph:(e,t,n)=>({id:`graph`,sourceUrl:t,layers:n,sourceLayers:n.map(t=>t===`switch_loc`?`${e}_t_${t}`:`${e}_t_${t}_graph`)}),geojson:e=>({id:e}),rswp:e=>({id:`rswp`,sourceUrl:e}),mbtiles:(e,t)=>({id:`mbtiles`,sourceUrl:e,layers:t,sourceLayers:t.map(e=>`t_${e}_graph`)}),rage:(e,t,n,r)=>({id:`geom`,subSourceId:`raster`,sourceUrl:e,subSourceUrl:t,layers:r,sourceLayers:r.map(e=>e===`switch_loc`?`${n}_t_${e}`:`${n}_t_${e}_geom`)})};function ci(e,t,n){let r=BigInt(e),i=BigInt(t),a=BigInt(n),o=r*r*i^a;o===0n&&(o=3735928559n);let s=o;s^=s<<11n,s^=s>>5n,s^=s<<13n,s===0n&&(s=3405691582n);let c=s,l=s^s<<16n,u=s^s>>16n;return{z:r^c,x:i^l,y:a^u}}function li(e){e.map.setTransformRequest((e,t)=>{if(t!==`Tile`)return{url:e};let n=/^https?:\/\//i.test(e)?e:`${window.location.origin}${e}`,r=new URL(n),i=r.pathname.split(`/`).filter(e=>e);if(i.length>=3){let e=Number(i[i.length-3]),t=Number(i[i.length-2]),n=i[i.length-1],a=n.includes(`.`)?n.split(`.`).pop():`pbf`,o=Number(n.replace(/\.(pbf|png)$/i,``));if(Number.isInteger(e)&&e>=0&&Number.isInteger(t)&&t>=0&&Number.isInteger(o)&&o>=0){let n=ci(e,t,o),s=i.slice(0,i.length-3).join(`/`);return{url:`${r.protocol}//${r.host}/${s}/${n.z}/${n.x}/${n.y}.${a}`}}}return{url:e}})}var ui=20037508.34,di=(e,t)=>[e/ui*180,Math.atan(Math.exp(t/ui*Math.PI))*360/Math.PI-90],fi=e=>typeof e[0]==`number`?di(e[0],e[1]):e.map(fi),pi=e=>e?.features?{...e,features:e.features.map(e=>({...e,geometry:{...e.geometry,coordinates:fi(e.geometry.coordinates)}}))}:e,mi=class{constructor(e){this.stashFeatures=new Map;let t={version:8,sources:{},layers:[]};this.map=new l.default.Map({container:e,style:t,center:[0,0],zoom:14}),oi.base(this),this.map.on(`load`,()=>{this.drawTool=new oi.draw(this)})}initMap(e){let t=async()=>{try{if(console.log(`开始构建业务地图: ${e.id}`),Array.isArray(e.source)?e.source.forEach((e,t)=>{this.map.addSource(this.mapConfigs.sourceLayers[t],e)}):this.map.getSource(e.id)?console.warn(`地图源已存在,跳过添加: ${e.id}`):this.map.addSource(e.id,e.source),e.subSourceId&&(this.map.getSource(e.subSourceId)?console.warn(`地图源已存在,跳过添加: ${e.subSourceId}`):this.map.addSource(e.subSourceId,e.subSource)),(await E()).forEach(e=>{this.map.hasImage(e.id)?console.warn(`图标已存在,跳过添加: ${e.id}`):this.map.addImage(e.id,e.image)}),e.layers){let t=0;e.layers.forEach(e=>{this.map.getLayer(e.id)?console.debug(`图层已存在: ${e.id}`):(this.map.addLayer(e),t++)})}let t=this.map.getStyle().sources,n=Object.keys(t);console.log(`源列表 (${n.length}):`,n,t);let r=this.map.getStyle().layers,i=r.map(e=>e.id);console.log(`图层列表 (${i.length}):`,r);let a=this.map.listImages();console.log(`图标列表 (${a.length}):`,a),console.groupEnd(),console.log(`地图构建全部完成: ${e.id}`)}catch(t){console.error(`地图初始化失败: ${e.id}`,t),t instanceof Error&&console.error(`错误详情: ${t.message}`)}};this.map.loaded()?t():this.map.on(`load`,t),this.map.once(`idle`,()=>{setTimeout(()=>{this.stashAllFeature()},800)})}createCTCMap(e,t,n){this.mapConfigs=si.ctc(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.ctc(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.ctc(this)}createCTCEncryptedMap(e,t,n){li(this),this.mapConfigs=si.ctc(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.ctc(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.ctc(this)}createRSWPMap(e){let t=si.rswp(e),n=D.raster(t.sourceUrl),r=pe.raster(t.id),i=si.geojson(`rswp-geojson`),a=D.geojson(),o={id:t.id,source:n,subSourceId:i.id,subSource:a,layers:r};this.mapConfigs=t,this.mapConfigs.subSourceId=i.id,this.initMap(o)}createGraphMap(e,t,n){this.mapConfigs=si.graph(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.graph(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.graph(this)}createGraphEncryptedMap(e,t,n){li(this),this.mapConfigs=si.graph(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.ctc(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.ctc(this)}createGeomMap(e,t,n){this.mapConfigs=si.geom(e,t,n);let r=D.geom(this.mapConfigs.sourceUrl),i=pe.geom(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a)}createGeomEncryptedMap(e,t,n){li(this),this.mapConfigs=si.geom(e,t,n);let r=D.geom(this.mapConfigs.sourceUrl),i=pe.geom(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a)}async createGeoJsonStationMap(e,t,n){let r=e.map(e=>`geojson_${e}`);this.mapConfigs=si.geojson(`geojson`),this.mapConfigs.layers=e,this.mapConfigs.sourceLayers=r;let i=await Promise.all(e.map(async(e,n)=>{let i=r[n];if(this.map.getSource(i))return;let a=t[n],o;return o=pi(typeof a==`string`?await(await fetch(a)).json():a),D.geojson(o)})),a={id:this.mapConfigs.id,source:i,layers:pe.geojson(e,r)};this.initMap(a),oi.geojson(this)}createRasterMap(e){this.mapConfigs=si.raster(e);let t=D.raster(this.mapConfigs.sourceUrl),n=pe.raster(this.mapConfigs.id),r={id:this.mapConfigs.id,source:t,layers:n};this.initMap(r)}createEncryptedRasterMap(e){li(this),this.mapConfigs=si.raster(e);let t=D.raster(this.mapConfigs.sourceUrl),n=pe.raster(this.mapConfigs.id),r={id:this.mapConfigs.id,source:t,layers:n};this.initMap(r)}createRAGEMap(e,t,n){let r=[`track`,`signal`,`bumper`,`prevention`];li(this),this.mapConfigs=si.rage(e,t,n,r);let i=D.geom(this.mapConfigs.sourceUrl),a=D.raster(this.mapConfigs.subSourceUrl),o=pe.geom(this.mapConfigs),s=[...pe.raster(this.mapConfigs.subSourceId),...o],c={id:this.mapConfigs.id,source:i,subSourceId:this.mapConfigs.subSourceId,subSource:a,layers:s};this.initMap(c)}getMap(){return this.map}getMapConfigs(){return this.mapConfigs}stashAllFeature(){if(!this.mapConfigs)return;let e=this.mapConfigs.sourceLayers,t=this.mapConfigs.id;this.stashFeatures.clear(),e?.forEach(e=>{e.includes(`prevention`)||this.map.querySourceFeatures(t,{sourceLayer:e}).forEach(t=>{if(!t.properties.code)return;let n={sourceLayer:e};this.stashFeatures.set(t.properties.code,n)})}),(this.mapConfigs.layers??[]).forEach(e=>{if(e===`prevention`)return;let t=`geojson_${e}`;this.map.getSource(t)&&this.map.querySourceFeatures(t).forEach(e=>{let n=e.properties?.code;n&&!this.stashFeatures.get(n)&&this.stashFeatures.set(n,{sourceLayer:t})})})}updateFeatureState(e,t){if(!this.stashFeatures.get(e))return;Object.assign(this.stashFeatures.get(e),t);let n=this.stashFeatures.get(e);if(n.sourceLayer?.startsWith(`geojson_`))this.map.setFeatureState({source:n.sourceLayer,id:e},n);else{if(!this.mapConfigs)return;this.map.setFeatureState({source:this.mapConfigs.id,sourceLayer:n.sourceLayer,id:e},n)}}};e.TeeeMap=mi,e.default=mi});
761
+ (`,[`to-string`,[`get`,`costingModel`]],`)`],[`concat`,[`to-string`,[`get`,`text`]]]],"symbol-placement":`point`,"text-size":[`interpolate`,[`linear`],[`zoom`],5,10,10,12,13,14,14,16,18,18],"text-overlap":`always`,"text-variable-anchor":[`left`,`right`,`top`,`bottom`],"text-radial-offset":.5,"text-justify":`left`,"text-letter-spacing":.05},paint:{"text-halo-color":`#F7F7F7`,"text-halo-width":2,"text-color":`#232E3D`}},routingLineLayerNodeSpec:{id:`{prefix}-routing-node`,type:`circle`,source:`{prefix}-routing-source`,filter:[`==`,`$type`,`Point`],layout:{},paint:{"circle-radius":3,"circle-color":[`case`,[`==`,[`get`,`text`],`Start`],`#0000FF`,[`==`,[`get`,`text`],`Goal`],`#FFFF00`,`#FFFFFF`],"circle-stroke-color":`#000000`,"circle-stroke-width":1}},timeIsochronePolygonLayerSpec:{id:`{prefix}-time-isochrone-polygon`,type:`fill`,source:`{prefix}-time-isochrone-source`,layout:{},paint:{"fill-color":[`get`,`fillColor`],"fill-opacity":[`get`,`fillOpacity`]}},timeIsochroneLineLayerSpec:{id:`{prefix}-time-isochrone-line`,type:`line`,source:`{prefix}-time-isochrone-source`,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":[`get`,`fillColor`],"line-width":3}},timeIsochroneLabelLayerSpec:{id:`{prefix}-time-isochrone-label`,type:`symbol`,source:`{prefix}-time-isochrone-source`,layout:{"symbol-placement":`line`,"text-pitch-alignment":`viewport`,"text-field":[`concat`,[`get`,`contour`],` `,`min`],"text-size":12,"symbol-spacing":100,"text-max-angle":45},paint:{"text-color":`rgb(0, 0, 0)`,"text-halo-width":1,"text-halo-color":`rgb(255, 255, 255)`}},distanceIsochronePolygonLayerSpec:{id:`{prefix}-distance-isochrone-polygon`,type:`fill`,source:`{prefix}-distance-isochrone-source`,layout:{},paint:{"fill-color":[`get`,`fillColor`],"fill-opacity":[`get`,`fillOpacity`]}},distanceIsochroneLineLayerSpec:{id:`{prefix}-distance-isochrone-line`,type:`line`,source:`{prefix}-distance-isochrone-source`,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":[`get`,`fillColor`],"line-width":3}},distanceIsochroneLabelLayerSpec:{id:`{prefix}-distance-isochrone-label`,type:`symbol`,source:`{prefix}-distance-isochrone-source`,layout:{"symbol-placement":`line`,"text-pitch-alignment":`viewport`,"text-field":[`concat`,[`get`,`contour`],` `,`km`],"text-size":12,"symbol-spacing":100,"text-max-angle":45},paint:{"text-color":`rgb(0, 0, 0)`,"text-halo-width":1,"text-halo-color":`rgb(255, 255, 255)`}}},Zr=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20xmlns:dc='http://purl.org/dc/elements/1.1/'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20inkscape:version='1.0%20(4035a4fb49,%202020-05-01)'%20sodipodi:docname='poi.svg'%20id='svg4460'%20height='100'%20width='100'%20version='1.1'%3e%3csodipodi:namedview%20inkscape:document-rotation='0'%20inkscape:current-layer='svg4460'%20inkscape:window-maximized='1'%20inkscape:window-y='-8'%20inkscape:window-x='-8'%20inkscape:cy='70.031285'%20inkscape:cx='-78.460726'%20inkscape:zoom='2.02'%20showgrid='false'%20id='namedview11'%20inkscape:window-height='1017'%20inkscape:window-width='1920'%20inkscape:pageshadow='2'%20inkscape:pageopacity='0'%20guidetolerance='10'%20gridtolerance='10'%20objecttolerance='10'%20borderopacity='1'%20bordercolor='%23666666'%20pagecolor='%23ffffff'%20/%3e%3cdefs%20id='defs4462'%20/%3e%3cmetadata%20id='metadata4465'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3cdc:title%3e%3c/dc:title%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cpath%20d='M%2050.001528,3.3861402e-7%20C%2030.763177,3.3861402e-7%2015,15.718144%2015,34.901534%20c%200,7.432782%202.373565,14.339962%206.391689,20.019029%20l%2024.338528,42.073163%20c%203.40849,4.452814%205.674917,3.607154%208.509014,-0.23458%20L%2081.083105,51.075788%20C%2081.625418,50.0948%2082.050328,49.050173%2082.421327,47.983517%2084.078241,43.936622%2085.000002,39.521943%2085,34.901534%2085,15.718144%2069.23988,3.3861402e-7%2050.001528,3.3861402e-7%20Z%20m%200,16.35400066138598%20c%2010.359296,0%2018.597616,8.21783%2018.597618,18.547533%200,10.329703%20-8.238322,18.544487%20-18.597618,18.544487%20-10.359299,0%20-18.600672,-8.214784%20-18.600672,-18.544487%200,-10.329703%208.241373,-18.547533%2018.600672,-18.547533%20z'%20style='fill:%233FB1CE;stroke-width:4.26019'%20id='path4135'%20/%3e%3c/svg%3e`,Qr=(e,t)=>{let n=t.updateType;return n===`finish`||n===`commit`?mr(e):{valid:!0}},$r=()=>({render:new Sn({modeName:`render`,styles:{}}),point:new hn({editable:!0}),marker:new Nr({editable:!0,styles:{markerUrl:Zr,markerWidth:27,markerHeight:27}}),linestring:new cn({editable:!0}),polygon:new vn({editable:!0,validation:Qr}),rectangle:new xn,"angled-rectangle":new vr,circle:new At,freehand:new Ft,"freehand-linestring":new Ar,sensor:new Tr,sector:new Sr,select:new Wn({flags:{point:{feature:{draggable:!0}},marker:{feature:{draggable:!0}},polygon:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},linestring:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},freehand:{feature:{draggable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},"freehand-linestring":{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},circle:{feature:{draggable:!0,coordinates:{resizable:`center`,deletable:!1,midpoints:!1}}},rectangle:{feature:{draggable:!0,rotateable:!0,coordinates:{resizable:`opposite`,deletable:!1,midpoints:!1}}},"angled-rectangle":{feature:{draggable:!0,rotateable:!0,coordinates:{resizable:`opposite`,deletable:!1,midpoints:!1}}},sensor:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}},sector:{feature:{draggable:!0,rotateable:!0,scaleable:!0,coordinates:{midpoints:!0,draggable:!0,deletable:!0}}}}}),delete:new Sn({modeName:`delete`,styles:{}}),"delete-selection":new Sn({modeName:`delete-selection`,styles:{}}),download:new Sn({modeName:`download`,styles:{}}),undo:new Sn({modeName:`undo`,styles:{}}),redo:new Sn({modeName:`redo`,styles:{}})}),ei=6371008.8;ei*100,ei*100,360/(2*Math.PI),ei*3.28084,ei*39.37,ei/1e3,ei/1e3,ei/1609.344,ei*1e3,ei*1e3,ei/1852,ei*1.0936,ei*ei/2,Math.PI/180;var ti=e=>e.charAt(0).toUpperCase()+e.slice(1),ni=[`{prefix}-point`,`{prefix}-point-lower`,`{prefix}-linestring`,`{prefix}-polygon`,`{prefix}-polygon-outline`];[...ni,Yr.polygonLayerSpec?.source,Yr.lineLayerLabelSpec?.source],[...ni,Xr.routingLineLayerNodeLabelSpec?.source,Xr.routingLineLayerNodeSpec?.source,Xr.timeIsochronePolygonLayerSpec?.source,Xr.timeIsochroneLineLayerSpec?.source,Xr.timeIsochroneLabelLayerSpec?.source,Xr.distanceIsochronePolygonLayerSpec?.source,Xr.distanceIsochroneLineLayerSpec?.source,Xr.distanceIsochroneLabelLayerSpec?.source];var ri=(e,t,n=ni,r=`td`)=>{n=n.map(e=>e.replace(`{prefix}`,r));let i=JSON.parse(JSON.stringify(e));return t&&(t.onlyTerraDrawLayers===!0?(i.layers=i.layers.filter(e=>`source`in e&&n.includes(e.source)),Object.keys(i.sources).forEach(e=>{n.includes(e)||delete i.sources[e]})):t.excludeTerraDrawLayers===!0&&(i.layers=i.layers.filter(e=>`source`in e&&!n.includes(e.source)||e.type===`background`),Object.keys(i.sources).forEach(e=>{n.includes(e)&&delete i.sources[e]}))),i},ii=class{className;dialog;title;constructor(e,t){this.className=e,this.title=t}create(e,t){let n=document.getElementsByClassName(this.className);n.length>0&&Array.from(n).forEach(e=>{e.remove()}),this.dialog=document.createElement(`dialog`),this.dialog.classList.add(this.className);let r=document.createElement(`div`);r.classList.add(`dialog-header`);let i=document.createElement(`h3`);i.textContent=this.title,i.classList.add(`dialog-title`),r.appendChild(i);let a=document.createElement(`button`);a.type=`button`,a.classList.add(`close-button`),a.innerHTML=`×`,a.setAttribute(`aria-label`,`Close dialog`),a.addEventListener(`click`,()=>{this.close()}),r.appendChild(a),this.dialog.appendChild(r);let o=document.createElement(`div`);o.classList.add(`content`),this.dialog.appendChild(t(o)),this.dialog.addEventListener(`click`,e=>{let t=e.target?.getBoundingClientRect();t&&(t.left>e.clientX||t.right<e.clientX||t.top>e.clientY||t.bottom<e.clientY)&&this.close()}),e.appendChild(this.dialog)}open(){this.dialog?.showModal()}close(){this.dialog?.close()}createSegmentButtons(e,t,n=()=>{}){let r=document.createElement(`div`);return r.classList.add(`segment-buttons`),e.forEach(e=>{let i=document.createElement(`button`);i.type=`button`,i.classList.add(`segment-button`),i.value=e.value,i.textContent=e.label,e.value===t&&i.classList.add(`active`),i.addEventListener(`click`,()=>{r.querySelectorAll(`.segment-button`).forEach(e=>e.classList.remove(`active`)),i.classList.add(`active`),n(i.value)}),r.appendChild(i)}),r}};2*Math.PI*6378137/2;var ai=class{controlContainer;map;modeButtons={};_isExpanded=!1;_cssPrefix=``;get isExpanded(){return this._isExpanded}get cssPrefix(){return this._cssPrefix}set isExpanded(e){this._isExpanded=e;let t=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-control`);for(let e=0;e<t.length;e++){let n=t.item(e);n&&(this.isExpanded?n.classList.remove(`hidden`):n.classList.add(`hidden`))}let n=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}render-button`);n&&n.length>0&&(this.isExpanded?n.item(0)?.classList.add(`enabled`):(n.item(0)?.classList.remove(`enabled`),this.resetActiveMode())),this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature(),this.isExpanded?this.dispatchEvent(`expanded`):this.dispatchEvent(`collapsed`)}get showDeleteConfirmation(){return this.options.showDeleteConfirmation===!0}set showDeleteConfirmation(e){this.options.showDeleteConfirmation=e}terradraw;options;events={};defaultMode=`render`;constructor(e){this.modeButtons={},this.options={...Jr,modes:[...Jr.modes??[]],...e};let t=this.options.adapterOptions?.prefixId??`td`;this.options.adapterOptions||(this.options.adapterOptions={}),this.options.adapterOptions?.prefixId||(this.options.adapterOptions.prefixId=t),this.options.undoRedo||(this.options.undoRedo={modeLevel:new Wr({maxStackSize:100}),sessionLevel:new Gr({maxStackSize:100}),keyboardShortcuts:new Lr})}getDefaultPosition(){return`top-right`}onAdd(e){if(this.options&&this.options.modes&&this.options.modes.length===0)throw Error(`At least a mode must be enabled.`);this.map=e;let t=$r(),n=[];return this.options?.modes?.forEach(e=>{if(this.options.modeOptions&&this.options.modeOptions[e]){let r=this.options.modeOptions[e];if(e===`select`){let n=t[e];if(n){let e=n.flags;Object.keys(e).forEach(t=>{r.flags[t]||(r.flags[t]=e[t])})}}n.push(r)}else t[e]&&n.push(t[e])}),n.forEach(e=>{e.state!==`unregistered`&&(e._state=`unregistered`)}),this.options?.modes?.includes(`render`)||(n.push(new Sn({modeName:`default`,styles:{}})),this.defaultMode=`default`),this.isExpanded=this.options.open===!0,this.terradraw=new qr({adapter:new Y({map:e,...this.options.adapterOptions}),modes:n,undoRedo:this.options.undoRedo}),this.map?.loaded()?this.terradraw.start():this.map?.once(`load`,()=>{this.terradraw?.start()}),this.controlContainer=document.createElement(`div`),this.controlContainer.classList.add(`maplibregl-ctrl`),this.controlContainer.classList.add(`maplibregl-ctrl-group`),n.forEach(e=>{e.mode!==`default`&&this.addTerradrawButton(e.mode)}),Object.values(this.modeButtons).forEach(e=>{this.controlContainer?.appendChild(e)}),this.toggleButtonsWhenNoFeature(),this.terradraw?.on(`finish`,this.toggleButtonsWhenNoFeature.bind(this)),this.terradraw?.on(`history`,this.handleHistoryChange.bind(this)),this.map.once(`idle`,()=>{this.toggleButtonsWhenNoFeature()}),this.controlContainer}onRemove(){!this.controlContainer||!this.controlContainer.parentNode||!this.map||(this.deactivate(),this.modeButtons={},this.terradraw=void 0,this.map=void 0,this.controlContainer.parentNode.removeChild(this.controlContainer))}on(e,t){this.events[e]?this.events[e].push(t):this.events[e]=[t]}off(e,t){if(!this.events[e])return;let n=this.events[e].findIndex(e=>e===t);n!==-1&&this.events[e].splice(n,1)}dispatchEvent(e,t){this.events[e]&&this.events[e].forEach(e=>{let n=(this.terradraw?.getSnapshot())?.filter(e=>e.properties.selected===!0);e({feature:n,mode:this.terradraw?.getMode(),...t})})}activate(){this.terradraw&&(this.terradraw.enabled||this.terradraw.start())}deactivate(){this.terradraw&&this.terradraw.enabled&&(this.resetActiveMode(),this.dispatchEvent(`mode-changed`),this.terradraw.stop())}handleModeChange(e,t){let n=t.setMode(e);return this.syncButtonStates(e),e!==this.defaultMode&&this.activate(),this.dispatchEvent(`mode-changed`),n}syncButtonStates(e){if(!this.controlContainer)return;let t=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-control`);for(let e=0;e<t.length;e++){let n=t.item(e);n&&n.classList.remove(`active`)}if(e!==this.defaultMode&&e!==`render`){let t=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-${e}-button`);t&&t.length>0&&t[0].classList.add(`active`)}this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature()}getTerraDrawInstance(){return this.terradraw?new Proxy(this.terradraw,{get:(e,t,n)=>t===`setMode`?t=>this.handleModeChange(t,e):t===`clearUndoRedoHistory`?()=>{e.clearUndoRedoHistory(),this.handleHistoryChange({undoSize:0,redoSize:0})}:Reflect.get(e,t,n)}):this.terradraw}handleHistoryChange(e){if(!this.controlContainer)return;let t=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}undo-button`);for(let n=0;n<t.length;n++){let r=t.item(n);r&&(r.disabled=e.undoSize===0)}let n=this.controlContainer.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}redo-button`);for(let t=0;t<n.length;t++){let r=n.item(t);r&&(r.disabled=e.redoSize===0)}}toggleEditor(){this.terradraw&&(this.isExpanded=!this.isExpanded)}resetActiveMode(){this.terradraw&&(this.terradraw.enabled||this.terradraw.start(),this.terradraw?.setMode(this.defaultMode),this.syncButtonStates(this.defaultMode))}addTerradrawButton(e){let t=document.createElement(`button`);t.type=`button`,this.modeButtons[e]=t,e===`render`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),this.isExpanded&&t.classList.add(`enabled`),t.type=`button`,t.title=ti(`expand or collapse drawing tool`),t.addEventListener(`click`,this.toggleEditor.bind(this))):(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}add-control`),this.isExpanded||t.classList.add(`hidden`),t.title=ti(e.replace(/-/g,` `)),e===`delete`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.addEventListener(`click`,this.handleDeleteAllFeatures.bind(this))):e===`delete-selection`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.classList.add(`hidden-delete-selection`),t.addEventListener(`click`,this.handleDeleteSelectedFeatures.bind(this))):e===`download`?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.addEventListener(`click`,this.handleDownload.bind(this))):[`undo`,`redo`].includes(e)?(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}${e}-button`),t.disabled=!0,t.addEventListener(`click`,()=>{this.terradraw&&(e===`undo`?this.terradraw.undo():this.terradraw.redo())})):(t.classList.add(`maplibregl-terradraw-${this.cssPrefix}add-${e}-button`),t.addEventListener(`click`,()=>{if(!this.terradraw)return;let n=t.classList.contains(`active`);this.activate(),this.resetActiveMode(),n||(this.terradraw.setMode(e),this.syncButtonStates(e)),this.dispatchEvent(`mode-changed`)})))}getFeatures(e=!1){if(!this.terradraw)return;let t={type:`FeatureCollection`,features:(this.terradraw?.getSnapshot()).filter(e=>e.properties.mode!==`select`)};return e===!0&&(t.features=t.features.filter(e=>e.properties.selected===!0)),t}cleanStyle(e,t){return ri(e,t,ni,this.options.adapterOptions?.prefixId)}showDeleteConfirmationDialog(e){let t=new ii(`maplibre-terradraw-delete-confirmation-dialog`,`Delete All Features`);t.create(document.body,n=>{let r=document.createElement(`p`);r.textContent=`Are you sure you want to delete all features?`,n.appendChild(r);let i=document.createElement(`div`);i.classList.add(`dialog-buttons`);let a=document.createElement(`button`);a.type=`button`,a.textContent=`Cancel`,a.classList.add(`dialog-button-cancel`),a.addEventListener(`click`,()=>{t.close()});let o=document.createElement(`button`);return o.type=`button`,o.textContent=`Delete`,o.classList.add(`dialog-button-delete`),o.addEventListener(`click`,()=>{e(),t.close()}),i.appendChild(a),i.appendChild(o),n.appendChild(i),n}),t.open()}handleDeleteAllFeatures(){if(!this.terradraw||!this.terradraw.enabled)return;let e=()=>{this.terradraw?.clear(),this.resetActiveMode(),this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature(),this.dispatchEvent(`feature-deleted`)};this.options.showDeleteConfirmation===!0?this.showDeleteConfirmationDialog(e):e()}handleDeleteSelectedFeatures(){if(!this.terradraw||!this.terradraw.enabled)return;let e=(this.terradraw?.getSnapshot()).filter(e=>e.properties.selected===!0);if(e.length>0){let t=e.map(e=>e.id);this.terradraw.removeFeatures(t);for(let e of t)this.terradraw.deselectFeature(e);this.dispatchEvent(`feature-deleted`,{deletedIds:t})}this.toggleDeleteSelectionButton(),this.toggleButtonsWhenNoFeature()}handleDownload(){let e=this.getFeatures(!1),t=`data:application/json;charset=utf-8,`+encodeURIComponent(JSON.stringify(e)),n=document.createElement(`a`);n.setAttribute(`href`,t),n.setAttribute(`download`,`data.geojson`),document.body.appendChild(n),n.click(),n.remove()}toggleButtonsWhenNoFeature(){if(!this.controlContainer)return;let e=(this.terradraw?.getSnapshot())?.filter(e=>e.properties.mode!==`select`),t=!!(e&&e.length>0),n=[`maplibregl-terradraw-${this.cssPrefix}add-select-button`,`maplibregl-terradraw-${this.cssPrefix}download-button`,`maplibregl-terradraw-${this.cssPrefix}delete-button`];for(let e of n){let n=this.controlContainer.getElementsByClassName(e);for(let e=0;e<n.length;e++){let r=n.item(e);r&&(r.disabled=!t)}}}toggleDeleteSelectionButton(){let e=this.terradraw?.enabled||!1,t=this.terradraw?.getMode(),n=this.getFeatures(!1),r=n&&n.features.length>0,i=r&&e&&t===`select`,a=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}delete-selection-button`);for(let e=0;e<a.length;e++){let t=a.item(e);t&&(i?t.classList.remove(`hidden-delete-selection`):t.classList.add(`hidden-delete-selection`))}if(!r){let e=document.getElementsByClassName(`maplibregl-terradraw-${this.cssPrefix}add-select-button`);for(let t=0;t<e.length;t++){let n=e.item(t);n&&n.classList.remove(`active`)}}}clearExtendedFeatures(e,t=void 0){if(this.map)for(let n of e){let e=this.map.getStyle().sources[n];e&&typeof e.data!=`string`&&e.data.type===`FeatureCollection`&&(t===void 0?e.data.features=[]:e.data.features=e.data.features.filter(e=>e.properties?.originalId?!t.includes(e.properties.originalId):!t.includes(e.id)),this.map.getSource(n)?.setData(e.data))}}},oi={base:Oe,ctc:_e,graph:Re,geojson:Ve,draw:class{constructor(e){this.drawControl=null,this.changeTimer=null,this.lastFeatureCount=0,this.forcedCoordinate=null,this.mapInstance=e.map}async addToMap(e=!0){this.drawControl||(this.drawControl=new ai({open:e}),this.mapInstance.addControl(this.drawControl,`top-right`),await new Promise(e=>{this.mapInstance.isStyleLoaded()?e():this.mapInstance.once(`idle`,()=>e())}),this.bindEvents())}bindEvents(){if(!this.drawControl)return;let e=this.drawControl.getTerraDrawInstance();e.on(`change`,()=>{let t=e.getSnapshot(),n=this.toGeoJSON(t);t.length<this.lastFeatureCount?this.onDeleteCallback?.(n):t.length>this.lastFeatureCount&&this.onFinishCallback?.(n),this.lastFeatureCount=t.length,this.changeTimer&&clearTimeout(this.changeTimer),this.changeTimer=setTimeout(()=>{this.onChangeCallback?.(n)},50)}),e.on(`select`,e=>this.onSelectCallback?.(e)),e.on(`deselect`,()=>this.onSelectCallback?.(null))}toGeoJSON(e){return{type:`FeatureCollection`,features:e.map(e=>({type:`Feature`,geometry:e.geometry,properties:{...e.properties||{},id:e.id}}))}}changeMode(e){if(!this.drawControl)return;let t=this.drawControl.getTerraDrawInstance();if(e===`undo`){t.undo?.();return}if(e===`redo`){t.redo?.();return}if(e===`download`){this.downloadGeoJSON();return}t.setMode(e)}setEnabled(e){if(!this.drawControl)return;let t=this.drawControl.getTerraDrawInstance();e?t.setMode(`select`):t.setMode(`render`)}getFeatureById(e){if(this.drawControl)return this.drawControl.getTerraDrawInstance().getSnapshot().find(t=>t.id===e)}deleteFeatureById(e){if(!this.drawControl)return;let t=this.drawControl.getTerraDrawInstance(),n=Array.isArray(e)?e:[e];t.removeFeatures(n)}updateModeStyles(e,t){this.drawControl&&this.drawControl.getTerraDrawInstance().updateModeOptions(e,{styles:t})}drawWithForcedCoordinates(e,t){if(!this.drawControl)return;let n=this.drawControl.getTerraDrawInstance(),r;e===`point`?r={type:`Point`,coordinates:t[0]}:e===`linestring`?r={type:`LineString`,coordinates:t}:e===`polygon`&&(r={type:`Polygon`,coordinates:[[...t,t[0]]]}),r&&n.addFeatures([{type:`Feature`,geometry:r,properties:{}}])}addFeatures(e){if(!this.drawControl||!e.features.length)return;let t=this.drawControl.getTerraDrawInstance();t.addFeatures(e.features),this.lastFeatureCount=t.getSnapshot().length}clear(){this.drawControl&&(this.drawControl.getTerraDrawInstance().clear(),this.lastFeatureCount=0)}downloadGeoJSON(){let e=this.toGeoJSON(this.drawControl?.getTerraDrawInstance().getSnapshot()||[]),t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`draw_data_${Date.now()}.geojson`,r.click(),URL.revokeObjectURL(n)}destroy(){this.drawControl&&(this.changeTimer&&clearTimeout(this.changeTimer),this.mapInstance.removeControl(this.drawControl),this.drawControl=null,this.onFinishCallback=void 0,this.onChangeCallback=void 0,this.onDeleteCallback=void 0,this.onSelectCallback=void 0)}setOnFinish(e){this.onFinishCallback=e}setOnChange(e){this.onChangeCallback=e}setOnDelete(e){this.onDeleteCallback=e}setOnSelect(e){this.onSelectCallback=e}}},si={ctc:(e,t,n)=>({id:`ctc`,sourceUrl:t,layers:n,sourceLayers:n.map(t=>t===`switch_loc`?`${e}_SG_t_${t}`:`${e}_SG_t_${t}_graph`)}),raster:e=>({id:`raster`,sourceUrl:e,zoom:20}),geom:(e,t,n)=>({id:`geom`,sourceUrl:t,layers:n,sourceLayers:n.map(t=>t===`switch_loc`?`${e}_t_${t}`:`${e}_t_${t}_geom`)}),graph:(e,t,n)=>({id:`graph`,sourceUrl:t,layers:n,sourceLayers:n.map(t=>t===`switch_loc`?`${e}_t_${t}`:`${e}_t_${t}_graph`)}),geojson:e=>({id:e}),rswp:e=>({id:`rswp`,sourceUrl:e}),mbtiles:(e,t)=>({id:`mbtiles`,sourceUrl:e,layers:t,sourceLayers:t.map(e=>`t_${e}_graph`)}),rage:(e,t,n,r)=>({id:`geom`,subSourceId:`raster`,sourceUrl:e,subSourceUrl:t,layers:r,sourceLayers:r.map(e=>e===`switch_loc`?`${n}_t_${e}`:`${n}_t_${e}_geom`)})};function ci(e,t,n){let r=BigInt(e),i=BigInt(t),a=BigInt(n),o=r*r*i^a;o===0n&&(o=3735928559n);let s=o;s^=s<<11n,s^=s>>5n,s^=s<<13n,s===0n&&(s=3405691582n);let c=s,l=s^s<<16n,u=s^s>>16n;return{z:r^c,x:i^l,y:a^u}}function li(e){e.map.setTransformRequest((e,t)=>{if(t!==`Tile`)return{url:e};let n=/^https?:\/\//i.test(e)?e:`${window.location.origin}${e}`,r=new URL(n),i=r.pathname.split(`/`).filter(e=>e);if(i.length>=3){let e=Number(i[i.length-3]),t=Number(i[i.length-2]),n=i[i.length-1],a=n.includes(`.`)?n.split(`.`).pop():`pbf`,o=Number(n.replace(/\.(pbf|png)$/i,``));if(Number.isInteger(e)&&e>=0&&Number.isInteger(t)&&t>=0&&Number.isInteger(o)&&o>=0){let n=ci(e,t,o),s=i.slice(0,i.length-3).join(`/`);return{url:`${r.protocol}//${r.host}/${s}/${n.z}/${n.x}/${n.y}.${a}`}}}return{url:e}})}var ui=20037508.34,di=(e,t)=>[e/ui*180,Math.atan(Math.exp(t/ui*Math.PI))*360/Math.PI-90],fi=e=>typeof e[0]==`number`?di(e[0],e[1]):e.map(fi),pi=e=>e?.features?{...e,features:e.features.map(e=>({...e,geometry:{...e.geometry,coordinates:fi(e.geometry.coordinates)}}))}:e,mi=class{constructor(e){this.stashFeatures=new Map;let t={version:8,sources:{},layers:[]};this.map=new l.default.Map({container:e,style:t,center:[0,0],zoom:14}),oi.base(this),this.map.on(`load`,()=>{this.drawTool=new oi.draw(this)})}initMap(e){let t=async()=>{try{if(console.log(`开始构建业务地图: ${e.id}`),Array.isArray(e.source)?e.source.forEach((e,t)=>{this.map.addSource(this.mapConfigs.sourceLayers[t],e)}):this.map.getSource(e.id)?console.warn(`地图源已存在,跳过添加: ${e.id}`):this.map.addSource(e.id,e.source),e.subSourceId&&(this.map.getSource(e.subSourceId)?console.warn(`地图源已存在,跳过添加: ${e.subSourceId}`):this.map.addSource(e.subSourceId,e.subSource)),(await E()).forEach(e=>{this.map.hasImage(e.id)?console.warn(`图标已存在,跳过添加: ${e.id}`):this.map.addImage(e.id,e.image)}),e.layers){let t=0;e.layers.forEach(e=>{this.map.getLayer(e.id)?console.debug(`图层已存在: ${e.id}`):(this.map.addLayer(e),t++)})}let t=this.map.getStyle().sources,n=Object.keys(t);console.log(`源列表 (${n.length}):`,n,t);let r=this.map.getStyle().layers,i=r.map(e=>e.id);console.log(`图层列表 (${i.length}):`,r);let a=this.map.listImages();console.log(`图标列表 (${a.length}):`,a),console.groupEnd(),console.log(`地图构建全部完成: ${e.id}`)}catch(t){console.error(`地图初始化失败: ${e.id}`,t),t instanceof Error&&console.error(`错误详情: ${t.message}`)}};this.map.loaded()?t():this.map.on(`load`,t),this.map.once(`idle`,()=>{setTimeout(()=>{this.stashAllFeature()},800)})}createCTCMap(e,t,n){this.mapConfigs=si.ctc(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.ctc(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.ctc(this)}createCTCEncryptedMap(e,t,n){li(this),this.mapConfigs=si.ctc(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.ctc(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.ctc(this)}createRSWPMap(e){let t=si.rswp(e),n=D.raster(t.sourceUrl),r=pe.raster(t.id),i=si.geojson(`rswp-geojson`),a=D.geojson(),o={id:t.id,source:n,subSourceId:i.id,subSource:a,layers:r};this.mapConfigs=t,this.mapConfigs.subSourceId=i.id,this.initMap(o)}createGraphMap(e,t,n){this.mapConfigs=si.graph(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.graph(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.graph(this)}createGraphEncryptedMap(e,t,n){li(this),this.mapConfigs=si.graph(e,t,n);let r=D.graph(this.mapConfigs.sourceUrl),i=pe.ctc(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a),oi.ctc(this)}createGeomMap(e,t,n){this.mapConfigs=si.geom(e,t,n);let r=D.geom(this.mapConfigs.sourceUrl),i=pe.geom(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a)}createGeomEncryptedMap(e,t,n){li(this),this.mapConfigs=si.geom(e,t,n);let r=D.geom(this.mapConfigs.sourceUrl),i=pe.geom(this.mapConfigs),a={id:this.mapConfigs.id,source:r,layers:i};this.initMap(a)}async createGeoJsonStationMap(e){let t=e.map(e=>e.name),n=t.map(e=>`geojson_${e}`);this.mapConfigs=si.geojson(`geojson`),this.mapConfigs.layers=t,this.mapConfigs.sourceLayers=n;let r=await Promise.all(e.map(async(e,t)=>{let r=n[t];if(this.map.getSource(r))return;let i=e.data,a;return a=pi(typeof i==`string`?await(await fetch(i)).json():i),D.geojson(a)})),i={id:this.mapConfigs.id,source:r,layers:pe.geojson(t,n)};this.initMap(i),oi.geojson(this)}createRasterMap(e){this.mapConfigs=si.raster(e);let t=D.raster(this.mapConfigs.sourceUrl),n=pe.raster(this.mapConfigs.id),r={id:this.mapConfigs.id,source:t,layers:n};this.initMap(r)}createEncryptedRasterMap(e){li(this),this.mapConfigs=si.raster(e);let t=D.raster(this.mapConfigs.sourceUrl),n=pe.raster(this.mapConfigs.id),r={id:this.mapConfigs.id,source:t,layers:n};this.initMap(r)}createRAGEMap(e,t,n){let r=[`track`,`signal`,`bumper`,`prevention`];li(this),this.mapConfigs=si.rage(e,t,n,r);let i=D.geom(this.mapConfigs.sourceUrl),a=D.raster(this.mapConfigs.subSourceUrl),o=pe.geom(this.mapConfigs),s=[...pe.raster(this.mapConfigs.subSourceId),...o],c={id:this.mapConfigs.id,source:i,subSourceId:this.mapConfigs.subSourceId,subSource:a,layers:s};this.initMap(c)}getMap(){return this.map}getMapConfigs(){return this.mapConfigs}stashAllFeature(){if(!this.mapConfigs)return;let e=this.mapConfigs.sourceLayers,t=this.mapConfigs.id;this.stashFeatures.clear(),e?.forEach(e=>{e.includes(`prevention`)||this.map.querySourceFeatures(t,{sourceLayer:e}).forEach(t=>{if(!t.properties.code)return;let n={sourceLayer:e};this.stashFeatures.set(t.properties.code,n)})}),(this.mapConfigs.layers??[]).forEach(e=>{if(e===`prevention`)return;let t=`geojson_${e}`;this.map.getSource(t)&&this.map.querySourceFeatures(t).forEach(e=>{let n=e.properties?.code;n&&!this.stashFeatures.get(n)&&this.stashFeatures.set(n,{sourceLayer:t})})})}updateFeatureState(e,t){if(!this.stashFeatures.get(e))return;Object.assign(this.stashFeatures.get(e),t);let n=this.stashFeatures.get(e);if(n.sourceLayer?.startsWith(`geojson_`))this.map.setFeatureState({source:n.sourceLayer,id:e},n);else{if(!this.mapConfigs)return;this.map.setFeatureState({source:this.mapConfigs.id,sourceLayer:n.sourceLayer,id:e},n)}}};e.TeeeMap=mi,e.default=mi});
package/index.d.ts CHANGED
@@ -7,17 +7,7 @@ import type { LayerSpecification, SourceSpecification } from 'maplibre-gl';
7
7
 
8
8
  export type MapType = 'graph' | 'geom' | 'ctc' | 'raster';
9
9
 
10
- export type LayerType =
11
- | 'background'
12
- | 'signal'
13
- | 'track'
14
- | 'track_circuit'
15
- | 'bumper'
16
- | 'switch'
17
- | 'switch_loc'
18
- | 'insulation'
19
- | 'label'
20
- | 'prevention';
10
+ export type LayerType = 'background' | 'signal' | 'track' | 'track_circuit' | 'bumper' | 'switch' | 'switch_loc' | 'insulation' | 'label' | 'prevention';
21
11
 
22
12
  // ─────────────────────────────────────────────
23
13
  // 联锁枚举
@@ -25,101 +15,101 @@ export type LayerType =
25
15
 
26
16
  /** 联锁信号机状态 */
27
17
  export enum InterLockSignal {
28
- RedLight = 1,
18
+ RedLight = 1,
29
19
  GreenLight = 2,
30
20
  WhiteLight = 3,
31
- BlueLight = 4,
32
- Unknown = 5,
21
+ BlueLight = 4,
22
+ Unknown = 5,
33
23
  }
34
24
 
35
25
  /** 联锁电路区段状态 */
36
26
  export enum InterLockCircuit {
37
- RedCircuit = 1,
38
- WhiteCircuit = 2,
27
+ RedCircuit = 1,
28
+ WhiteCircuit = 2,
39
29
  EqualRedCircuit = 3,
40
- GreyCircuit = 4,
41
- GreenCircuit = 5,
30
+ GreyCircuit = 4,
31
+ GreenCircuit = 5,
42
32
  }
43
33
 
44
34
  /** 联锁道岔状态 */
45
35
  export enum InterLockSwitchloc {
46
- NormalPosition = 2,
36
+ NormalPosition = 2,
47
37
  ReversePosition = 3,
48
38
  NeutralPosition = 4,
49
39
  }
50
40
 
51
41
  /** 闭塞信号 */
52
42
  export enum BsSignal {
53
- COME_GREEN = 0,
43
+ COME_GREEN = 0,
54
44
  COME_YELLOW = 1,
55
- COME_RED = 2,
56
- GO_GREEN = 3,
57
- GO_YELLOW = 4,
58
- GO_RED = 5,
59
- LOCK = 6,
60
- EMERGENCY = 7,
61
- RESET = 8,
45
+ COME_RED = 2,
46
+ GO_GREEN = 3,
47
+ GO_YELLOW = 4,
48
+ GO_RED = 5,
49
+ LOCK = 6,
50
+ EMERGENCY = 7,
51
+ RESET = 8,
62
52
  }
63
53
 
64
54
  /** 防控点类型枚举 */
65
55
  export enum PreventionTypes {
66
- NULL = 0,
67
- BUMPER = 1,
68
- CONTACTLINEEND = 2,
69
- FIXEDDERAILER = 3,
70
- CONTACTLINENOSTOP = 4,
71
- CONTACTLINENOSTOPIN = 5,
72
- OTHERPROMPT = 6,
73
- OTHERBRAKE = 7,
74
- ONESTOP = 8,
75
- SPEEDLIMITED = 9,
76
- SPEEDNOTICE = 10,
77
- CROSSSPEEDLIMITED = 11,
78
- CONTACTLINEPSS = 12,
79
- SSG = 13,
80
- CONTACTLINEPSSIN = 14,
81
- CONTACTLINENOAREA = 15,
82
- HIGHPOSTSIGNAL = 16,
83
- RESCUEVEHICLE = 17,
84
- RAILWAYCROSS = 18,
85
- TRAIN = 19,
86
- STATIONBOUND = 20,
87
- SHORTPOSTSIGNAL = 21,
88
- BRIDGE = 22,
89
- WHITE = 23,
90
- WHITEBLUE = 24,
91
- BLUE = 25,
92
- BLUEWHITE = 26,
93
- SLOPE = 27,
94
- PEOPLE = 28,
95
- TUNNEL = 29,
96
- DANGER = 30,
97
- SIGNAL = 31,
98
- SWERVE = 32,
99
- SWITCH = 33,
100
- ISOLATE = 35,
101
- TGQ = 47,
102
- BLOCKLINE = 50,
103
- WORKAREA = 51,
104
- ROUTELINE = 52,
105
- PARK = 53,
106
- WORKBUOND = 54,
107
- WORKBUONDCROSS = 55,
108
- LEFTHIGHPLATFORM = 61,
109
- RIGHTHIGHPLATFORM = 62,
110
- BOTHSIDEHIGHPLATFORM = 63,
111
- DOOR = 87,
112
- ISOLATESWITCH = 100,
113
- OTHER = 95,
114
- SIDE = 253,
115
- NONE = 254,
116
- MAX = 255,
117
- FOULINGPOST = 38,
118
- CUNCHE = 39,
119
- STATIONBOUNDEXTEND = 40,
120
- RED = 41,
121
- GREEN = 42,
122
- YELLOW = 43,
56
+ NULL = 0,
57
+ BUMPER = 1,
58
+ CONTACTLINEEND = 2,
59
+ FIXEDDERAILER = 3,
60
+ CONTACTLINENOSTOP = 4,
61
+ CONTACTLINENOSTOPIN = 5,
62
+ OTHERPROMPT = 6,
63
+ OTHERBRAKE = 7,
64
+ ONESTOP = 8,
65
+ SPEEDLIMITED = 9,
66
+ SPEEDNOTICE = 10,
67
+ CROSSSPEEDLIMITED = 11,
68
+ CONTACTLINEPSS = 12,
69
+ SSG = 13,
70
+ CONTACTLINEPSSIN = 14,
71
+ CONTACTLINENOAREA = 15,
72
+ HIGHPOSTSIGNAL = 16,
73
+ RESCUEVEHICLE = 17,
74
+ RAILWAYCROSS = 18,
75
+ TRAIN = 19,
76
+ STATIONBOUND = 20,
77
+ SHORTPOSTSIGNAL = 21,
78
+ BRIDGE = 22,
79
+ WHITE = 23,
80
+ WHITEBLUE = 24,
81
+ BLUE = 25,
82
+ BLUEWHITE = 26,
83
+ SLOPE = 27,
84
+ PEOPLE = 28,
85
+ TUNNEL = 29,
86
+ DANGER = 30,
87
+ SIGNAL = 31,
88
+ SWERVE = 32,
89
+ SWITCH = 33,
90
+ ISOLATE = 35,
91
+ TGQ = 47,
92
+ BLOCKLINE = 50,
93
+ WORKAREA = 51,
94
+ ROUTELINE = 52,
95
+ PARK = 53,
96
+ WORKBUOND = 54,
97
+ WORKBUONDCROSS = 55,
98
+ LEFTHIGHPLATFORM = 61,
99
+ RIGHTHIGHPLATFORM = 62,
100
+ BOTHSIDEHIGHPLATFORM = 63,
101
+ DOOR = 87,
102
+ ISOLATESWITCH = 100,
103
+ OTHER = 95,
104
+ SIDE = 253,
105
+ NONE = 254,
106
+ MAX = 255,
107
+ FOULINGPOST = 38,
108
+ CUNCHE = 39,
109
+ STATIONBOUNDEXTEND = 40,
110
+ RED = 41,
111
+ GREEN = 42,
112
+ YELLOW = 43,
123
113
  }
124
114
 
125
115
  // ─────────────────────────────────────────────
@@ -219,7 +209,7 @@ export interface ModeStyles {
219
209
  markerOutlineColor?: string;
220
210
  }
221
211
 
222
- export type DrawEventCallback = (features: GeoJSON.FeatureCollection) => void;
212
+ export type DrawEventCallback = (features: GeoJSON.FeatureCollection) => void;
223
213
  export type SelectEventCallback = (id: string | null) => void;
224
214
 
225
215
  export declare class DrawTool {
@@ -323,10 +313,7 @@ export interface InterlockVisualizationLegacyOptions {
323
313
  updateFeatureState?: (code: string | number, state: any) => void;
324
314
  }
325
315
 
326
- export type InterlockVisualizationOptions =
327
- | InterlockVisualizationGraphOptions
328
- | InterlockVisualizationGeoJsonOptions
329
- | InterlockVisualizationLegacyOptions;
316
+ export type InterlockVisualizationOptions = InterlockVisualizationGraphOptions | InterlockVisualizationGeoJsonOptions | InterlockVisualizationLegacyOptions;
330
317
 
331
318
  export declare class InterLockVisualization {
332
319
  constructor(options: InterlockVisualizationOptions);
@@ -355,21 +342,12 @@ export declare class TeeeMap {
355
342
  addRasterTileSource(id: string, url: string): void;
356
343
 
357
344
  // ── 图层管理 ──
358
- addGeoJsonLayer(
359
- layerId: string,
360
- sourceId: string,
361
- type?: 'fill' | 'line' | 'circle' | 'symbol',
362
- paint?: any,
363
- layout?: any,
364
- ): void;
345
+ addGeoJsonLayer(layerId: string, sourceId: string, type?: 'fill' | 'line' | 'circle' | 'symbol', paint?: any, layout?: any): void;
365
346
  updateLayerStyle(id: string, paint: any): void;
366
347
  removeLayer(id: string): void;
367
348
 
368
349
  // ── 交互事件 ──
369
- onFeatureClick(
370
- layerIds: string | string[],
371
- callback: (feature: GeoJSONFeature, lngLat: LngLat) => void,
372
- ): void;
350
+ onFeatureClick(layerIds: string | string[], callback: (feature: GeoJSONFeature, lngLat: LngLat) => void): void;
373
351
 
374
352
  // ── 生命周期 ──
375
353
  destroy(): void;
@@ -394,6 +372,12 @@ export declare class TeeeMap {
394
372
  createGraphEncryptedMap(stcode: string, url: string, layers: LayerType[]): void;
395
373
  createGeomEncryptedMap(stcode: string, url: string, layers: LayerType[]): void;
396
374
  createCTCEncryptedMap(stcode: string, url: string, layers: LayerType[]): void;
375
+ createGeoJsonStationMap(
376
+ stationDatas: {
377
+ name: string;
378
+ data: GeoJSON.FeatureCollection | string;
379
+ }[],
380
+ ): Promise<void>;
397
381
 
398
382
  // ── 其他工具方法 ──
399
383
  getMap(): MaplibreMap;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teeechina/teee-map",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "",
5
5
  "main": "dist/teee-map.umd.js",
6
6
  "module": "dist/teee-map.mjs",