zhihao-ui 1.3.17 → 1.3.18
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/es/index.js
CHANGED
|
@@ -17,7 +17,7 @@ import { Z as B } from "./BaseInfo-BhnEjLKF.js";
|
|
|
17
17
|
import { Z as g } from "./DetailHeader-DaabNj_4.js";
|
|
18
18
|
import { Z as x } from "./DiyDataTable-D-UZVciZ.js";
|
|
19
19
|
import { D as V } from "./DiyDataTable-D-UZVciZ.js";
|
|
20
|
-
import { Z as G } from "./Map-
|
|
20
|
+
import { Z as G } from "./Map-IsVZJtdO.js";
|
|
21
21
|
import { Z as M } from "./Table-B_3YA1mb.js";
|
|
22
22
|
import { Z as $ } from "./BaseItem-C4NJy1i4.js";
|
|
23
23
|
const A = [
|
|
@@ -17,31 +17,5 @@ export declare const selectedShipElement: (mapInstance: any, shipData: ShipInfoV
|
|
|
17
17
|
export declare const createLabelStyle: (mapInstance: any, feature: Feature) => void;
|
|
18
18
|
export declare const createLabelElement: (feature: Feature) => HTMLDivElement;
|
|
19
19
|
export declare const getRightIcons: (ship: ShipInfoVo) => string[];
|
|
20
|
-
export declare const createLabelFeatureStyle: (feature: Feature) => Style
|
|
21
|
-
export declare const ICON_CACHE: {
|
|
22
|
-
triangle: {
|
|
23
|
-
'#D9001C': {
|
|
24
|
-
left: string;
|
|
25
|
-
right: string;
|
|
26
|
-
front: string;
|
|
27
|
-
};
|
|
28
|
-
'#04C900': {
|
|
29
|
-
left: string;
|
|
30
|
-
right: string;
|
|
31
|
-
front: string;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
ship: {
|
|
35
|
-
'#D9001C': {
|
|
36
|
-
left: string;
|
|
37
|
-
right: string;
|
|
38
|
-
front: string;
|
|
39
|
-
};
|
|
40
|
-
'#04C900': {
|
|
41
|
-
left: string;
|
|
42
|
-
right: string;
|
|
43
|
-
front: string;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
};
|
|
20
|
+
export declare const createLabelFeatureStyle: (feature: Feature) => Style;
|
|
47
21
|
export {};
|
package/dist/umd/index.umd.cjs
CHANGED
|
@@ -179,7 +179,7 @@ hooks.version="2.30.1",setHookCallback(createLocal),hooks.fn=proto,hooks.min=min
|
|
|
179
179
|
x2="20" y2="0"
|
|
180
180
|
stroke="${Cn}"
|
|
181
181
|
stroke-width="1" />
|
|
182
|
-
`;const An=new Overlay({element:Sn,position:fromLonLat(At.center),positioning:"top-left",offset:[20,-20],stopEvent:!1,className:"track-label-time-overlay"});return An.set("class","track-label-overlay"),An.set("trackId",En),An},hn=()=>{const En=t==null?void 0:t.getOverlays().getArray(),Cn=En==null?void 0:En.filter(At=>At.get("class")==="track-label-overlay");Cn&&Cn.length>0&&Cn.forEach(At=>{At.setPosition(void 0),At.dispose()})},kn=En=>{const Cn=e.get(En).getSource();Cn.forEachFeature(At=>{At.get("type")!=="line"&&Cn.removeFeature(At)})},On=(En,Cn)=>(`${En.time}`,[new Style({image:new CircleStyle({stroke:new Stroke({color:"rgba(0, 0, 0, 0.01)",width:20}),radius:3})}),new Style({image:new CircleStyle({fill:new Fill({color:Cn}),stroke:new Stroke({color:"#fff",width:2}),radius:3})})]),Tn=En=>{const Cn="#E31818",At="#1890FF",Sn="",An=new Style({text:new Text({font:"Normal 22px map-iconfont",text:getIconFont(Sn),offsetY:-10,fill:new Fill({color:Number(En.state)===0?Cn:Number(En.state)===1?At:""})}),zIndex:99}),Vn=getIconStyle(""),Wn=getIconStyle(""),qn=[];return Number(En.state)===0?qn.push(Vn):Number(En.state)===1&&qn.push(Wn),qn.push(An),qn},xn=(En,Cn,At,Sn)=>{const An=Cn||[],Nn=Cn.length;Nn||(An.push(At[0]),An.push(At[At.length-1]));const Vn=[];for(let Wn=0;Wn<Nn-1;Wn++){let qn;const _n=Cn[Wn],wn=(Cn[Wn+1].index+_n.index)/2;if(wn%2===0)qn=At[wn].centerPoint;else{const bn=At[Math.floor(wn)],Rn=At[Math.ceil(wn)];if(bn&&Rn){const[Dt,Mn]=bn.centerPoint,[Bn,Xn]=Rn.centerPoint;qn=[(Dt+Bn)/2,(Mn+Xn)/2]}}if(qn){const bn=new Feature({geometry:new Point(qn)});bn.set("type","track_arrow"),bn.setStyle(new Style({text:new Text({font:"700 12px map-iconfont",text:getIconFont(""),fill:new Fill({color:Sn}),rotation:In(Cn[Wn].center,Cn[Wn+1].center)*(Math.PI/180)})})),Vn.push(bn)}}const zn=e.get(En).getSource();zn==null||zn.addFeatures(Vn)},Dn=En=>{var Nn,Vn;const Cn=t.getView(),At=(Nn=e==null?void 0:e.get(En))==null?void 0:Nn.getSource(),Sn=le||(En?At==null?void 0:At.getFeatureById(En):null);if(!Sn)return;const An=(Vn=Sn==null?void 0:Sn.getGeometry())==null?void 0:Vn.getExtent();if(An!=null&&An.length)try{const zn=buffer(An,Math.max(An[2]-An[0],An[3]-An[1])*.02);Cn.fit(zn)}catch(zn){console.log(zn)}},Ln=En=>{const Cn="",An=En.index===0?"#fcdc3f":"#ff0000";return[new Style({text:new Text({font:"Normal 14px map-iconfont",text:getIconFont(Cn),fill:new Fill({color:An})}),zIndex:101})]},$n=()=>{console.log("清除所有的轨迹-----"),Un(),e.forEach(Cn=>{var At;(At=Cn.getSource())==null||At.clear(),t==null||t.removeLayer(Cn)}),Object.keys(n).forEach(Cn=>{e.delete(Cn),delete n[Cn]}),pe=!1,hn()},Gn=En=>{const Cn=e.get(En||r);Cn==null||Cn.setVisible(!1);const At=t.getOverlays().getArray();for(let Sn=0;Sn<At.length;){const An=At[Sn];An.get("class")==="track-label-overlay"?(An.setPosition(void 0),t.removeOverlay(An)):Sn++}Un()},Yn=(En,Cn=LENGTH_UNIT.NM)=>{const At={id:En,length:"--"},An=(n[En]||[]).map(Vn=>transform([Vn.lon,Vn.lat],projection.data,projection.mercator)),Nn=new LineString(An);return At.length=formatLength(Nn,Cn)||"--",At},Jn=(En,Cn)=>{tr(String(En),Cn)},tr=(En,Cn)=>{const At=n[String(En)],Sn=At==null?void 0:At.map(An=>[An.lon,An.lat]);Sn&&Hn(Sn,Cn)},Qn=new Style({text:new Text({font:"700 20px map-iconfont",text:getIconFont(""),fill:new Fill({color:"#ff0000"}),rotation:0})}),jn=(En,Cn)=>{var wn,bn;const At=Number(50*Cn),Sn=((wn=En.frameState)==null?void 0:wn.time)??Date.now(),An=Sn-j;if(ae=(ae+At*An/1e6)%2,j=Sn,ae>=1){Un();return}const Nn=$.getCoordinateAt(ae>1?2-ae:ae),Vn=$.getCoordinateAt(ae>1?ae-.01:ae),zn=$.getCoordinateAt(ae>1?2-ae:ae+.01),qn=In(mercatorToLonLat(Vn,"array"),mercatorToLonLat(zn,"array"))*Math.PI/180;(bn=Qn.getText())==null||bn.setRotation(qn),z.setCoordinates(Nn);const _n=getVectorContext(En);_n.setStyle(Qn),_n.drawGeometry(z),t==null||t.render()},Zn=()=>{var En;ie=!0,j=Date.now(),ae=0,z=((En=V.getGeometry())==null?void 0:En.clone())||new Point([0,0]),g&&(oe==null||oe.on("postrender",g)),re==null||re.setGeometry(void 0)},Un=()=>{ie&&(ie=!1,re==null||re.setGeometry(void 0),g&&oe&&oe.un("postrender",g),oe&&(t==null||t.removeLayer(oe)),oe=null,re=null)},Hn=(En,Cn)=>{ie&&Un(),L=new Polyline({factor:1e6}).writeGeometry(new LineString(En)),$=new Polyline({factor:1e6}).readGeometry(L,{dataProjection:projection.data,featureProjection:projection.mercator}),V=new Feature({type:"icon",geometry:new Point($.getFirstCoordinate())});const At=V.getGeometry();z=At?At.clone():new Point([0,0]),re=new Feature({type:"geoMarker",style:Qn,geometry:z}),oe=new VectorLayer({source:new VectorSource({features:[re]})}),t==null||t.addLayer(oe),g=Sn=>jn(Sn,Cn),Zn()},In=(En,Cn,At)=>{function Sn(wn){return 180*(wn%(2*Math.PI))/Math.PI}function An(wn){return wn%360*Math.PI/180}function Nn(wn){var bn;if(!wn)throw new Error("Coordinate is required");if(!Array.isArray(wn)){if((wn==null?void 0:wn.type)==="Feature"&&(wn==null?void 0:wn.geometry)!==null&&((bn=wn==null?void 0:wn.geometry)==null?void 0:bn.type)==="Point")return wn==null?void 0:wn.geometry.coordinates;if(wn.type==="Point")return(wn==null?void 0:wn.coordinates)||[]}if(Array.isArray(wn)&&wn.length>=2&&!Array.isArray(wn[0])&&!Array.isArray(wn[1]))return wn;throw new Error("Coordinate must be GeoJSON Point or an Array of numbers")}function Vn(wn,bn,Rn={}){if(Rn.final)return function(er,lr){return(Vn(lr,er)+180)%360}(wn,bn);const Dt=Nn(wn),Mn=Nn(bn),Bn=An(Dt[0]),Xn=An(Mn[0]),rr=An(Dt[1]),ar=An(Mn[1]),or=Math.sin(Xn-Bn)*Math.cos(ar),ir=Math.cos(rr)*Math.sin(ar)-Math.sin(rr)*Math.cos(ar)*Math.cos(Xn-Bn);return Sn(Math.atan2(or,ir))}function zn(wn){return!isNaN(wn)&&wn!==null&&!Array.isArray(wn)}function Wn(wn,bn={},Rn={}){return wn||console.log("Coordinates are required"),Array.isArray(wn)||console.log("Coordinates must be an Array"),wn.length<2&&console.log("Coordinates must be at least 2 numbers long"),(!zn(wn[0])||!zn(wn[1]))&&console.log("Coordinates must contain numbers"),qn({type:"Point",coordinates:wn},bn,Rn)}function qn(wn,bn={},Rn={}){const Dt={type:"Feature",id:"",properties:{},bbox:{},geometry:{}};return Rn.id!==void 0&&(Dt.id=Rn.id),Rn.bbox&&(Dt.bbox=Rn.bbox),Dt.properties=bn,Dt.geometry=wn,Dt}const _n=Vn(Wn(En),Wn(Cn),At);return _n<0?360+_n:_n};return{render:Ve,remove:$n,play:Jn,setCenter:Dn,close:Gn,getLength:Yn,handleTrackMapEvent:ze,reRenderTrackLine:Ie}};class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer{constructor(e){super(e),this.vectorRenderer_=new CanvasVectorLayerRenderer(e),this.layerImageRatio_=e.getImageRatio(),this.coordinateToVectorPixelTransform_=create$1(),this.renderedPixelToCoordinateTransform_=null}disposeInternal(){this.vectorRenderer_.dispose(),super.disposeInternal()}getFeatures(e){if(!this.vectorRenderer_)return Promise.resolve([]);const n=apply(this.coordinateToVectorPixelTransform_,apply(this.renderedPixelToCoordinateTransform_,e.slice()));return this.vectorRenderer_.getFeatures(n)}handleFontsChanged(){this.vectorRenderer_.handleFontsChanged()}prepareFrame(e){const n=e.pixelRatio,r=e.viewState,i=r.resolution,g=e.viewHints,y=this.vectorRenderer_;let k=e.extent;this.layerImageRatio_!==1&&(k=k.slice(0),scaleFromCenter(k,this.layerImageRatio_));const L=getWidth(k)/i,$=getHeight(k)/i;if(!g[ViewHint.ANIMATING]&&!g[ViewHint.INTERACTING]&&!isEmpty(k)){y.useContainer(null,null);const V=y.context,z=e.layerStatesArray[e.layerIndex],re=Object.assign({},z,{opacity:1}),ie=Object.assign({},e,{extent:k,size:[L,$],viewState:Object.assign({},e.viewState,{rotation:0}),layerStatesArray:[re],layerIndex:0,declutter:null}),j=this.getLayer().getDeclutter();j&&(ie.declutter={[j]:new RBush$1(9)});let oe=!0;const ae=new ImageCanvas(k,i,n,V.canvas,function(le){y.prepareFrame(ie)&&y.replayGroupChanged&&(y.clipping=!1,y.renderFrame(ie,null)&&(y.renderDeclutter(ie),y.renderDeferred(ie),oe=!1),le())});ae.addEventListener(EventType.CHANGE,()=>{if(ae.getState()!==ImageState.LOADED)return;this.image=oe?null:ae;const le=ae.getPixelRatio(),de=fromResolutionLike(ae.getResolution())*n/le;this.renderedResolution=de,this.coordinateToVectorPixelTransform_=compose(this.coordinateToVectorPixelTransform_,L/2,$/2,1/de,-1/de,0,-r.center[0],-r.center[1])}),ae.load()}return this.image&&(this.renderedPixelToCoordinateTransform_=e.pixelToCoordinateTransform.slice()),!!this.image}preRender(){}postRender(){}renderDeclutter(){}forEachFeatureAtCoordinate(e,n,r,i,g){return this.vectorRenderer_?this.vectorRenderer_.forEachFeatureAtCoordinate(e,n,r,i,g):super.forEachFeatureAtCoordinate(e,n,r,i,g)}}class VectorImageLayer extends BaseVectorLayer{constructor(e){e=e||{};const n=Object.assign({},e);delete n.imageRatio,super(n),this.imageRatio_=e.imageRatio!==void 0?e.imageRatio:1}getImageRatio(){return this.imageRatio_}createRenderer(){return new CanvasVectorImageLayerRenderer(this)}}function useShipOverlay(t){const e=vue.ref(null);vue.ref(null);const n=vue.computed(()=>({"--overlay-color":t.color||"#FFF","--bg-color":t.selected?t.color:"#ffffff",position:"relative","pointer-events":"none"})),r=vue.computed(()=>({position:"relative","border-radius":"1px","background-color":"var(--bg-color)",color:"#000","padding-right":"5px",font:"500 Normal 12px","font-size":"12px","box-shadow":"0 2px 10px rgba(0, 0, 0, 0.2)","white-space":"nowrap",border:"1px solid #FFF","pointer-events":"auto",transition:"background-color 0.5s ease, border 0.5s ease","z-index":"1",display:"flex","align-items":"center",animation:t.selected?"blink 1.5s ease-in-out infinite":"none"})),i=vue.computed(()=>({width:"14px",height:"14px",margin:"1px 5px 1px 1px","background-color":"var(--bg-color)"})),g=vue.computed(()=>({position:"absolute",top:"0px",color:"var(--overlay-color)","pointer-events":"none",transform:"translateY(-1px)","z-index":"0",width:"20px",height:"20px",overflow:"visible",left:"-20px"}));return()=>vue.h("div",{ref:e,class:"ship-overlay-container",style:n.value},[vue.h("div",{class:"ship-overlay-content",style:r.value},[vue.h("div",{style:t.selected?i.value:{}},""),vue.h("div",{class:"text"},t.name||"未命名船舶"),vue.h("div",{class:"icons",style:{color:"#3370ff"}},[t.existDevice?vue.h("i",{class:"iconfont icon-Frame-19",style:{fontSize:"12px",marginRight:"2px",marginLeft:"2px"}}):"",t.existMobile?vue.h("i",{class:"iconfont icon-Frame13",style:{fontSize:"12px",marginRight:"2px"}}):"",t.existWaterGauge?vue.h("i",{class:"iconfont icon-a-Frame7",style:{fontSize:"12px"}}):""])]),vue.h("svg",{class:"ship-overlay-line",style:g.value,viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},[vue.h("line",{x1:"0",y1:"20",x2:"20",y2:"4",stroke:"white","stroke-width":"1"})])])}vue.ref([]);function addOverlay(t,e,n,r){if(e){const i=new Overlay({element:n,positioning:"top-left",id:"label-"+(r==null?void 0:r.id),offset:[20,-20],autoPan:!1,position:e,className:r.blinking?"ship-label-overlay-blinking":"ship-label-overlay"});i.set("class","zh-map-ship-overlay"),t.addOverlay(i)}}const getShipDirectPath=t=>{const{spd:e,hdg:n,cog:r}=t;return e?n!==null&&+n!=511&&r!==null?r-+n>=3?SHIP_DIRECT.right:r-+n<=-3?SHIP_DIRECT.left:SHIP_DIRECT.front:SHIP_DIRECT.front:""},createShipStyle=(t,e)=>{const{shipData:n}=e.getProperties(),r=getShipType(t),i=getShipScale(t,n,r);return initShipStyle(e,i,r)},getShipType=t=>{const e=t==null?void 0:t.getView().getZoom();return e<=MAP_ZOOM.shipModelMax&&e>=MAP_ZOOM.shipTriggleMin?"ship":"triangle"},getShipScale=(t,e,n)=>{if(n==="ship"){const{len:r,wid:i}=e,g=97,y=20,L=1/(t==null?void 0:t.getView().getResolution()),$=r*L/g,V=i*L/y;return Math.max($,V)}return MAP_ZOOM.scaleNum},initShipStyle=(t,e,n)=>{const{color:r,direct:i,isHighlight:g,shipData:y}=t.getProperties(),k=((y==null?void 0:y.cog)-90+360)%360;return new Style({image:new Icon({src:L(),scale:e||MAP_ZOOM.scaleNum,anchor:[.5,.5],rotation:k*Math.PI/180,rotateWithView:!1})});function L(){return`data:image/svg+xml;utf8,${encodeURIComponent($())}`}function $(){switch(n){case"triangle":return`<svg width="41" height="24" viewBox="0 0 41 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
182
|
+
`;const An=new Overlay({element:Sn,position:fromLonLat(At.center),positioning:"top-left",offset:[20,-20],stopEvent:!1,className:"track-label-time-overlay"});return An.set("class","track-label-overlay"),An.set("trackId",En),An},hn=()=>{const En=t==null?void 0:t.getOverlays().getArray(),Cn=En==null?void 0:En.filter(At=>At.get("class")==="track-label-overlay");Cn&&Cn.length>0&&Cn.forEach(At=>{At.setPosition(void 0),At.dispose()})},kn=En=>{const Cn=e.get(En).getSource();Cn.forEachFeature(At=>{At.get("type")!=="line"&&Cn.removeFeature(At)})},On=(En,Cn)=>(`${En.time}`,[new Style({image:new CircleStyle({stroke:new Stroke({color:"rgba(0, 0, 0, 0.01)",width:20}),radius:3})}),new Style({image:new CircleStyle({fill:new Fill({color:Cn}),stroke:new Stroke({color:"#fff",width:2}),radius:3})})]),Tn=En=>{const Cn="#E31818",At="#1890FF",Sn="",An=new Style({text:new Text({font:"Normal 22px map-iconfont",text:getIconFont(Sn),offsetY:-10,fill:new Fill({color:Number(En.state)===0?Cn:Number(En.state)===1?At:""})}),zIndex:99}),Vn=getIconStyle(""),Wn=getIconStyle(""),qn=[];return Number(En.state)===0?qn.push(Vn):Number(En.state)===1&&qn.push(Wn),qn.push(An),qn},xn=(En,Cn,At,Sn)=>{const An=Cn||[],Nn=Cn.length;Nn||(An.push(At[0]),An.push(At[At.length-1]));const Vn=[];for(let Wn=0;Wn<Nn-1;Wn++){let qn;const _n=Cn[Wn],wn=(Cn[Wn+1].index+_n.index)/2;if(wn%2===0)qn=At[wn].centerPoint;else{const bn=At[Math.floor(wn)],Rn=At[Math.ceil(wn)];if(bn&&Rn){const[Dt,Mn]=bn.centerPoint,[Bn,Xn]=Rn.centerPoint;qn=[(Dt+Bn)/2,(Mn+Xn)/2]}}if(qn){const bn=new Feature({geometry:new Point(qn)});bn.set("type","track_arrow"),bn.setStyle(new Style({text:new Text({font:"700 12px map-iconfont",text:getIconFont(""),fill:new Fill({color:Sn}),rotation:In(Cn[Wn].center,Cn[Wn+1].center)*(Math.PI/180)})})),Vn.push(bn)}}const zn=e.get(En).getSource();zn==null||zn.addFeatures(Vn)},Dn=En=>{var Nn,Vn;const Cn=t.getView(),At=(Nn=e==null?void 0:e.get(En))==null?void 0:Nn.getSource(),Sn=le||(En?At==null?void 0:At.getFeatureById(En):null);if(!Sn)return;const An=(Vn=Sn==null?void 0:Sn.getGeometry())==null?void 0:Vn.getExtent();if(An!=null&&An.length)try{const zn=buffer(An,Math.max(An[2]-An[0],An[3]-An[1])*.02);Cn.fit(zn)}catch(zn){console.log(zn)}},Ln=En=>{const Cn="",An=En.index===0?"#fcdc3f":"#ff0000";return[new Style({text:new Text({font:"Normal 14px map-iconfont",text:getIconFont(Cn),fill:new Fill({color:An})}),zIndex:101})]},$n=()=>{console.log("清除所有的轨迹-----"),Un(),e.forEach(Cn=>{var At;(At=Cn.getSource())==null||At.clear(),t==null||t.removeLayer(Cn)}),Object.keys(n).forEach(Cn=>{e.delete(Cn),delete n[Cn]}),pe=!1,hn()},Gn=En=>{const Cn=e.get(En||r);Cn==null||Cn.setVisible(!1);const At=t.getOverlays().getArray();for(let Sn=0;Sn<At.length;){const An=At[Sn];An.get("class")==="track-label-overlay"?(An.setPosition(void 0),t.removeOverlay(An)):Sn++}Un()},Yn=(En,Cn=LENGTH_UNIT.NM)=>{const At={id:En,length:"--"},An=(n[En]||[]).map(Vn=>transform([Vn.lon,Vn.lat],projection.data,projection.mercator)),Nn=new LineString(An);return At.length=formatLength(Nn,Cn)||"--",At},Jn=(En,Cn)=>{tr(String(En),Cn)},tr=(En,Cn)=>{const At=n[String(En)],Sn=At==null?void 0:At.map(An=>[An.lon,An.lat]);Sn&&Hn(Sn,Cn)},Qn=new Style({text:new Text({font:"700 20px map-iconfont",text:getIconFont(""),fill:new Fill({color:"#ff0000"}),rotation:0})}),jn=(En,Cn)=>{var wn,bn;const At=Number(50*Cn),Sn=((wn=En.frameState)==null?void 0:wn.time)??Date.now(),An=Sn-j;if(ae=(ae+At*An/1e6)%2,j=Sn,ae>=1){Un();return}const Nn=$.getCoordinateAt(ae>1?2-ae:ae),Vn=$.getCoordinateAt(ae>1?ae-.01:ae),zn=$.getCoordinateAt(ae>1?2-ae:ae+.01),qn=In(mercatorToLonLat(Vn,"array"),mercatorToLonLat(zn,"array"))*Math.PI/180;(bn=Qn.getText())==null||bn.setRotation(qn),z.setCoordinates(Nn);const _n=getVectorContext(En);_n.setStyle(Qn),_n.drawGeometry(z),t==null||t.render()},Zn=()=>{var En;ie=!0,j=Date.now(),ae=0,z=((En=V.getGeometry())==null?void 0:En.clone())||new Point([0,0]),g&&(oe==null||oe.on("postrender",g)),re==null||re.setGeometry(void 0)},Un=()=>{ie&&(ie=!1,re==null||re.setGeometry(void 0),g&&oe&&oe.un("postrender",g),oe&&(t==null||t.removeLayer(oe)),oe=null,re=null)},Hn=(En,Cn)=>{ie&&Un(),L=new Polyline({factor:1e6}).writeGeometry(new LineString(En)),$=new Polyline({factor:1e6}).readGeometry(L,{dataProjection:projection.data,featureProjection:projection.mercator}),V=new Feature({type:"icon",geometry:new Point($.getFirstCoordinate())});const At=V.getGeometry();z=At?At.clone():new Point([0,0]),re=new Feature({type:"geoMarker",style:Qn,geometry:z}),oe=new VectorLayer({source:new VectorSource({features:[re]})}),t==null||t.addLayer(oe),g=Sn=>jn(Sn,Cn),Zn()},In=(En,Cn,At)=>{function Sn(wn){return 180*(wn%(2*Math.PI))/Math.PI}function An(wn){return wn%360*Math.PI/180}function Nn(wn){var bn;if(!wn)throw new Error("Coordinate is required");if(!Array.isArray(wn)){if((wn==null?void 0:wn.type)==="Feature"&&(wn==null?void 0:wn.geometry)!==null&&((bn=wn==null?void 0:wn.geometry)==null?void 0:bn.type)==="Point")return wn==null?void 0:wn.geometry.coordinates;if(wn.type==="Point")return(wn==null?void 0:wn.coordinates)||[]}if(Array.isArray(wn)&&wn.length>=2&&!Array.isArray(wn[0])&&!Array.isArray(wn[1]))return wn;throw new Error("Coordinate must be GeoJSON Point or an Array of numbers")}function Vn(wn,bn,Rn={}){if(Rn.final)return function(er,lr){return(Vn(lr,er)+180)%360}(wn,bn);const Dt=Nn(wn),Mn=Nn(bn),Bn=An(Dt[0]),Xn=An(Mn[0]),rr=An(Dt[1]),ar=An(Mn[1]),or=Math.sin(Xn-Bn)*Math.cos(ar),ir=Math.cos(rr)*Math.sin(ar)-Math.sin(rr)*Math.cos(ar)*Math.cos(Xn-Bn);return Sn(Math.atan2(or,ir))}function zn(wn){return!isNaN(wn)&&wn!==null&&!Array.isArray(wn)}function Wn(wn,bn={},Rn={}){return wn||console.log("Coordinates are required"),Array.isArray(wn)||console.log("Coordinates must be an Array"),wn.length<2&&console.log("Coordinates must be at least 2 numbers long"),(!zn(wn[0])||!zn(wn[1]))&&console.log("Coordinates must contain numbers"),qn({type:"Point",coordinates:wn},bn,Rn)}function qn(wn,bn={},Rn={}){const Dt={type:"Feature",id:"",properties:{},bbox:{},geometry:{}};return Rn.id!==void 0&&(Dt.id=Rn.id),Rn.bbox&&(Dt.bbox=Rn.bbox),Dt.properties=bn,Dt.geometry=wn,Dt}const _n=Vn(Wn(En),Wn(Cn),At);return _n<0?360+_n:_n};return{render:Ve,remove:$n,play:Jn,setCenter:Dn,close:Gn,getLength:Yn,handleTrackMapEvent:ze,reRenderTrackLine:Ie}};class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer{constructor(e){super(e),this.vectorRenderer_=new CanvasVectorLayerRenderer(e),this.layerImageRatio_=e.getImageRatio(),this.coordinateToVectorPixelTransform_=create$1(),this.renderedPixelToCoordinateTransform_=null}disposeInternal(){this.vectorRenderer_.dispose(),super.disposeInternal()}getFeatures(e){if(!this.vectorRenderer_)return Promise.resolve([]);const n=apply(this.coordinateToVectorPixelTransform_,apply(this.renderedPixelToCoordinateTransform_,e.slice()));return this.vectorRenderer_.getFeatures(n)}handleFontsChanged(){this.vectorRenderer_.handleFontsChanged()}prepareFrame(e){const n=e.pixelRatio,r=e.viewState,i=r.resolution,g=e.viewHints,y=this.vectorRenderer_;let k=e.extent;this.layerImageRatio_!==1&&(k=k.slice(0),scaleFromCenter(k,this.layerImageRatio_));const L=getWidth(k)/i,$=getHeight(k)/i;if(!g[ViewHint.ANIMATING]&&!g[ViewHint.INTERACTING]&&!isEmpty(k)){y.useContainer(null,null);const V=y.context,z=e.layerStatesArray[e.layerIndex],re=Object.assign({},z,{opacity:1}),ie=Object.assign({},e,{extent:k,size:[L,$],viewState:Object.assign({},e.viewState,{rotation:0}),layerStatesArray:[re],layerIndex:0,declutter:null}),j=this.getLayer().getDeclutter();j&&(ie.declutter={[j]:new RBush$1(9)});let oe=!0;const ae=new ImageCanvas(k,i,n,V.canvas,function(le){y.prepareFrame(ie)&&y.replayGroupChanged&&(y.clipping=!1,y.renderFrame(ie,null)&&(y.renderDeclutter(ie),y.renderDeferred(ie),oe=!1),le())});ae.addEventListener(EventType.CHANGE,()=>{if(ae.getState()!==ImageState.LOADED)return;this.image=oe?null:ae;const le=ae.getPixelRatio(),de=fromResolutionLike(ae.getResolution())*n/le;this.renderedResolution=de,this.coordinateToVectorPixelTransform_=compose(this.coordinateToVectorPixelTransform_,L/2,$/2,1/de,-1/de,0,-r.center[0],-r.center[1])}),ae.load()}return this.image&&(this.renderedPixelToCoordinateTransform_=e.pixelToCoordinateTransform.slice()),!!this.image}preRender(){}postRender(){}renderDeclutter(){}forEachFeatureAtCoordinate(e,n,r,i,g){return this.vectorRenderer_?this.vectorRenderer_.forEachFeatureAtCoordinate(e,n,r,i,g):super.forEachFeatureAtCoordinate(e,n,r,i,g)}}class VectorImageLayer extends BaseVectorLayer{constructor(e){e=e||{};const n=Object.assign({},e);delete n.imageRatio,super(n),this.imageRatio_=e.imageRatio!==void 0?e.imageRatio:1}getImageRatio(){return this.imageRatio_}createRenderer(){return new CanvasVectorImageLayerRenderer(this)}}function useShipOverlay(t){const e=vue.ref(null);vue.ref(null);const n=vue.computed(()=>({"--overlay-color":t.color||"#FFF","--bg-color":t.selected?t.color:"#ffffff",position:"relative","pointer-events":"none"})),r=vue.computed(()=>({position:"relative","border-radius":"1px","background-color":"var(--bg-color)",color:"#000","padding-right":"5px",font:"500 Normal 12px","font-size":"12px","box-shadow":"0 2px 10px rgba(0, 0, 0, 0.2)","white-space":"nowrap",border:"1px solid #FFF","pointer-events":"auto",transition:"background-color 0.5s ease, border 0.5s ease","z-index":"1",display:"flex","align-items":"center",animation:t.selected?"blink 1.5s ease-in-out infinite":"none"})),i=vue.computed(()=>({width:"14px",height:"14px",margin:"1px 5px 1px 1px","background-color":"var(--bg-color)"})),g=vue.computed(()=>({position:"absolute",top:"0px",color:"var(--overlay-color)","pointer-events":"none",transform:"translateY(-1px)","z-index":"0",width:"20px",height:"20px",overflow:"visible",left:"-20px"}));return()=>vue.h("div",{ref:e,class:"ship-overlay-container",style:n.value},[vue.h("div",{class:"ship-overlay-content",style:r.value},[vue.h("div",{style:t.selected?i.value:{}},""),vue.h("div",{class:"text"},t.name||"未命名船舶"),vue.h("div",{class:"icons",style:{color:"#3370ff"}},[t.existDevice?vue.h("i",{class:"map-iconfont icon-camera",style:{fontSize:"12px"}}):"",t.existMobile?vue.h("i",{class:"map-iconfont icon-tele",style:{fontSize:"12px"}}):"",t.existWaterGauge?vue.h("i",{class:"map-iconfont icon-ruler",style:{fontSize:"12px"}}):""])]),vue.h("svg",{class:"ship-overlay-line",style:g.value,viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},[vue.h("line",{x1:"0",y1:"20",x2:"20",y2:"4",stroke:"white","stroke-width":"1"})])])}vue.ref([]);function addOverlay(t,e,n,r){if(e){const i=new Overlay({element:n,positioning:"top-left",id:"label-"+(r==null?void 0:r.id),offset:[20,-20],autoPan:!1,position:e,className:r.blinking?"ship-label-overlay-blinking":"ship-label-overlay"});i.set("class","zh-map-ship-overlay"),t.addOverlay(i)}}const getShipDirectPath=t=>{const{spd:e,hdg:n,cog:r}=t;return e?n!==null&&+n!=511&&r!==null?r-+n>=3?SHIP_DIRECT.right:r-+n<=-3?SHIP_DIRECT.left:SHIP_DIRECT.front:SHIP_DIRECT.front:""},createShipStyle=(t,e)=>{const{shipData:n}=e.getProperties(),r=getShipType(t),i=getShipScale(t,n,r);return initShipStyle(e,i,r)},getShipType=t=>{const e=t==null?void 0:t.getView().getZoom();return e<=MAP_ZOOM.shipModelMax&&e>=MAP_ZOOM.shipTriggleMin?"ship":"triangle"},getShipScale=(t,e,n)=>{if(n==="ship"){const{len:r,wid:i}=e,g=97,y=20,L=1/(t==null?void 0:t.getView().getResolution()),$=r*L/g,V=i*L/y,z=Math.min($,V);return z<.2?.2:z>2?2:z}return MAP_ZOOM.scaleNum},initShipStyle=(t,e,n)=>{const{color:r,direct:i,isHighlight:g,shipData:y}=t.getProperties(),k=((y==null?void 0:y.cog)-90+360)%360;return new Style({image:new Icon({src:L(),scale:e||MAP_ZOOM.scaleNum,anchor:[.5,.5],rotation:k*Math.PI/180,rotateWithView:!1})});function L(){return`data:image/svg+xml;utf8,${encodeURIComponent($())}`}function $(){switch(n){case"triangle":return`<svg width="41" height="24" viewBox="0 0 41 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
183
183
|
<path d="M30.8843 12.6777L2.21343 21.7067C1.75559 21.8509 1.28947 21.509 1.28947 21.029L1.28947 2.97103C1.28947 2.49102 1.75558 2.14913 2.21342 2.29331L30.8843 11.3223C31.5471 11.531 31.5471 12.469 30.8843 12.6777Z"
|
|
184
184
|
fill="${r}" stroke="${g?"#FF2424":"black"}" stroke-width="${g?"2":"0.578947"}" />
|
|
185
185
|
<!--path船航向左边或者向前-->
|
|
@@ -201,9 +201,7 @@ hooks.version="2.30.1",setHookCallback(createLocal),hooks.fn=proto,hooks.min=min
|
|
|
201
201
|
<path d="M1.99982 46.9998L1.99982 1.99982L46.9998 1.99982L46.9998 46.9998L1.99982 46.9998Z" fill="#FF2424" fill-opacity="0.2"/>
|
|
202
202
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9998 0.5V3.5L3.49976 3.5V20H0.499756V0.500002L19.9998 0.5ZM45.4998 3.5H28.9998V0.5H48.4998V20H45.4998V3.5ZM48.4998 29L48.4998 48.5H28.9998V45.5H45.4998L45.4998 29H48.4998ZM3.49976 45.5L3.49976 29H0.499756L0.499758 48.5L19.9998 48.5V45.5L3.49976 45.5Z" fill="#FF2424"/>
|
|
203
203
|
</svg>
|
|
204
|
-
`,y=document.createElement("div");return y.className="ship-overlay-selected",y.innerHTML=g,y},createLabelStyle=(t,e)=>{const{shipData:n,blinking:r}=e.getProperties(),{lon:i,lat:g}=n,y=createLabelElement(e);i&&g&&addOverlay(t,fromLonLat([i,g]),y,{...n,blinking:r})},createLabelElement=t=>{const e=document.createElement("div");e.className="ship-overlay-box",e.style.position="relative";const n=t.getProperties(),{shipData:r,blinking:i,blinkingColor:g,name:y}=n,{lon:k,lat:L}=r,$=vue.createVNode({setup(){return useShipOverlay({selected:i,name:y,color:g,existDevice:r==null?void 0:r.existDevice,existMobile:r==null?void 0:r.existMobile,existWaterGauge:r==null?void 0:r.existWaterGauge})}});return vue.render($,e),e},getRightIcons=t=>{const e=[];return t.existDevice&&e.push(""),t.existMobile&&e.push(""),t.existWaterGauge&&e.push(""),e},createLabelFeatureStyle=t=>{const{name:e,rightIcons:n}=t.getProperties(),r=`${e} ${n.map(V=>getIconFont(V)).join(" ")} `,i=[20,-20],y=-Math.atan2(-i[1],i[0]),k=Math.sqrt(i[0]**2+i[1]**2),L=`<svg viewBox="0 0 ${k+10} 20" width="${k+10}" height="20" xmlns="http://www.w3.org/2000/svg" >
|
|
205
|
-
<line x1="0" y1="0" x2="${10+k}" y2="10" stroke="white" stroke-width="1"></line>
|
|
206
|
-
</svg>`;return[new Style({text:new Text({text:r,fill:new Fill({color:"#000000"}),stroke:new Stroke({color:"#ffffff",width:1}),font:"Normal 12px map-iconfont",offsetX:i[0],offsetY:i[1],backgroundFill:new Fill({color:"#ffffff"}),scale:1}),image:new Icon({src:`data:image/svg+xml;utf8,${encodeURIComponent(L)}`,displacement:[16,-10],anchor:[.5,.5],rotation:y,rotateWithView:!1})})]},useShipManager=t=>{let e=null,n=null;const r=new VectorSource,i=new VectorImageLayer({source:r,className:"zh-map--ship-layer",renderBuffer:300,zIndex:101}),g=new VectorSource,y=new VectorLayer({source:g,className:"zh-map--ship-label-layer",zIndex:102,updateWhileInteracting:!1,updateWhileAnimating:!1,declutter:!0});t==null||t.addLayer(i),t==null||t.addLayer(y);let k="",L={},$={};const V=_e=>{if(!_e||!t)return;const xe=(n==null?void 0:n.id)||(e==null?void 0:e.get("id"));if(n){const Ie=_e.filter(Oe=>Oe.id===xe);Ie.length===0?_e.push(n):n=Ie[0]}ie(),j(!0),Ce(_e),re()},z=_e=>{const xe=(n==null?void 0:n.id)||(e==null?void 0:e.get("id")),Ie=fromLonLat([_e==null?void 0:_e.lon,_e==null?void 0:_e.lat]),Oe=_e.fill||"#04C900",Ve=getShipDirectPath(_e),qe=new Feature({geometry:new Point(Ie),shipData:_e,id:_e.id,name:_e.cnname||"未命名船舶",selected:_e.id===xe,rightIcons:getRightIcons(_e),blinking:L[_e.id]||!1,blinkingColor:$[_e.id]||"",color:Oe,direct:Ve,isHighlight:!1});return qe.set("clickGeometry",new Circle(Ie)),qe},re=async()=>{if(!n||!t)return;let xe=t.getOverlays().getArray().find(Ie=>Ie.get("class")=="ship-overlay-selected");if(console.log("selectedOverlay----------",xe),xe){const Ie=selectedShipElement(t,n);await xe.setElement(Ie),await xe.setPosition(fromLonLat([n.lon,n.lat]))}else xe=selectedShipStyle(t,n),xe&&t.addOverlay(xe);setTimeout(()=>{var Ie;xe&&((Ie=xe.get("element"))!=null&&Ie.parentElement)&&(xe.get("element").parentElement.style.display="block")},20)},ie=()=>{t&&r&&(r.clear(),g.clear(),j())},j=_e=>{const xe=t.getOverlays().getArray().filter(Ie=>Ie.get("class")=="zh-map-ship-overlay");if(xe&&xe.length>0){for(let Ie=0;Ie<xe.length;Ie++)if(!_e&&xe[Ie].get("class")!=="ship-overlay-selected"){const Oe=xe[Ie];Oe.setPosition(void 0),t.removeOverlay(Oe),Oe.dispose()}}},oe=(_e,xe)=>{L=_e,$=xe;const Ie=t.getOverlays().getArray(),Oe=r.getFeatures();for(const Ve in L){const qe=L[Ve],Et=Ie.find(Fe=>Fe.getId()==="label-"+Ve),Lt=Oe.find(Fe=>Ve===Fe.get("id"));if(Et&&Lt){Lt.set("blinking",qe),Lt.set("blinkingColor",$[Ve]||"");const Fe=Et.getElement(),$e=createLabelElement(Lt),ze=$e.querySelector(".ship-overlay-line"),Ue=Fe==null?void 0:Fe.querySelector(".ship-overlay-line");Fe&&Fe!==$e&&(Ue&&ze&&ze.replaceWith(Ue),Et.setElement($e))}}},ae=_e=>{if(!t)return;const xe=r.getFeatures(),Ie=g.getFeatures(),Oe=e?e.get("id"):"",Ve=xe.filter(Fe=>Fe.get("id")!==Oe),qe=Ie==null?void 0:Ie.filter(Fe=>Fe.get("id")!==Oe),Et=new Map;_e.forEach(Fe=>{Et.set(Fe.id,!0)});const Lt=t.getOverlays().getArray();Ve.forEach(Fe=>{const $e=Fe.get("id");if(!Et.has($e))Fe.setStyle([]);else{const Ue=Fe.getStyle();(Ue==null?void 0:Ue.length)==0&&Fe.setStyle(createShipStyle(t,Fe))}const ze=Lt.find(Ue=>Ue.getId()==="label-"+$e);ze&&ze.setPosition(void 0)}),qe.forEach(Fe=>{const $e=Fe.get("id");if(!Et.has($e))Fe.setStyle([]);else{const ze=Fe.getStyle();(ze==null?void 0:ze.length)==0&&Fe.setStyle(createLabelFeatureStyle(Fe))}})},le=_e=>{if(_e){console.log("选中",_e);const xe=r.getFeatures().find(Ie=>Ie.get("id")===_e.id);xe&&(e=xe),n=_e,re()}else console.log("取消选中"),n=null,e=null,ue()},de=debounce((_e,xe,Ie)=>{if(_e){const Oe=_e.get("shipData"),Ve=_e.get("id");if(t.getTargetElement().style.cursor=Ve?"pointer":"",xe==="click"&&(le(Oe),Ie&&Ie(Ve)),xe==="hover"){k&&k!==Ve&&pe(),k=Ve;const qe=r.getFeatures().find(Et=>Et.get("id")===k);qe==null||qe.set("isHighlight",!0),qe==null||qe.setStyle(createShipStyle(t,qe))}}else t.getTargetElement().style.cursor="",pe()},10),pe=()=>{const _e=k?r.getFeatures().find(xe=>xe.get("id")===k):null;k=null,_e==null||_e.set("isHighlight",!1),_e==null||_e.setStyle(createShipStyle(t,_e))},ue=()=>{try{const xe=t.getOverlays().getArray().find(Ie=>Ie.get("class")=="ship-overlay-selected");xe&&xe.setPosition(void 0)}catch(_e){console.log(_e)}},he=_e=>{const xe=fromLonLat([_e==null?void 0:_e.lon,_e==null?void 0:_e.lat]),Ie=new Feature({geometry:new Point(xe),name:_e.cnname||"未命名船舶",rightIcons:getRightIcons(_e)});Ie.set("id",_e.id);const Oe=createLabelFeatureStyle(Ie);return Ie.setStyle(Oe),Ie},Ce=_e=>{const xe=t.getView().getZoom();_e.forEach(Ie=>{const Oe=z(Ie);if(Oe.setStyle(createShipStyle(t,Oe)),r.addFeature(Oe),(n==null?void 0:n.id)==Ie.id||xe>=MAP_ZOOM.shipModelMin)if(L[Ie.id])createLabelStyle(t,Oe);else{const Ve=he(Ie);g.addFeature(Ve)}})};return{render:V,selected:le,filter:ae,blinking:oe,clear:ie,handleShipMapEvent:de}},useLayerManager=t=>{const e=()=>t==null?void 0:t.getLayers(),n=vue.ref("vector"),r=()=>n.value,i=L=>{n.value=L;const $=e();$&&($==null||$.getArray().forEach(V=>{(V.className_==="vector"||V.className_==="satellite")&&V.setVisible(V.className_===L)}))},g=vue.ref(!1);return{getLayers:e,getGreenTileVisible:()=>g.value,setGreenTileVisible:L=>{if(L!==g.value){if(L){const $=e();if(!$.getArray().find(z=>z.className_==="greenTile")){const z=new TileLayer({source:new XYZ({url:BASE_MAP_LINK.greenTile}),visible:L,zIndex:2,className:"greenTile"});$.push(z)}}else{const $=e(),V=$.getArray().find(z=>z.className_==="greenTile");V&&$.remove(V)}g.value=L}},getShowLayerType:r,setShowLayerType:i}},usePropsManager=()=>{const t=vue.ref();return{setProps:r=>{t.value=r},getProps:()=>t.value}},usePositionManager=t=>{const e="zh-map-location-layer";let n,r,i=null,g=null;const y=j=>{if(!(!j||j.length===0)){if(r||(r=new VectorSource),r.clear(),g){const oe=j.find(ae=>ae.id===g.id);oe?g=oe:j.push(g)}j.forEach(oe=>{k(oe)}),n||(n=new VectorLayer({className:e,source:r,zIndex:100}),t==null||t.addLayer(n))}},k=j=>{const oe=getZoom(),[ae,le]=j.latLon.split(","),de=new Feature({geometry:new Point(fromLonLat([Number(ae),Number(le)]))});de.setStyle(L(j,oe,j.id===(g==null?void 0:g.id))),de.set("loactionData",j),r.addFeature(de)},L=(j,oe,ae)=>{const le={image:new Icon({src:ae&&j.selectedPath||j.defaultPath,scale:.5*oe/10})};return j.name&&(le.text=new Text({text:j.name,font:"12px sans-serif",fill:new Fill({color:"#000000"}),backgroundFill:new Fill({color:"#FFFFFF"}),offsetY:30})),new Style(le)},$=()=>{if(i){const j=i.get("loactionData").id;r.getFeatures().forEach(oe=>{oe.get("loactionData").id!==j&&r.removeFeature(oe)})}else r.clear()},V=()=>{const j=i.get("loactionData"),oe=getZoom();r.getFeatures().forEach(le=>{le.get("loactionData").id===j.id&&(le==null||le.setStyle(L(j,oe,!1)))}),g=null,i=null},z=j=>{j?(re(),ie(j)):clearSelectedPort()},re=()=>{if(i){const j=i.get("loactionData"),oe=getZoom();i.setStyle(L(j,oe,!1))}},ie=j=>{const oe=r.getFeatures();g=j,i=oe.find(ae=>ae.get("loactionData").id===j.id)};return{render:y,selected:z,clearSelected:V,clear:$}},DrawEventType={DRAWSTART:"drawstart",DRAWEND:"drawend",DRAWABORT:"drawabort"};class DrawEvent extends BaseEvent{constructor(e,n){super(e),this.feature=n}}function getTraceTargets(t,e){const n=[];for(let r=0;r<e.length;++r){const g=e[r].getGeometry();appendGeometryTraceTargets(t,g,n)}return n}function getSquaredDistance(t,e){return squaredDistance$1(t[0],t[1],e[0],e[1])}function getCoordinate(t,e){const n=t.length;return e<0?t[e+n]:e>=n?t[e-n]:t[e]}function getCumulativeSquaredDistance(t,e,n){let r,i;e<n?(r=e,i=n):(r=n,i=e);const g=Math.ceil(r),y=Math.floor(i);if(g>y){const L=interpolateCoordinate(t,r),$=interpolateCoordinate(t,i);return getSquaredDistance(L,$)}let k=0;if(r<g){const L=interpolateCoordinate(t,r),$=getCoordinate(t,g);k+=getSquaredDistance(L,$)}if(y<i){const L=getCoordinate(t,y),$=interpolateCoordinate(t,i);k+=getSquaredDistance(L,$)}for(let L=g;L<y-1;++L){const $=getCoordinate(t,L),V=getCoordinate(t,L+1);k+=getSquaredDistance($,V)}return k}function appendGeometryTraceTargets(t,e,n){if(e instanceof LineString){appendTraceTarget(t,e.getCoordinates(),!1,n);return}if(e instanceof MultiLineString){const r=e.getCoordinates();for(let i=0,g=r.length;i<g;++i)appendTraceTarget(t,r[i],!1,n);return}if(e instanceof Polygon){const r=e.getCoordinates();for(let i=0,g=r.length;i<g;++i)appendTraceTarget(t,r[i],!0,n);return}if(e instanceof MultiPolygon){const r=e.getCoordinates();for(let i=0,g=r.length;i<g;++i){const y=r[i];for(let k=0,L=y.length;k<L;++k)appendTraceTarget(t,y[k],!0,n)}return}if(e instanceof GeometryCollection){const r=e.getGeometries();for(let i=0;i<r.length;++i)appendGeometryTraceTargets(t,r[i],n);return}}const sharedUpdateInfo={index:-1,endIndex:NaN};function getTraceTargetUpdate(t,e,n,r){const i=t[0],g=t[1];let y=1/0,k=-1,L=NaN;for(let z=0;z<e.targets.length;++z){const re=e.targets[z],ie=re.coordinates;let j=1/0,oe;for(let ae=0;ae<ie.length-1;++ae){const le=ie[ae],de=ie[ae+1],pe=getPointSegmentRelationship(i,g,le,de);pe.squaredDistance<j&&(j=pe.squaredDistance,oe=ae+pe.along)}j<y&&(y=j,re.ring&&e.targetIndex===z&&(re.endIndex>re.startIndex?oe<re.startIndex&&(oe+=ie.length):re.endIndex<re.startIndex&&oe>re.startIndex&&(oe-=ie.length)),L=oe,k=z)}const $=e.targets[k];let V=$.ring;if(e.targetIndex===k&&V){const z=interpolateCoordinate($.coordinates,L),re=n.getPixelFromCoordinate(z);distance(re,e.startPx)>r&&(V=!1)}if(V){const z=$.coordinates,re=z.length,ie=$.startIndex,j=L;if(ie<j){const oe=getCumulativeSquaredDistance(z,ie,j);getCumulativeSquaredDistance(z,ie,j-re)<oe&&(L-=re)}else{const oe=getCumulativeSquaredDistance(z,ie,j);getCumulativeSquaredDistance(z,ie,j+re)<oe&&(L+=re)}}return sharedUpdateInfo.index=k,sharedUpdateInfo.endIndex=L,sharedUpdateInfo}function appendTraceTarget(t,e,n,r){const i=t[0],g=t[1];for(let y=0,k=e.length-1;y<k;++y){const L=e[y],$=e[y+1],V=getPointSegmentRelationship(i,g,L,$);if(V.squaredDistance===0){const z=y+V.along;r.push({coordinates:e,ring:n,startIndex:z,endIndex:z});return}}}const sharedRel={along:0,squaredDistance:0};function getPointSegmentRelationship(t,e,n,r){const i=n[0],g=n[1],y=r[0],k=r[1],L=y-i,$=k-g;let V=0,z=i,re=g;return(L!==0||$!==0)&&(V=clamp(((t-i)*L+(e-g)*$)/(L*L+$*$),0,1),z+=L*V,re+=$*V),sharedRel.along=V,sharedRel.squaredDistance=toFixed(squaredDistance$1(t,e,z,re),10),sharedRel}function interpolateCoordinate(t,e){const n=t.length;let r=Math.floor(e);const i=e-r;r>=n?r-=n:r<0&&(r+=n);let g=r+1;g>=n&&(g-=n);const y=t[r],k=y[0],L=y[1],$=t[g],V=$[0]-k,z=$[1]-L;return[k+V*i,L+z*i]}class Draw extends PointerInteraction{constructor(e){const n=e;n.stopDown||(n.stopDown=FALSE),super(n),this.on,this.once,this.un,this.shouldHandle_=!1,this.downPx_=null,this.downTimeout_,this.lastDragTime_,this.pointerType_,this.freehand_=!1,this.source_=e.source?e.source:null,this.features_=e.features?e.features:null,this.snapTolerance_=e.snapTolerance?e.snapTolerance:12,this.type_=e.type,this.mode_=getMode(this.type_),this.stopClick_=!!e.stopClick,this.minPoints_=e.minPoints?e.minPoints:this.mode_==="Polygon"?3:2,this.maxPoints_=this.mode_==="Circle"?2:e.maxPoints?e.maxPoints:1/0,this.finishCondition_=e.finishCondition?e.finishCondition:TRUE,this.geometryLayout_=e.geometryLayout?e.geometryLayout:"XY";let r=e.geometryFunction;if(!r){const i=this.mode_;if(i==="Circle")r=(g,y,k)=>{const L=y||new Circle([NaN,NaN]),$=fromUserCoordinate(g[0]),V=squaredDistance($,fromUserCoordinate(g[g.length-1]));return L.setCenterAndRadius($,Math.sqrt(V),this.geometryLayout_),L};else{let g;i==="Point"?g=Point:i==="LineString"?g=LineString:i==="Polygon"&&(g=Polygon),r=(y,k,L)=>(k?i==="Polygon"?y[0].length?k.setCoordinates([y[0].concat([y[0][0]])],this.geometryLayout_):k.setCoordinates([],this.geometryLayout_):k.setCoordinates(y,this.geometryLayout_):k=new g(y,this.geometryLayout_),k)}}this.geometryFunction_=r,this.dragVertexDelay_=e.dragVertexDelay!==void 0?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new VectorLayer({source:new VectorSource({useSpatialIndex:!1,wrapX:e.wrapX?e.wrapX:!1}),style:e.style?e.style:getDefaultStyleFunction(),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:noModifierKeys,this.freehandCondition_,e.freehand?this.freehandCondition_=always:this.freehandCondition_=e.freehandCondition?e.freehandCondition:shiftKeyOnly,this.traceCondition_,this.setTrace(e.trace||!1),this.traceState_={active:!1},this.traceSource_=e.traceSource||e.source||null,this.addChangeListener(InteractionProperty.ACTIVE,this.updateState_)}setTrace(e){let n;e?e===!0?n=always:n=e:n=never,this.traceCondition_=n}setMap(e){super.setMap(e),this.updateState_()}getOverlay(){return this.overlay_}handleEvent(e){e.originalEvent.type===EventType.CONTEXTMENU&&e.originalEvent.preventDefault(),this.freehand_=this.mode_!=="Point"&&this.freehandCondition_(e);let n=e.type===MapBrowserEventType.POINTERMOVE,r=!0;return!this.freehand_&&this.lastDragTime_&&e.type===MapBrowserEventType.POINTERDRAG&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,n=!0):this.lastDragTime_=void 0,this.shouldHandle_&&this.downTimeout_!==void 0&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0)),this.freehand_&&e.type===MapBrowserEventType.POINTERDRAG&&this.sketchFeature_!==null?(this.addToDrawing_(e.coordinate),r=!1):this.freehand_&&e.type===MapBrowserEventType.POINTERDOWN?r=!1:n&&this.getPointerCount()<2?(r=e.type===MapBrowserEventType.POINTERMOVE,r&&this.freehand_?(this.handlePointerMove_(e),this.shouldHandle_&&e.originalEvent.preventDefault()):(e.originalEvent.pointerType==="mouse"||e.type===MapBrowserEventType.POINTERDRAG&&this.downTimeout_===void 0)&&this.handlePointerMove_(e)):e.type===MapBrowserEventType.DBLCLICK&&(r=!1),super.handleEvent(e)&&r}handleDownEvent(e){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=e.pixel,this.finishCoordinate_||this.startDrawing_(e.coordinate),!0):this.condition_(e)?(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(()=>{this.handlePointerMove_(new MapBrowserEvent(MapBrowserEventType.POINTERMOVE,e.map,e.originalEvent,!1,e.frameState))},this.dragVertexDelay_),this.downPx_=e.pixel,!0):(this.lastDragTime_=void 0,!1)}deactivateTrace_(){this.traceState_={active:!1}}toggleTraceState_(e){if(!this.traceSource_||!this.traceCondition_(e))return;if(this.traceState_.active){this.deactivateTrace_();return}const n=this.getMap(),r=n.getCoordinateFromPixel([e.pixel[0]-this.snapTolerance_,e.pixel[1]+this.snapTolerance_]),i=n.getCoordinateFromPixel([e.pixel[0]+this.snapTolerance_,e.pixel[1]-this.snapTolerance_]),g=boundingExtent([r,i]),y=this.traceSource_.getFeaturesInExtent(g);if(y.length===0)return;const k=getTraceTargets(e.coordinate,y);k.length&&(this.traceState_={active:!0,startPx:e.pixel.slice(),targets:k,targetIndex:-1})}addOrRemoveTracedCoordinates_(e,n){const r=e.startIndex<=e.endIndex,i=e.startIndex<=n;r===i?r&&n>e.endIndex||!r&&n<e.endIndex?this.addTracedCoordinates_(e,e.endIndex,n):(r&&n<e.endIndex||!r&&n>e.endIndex)&&this.removeTracedCoordinates_(n,e.endIndex):(this.removeTracedCoordinates_(e.startIndex,e.endIndex),this.addTracedCoordinates_(e,e.startIndex,n))}removeTracedCoordinates_(e,n){if(e===n)return;let r=0;if(e<n){const i=Math.ceil(e);let g=Math.floor(n);g===n&&(g-=1),r=g-i+1}else{const i=Math.floor(e);let g=Math.ceil(n);g===n&&(g+=1),r=i-g+1}r>0&&this.removeLastPoints_(r)}addTracedCoordinates_(e,n,r){if(n===r)return;const i=[];if(n<r){const g=Math.ceil(n);let y=Math.floor(r);y===r&&(y-=1);for(let k=g;k<=y;++k)i.push(getCoordinate(e.coordinates,k))}else{const g=Math.floor(n);let y=Math.ceil(r);y===r&&(y+=1);for(let k=g;k>=y;--k)i.push(getCoordinate(e.coordinates,k))}i.length&&this.appendCoordinates(i)}updateTrace_(e){const n=this.traceState_;if(!n.active||n.targetIndex===-1&&distance(n.startPx,e.pixel)<this.snapTolerance_)return;const r=getTraceTargetUpdate(e.coordinate,n,this.getMap(),this.snapTolerance_);if(n.targetIndex!==r.index){if(n.targetIndex!==-1){const L=n.targets[n.targetIndex];this.removeTracedCoordinates_(L.startIndex,L.endIndex)}const k=n.targets[r.index];this.addTracedCoordinates_(k,k.startIndex,r.endIndex)}else{const k=n.targets[n.targetIndex];this.addOrRemoveTracedCoordinates_(k,r.endIndex)}n.targetIndex=r.index;const i=n.targets[n.targetIndex];i.endIndex=r.endIndex;const g=interpolateCoordinate(i.coordinates,i.endIndex),y=this.getMap().getPixelFromCoordinate(g);e.coordinate=g,e.pixel=[Math.round(y[0]),Math.round(y[1])]}handleUpEvent(e){let n=!0;if(this.getPointerCount()===0){this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(e);const r=this.traceState_.active;if(this.toggleTraceState_(e),this.shouldHandle_){const i=!this.finishCoordinate_;i&&this.startDrawing_(e.coordinate),!i&&this.freehand_?this.finishDrawing():!this.freehand_&&(!i||this.mode_==="Point")&&(this.atFinish_(e.pixel,r)?this.finishCondition_(e)&&this.finishDrawing():this.addToDrawing_(e.coordinate)),n=!1}else this.freehand_&&this.abortDrawing()}return!n&&this.stopClick_&&e.preventDefault(),n}handlePointerMove_(e){if(this.pointerType_=e.originalEvent.pointerType,this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){const n=this.downPx_,r=e.pixel,i=n[0]-r[0],g=n[1]-r[1],y=i*i+g*g;if(this.shouldHandle_=this.freehand_?y>this.squaredClickTolerance_:y<=this.squaredClickTolerance_,!this.shouldHandle_)return}if(!this.finishCoordinate_){this.createOrUpdateSketchPoint_(e.coordinate.slice());return}this.updateTrace_(e),this.modifyDrawing_(e.coordinate)}atFinish_(e,n){let r=!1;if(this.sketchFeature_){let i=!1,g=[this.finishCoordinate_];const y=this.mode_;if(y==="Point")r=!0;else if(y==="Circle")r=this.sketchCoords_.length===2;else if(y==="LineString")i=!n&&this.sketchCoords_.length>this.minPoints_;else if(y==="Polygon"){const k=this.sketchCoords_;i=k[0].length>this.minPoints_,g=[k[0][0],k[0][k[0].length-2]],n?g=[k[0][0]]:g=[k[0][0],k[0][k[0].length-2]]}if(i){const k=this.getMap();for(let L=0,$=g.length;L<$;L++){const V=g[L],z=k.getPixelFromCoordinate(V),re=e[0]-z[0],ie=e[1]-z[1],j=this.freehand_?1:this.snapTolerance_;if(r=Math.sqrt(re*re+ie*ie)<=j,r){this.finishCoordinate_=V;break}}}}return r}createOrUpdateSketchPoint_(e){this.sketchPoint_?this.sketchPoint_.getGeometry().setCoordinates(e):(this.sketchPoint_=new Feature(new Point(e)),this.updateSketchFeatures_())}createOrUpdateCustomSketchLine_(e){this.sketchLine_||(this.sketchLine_=new Feature);const n=e.getLinearRing(0);let r=this.sketchLine_.getGeometry();r?(r.setFlatCoordinates(n.getLayout(),n.getFlatCoordinates()),r.changed()):(r=new LineString(n.getFlatCoordinates(),n.getLayout()),this.sketchLine_.setGeometry(r))}startDrawing_(e){const n=this.getMap().getView().getProjection(),r=getStrideForLayout(this.geometryLayout_);for(;e.length<r;)e.push(0);this.finishCoordinate_=e,this.mode_==="Point"?this.sketchCoords_=e.slice():this.mode_==="Polygon"?(this.sketchCoords_=[[e.slice(),e.slice()]],this.sketchLineCoords_=this.sketchCoords_[0]):this.sketchCoords_=[e.slice(),e.slice()],this.sketchLineCoords_&&(this.sketchLine_=new Feature(new LineString(this.sketchLineCoords_)));const i=this.geometryFunction_(this.sketchCoords_,void 0,n);this.sketchFeature_=new Feature,this.geometryName_&&this.sketchFeature_.setGeometryName(this.geometryName_),this.sketchFeature_.setGeometry(i),this.updateSketchFeatures_(),this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART,this.sketchFeature_))}modifyDrawing_(e){const n=this.getMap(),r=this.sketchFeature_.getGeometry(),i=n.getView().getProjection(),g=getStrideForLayout(this.geometryLayout_);let y,k;for(;e.length<g;)e.push(0);this.mode_==="Point"?k=this.sketchCoords_:this.mode_==="Polygon"?(y=this.sketchCoords_[0],k=y[y.length-1],this.atFinish_(n.getPixelFromCoordinate(e))&&(e=this.finishCoordinate_.slice())):(y=this.sketchCoords_,k=y[y.length-1]),k[0]=e[0],k[1]=e[1],this.geometryFunction_(this.sketchCoords_,r,i),this.sketchPoint_&&this.sketchPoint_.getGeometry().setCoordinates(e),r.getType()==="Polygon"&&this.mode_!=="Polygon"?this.createOrUpdateCustomSketchLine_(r):this.sketchLineCoords_&&this.sketchLine_.getGeometry().setCoordinates(this.sketchLineCoords_),this.updateSketchFeatures_()}addToDrawing_(e){const n=this.sketchFeature_.getGeometry(),r=this.getMap().getView().getProjection();let i,g;const y=this.mode_;return y==="LineString"||y==="Circle"?(this.finishCoordinate_=e.slice(),g=this.sketchCoords_,g.length>=this.maxPoints_&&(this.freehand_?g.pop():i=!0),g.push(e.slice()),this.geometryFunction_(g,n,r)):y==="Polygon"&&(g=this.sketchCoords_[0],g.length>=this.maxPoints_&&(this.freehand_?g.pop():i=!0),g.push(e.slice()),i&&(this.finishCoordinate_=g[0]),this.geometryFunction_(this.sketchCoords_,n,r)),this.createOrUpdateSketchPoint_(e.slice()),this.updateSketchFeatures_(),i?this.finishDrawing():this.sketchFeature_}removeLastPoints_(e){if(!this.sketchFeature_)return;const n=this.sketchFeature_.getGeometry(),r=this.getMap().getView().getProjection(),i=this.mode_;for(let g=0;g<e;++g){let y;if(i==="LineString"||i==="Circle"){if(y=this.sketchCoords_,y.splice(-2,1),y.length>=2){this.finishCoordinate_=y[y.length-2].slice();const k=this.finishCoordinate_.slice();y[y.length-1]=k,this.createOrUpdateSketchPoint_(k)}this.geometryFunction_(y,n,r),n.getType()==="Polygon"&&this.sketchLine_&&this.createOrUpdateCustomSketchLine_(n)}else if(i==="Polygon"){y=this.sketchCoords_[0],y.splice(-2,1);const k=this.sketchLine_.getGeometry();if(y.length>=2){const L=y[y.length-2].slice();y[y.length-1]=L,this.createOrUpdateSketchPoint_(L)}k.setCoordinates(y),this.geometryFunction_(this.sketchCoords_,n,r)}if(y.length===1){this.abortDrawing();break}}this.updateSketchFeatures_()}removeLastPoint(){this.removeLastPoints_(1)}finishDrawing(){const e=this.abortDrawing_();if(!e)return null;let n=this.sketchCoords_;const r=e.getGeometry(),i=this.getMap().getView().getProjection();return this.mode_==="LineString"?(n.pop(),this.geometryFunction_(n,r,i)):this.mode_==="Polygon"&&(n[0].pop(),this.geometryFunction_(n,r,i),n=r.getCoordinates()),this.type_==="MultiPoint"?e.setGeometry(new MultiPoint([n])):this.type_==="MultiLineString"?e.setGeometry(new MultiLineString([n])):this.type_==="MultiPolygon"&&e.setGeometry(new MultiPolygon([n])),this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND,e)),this.features_&&this.features_.push(e),this.source_&&this.source_.addFeature(e),e}abortDrawing_(){this.finishCoordinate_=null;const e=this.sketchFeature_;return this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0),this.deactivateTrace_(),e}abortDrawing(){const e=this.abortDrawing_();e&&this.dispatchEvent(new DrawEvent(DrawEventType.DRAWABORT,e))}appendCoordinates(e){const n=this.mode_,r=!this.sketchFeature_;r&&this.startDrawing_(e[0]);let i;if(n==="LineString"||n==="Circle")i=this.sketchCoords_;else if(n==="Polygon")i=this.sketchCoords_&&this.sketchCoords_.length?this.sketchCoords_[0]:[];else return;r&&i.shift(),i.pop();for(let y=0;y<e.length;y++)this.addToDrawing_(e[y]);const g=e[e.length-1];this.sketchFeature_=this.addToDrawing_(g),this.modifyDrawing_(g)}extend(e){const r=e.getGeometry();this.sketchFeature_=e,this.sketchCoords_=r.getCoordinates();const i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.sketchPoint_=new Feature(new Point(i)),this.updateSketchFeatures_(),this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART,this.sketchFeature_))}updateSketchFeatures_(){const e=[];this.sketchFeature_&&e.push(this.sketchFeature_),this.sketchLine_&&e.push(this.sketchLine_),this.sketchPoint_&&e.push(this.sketchPoint_);const n=this.overlay_.getSource();n.clear(!0),n.addFeatures(e)}updateState_(){const e=this.getMap(),n=this.getActive();(!e||!n)&&this.abortDrawing(),this.overlay_.setMap(n?e:null)}}function getDefaultStyleFunction(){const t=createEditingStyle();return function(e,n){return t[e.getGeometry().getType()]}}function getMode(t){switch(t){case"Point":case"MultiPoint":return"Point";case"LineString":case"MultiLineString":return"LineString";case"Polygon":case"MultiPolygon":return"Polygon";case"Circle":return"Circle";default:throw new Error("Invalid type: "+t)}}const disableDoubleClickZoom=t=>{t.getInteractions().forEach(e=>{e instanceof DoubleClickZoom&&e.setActive(!1)})},enableDoubleClickZoom=t=>{t.getInteractions().forEach(e=>{e instanceof DoubleClickZoom&&e.setActive(!0)})},changeCursor=(t,e)=>{const n=t.getViewport();n&&(n.style.cursor=e)},useDrawLineManager=(t,e)=>{const n=vue.ref([]),r=vue.ref("km"),i=Ie=>{r.value=Ie};let g;const y=vue.ref(!1),k=()=>{V(),disableDoubleClickZoom(t),changeCursor(t,"crosshair"),t.on("pointermove",ie),t.getViewport().addEventListener("mouseout",()=>{g&&g.classList.add("hidden")}),oe(),y.value=!0};let L,$;const V=()=>{L=new VectorSource,$=new VectorLayer({source:L,zIndex:1e3,style:{"fill-color":"rgba(255, 255, 255, 0.2)","stroke-color":"#ffcc33","stroke-width":2,"circle-radius":7,"circle-fill-color":"#ffcc33"}}),t==null||t.addLayer($)};let z,re;const ie=Ie=>{if(Ie.dragging)return;let Oe="点击选择起点";z&&(Oe="单击继续,双击结束"),g&&(g.innerHTML=Oe,re.setPosition(Ie.coordinate),g.classList.remove("hidden"))};let j;const oe=()=>{j=new Draw({source:L,type:"LineString",style:new Style({fill:new Fill({color:"rgba(255, 255, 255, 0.2)"}),stroke:new Stroke({color:"rgba(255,204,51)",lineDash:[10,10],width:2}),image:new CircleStyle({radius:5,stroke:new Stroke({color:"rgba(0, 0, 0, 0.7)"}),fill:new Fill({color:"rgba(255, 255, 255, 0.2)"})})}),condition:Oe=>Oe.originalEvent.target.tagName!=="DIV"}),t==null||t.addInteraction(j),pe(),ue();let Ie;j.on("drawstart",function(Oe){var qe;z=Oe.feature,z.set("randomId",ae());let Ve;Ie=(qe=z.getGeometry())==null?void 0:qe.on("change",function(Et){const Lt=Et.target,Fe=computedDistance(Lt,r.value);Ve=Lt.getLastCoordinate(),le&&Fe&&(le.innerHTML=Fe),de.setPosition(Ve)})}),j.on("drawend",function(){var Oe,Ve,qe;if(le&&(le.className="ol-tooltip ol-tooltip-static ol-tooltip-measure"),le!=null&&le.innerHTML){const Et=(z==null?void 0:z.get("randomId"))||ae();n.value.push({id:Et,value:le==null?void 0:le.innerHTML}),le.innerHTML=`${le.innerHTML}<div class="ol-tooltip-delete-button" data-id="${Et}"><i class="map-iconfont icon-delete"></i></div>`}(Oe=document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button"))==null||Oe.addEventListener("click",Et=>{var Fe;Et.preventDefault(),Et.stopPropagation();const Lt=(Fe=Et.target)==null?void 0:Fe.getAttribute("data-id");Lt&&Ce(Lt)}),de.setOffset([0,-7]),z=null,le=null,pe(),Ie&&unByKey(Ie),(qe=(Ve=e.getProps())==null?void 0:Ve.lineDrawEnd)==null||qe.call(Ve,n.value)})},ae=()=>Math.random().toString(36).substring(2,9);let le,de;const pe=()=>{le!=null&&le.parentNode&&le.parentNode.removeChild(le),le=document.createElement("div"),le.className="ol-tooltip ol-tooltip-measure",de=new Overlay({element:le,offset:[0,-15],positioning:"bottom-center",stopEvent:!1,insertFirst:!1}),t==null||t.addOverlay(de)},ue=()=>{g!=null&&g.parentNode&&g.parentNode.removeChild(g),g=document.createElement("div"),g.className="ol-tooltip hidden",re=new Overlay({element:g,offset:[15,0],positioning:"center-left"}),t==null||t.addOverlay(re)},he=()=>{n.value.forEach((Ie,Oe)=>{var Et,Lt;const Ve=document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");Ve[Oe]&&((Lt=(Et=Ve[Oe])==null?void 0:Et.parentNode)==null||Lt.removeChild(Ve[Oe]));const qe=L.getFeatures();qe[Oe]&&L.removeFeature(qe[Oe])}),_e(),enableDoubleClickZoom(t),y.value=!1},Ce=Ie=>{var Ve,qe,Et,Lt;const Oe=n.value.findIndex(Fe=>Fe.id===Ie);if(Oe!==-1){n.value.splice(Oe,1);const Fe=document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");Fe[Oe]&&((qe=(Ve=Fe[Oe])==null?void 0:Ve.parentNode)==null||qe.removeChild(Fe[Oe]));const $e=L.getFeatures();$e[Oe]&&L.removeFeature($e[Oe])}(Lt=(Et=e.getProps())==null?void 0:Et.lineDrawEnd)==null||Lt.call(Et,n.value)},_e=()=>{if(n.value=[],document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach(Ie=>{var Oe;(Oe=Ie==null?void 0:Ie.parentNode)==null||Oe.removeChild(Ie)}),L.clear(),j){const Ie=t.getInteractions().getArray().find(Oe=>getUid(Oe)===getUid(j));Ie&&t.removeInteraction(Ie)}t.removeLayer($),g!=null&&g.parentNode&&g.parentNode.removeChild(g),le!=null&&le.parentNode&&le.parentNode.removeChild(le)};return{open:k,close:he,deleteLine:Ce,setUnit:i,getState:()=>y.value}},computedDistance=(t,e)=>{const r=getLength(t);let i="";switch(e){case"m":i=`${Math.round(r*100)/100} m`;break;case"km":i=`${Math.round(r/1e3*100)/100} km`;break;case"nm":i=`${Math.round(r/1.852*100)/100} nm`;break}return i},useDrawPolygonManager=(t,e)=>{let n,r;const i=()=>{g(),changeCursor(t,"crosshair")},g=()=>{L(),le(),ue(),ie()};let y=null,k=null;const L=()=>{if(y&&k)return;const _e=new VectorSource,xe=new VectorLayer({source:_e,style:new Style({stroke:new Stroke({color:"#fbcc33",width:2})})});y=xe,k=_e,t.on("pointermove",V),t.addLayer(xe),t.on(["dblclick"],function(Ie){z&&(Ie.stopPropagation(),Ie.preventDefault())})};let $;const V=_e=>{if(_e.dragging)return;const xe=$?"单击继续,双击结束":"点击选择起点";de&&(de.innerHTML=xe,pe.setPosition(_e.coordinate))};let z,re=!1;const ie=()=>{if(n){de!=null&&de.parentNode&&de.parentNode.removeChild(de);const _e=n.getGeometry();if(!_e)return;const xe=j(_e,"nm");oe&&(oe.innerHTML=`
|
|
204
|
+
`,y=document.createElement("div");return y.className="ship-overlay-selected",y.innerHTML=g,y},createLabelStyle=(t,e)=>{const{shipData:n,blinking:r}=e.getProperties(),{lon:i,lat:g}=n,y=createLabelElement(e);i&&g&&addOverlay(t,fromLonLat([i,g]),y,{...n,blinking:r})},createLabelElement=t=>{const e=document.createElement("div");e.className="ship-overlay-box",e.style.position="relative";const n=t.getProperties(),{shipData:r,blinking:i,blinkingColor:g,name:y}=n,{lon:k,lat:L}=r,$=vue.createVNode({setup(){return useShipOverlay({selected:i,name:y,color:g,existDevice:r==null?void 0:r.existDevice,existMobile:r==null?void 0:r.existMobile,existWaterGauge:r==null?void 0:r.existWaterGauge})}});return vue.render($,e),e},getRightIcons=t=>{const e=[];return t.existDevice&&e.push(""),t.existMobile&&e.push(""),t.existWaterGauge&&e.push(""),e};function generateBase64Icon(t,e,n="left-bottom",r=2){const i=document.createElement("canvas"),g=i.getContext("2d"),y=2,k=14,L=window.devicePixelRatio||1;g.font="Normal 12px map-iconfont";const V=g.measureText(t).width;g.font="Normal 14px map-iconfont";const z=e.map(ue=>({width:g.measureText(getIconFont(ue)).width,height:14})),re=z.reduce((ue,he)=>ue+he.width,0),ie=(e.length-1)*r,j=y+16+y,oe=y+V+re+ie+y*2,ae=k+oe,le=k+j;i.width=ae*L,i.height=le*L,g.scale(L,L),g.clearRect(0,0,ae,le),g.beginPath(),g.moveTo(0,0),g.lineTo(k,k),g.strokeStyle="#FFF",g.lineWidth=1,g.stroke(),g.fillStyle="#FFF",g.fillRect(k,k,oe,j),g.font="Normal 12px map-iconfont",g.textBaseline="middle";const de=k+y+j/2;g.strokeStyle="#ffffff",g.lineWidth=1,g.strokeText(t,k+y,de),g.fillStyle="#000000",g.fillText(t,k+y,de),g.font="Normal 12px map-iconfont",g.fillStyle="#3370ff";let pe=k+y+V+r;return e.forEach((ue,he)=>{const Ce=k+y+j/2;g.fillText(getIconFont(ue),pe,Ce),pe+=z[he].width+r}),i.toDataURL("image/png")}const createLabelFeatureStyle=t=>{const{name:e,rightIcons:n}=t.getProperties(),r=generateBase64Icon(e,n,"top-right");return new Style({image:new Icon({src:r,anchor:[0,0]})})},useShipManager=t=>{let e=null,n=null;const r=new VectorSource,i=new VectorImageLayer({source:r,className:"zh-map--ship-layer",renderBuffer:300,zIndex:101}),g=new VectorSource,y=new VectorLayer({source:g,className:"zh-map--ship-label-layer",zIndex:102,updateWhileInteracting:!1,updateWhileAnimating:!1,declutter:!0});t==null||t.addLayer(i),t==null||t.addLayer(y);let k="",L={},$={};const V=_e=>{if(!_e||!t)return;const xe=(n==null?void 0:n.id)||(e==null?void 0:e.get("id"));if(n){const Ie=_e.filter(Oe=>Oe.id===xe);Ie.length===0?_e.push(n):n=Ie[0]}ie(),j(!0),Ce(_e),re()},z=_e=>{const xe=(n==null?void 0:n.id)||(e==null?void 0:e.get("id")),Ie=fromLonLat([_e==null?void 0:_e.lon,_e==null?void 0:_e.lat]),Oe=_e.fill||"#04C900",Ve=getShipDirectPath(_e),qe=new Feature({geometry:new Point(Ie),shipData:_e,id:_e.id,name:_e.cnname||"未命名船舶",selected:_e.id===xe,rightIcons:getRightIcons(_e),blinking:L[_e.id]||!1,blinkingColor:$[_e.id]||"",color:Oe,direct:Ve,isHighlight:!1});return qe.set("clickGeometry",new Circle(Ie)),qe},re=async()=>{if(!n||!t)return;let xe=t.getOverlays().getArray().find(Ie=>Ie.get("class")=="ship-overlay-selected");if(console.log("selectedOverlay----------",xe),xe){const Ie=selectedShipElement(t,n);await xe.setElement(Ie),await xe.setPosition(fromLonLat([n.lon,n.lat]))}else xe=selectedShipStyle(t,n),xe&&t.addOverlay(xe);setTimeout(()=>{var Ie;xe&&((Ie=xe.get("element"))!=null&&Ie.parentElement)&&(xe.get("element").parentElement.style.display="block")},20)},ie=()=>{t&&r&&(r.clear(),g.clear(),j())},j=_e=>{const xe=t.getOverlays().getArray().filter(Ie=>Ie.get("class")=="zh-map-ship-overlay");if(xe&&xe.length>0){for(let Ie=0;Ie<xe.length;Ie++)if(!_e&&xe[Ie].get("class")!=="ship-overlay-selected"){const Oe=xe[Ie];Oe.setPosition(void 0),t.removeOverlay(Oe),Oe.dispose()}}},oe=(_e,xe)=>{L=_e,$=xe;const Ie=t.getOverlays().getArray(),Oe=r.getFeatures();for(const Ve in L){const qe=L[Ve],Et=Ie.find(Fe=>Fe.getId()==="label-"+Ve),Lt=Oe.find(Fe=>Ve===Fe.get("id"));if(Et&&Lt){Lt.set("blinking",qe),Lt.set("blinkingColor",$[Ve]||"");const Fe=Et.getElement(),$e=createLabelElement(Lt),ze=$e.querySelector(".ship-overlay-line"),Ue=Fe==null?void 0:Fe.querySelector(".ship-overlay-line");Fe&&Fe!==$e&&(Ue&&ze&&ze.replaceWith(Ue),Et.setElement($e))}}},ae=_e=>{if(!t)return;const xe=r.getFeatures(),Ie=g.getFeatures(),Oe=e?e.get("id"):"",Ve=xe.filter(Fe=>Fe.get("id")!==Oe),qe=Ie==null?void 0:Ie.filter(Fe=>Fe.get("id")!==Oe),Et=new Map;_e.forEach(Fe=>{Et.set(Fe.id,!0)});const Lt=t.getOverlays().getArray();Ve.forEach(Fe=>{const $e=Fe.get("id");if(!Et.has($e))Fe.setStyle([]);else{const Ue=Fe.getStyle();(Ue==null?void 0:Ue.length)==0&&Fe.setStyle(createShipStyle(t,Fe))}const ze=Lt.find(Ue=>Ue.getId()==="label-"+$e);ze&&ze.setPosition(void 0)}),qe.forEach(Fe=>{const $e=Fe.get("id");if(!Et.has($e))Fe.setStyle([]);else{const ze=Fe.getStyle();(ze==null?void 0:ze.length)==0&&Fe.setStyle(createLabelFeatureStyle(Fe))}})},le=_e=>{if(_e){console.log("选中",_e);const xe=r.getFeatures().find(Ie=>Ie.get("id")===_e.id);xe&&(e=xe),n=_e,re()}else console.log("取消选中"),n=null,e=null,ue()},de=debounce((_e,xe,Ie)=>{if(_e){const Oe=_e.get("shipData"),Ve=_e.get("id");if(t.getTargetElement().style.cursor=Ve?"pointer":"",xe==="click"&&(le(Oe),Ie&&Ie(Ve)),xe==="hover"){k&&k!==Ve&&pe(),k=Ve;const qe=r.getFeatures().find(Et=>Et.get("id")===k);qe==null||qe.set("isHighlight",!0),qe==null||qe.setStyle(createShipStyle(t,qe))}}else t.getTargetElement().style.cursor="",pe()},10),pe=()=>{const _e=k?r.getFeatures().find(xe=>xe.get("id")===k):null;k=null,_e==null||_e.set("isHighlight",!1),_e==null||_e.setStyle(createShipStyle(t,_e))},ue=()=>{try{const xe=t.getOverlays().getArray().find(Ie=>Ie.get("class")=="ship-overlay-selected");xe&&xe.setPosition(void 0)}catch(_e){console.log(_e)}},he=_e=>{const xe=fromLonLat([_e==null?void 0:_e.lon,_e==null?void 0:_e.lat]),Ie=new Feature({geometry:new Point(xe),name:_e.cnname||_e.enname||_e.id||"未命名船舶",rightIcons:getRightIcons(_e)});Ie.set("id",_e.id);const Oe=createLabelFeatureStyle(Ie);return Ie.setStyle(Oe),Ie},Ce=_e=>{const xe=t.getView().getZoom();_e.forEach(Ie=>{const Oe=z(Ie);if(Oe.setStyle(createShipStyle(t,Oe)),r.addFeature(Oe),(n==null?void 0:n.id)==Ie.id||xe>=MAP_ZOOM.shipModelMin)if(L[Ie.id])createLabelStyle(t,Oe);else{const Ve=he(Ie);g.addFeature(Ve)}})};return{render:V,selected:le,filter:ae,blinking:oe,clear:ie,handleShipMapEvent:de}},useLayerManager=t=>{const e=()=>t==null?void 0:t.getLayers(),n=vue.ref("vector"),r=()=>n.value,i=L=>{n.value=L;const $=e();$&&($==null||$.getArray().forEach(V=>{(V.className_==="vector"||V.className_==="satellite")&&V.setVisible(V.className_===L)}))},g=vue.ref(!1);return{getLayers:e,getGreenTileVisible:()=>g.value,setGreenTileVisible:L=>{if(L!==g.value){if(L){const $=e();if(!$.getArray().find(z=>z.className_==="greenTile")){const z=new TileLayer({source:new XYZ({url:BASE_MAP_LINK.greenTile}),visible:L,zIndex:2,className:"greenTile"});$.push(z)}}else{const $=e(),V=$.getArray().find(z=>z.className_==="greenTile");V&&$.remove(V)}g.value=L}},getShowLayerType:r,setShowLayerType:i}},usePropsManager=()=>{const t=vue.ref();return{setProps:r=>{t.value=r},getProps:()=>t.value}},usePositionManager=t=>{const e="zh-map-location-layer";let n,r,i=null,g=null;const y=j=>{if(!(!j||j.length===0)){if(r||(r=new VectorSource),r.clear(),g){const oe=j.find(ae=>ae.id===g.id);oe?g=oe:j.push(g)}j.forEach(oe=>{k(oe)}),n||(n=new VectorLayer({className:e,source:r,zIndex:100}),t==null||t.addLayer(n))}},k=j=>{const oe=getZoom(),[ae,le]=j.latLon.split(","),de=new Feature({geometry:new Point(fromLonLat([Number(ae),Number(le)]))});de.setStyle(L(j,oe,j.id===(g==null?void 0:g.id))),de.set("loactionData",j),r.addFeature(de)},L=(j,oe,ae)=>{const le={image:new Icon({src:ae&&j.selectedPath||j.defaultPath,scale:.5*oe/10})};return j.name&&(le.text=new Text({text:j.name,font:"12px sans-serif",fill:new Fill({color:"#000000"}),backgroundFill:new Fill({color:"#FFFFFF"}),offsetY:30})),new Style(le)},$=()=>{if(i){const j=i.get("loactionData").id;r.getFeatures().forEach(oe=>{oe.get("loactionData").id!==j&&r.removeFeature(oe)})}else r.clear()},V=()=>{const j=i.get("loactionData"),oe=getZoom();r.getFeatures().forEach(le=>{le.get("loactionData").id===j.id&&(le==null||le.setStyle(L(j,oe,!1)))}),g=null,i=null},z=j=>{j?(re(),ie(j)):clearSelectedPort()},re=()=>{if(i){const j=i.get("loactionData"),oe=getZoom();i.setStyle(L(j,oe,!1))}},ie=j=>{const oe=r.getFeatures();g=j,i=oe.find(ae=>ae.get("loactionData").id===j.id)};return{render:y,selected:z,clearSelected:V,clear:$}},DrawEventType={DRAWSTART:"drawstart",DRAWEND:"drawend",DRAWABORT:"drawabort"};class DrawEvent extends BaseEvent{constructor(e,n){super(e),this.feature=n}}function getTraceTargets(t,e){const n=[];for(let r=0;r<e.length;++r){const g=e[r].getGeometry();appendGeometryTraceTargets(t,g,n)}return n}function getSquaredDistance(t,e){return squaredDistance$1(t[0],t[1],e[0],e[1])}function getCoordinate(t,e){const n=t.length;return e<0?t[e+n]:e>=n?t[e-n]:t[e]}function getCumulativeSquaredDistance(t,e,n){let r,i;e<n?(r=e,i=n):(r=n,i=e);const g=Math.ceil(r),y=Math.floor(i);if(g>y){const L=interpolateCoordinate(t,r),$=interpolateCoordinate(t,i);return getSquaredDistance(L,$)}let k=0;if(r<g){const L=interpolateCoordinate(t,r),$=getCoordinate(t,g);k+=getSquaredDistance(L,$)}if(y<i){const L=getCoordinate(t,y),$=interpolateCoordinate(t,i);k+=getSquaredDistance(L,$)}for(let L=g;L<y-1;++L){const $=getCoordinate(t,L),V=getCoordinate(t,L+1);k+=getSquaredDistance($,V)}return k}function appendGeometryTraceTargets(t,e,n){if(e instanceof LineString){appendTraceTarget(t,e.getCoordinates(),!1,n);return}if(e instanceof MultiLineString){const r=e.getCoordinates();for(let i=0,g=r.length;i<g;++i)appendTraceTarget(t,r[i],!1,n);return}if(e instanceof Polygon){const r=e.getCoordinates();for(let i=0,g=r.length;i<g;++i)appendTraceTarget(t,r[i],!0,n);return}if(e instanceof MultiPolygon){const r=e.getCoordinates();for(let i=0,g=r.length;i<g;++i){const y=r[i];for(let k=0,L=y.length;k<L;++k)appendTraceTarget(t,y[k],!0,n)}return}if(e instanceof GeometryCollection){const r=e.getGeometries();for(let i=0;i<r.length;++i)appendGeometryTraceTargets(t,r[i],n);return}}const sharedUpdateInfo={index:-1,endIndex:NaN};function getTraceTargetUpdate(t,e,n,r){const i=t[0],g=t[1];let y=1/0,k=-1,L=NaN;for(let z=0;z<e.targets.length;++z){const re=e.targets[z],ie=re.coordinates;let j=1/0,oe;for(let ae=0;ae<ie.length-1;++ae){const le=ie[ae],de=ie[ae+1],pe=getPointSegmentRelationship(i,g,le,de);pe.squaredDistance<j&&(j=pe.squaredDistance,oe=ae+pe.along)}j<y&&(y=j,re.ring&&e.targetIndex===z&&(re.endIndex>re.startIndex?oe<re.startIndex&&(oe+=ie.length):re.endIndex<re.startIndex&&oe>re.startIndex&&(oe-=ie.length)),L=oe,k=z)}const $=e.targets[k];let V=$.ring;if(e.targetIndex===k&&V){const z=interpolateCoordinate($.coordinates,L),re=n.getPixelFromCoordinate(z);distance(re,e.startPx)>r&&(V=!1)}if(V){const z=$.coordinates,re=z.length,ie=$.startIndex,j=L;if(ie<j){const oe=getCumulativeSquaredDistance(z,ie,j);getCumulativeSquaredDistance(z,ie,j-re)<oe&&(L-=re)}else{const oe=getCumulativeSquaredDistance(z,ie,j);getCumulativeSquaredDistance(z,ie,j+re)<oe&&(L+=re)}}return sharedUpdateInfo.index=k,sharedUpdateInfo.endIndex=L,sharedUpdateInfo}function appendTraceTarget(t,e,n,r){const i=t[0],g=t[1];for(let y=0,k=e.length-1;y<k;++y){const L=e[y],$=e[y+1],V=getPointSegmentRelationship(i,g,L,$);if(V.squaredDistance===0){const z=y+V.along;r.push({coordinates:e,ring:n,startIndex:z,endIndex:z});return}}}const sharedRel={along:0,squaredDistance:0};function getPointSegmentRelationship(t,e,n,r){const i=n[0],g=n[1],y=r[0],k=r[1],L=y-i,$=k-g;let V=0,z=i,re=g;return(L!==0||$!==0)&&(V=clamp(((t-i)*L+(e-g)*$)/(L*L+$*$),0,1),z+=L*V,re+=$*V),sharedRel.along=V,sharedRel.squaredDistance=toFixed(squaredDistance$1(t,e,z,re),10),sharedRel}function interpolateCoordinate(t,e){const n=t.length;let r=Math.floor(e);const i=e-r;r>=n?r-=n:r<0&&(r+=n);let g=r+1;g>=n&&(g-=n);const y=t[r],k=y[0],L=y[1],$=t[g],V=$[0]-k,z=$[1]-L;return[k+V*i,L+z*i]}class Draw extends PointerInteraction{constructor(e){const n=e;n.stopDown||(n.stopDown=FALSE),super(n),this.on,this.once,this.un,this.shouldHandle_=!1,this.downPx_=null,this.downTimeout_,this.lastDragTime_,this.pointerType_,this.freehand_=!1,this.source_=e.source?e.source:null,this.features_=e.features?e.features:null,this.snapTolerance_=e.snapTolerance?e.snapTolerance:12,this.type_=e.type,this.mode_=getMode(this.type_),this.stopClick_=!!e.stopClick,this.minPoints_=e.minPoints?e.minPoints:this.mode_==="Polygon"?3:2,this.maxPoints_=this.mode_==="Circle"?2:e.maxPoints?e.maxPoints:1/0,this.finishCondition_=e.finishCondition?e.finishCondition:TRUE,this.geometryLayout_=e.geometryLayout?e.geometryLayout:"XY";let r=e.geometryFunction;if(!r){const i=this.mode_;if(i==="Circle")r=(g,y,k)=>{const L=y||new Circle([NaN,NaN]),$=fromUserCoordinate(g[0]),V=squaredDistance($,fromUserCoordinate(g[g.length-1]));return L.setCenterAndRadius($,Math.sqrt(V),this.geometryLayout_),L};else{let g;i==="Point"?g=Point:i==="LineString"?g=LineString:i==="Polygon"&&(g=Polygon),r=(y,k,L)=>(k?i==="Polygon"?y[0].length?k.setCoordinates([y[0].concat([y[0][0]])],this.geometryLayout_):k.setCoordinates([],this.geometryLayout_):k.setCoordinates(y,this.geometryLayout_):k=new g(y,this.geometryLayout_),k)}}this.geometryFunction_=r,this.dragVertexDelay_=e.dragVertexDelay!==void 0?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new VectorLayer({source:new VectorSource({useSpatialIndex:!1,wrapX:e.wrapX?e.wrapX:!1}),style:e.style?e.style:getDefaultStyleFunction(),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:noModifierKeys,this.freehandCondition_,e.freehand?this.freehandCondition_=always:this.freehandCondition_=e.freehandCondition?e.freehandCondition:shiftKeyOnly,this.traceCondition_,this.setTrace(e.trace||!1),this.traceState_={active:!1},this.traceSource_=e.traceSource||e.source||null,this.addChangeListener(InteractionProperty.ACTIVE,this.updateState_)}setTrace(e){let n;e?e===!0?n=always:n=e:n=never,this.traceCondition_=n}setMap(e){super.setMap(e),this.updateState_()}getOverlay(){return this.overlay_}handleEvent(e){e.originalEvent.type===EventType.CONTEXTMENU&&e.originalEvent.preventDefault(),this.freehand_=this.mode_!=="Point"&&this.freehandCondition_(e);let n=e.type===MapBrowserEventType.POINTERMOVE,r=!0;return!this.freehand_&&this.lastDragTime_&&e.type===MapBrowserEventType.POINTERDRAG&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,n=!0):this.lastDragTime_=void 0,this.shouldHandle_&&this.downTimeout_!==void 0&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0)),this.freehand_&&e.type===MapBrowserEventType.POINTERDRAG&&this.sketchFeature_!==null?(this.addToDrawing_(e.coordinate),r=!1):this.freehand_&&e.type===MapBrowserEventType.POINTERDOWN?r=!1:n&&this.getPointerCount()<2?(r=e.type===MapBrowserEventType.POINTERMOVE,r&&this.freehand_?(this.handlePointerMove_(e),this.shouldHandle_&&e.originalEvent.preventDefault()):(e.originalEvent.pointerType==="mouse"||e.type===MapBrowserEventType.POINTERDRAG&&this.downTimeout_===void 0)&&this.handlePointerMove_(e)):e.type===MapBrowserEventType.DBLCLICK&&(r=!1),super.handleEvent(e)&&r}handleDownEvent(e){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=e.pixel,this.finishCoordinate_||this.startDrawing_(e.coordinate),!0):this.condition_(e)?(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(()=>{this.handlePointerMove_(new MapBrowserEvent(MapBrowserEventType.POINTERMOVE,e.map,e.originalEvent,!1,e.frameState))},this.dragVertexDelay_),this.downPx_=e.pixel,!0):(this.lastDragTime_=void 0,!1)}deactivateTrace_(){this.traceState_={active:!1}}toggleTraceState_(e){if(!this.traceSource_||!this.traceCondition_(e))return;if(this.traceState_.active){this.deactivateTrace_();return}const n=this.getMap(),r=n.getCoordinateFromPixel([e.pixel[0]-this.snapTolerance_,e.pixel[1]+this.snapTolerance_]),i=n.getCoordinateFromPixel([e.pixel[0]+this.snapTolerance_,e.pixel[1]-this.snapTolerance_]),g=boundingExtent([r,i]),y=this.traceSource_.getFeaturesInExtent(g);if(y.length===0)return;const k=getTraceTargets(e.coordinate,y);k.length&&(this.traceState_={active:!0,startPx:e.pixel.slice(),targets:k,targetIndex:-1})}addOrRemoveTracedCoordinates_(e,n){const r=e.startIndex<=e.endIndex,i=e.startIndex<=n;r===i?r&&n>e.endIndex||!r&&n<e.endIndex?this.addTracedCoordinates_(e,e.endIndex,n):(r&&n<e.endIndex||!r&&n>e.endIndex)&&this.removeTracedCoordinates_(n,e.endIndex):(this.removeTracedCoordinates_(e.startIndex,e.endIndex),this.addTracedCoordinates_(e,e.startIndex,n))}removeTracedCoordinates_(e,n){if(e===n)return;let r=0;if(e<n){const i=Math.ceil(e);let g=Math.floor(n);g===n&&(g-=1),r=g-i+1}else{const i=Math.floor(e);let g=Math.ceil(n);g===n&&(g+=1),r=i-g+1}r>0&&this.removeLastPoints_(r)}addTracedCoordinates_(e,n,r){if(n===r)return;const i=[];if(n<r){const g=Math.ceil(n);let y=Math.floor(r);y===r&&(y-=1);for(let k=g;k<=y;++k)i.push(getCoordinate(e.coordinates,k))}else{const g=Math.floor(n);let y=Math.ceil(r);y===r&&(y+=1);for(let k=g;k>=y;--k)i.push(getCoordinate(e.coordinates,k))}i.length&&this.appendCoordinates(i)}updateTrace_(e){const n=this.traceState_;if(!n.active||n.targetIndex===-1&&distance(n.startPx,e.pixel)<this.snapTolerance_)return;const r=getTraceTargetUpdate(e.coordinate,n,this.getMap(),this.snapTolerance_);if(n.targetIndex!==r.index){if(n.targetIndex!==-1){const L=n.targets[n.targetIndex];this.removeTracedCoordinates_(L.startIndex,L.endIndex)}const k=n.targets[r.index];this.addTracedCoordinates_(k,k.startIndex,r.endIndex)}else{const k=n.targets[n.targetIndex];this.addOrRemoveTracedCoordinates_(k,r.endIndex)}n.targetIndex=r.index;const i=n.targets[n.targetIndex];i.endIndex=r.endIndex;const g=interpolateCoordinate(i.coordinates,i.endIndex),y=this.getMap().getPixelFromCoordinate(g);e.coordinate=g,e.pixel=[Math.round(y[0]),Math.round(y[1])]}handleUpEvent(e){let n=!0;if(this.getPointerCount()===0){this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(e);const r=this.traceState_.active;if(this.toggleTraceState_(e),this.shouldHandle_){const i=!this.finishCoordinate_;i&&this.startDrawing_(e.coordinate),!i&&this.freehand_?this.finishDrawing():!this.freehand_&&(!i||this.mode_==="Point")&&(this.atFinish_(e.pixel,r)?this.finishCondition_(e)&&this.finishDrawing():this.addToDrawing_(e.coordinate)),n=!1}else this.freehand_&&this.abortDrawing()}return!n&&this.stopClick_&&e.preventDefault(),n}handlePointerMove_(e){if(this.pointerType_=e.originalEvent.pointerType,this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){const n=this.downPx_,r=e.pixel,i=n[0]-r[0],g=n[1]-r[1],y=i*i+g*g;if(this.shouldHandle_=this.freehand_?y>this.squaredClickTolerance_:y<=this.squaredClickTolerance_,!this.shouldHandle_)return}if(!this.finishCoordinate_){this.createOrUpdateSketchPoint_(e.coordinate.slice());return}this.updateTrace_(e),this.modifyDrawing_(e.coordinate)}atFinish_(e,n){let r=!1;if(this.sketchFeature_){let i=!1,g=[this.finishCoordinate_];const y=this.mode_;if(y==="Point")r=!0;else if(y==="Circle")r=this.sketchCoords_.length===2;else if(y==="LineString")i=!n&&this.sketchCoords_.length>this.minPoints_;else if(y==="Polygon"){const k=this.sketchCoords_;i=k[0].length>this.minPoints_,g=[k[0][0],k[0][k[0].length-2]],n?g=[k[0][0]]:g=[k[0][0],k[0][k[0].length-2]]}if(i){const k=this.getMap();for(let L=0,$=g.length;L<$;L++){const V=g[L],z=k.getPixelFromCoordinate(V),re=e[0]-z[0],ie=e[1]-z[1],j=this.freehand_?1:this.snapTolerance_;if(r=Math.sqrt(re*re+ie*ie)<=j,r){this.finishCoordinate_=V;break}}}}return r}createOrUpdateSketchPoint_(e){this.sketchPoint_?this.sketchPoint_.getGeometry().setCoordinates(e):(this.sketchPoint_=new Feature(new Point(e)),this.updateSketchFeatures_())}createOrUpdateCustomSketchLine_(e){this.sketchLine_||(this.sketchLine_=new Feature);const n=e.getLinearRing(0);let r=this.sketchLine_.getGeometry();r?(r.setFlatCoordinates(n.getLayout(),n.getFlatCoordinates()),r.changed()):(r=new LineString(n.getFlatCoordinates(),n.getLayout()),this.sketchLine_.setGeometry(r))}startDrawing_(e){const n=this.getMap().getView().getProjection(),r=getStrideForLayout(this.geometryLayout_);for(;e.length<r;)e.push(0);this.finishCoordinate_=e,this.mode_==="Point"?this.sketchCoords_=e.slice():this.mode_==="Polygon"?(this.sketchCoords_=[[e.slice(),e.slice()]],this.sketchLineCoords_=this.sketchCoords_[0]):this.sketchCoords_=[e.slice(),e.slice()],this.sketchLineCoords_&&(this.sketchLine_=new Feature(new LineString(this.sketchLineCoords_)));const i=this.geometryFunction_(this.sketchCoords_,void 0,n);this.sketchFeature_=new Feature,this.geometryName_&&this.sketchFeature_.setGeometryName(this.geometryName_),this.sketchFeature_.setGeometry(i),this.updateSketchFeatures_(),this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART,this.sketchFeature_))}modifyDrawing_(e){const n=this.getMap(),r=this.sketchFeature_.getGeometry(),i=n.getView().getProjection(),g=getStrideForLayout(this.geometryLayout_);let y,k;for(;e.length<g;)e.push(0);this.mode_==="Point"?k=this.sketchCoords_:this.mode_==="Polygon"?(y=this.sketchCoords_[0],k=y[y.length-1],this.atFinish_(n.getPixelFromCoordinate(e))&&(e=this.finishCoordinate_.slice())):(y=this.sketchCoords_,k=y[y.length-1]),k[0]=e[0],k[1]=e[1],this.geometryFunction_(this.sketchCoords_,r,i),this.sketchPoint_&&this.sketchPoint_.getGeometry().setCoordinates(e),r.getType()==="Polygon"&&this.mode_!=="Polygon"?this.createOrUpdateCustomSketchLine_(r):this.sketchLineCoords_&&this.sketchLine_.getGeometry().setCoordinates(this.sketchLineCoords_),this.updateSketchFeatures_()}addToDrawing_(e){const n=this.sketchFeature_.getGeometry(),r=this.getMap().getView().getProjection();let i,g;const y=this.mode_;return y==="LineString"||y==="Circle"?(this.finishCoordinate_=e.slice(),g=this.sketchCoords_,g.length>=this.maxPoints_&&(this.freehand_?g.pop():i=!0),g.push(e.slice()),this.geometryFunction_(g,n,r)):y==="Polygon"&&(g=this.sketchCoords_[0],g.length>=this.maxPoints_&&(this.freehand_?g.pop():i=!0),g.push(e.slice()),i&&(this.finishCoordinate_=g[0]),this.geometryFunction_(this.sketchCoords_,n,r)),this.createOrUpdateSketchPoint_(e.slice()),this.updateSketchFeatures_(),i?this.finishDrawing():this.sketchFeature_}removeLastPoints_(e){if(!this.sketchFeature_)return;const n=this.sketchFeature_.getGeometry(),r=this.getMap().getView().getProjection(),i=this.mode_;for(let g=0;g<e;++g){let y;if(i==="LineString"||i==="Circle"){if(y=this.sketchCoords_,y.splice(-2,1),y.length>=2){this.finishCoordinate_=y[y.length-2].slice();const k=this.finishCoordinate_.slice();y[y.length-1]=k,this.createOrUpdateSketchPoint_(k)}this.geometryFunction_(y,n,r),n.getType()==="Polygon"&&this.sketchLine_&&this.createOrUpdateCustomSketchLine_(n)}else if(i==="Polygon"){y=this.sketchCoords_[0],y.splice(-2,1);const k=this.sketchLine_.getGeometry();if(y.length>=2){const L=y[y.length-2].slice();y[y.length-1]=L,this.createOrUpdateSketchPoint_(L)}k.setCoordinates(y),this.geometryFunction_(this.sketchCoords_,n,r)}if(y.length===1){this.abortDrawing();break}}this.updateSketchFeatures_()}removeLastPoint(){this.removeLastPoints_(1)}finishDrawing(){const e=this.abortDrawing_();if(!e)return null;let n=this.sketchCoords_;const r=e.getGeometry(),i=this.getMap().getView().getProjection();return this.mode_==="LineString"?(n.pop(),this.geometryFunction_(n,r,i)):this.mode_==="Polygon"&&(n[0].pop(),this.geometryFunction_(n,r,i),n=r.getCoordinates()),this.type_==="MultiPoint"?e.setGeometry(new MultiPoint([n])):this.type_==="MultiLineString"?e.setGeometry(new MultiLineString([n])):this.type_==="MultiPolygon"&&e.setGeometry(new MultiPolygon([n])),this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND,e)),this.features_&&this.features_.push(e),this.source_&&this.source_.addFeature(e),e}abortDrawing_(){this.finishCoordinate_=null;const e=this.sketchFeature_;return this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0),this.deactivateTrace_(),e}abortDrawing(){const e=this.abortDrawing_();e&&this.dispatchEvent(new DrawEvent(DrawEventType.DRAWABORT,e))}appendCoordinates(e){const n=this.mode_,r=!this.sketchFeature_;r&&this.startDrawing_(e[0]);let i;if(n==="LineString"||n==="Circle")i=this.sketchCoords_;else if(n==="Polygon")i=this.sketchCoords_&&this.sketchCoords_.length?this.sketchCoords_[0]:[];else return;r&&i.shift(),i.pop();for(let y=0;y<e.length;y++)this.addToDrawing_(e[y]);const g=e[e.length-1];this.sketchFeature_=this.addToDrawing_(g),this.modifyDrawing_(g)}extend(e){const r=e.getGeometry();this.sketchFeature_=e,this.sketchCoords_=r.getCoordinates();const i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.sketchPoint_=new Feature(new Point(i)),this.updateSketchFeatures_(),this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART,this.sketchFeature_))}updateSketchFeatures_(){const e=[];this.sketchFeature_&&e.push(this.sketchFeature_),this.sketchLine_&&e.push(this.sketchLine_),this.sketchPoint_&&e.push(this.sketchPoint_);const n=this.overlay_.getSource();n.clear(!0),n.addFeatures(e)}updateState_(){const e=this.getMap(),n=this.getActive();(!e||!n)&&this.abortDrawing(),this.overlay_.setMap(n?e:null)}}function getDefaultStyleFunction(){const t=createEditingStyle();return function(e,n){return t[e.getGeometry().getType()]}}function getMode(t){switch(t){case"Point":case"MultiPoint":return"Point";case"LineString":case"MultiLineString":return"LineString";case"Polygon":case"MultiPolygon":return"Polygon";case"Circle":return"Circle";default:throw new Error("Invalid type: "+t)}}const disableDoubleClickZoom=t=>{t.getInteractions().forEach(e=>{e instanceof DoubleClickZoom&&e.setActive(!1)})},enableDoubleClickZoom=t=>{t.getInteractions().forEach(e=>{e instanceof DoubleClickZoom&&e.setActive(!0)})},changeCursor=(t,e)=>{const n=t.getViewport();n&&(n.style.cursor=e)},useDrawLineManager=(t,e)=>{const n=vue.ref([]),r=vue.ref("km"),i=Ie=>{r.value=Ie};let g;const y=vue.ref(!1),k=()=>{V(),disableDoubleClickZoom(t),changeCursor(t,"crosshair"),t.on("pointermove",ie),t.getViewport().addEventListener("mouseout",()=>{g&&g.classList.add("hidden")}),oe(),y.value=!0};let L,$;const V=()=>{L=new VectorSource,$=new VectorLayer({source:L,zIndex:1e3,style:{"fill-color":"rgba(255, 255, 255, 0.2)","stroke-color":"#ffcc33","stroke-width":2,"circle-radius":7,"circle-fill-color":"#ffcc33"}}),t==null||t.addLayer($)};let z,re;const ie=Ie=>{if(Ie.dragging)return;let Oe="点击选择起点";z&&(Oe="单击继续,双击结束"),g&&(g.innerHTML=Oe,re.setPosition(Ie.coordinate),g.classList.remove("hidden"))};let j;const oe=()=>{j=new Draw({source:L,type:"LineString",style:new Style({fill:new Fill({color:"rgba(255, 255, 255, 0.2)"}),stroke:new Stroke({color:"rgba(255,204,51)",lineDash:[10,10],width:2}),image:new CircleStyle({radius:5,stroke:new Stroke({color:"rgba(0, 0, 0, 0.7)"}),fill:new Fill({color:"rgba(255, 255, 255, 0.2)"})})}),condition:Oe=>Oe.originalEvent.target.tagName!=="DIV"}),t==null||t.addInteraction(j),pe(),ue();let Ie;j.on("drawstart",function(Oe){var qe;z=Oe.feature,z.set("randomId",ae());let Ve;Ie=(qe=z.getGeometry())==null?void 0:qe.on("change",function(Et){const Lt=Et.target,Fe=computedDistance(Lt,r.value);Ve=Lt.getLastCoordinate(),le&&Fe&&(le.innerHTML=Fe),de.setPosition(Ve)})}),j.on("drawend",function(){var Oe,Ve,qe;if(le&&(le.className="ol-tooltip ol-tooltip-static ol-tooltip-measure"),le!=null&&le.innerHTML){const Et=(z==null?void 0:z.get("randomId"))||ae();n.value.push({id:Et,value:le==null?void 0:le.innerHTML}),le.innerHTML=`${le.innerHTML}<div class="ol-tooltip-delete-button" data-id="${Et}"><i class="map-iconfont icon-delete"></i></div>`}(Oe=document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button"))==null||Oe.addEventListener("click",Et=>{var Fe;Et.preventDefault(),Et.stopPropagation();const Lt=(Fe=Et.target)==null?void 0:Fe.getAttribute("data-id");Lt&&Ce(Lt)}),de.setOffset([0,-7]),z=null,le=null,pe(),Ie&&unByKey(Ie),(qe=(Ve=e.getProps())==null?void 0:Ve.lineDrawEnd)==null||qe.call(Ve,n.value)})},ae=()=>Math.random().toString(36).substring(2,9);let le,de;const pe=()=>{le!=null&&le.parentNode&&le.parentNode.removeChild(le),le=document.createElement("div"),le.className="ol-tooltip ol-tooltip-measure",de=new Overlay({element:le,offset:[0,-15],positioning:"bottom-center",stopEvent:!1,insertFirst:!1}),t==null||t.addOverlay(de)},ue=()=>{g!=null&&g.parentNode&&g.parentNode.removeChild(g),g=document.createElement("div"),g.className="ol-tooltip hidden",re=new Overlay({element:g,offset:[15,0],positioning:"center-left"}),t==null||t.addOverlay(re)},he=()=>{n.value.forEach((Ie,Oe)=>{var Et,Lt;const Ve=document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");Ve[Oe]&&((Lt=(Et=Ve[Oe])==null?void 0:Et.parentNode)==null||Lt.removeChild(Ve[Oe]));const qe=L.getFeatures();qe[Oe]&&L.removeFeature(qe[Oe])}),_e(),enableDoubleClickZoom(t),y.value=!1},Ce=Ie=>{var Ve,qe,Et,Lt;const Oe=n.value.findIndex(Fe=>Fe.id===Ie);if(Oe!==-1){n.value.splice(Oe,1);const Fe=document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");Fe[Oe]&&((qe=(Ve=Fe[Oe])==null?void 0:Ve.parentNode)==null||qe.removeChild(Fe[Oe]));const $e=L.getFeatures();$e[Oe]&&L.removeFeature($e[Oe])}(Lt=(Et=e.getProps())==null?void 0:Et.lineDrawEnd)==null||Lt.call(Et,n.value)},_e=()=>{if(n.value=[],document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach(Ie=>{var Oe;(Oe=Ie==null?void 0:Ie.parentNode)==null||Oe.removeChild(Ie)}),L.clear(),j){const Ie=t.getInteractions().getArray().find(Oe=>getUid(Oe)===getUid(j));Ie&&t.removeInteraction(Ie)}t.removeLayer($),g!=null&&g.parentNode&&g.parentNode.removeChild(g),le!=null&&le.parentNode&&le.parentNode.removeChild(le)};return{open:k,close:he,deleteLine:Ce,setUnit:i,getState:()=>y.value}},computedDistance=(t,e)=>{const r=getLength(t);let i="";switch(e){case"m":i=`${Math.round(r*100)/100} m`;break;case"km":i=`${Math.round(r/1e3*100)/100} km`;break;case"nm":i=`${Math.round(r/1.852*100)/100} nm`;break}return i},useDrawPolygonManager=(t,e)=>{let n,r;const i=()=>{g(),changeCursor(t,"crosshair")},g=()=>{L(),le(),ue(),ie()};let y=null,k=null;const L=()=>{if(y&&k)return;const _e=new VectorSource,xe=new VectorLayer({source:_e,style:new Style({stroke:new Stroke({color:"#fbcc33",width:2})})});y=xe,k=_e,t.on("pointermove",V),t.addLayer(xe),t.on(["dblclick"],function(Ie){z&&(Ie.stopPropagation(),Ie.preventDefault())})};let $;const V=_e=>{if(_e.dragging)return;const xe=$?"单击继续,双击结束":"点击选择起点";de&&(de.innerHTML=xe,pe.setPosition(_e.coordinate))};let z,re=!1;const ie=()=>{if(n){de!=null&&de.parentNode&&de.parentNode.removeChild(de);const _e=n.getGeometry();if(!_e)return;const xe=j(_e,"nm");oe&&(oe.innerHTML=`
|
|
207
205
|
<span class="text">面积:${xe}${re?'<span class="error pl-12">超出可以绘画的距离</span>':""}</span>
|
|
208
206
|
`),oe&&(oe.innerHTML+='<span class="delete-icon" ><i class="map-iconfont icon-delete" /></div>');const Ie=_e.getCoordinates(),Oe=Ie[0][Ie[0].length-2];if(ae.setPosition(Oe),y){const qe=y.getSource();qe&&n&&(qe.clear(),qe.addFeature(n))}setTimeout(()=>{var qe;(qe=document.querySelector(".delete-icon"))==null||qe.addEventListener("click",()=>{var Et,Lt;console.log("delete"),he(),(Lt=(Et=e.getProps())==null?void 0:Et.areaDrawEnd)==null||Lt.call(Et,[])})},0);const Ve=getCenter(n.getGeometry().getExtent());t==null||t.getView().setCenter(Ve);return}z=new Draw({type:"Polygon",source:k,trace:!0,style:[new Style({stroke:new Stroke({color:"rgba(255, 255, 255, 1)",width:1.5,lineDash:[10,10]}),fill:new Fill({color:"rgba(255, 255, 255, 0.25)"})}),new Style({image:new CircleStyle({radius:5,fill:new Fill({color:"rgb(51,112,255, 1)"})}),geometry:function(_e){const xe=_e.getGeometry().getCoordinates();return new MultiPoint(xe)}})]}),t==null||t.addInteraction(z),z.on("drawstart",_e=>{var xe;$=_e.feature,r=(xe=$.getGeometry())==null?void 0:xe.on("change",Ie=>{const Oe=Ie.target,Ve=j(Oe,"nm"),Et=Oe.getCoordinates()[0],Lt=new LineString([Et[Et.length-2],Et[Et.length-1]]),Fe=computedDistance(Lt,"nm");if(re=Number(getLength(Lt)/1e3)>150,!Ve)return;const $e='<span class="error pl-4">超出可以绘画的距离</span>';oe&&(oe.innerHTML=`
|
|
209
207
|
<div class="text">
|