UNPKG

@web-map-service/map2d-app

Version:

基于openlayer的2D地图应用

2 lines (1 loc) 14.5 kB
(function(y,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("@web-map-service/map2d")):typeof define=="function"&&define.amd?define(["exports","@web-map-service/map2d"],d):(y=typeof globalThis<"u"?globalThis:y||self,d(y["map2d-app"]={},y.map2d))})(this,function(y,d){"use strict";let D=0;function I(){return{type:"element",install(r){const t=r,n=[],o=r.emitter,i={create(a){D++;const{type:c,...l}=a,s=i.getLayerByType(c);if(!s)return;const u=l.id!==void 0?l.id:D,m=s.create({...l,id:u});return m?(i.add(m),m.getSElement().setProps({appLayerType:c,appElementId:m.id}),o.emit("element:created",m),m):void 0},add(a){if(!a)return;const c=Array.isArray(a)?a:[a];for(const l of c){const s=i.getLayerByType(l.type);if(!s)return;s.add(l)}o.emit("element:added",c)},remove(a){if(!a)return;const c=Array.isArray(a)?a:[a];for(const l of c){const s=i.getLayerByType(l.type);if(!s)return;s.remove(l)}o.emit("element:removed",c)},getLayers(){return n},getLayerById(a){return n.find(l=>l.id===a)},getLayerByType(a){return n.find(l=>l.type===a)},addLayer(a){n.push(a)},removeLayer(a){const c=n.findIndex(l=>l.id===a.id);c!==-1&&n.splice(c,1)}};return t.element=i,t}}}var p=(e=>(e.create="element:created",e.add="element:added",e.update="element:update",e.remove="element:removed",e))(p||{});let A=0,O=0;function B(e,r){A++;const{container:{layerManager:t}}=e.map,n=t.create({}),o=[];return{id:A,name:r.name,type:r.type,sElementType:r.sElementType,create(a){return r.createElement(e,n,a)},add(a){o.findIndex(l=>l.id===a.id)===-1&&(n.add(a.getSElement()),o.push(a))},remove(a){const c=o.findIndex(l=>l.id===a.id);c!==-1&&(n.remove(a.getSElement()),o.splice(c,1))},getElements(){return o},getElementById(a){return o.find(l=>l.id===a)}}}function R(e,r,t){O++;const n=r.create({type:t.sElementType,data:t.data,rotate:t.rotate,style:t.style},!1);return{id:t.id??O,type:t.type,name:t.name,get props(){return n.props},setProps(i){return n.setProps(i)},setName(i){n.setName(i)},get rotate(){return n.rotate},setRotate(i){return n.setRotate(i)},getSElement(){return n},get style(){return n.style},setStyle(i){n.setStyle(i)},get data(){return n.data},setData(i){n.setData(i)}}}function S(e,r){const t=r.props.appLayerType,n=r.props.appElementId,o=e.element.getLayerByType(t);if(!o)return;const i=o.getElementById(n);if(i)return i}function w(e,r){const t=[],n=[];for(const o of r){const a=o.getOlFeature().getGeometry();if(!a)continue;const c=d.getElementData(a),l=S(e,o);l&&c&&(t.push(l),n.push({element:l,data:{data:c}}))}return M(n,e.emitter),t}function J(e){const r=e.element,t=e.data;t.data&&r.setData(t.data),t.name&&r.setName(t.name),t.rotate&&r.setRotate(t.rotate),t.style&&r.setStyle(t.style)}function M(e,r,t=!0){if(r.emit(p.update,e),!!t)for(const n of e)J(n)}const K="#f0fae6",k="ap";function Q(e,r,t){return R(e,r,{...t,...{type:k,sElementType:"circle",style:{fill:{color:K}}}})}function j(){let e;return{type:k,install(t){e=t;const n=B(e,{type:k,createElement:Q,sElementType:["circle"]});return e.element.addLayer(n),e}}}const ee="#f0fae6",$="area";function te(e,r,t){return R(e,r,{...t,...{type:$,style:{fill:{color:ee}}}})}function X(){let e;return{type:$,install(t){e=t;const n=B(e,{type:$,createElement:te,sElementType:["rect","polygon","circle"]});return e.element.addLayer(n),e}}}const ne=Object.freeze(Object.defineProperty({__proto__:null,ElementEmitter:p,createApPlugin:j,createAreaPlugin:X,createElementPlugin:I,getElementBySElement:S,setElementsData:M,syncElementsDataEmit:w},Symbol.toStringTag,{value:"Module"}));function re(e){for(const r of Object.values(e.tools))r.close()}function Y(){let e;return{type:"tool",install(t){return e=t,e.tools={},e}}}function oe(e){const{interactiveManager:r,emitter:t}=e.map;function n(a){e.emitter.emit("measure",a)}const o=d.createMeasureInteractive(r),i={enabled:!1,enable(){i.enabled||(i.enabled=!0,t.on("measure",n),o.enable())},use(a){o.use(a)},close(){i.enabled&&(i.enabled=!1,t.remove("measure",n),o.close())}};return i}function _(){let e;return{type:"measure",install(t){return e=t,e.tools.measure=oe(e),e}}}function le(e){var s;const{interactiveManager:r,emitter:t}=e.map,n=d.createDrawInteractive(r);let i=((s=e.element.getLayers())==null?void 0:s[0]).type,a;function c(u){const m=e.element.create({type:i,data:u.data,sElementType:a});e.emitter.emit("draw",m)}const l={enabled:!1,enable(){l.enabled||(l.enabled=!0,t.on("draw",c),l.use(i),n.enable())},use(u,m){i=u;const f=e.element.getLayerByType(i);f&&(a=m??f.sElementType[0],!(!a||!f.sElementType.includes(a))&&n.use(a))},close(){l.enabled&&(l.enabled=!1,t.remove("draw",c),n.close())}};return l}function C(){let e;return{type:"draw",install(t){return e=t,e.tools.draw=le(e),e}}}function ae(e){const{interactiveManager:r,emitter:t}=e.map,n=d.createSelectInteractive(r);let o=[];function i(c){const l=Array.isArray(c)?c:[];o=[];for(const s of l){const u=S(e,s);u&&o.push(u)}e.emitter.emit("element:select",o)}const a={enabled:!1,enable(){a.enabled||(a.enabled=!0,n.enable(),t.on("element:select",i))},add(c){n.add(c.getSElement())},remove(c){n.remove(c.getSElement())},getSelected(){return o},clean(){n.clean()},close(){a.enabled&&(a.enabled=!1,n.clean(),t.remove("element:select",i),n.close())}};return a}function N(){let e;return{type:"select",install(t){return e=t,e.tools.select=ae(e),e}}}function ie(e){const{interactiveManager:r,emitter:t}=e.map,n=d.createMoveInteractive(r,!1),{select:o}=e.tools;function i(l){if(!l||l.length===0)return;const s=w(e,l);e.emitter.emit("element:move",s)}e.emitter.on("element:select",l=>{c.clean();for(const s of l)c.add(s)});let a=[];const c={enabled:!1,add(l){!l||a.findIndex(u=>u.id===l.id)!==-1||(n.add(l.getSElement()),a.push(l))},remove(l){if(!l)return;const s=a.findIndex(u=>u.id===l.id);s!==-1&&(n.remove(l.getSElement()),a.splice(s,1))},clean(){n.clean(),a=[]},enable(){c.enabled||(c.enabled=!0,t.on("element:move",i),n.enable(),o.enable())},close(){c.enabled&&(c.enabled=!1,t.remove("element:move",i),n.close(),o.close())}};return c}function z(){let e;return{type:"move",install(t){return e=t,e.tools.move=ie(e),e}}}function ce(e){const{interactiveManager:r,emitter:t}=e.map,n=d.createModifyInteractive(r,!1),{select:o}=e.tools;function i(l){if(!l||l.length===0)return;const s=w(e,l);e.emitter.emit("element:modify",s)}e.emitter.on("element:select",l=>{c.clean();for(const s of l)c.add(s)});let a=[];const c={enabled:!1,add(l){a.findIndex(u=>u.id===l.id)===-1&&(n.add(l.getSElement()),a.push(l))},remove(l){n.remove(l.getSElement());const s=a.findIndex(u=>u.id===l.id);s!==-1&&a.splice(s,1)},clean(){n.clean(),a=[]},enable(){c.enabled||(c.enabled=!0,t.on("element:modify",i),n.enable(),o.enable())},close(){c.enabled&&(c.enabled=!1,t.remove("element:modify",i),n.close(),o.close())}};return c}function F(){let e;return{type:"modify",install(t){return e=t,e.tools.modify=ce(e),e}}}function se(e){const r=e.tools.move,t=e.tools.modify;function n(i){e.emitter.emit("element:edit",i)}const o={enabled:!1,enable(){o.enabled||(o.enabled=!0,r.enable(),t.enable(),e.emitter.on("element:move",n),e.emitter.on("element:modify",n))},close(){o.enabled&&(o.enabled=!1,r.clean(),t.clean(),r.close(),t.close(),e.emitter.remove("element:move",n),e.emitter.remove("element:modify",n))}};return o}function Z(){let e;return{type:"edit",depend:["select","move","modify"],install(t){return e=t,e.tools.edit=se(e),e}}}function E(e,r=new WeakMap){if(e===null||typeof e!="object")return e;if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(r.has(e))return r.get(e);const t=new e.constructor;return r.set(e,t),Array.isArray(e)?e.forEach((n,o)=>{t[o]=E(n,r)}):Object.keys(e).forEach(n=>{t[n]=E(e[n],r)}),t}function L(e){return e==null}function ue(e,r){const t=r.data.map(n=>n.element);e.element.add(t)}function me(e,r){const t=r.data.map(n=>n.element);e.element.remove(t)}function G(e,r,t=!1){var o,i,a,c;const n=[];for(const l of r.data){if((o=l.data)!=null&&o.data){const s=l.rawData.data,u=l.data.data;l.element.setData(t?s:u)}if((i=l.data)!=null&&i.style){const s=l.rawData.style,u=l.data.style;l.element.setStyle(t?s:u)}if((a=l.data)!=null&&a.name){const s=l.rawData.name,u=l.data.name;l.element.setName(t?s:u)}if((c=l.data)!=null&&c.rotate){const s=l.rawData.rotate,u=l.data.rotate;l.element.setRotate(t?s:u)}n.push(l.element)}return n}function fe(e){let r=[],n=-1,o=!1;function i(m){if(r.length>=50){r.shift(),r.push(m);return}r=r.slice(0,n+1),r.push(m),n++}function a(m){o=!0;const f=r[n];m==="next"&&f.type==="add"||m==="back"&&f.type==="remove"?ue(e,f):m==="next"&&f.type==="remove"||m==="back"&&f.type==="add"?me(e,f):f.type==="update"&&(m==="next"?G(e,f,!1):G(e,f,!0)),e.emitter.emit("history",{max:50,pointer:n,data:f.data,type:f.type}),o=!1}function c(m){if(o)return;const f=[];for(const g of m)f.push({element:g});i({type:"add",data:f})}function l(m){if(o)return;const f=[];for(const g of m)f.push({element:g.element,rawData:{data:E(g.element.data),style:E(g.element.style),name:E(g.element.name),rotate:E(g.element.rotate)},data:g.data});i({type:"update",data:f})}function s(m){if(o)return;const f=[];for(const g of m)f.push({element:g});i({type:"remove",data:f})}const u={enabled:!1,enable(){u.enabled||(e.emitter.on(p.add,c),e.emitter.on(p.remove,s),e.emitter.on(p.update,l),u.enabled=!0)},close(){u.enabled&&(e.emitter.remove(p.add,c),e.emitter.remove(p.remove,s),e.emitter.remove(p.update,l),u.enabled=!1)},next(){n!==r.length-1&&(n++,a("next"))},back(){n!==-1&&(a("back"),n--)},clean(){r=[]}};return u}function q(){let e;return{type:"history",install(t){return e=t,e.tools.history=fe(e),e}}}function de(e){const{emitter:r}=e.map;function t(i){e.emitter.emit("click",i)}function n(i){e.emitter.emit("move",i)}const o={enabled:!1,enable(){o.enabled||(o.enabled=!0,r.on("click",t),r.on("move",n))},close(){o.enabled&&(o.enabled=!1,r.remove("click",t),r.remove("move",n))}};return o}function H(){let e;return{type:"event",install(t){return e=t,e.tools.event=de(e),e}}}function ge(e){const[r,t]=e;if(r<=0)return[0,1];const n=Math.log2(r),o=n+t;let i;return 2**o>1?i=3:2**o===1?i=2:i=1,[n,i]}let T=[.25,8],h=1;function ye(e){const{view:r,baseMap:t}=e,n=t.getExtent(),o={enabled:!1,enable(){o.enabled||(o.enabled=!0)},setView(i){if(!o.enabled)return;T=ge(i);const[a,c]=T,l=r.getZoom();r.setMaxZoom(l+c),r.setMinZoom(l+a),e.emitter.emit("scale",{scale:h,range:T})},fit(i){if(!o.enabled)return;h=i;const a=n[3]-n[0],c=(a-a/h)/2,l=c,s=c,u=c+a/h,m=c+a/h;r.fit([l,s,u,m]),e.emitter.emit("scale",{scale:h,range:T})},close(){o.enabled&&(o.enabled=!1)}};return o}function U(){let e;return{type:"scale",install(t){return e=t,e.tools.scale=ye(e),e}}}function P(e,r){const t=r.getSElement();let n;if(t.type==="circle"){const o=t.data.radius;e==="left"&&(n=t.data.center[0]-o),e==="right"&&(n=t.data.center[0]+o),e==="top"&&(n=t.data.center[1]+o),e==="bottom"&&(n=t.data.center[1]-o)}else for(const o of t.data){if(e==="left"||e==="right"){if(L(n)){n=o[0];continue}if(e==="left"){n=n<o[0]?n:o[0];continue}if(e==="right"){n=n>o[0]?n:o[0];continue}}if(e==="top"||e==="bottom"){if(L(n)){n=o[1];continue}if(e==="top"){n=n>o[1]?n:o[1];continue}if(e==="bottom"){n=n<o[1]?n:o[1];continue}}}return n}function b(e,r){let t;for(const n of r){let o=!1;const i=P(e,n);if(L(t)){t=i;continue}e==="left"&&(o=t>i),e==="right"&&(o=t<i),e==="top"&&(o=t<i),e==="bottom"&&(o=t>i),o&&(t=i)}return t}function x(e,r,t,n){const o=[];for(const i of n){const a=i.getSElement(),c=P(e,i),l=t-c;let s=[];if(a.type==="circle"){let u,m;(e==="left"||e==="right")&&(u=a.data.center[0]+l,m=a.data.center[1]),(e==="top"||e==="bottom")&&(u=a.data.center[0],m=a.data.center[1]+l),e==="centerX"&&(u=t,m=a.data.center[1]),e==="centerY"&&(u=a.data.center[0],m=t),s={radius:a.data.radius,center:[u,m]}}else{if(s=[],e==="left"||e==="right")for(const u of a.data)s.push([u[0]+l,u[1]]);if(e==="top"||e==="bottom")for(const u of a.data)s.push([u[0],u[1]+l]);if(e==="centerX"){const u=P("left",i),f=(P("right",i)+u)/2-t;for(const v of a.data)s.push([v[0]-f,v[1]])}if(e==="centerY"){const u=P("top",i),m=P("bottom",i),f=(u+m)/2-t;for(const v of a.data)s.push([v[0],v[1]-f])}}o.push({element:i,data:{data:s}})}M(o,r.emitter),r.emitter.emit("rank",{elements:n,type:e,extreme:t})}function pe(e,r){const t=b("left",r);x("left",e,t,r)}function be(e,r){const t=b("right",r);x("right",e,t,r)}function ve(e,r){const t=b("top",r);x("top",e,t,r)}function Ee(e,r){const t=b("bottom",r);x("bottom",e,t,r)}function he(e,r){const t=b("left",r),n=b("right",r),o=(t+n)/2;x("centerX",e,o,r)}function Pe(e,r){const t=b("top",r),n=b("bottom",r),o=(t+n)/2;x("centerY",e,o,r)}function xe(e){const r=e.tools.select,t={enabled:!1,enable(){t.enabled||(t.enabled=!0)},use(n){if(!t.enabled)return;const o=r.getSelected();if(!(o.length<2)){if(n==="left"){pe(e,o);return}if(n==="right"){be(e,o);return}if(n==="centerX"){he(e,o);return}if(n==="centerY"){Pe(e,o);return}if(n==="top"){ve(e,o);return}if(n==="bottom"){Ee(e,o);return}}},close(){t.enabled&&(t.enabled=!1)}};return t}function V(){let e;return{type:"rank",depend:["select"],install(t){return e=t,e.tools.rank=xe(e),e}}}const Te=Object.freeze(Object.defineProperty({__proto__:null,closeTools:re,createDrawPlugin:C,createEditPlugin:Z,createEventPlugin:H,createHistoryPlugin:q,createMeasurePlugin:_,createModifyPlugin:F,createMovePlugin:z,createRankPlugin:V,createScalePlugin:U,createSelectPlugin:N,createToolPlugin:Y},Symbol.toStringTag,{value:"Module"})),W={ap:j(),area:X(),measure:_(),draw:C(),select:N(),move:z(),modify:F(),edit:Z(),history:q(),event:H(),scale:U(),rank:V()},Se=[{type:"ap"},{type:"area"}],we=[{type:"measure"},{type:"draw"},{type:"select"},{type:"move"},{type:"modify"},{type:"edit"},{type:"history"},{type:"event"},{type:"scale"},{type:"rank"}];function Me(e,r){for(const t of r)if(!e.getPluginByType(t))return!1;return!0}function ke(e,r,t){if(r.depend&&r.depend.length>0){for(const o of r.depend){const i=W[o];i&&e.use(i,t)}return Me(e,r.depend)}return!0}function $e(e,r){const t=r??Se.concat(we);e.use(I()),e.use(Y());for(const n of t){const o=W[n.type];e.use(o,r)}}function Le(e){const r=d.createMap({el:e.el,baseMap:e.baseMap,view:e.view}),{container:{baseMap:t},view:n}=r,o=[],i=d.events.emitter.createEmitter(),a={baseMap:t,view:n,emitter:i,get plugins(){return o},get map(){return r},getPluginByType(c){return o.find(l=>l.type===c)},use(c,l){return a.getPluginByType(c.type)||!ke(a,c,l)||(c.install(a,l),o.push(c)),a}};return $e(a,e.plugins),a}y.createApp=Le,y.elements=ne,y.tools=Te,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})});