jgis 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,6 +22,8 @@
22
22
  * **Unified Styling**:WMS 图层也能像 Vector 一样拥有动态高亮样式。
23
23
  * **🎨 灵活的样式系统**:
24
24
  * 支持根据图层、属性动态渲染高亮样式,完全控制权交给用户。
25
+ * **🗺️ 二三维API风格一致**:
26
+ * 二三维API风格一致,方便会一种框架的开发者快速理解和上手开发。
25
27
 
26
28
  ---
27
29
 
@@ -38,6 +40,7 @@ npm install ol
38
40
  npm install cesium
39
41
  ```
40
42
 
43
+
41
44
  ---
42
45
 
43
46
  ## 🗺️ 快速开始 (2D)
@@ -53,15 +56,26 @@ npm install cesium
53
56
  <script setup>
54
57
  import { onMounted } from 'vue';
55
58
  import 'ol/ol.css'; // ⚠️ 别忘了引入 OpenLayers 样式
56
- import { createMap2D } from 'jgis/2d';
59
+ import { useMap } from 'jgis/2d';
57
60
 
58
61
  onMounted(() => {
59
62
  // 初始化地图,会自动注册为全局激活实例
60
- createMap2D({
61
- target: 'map-container',
63
+ const { addMarker } = useMap('map-container', {
62
64
  center: [116.4, 39.9],
63
65
  zoom: 10
64
66
  });
67
+
68
+ addMarker('创建点位图层', [{ lon: 104.064839, lat: 30.548857 }], {
69
+ style: new Style({
70
+ image: new CircleStyle({
71
+ radius: 5,
72
+ fill: new Fill({ color: 'blue' })
73
+ })
74
+ })
75
+ })
76
+
77
+ createLayer('创建wms服务图层', { url: 'https://ahocevar.com/geoserver/wms', type: 'Wms', layers: 'topp:states' })
78
+
65
79
  });
66
80
  </script>
67
81
  ```
@@ -71,8 +85,7 @@ onMounted(() => {
71
85
  JGIS 的核心优势在于**同时处理 Vector 和 WMS 图层**,并提供统一的样式回调。
72
86
 
73
87
  ```javascript
74
- import { useSelect } from 'jgis/2d';
75
- import { Style, Stroke, Fill } from 'ol/style'; // 或从 jgis 导出
88
+ const { useSelect } = useMap('map-container');
76
89
 
77
90
  // 假设你有两个图层:一个是本地 Vector,一个是 Geoserver WMS
78
91
  const vectorLayer = ...;
@@ -87,9 +100,9 @@ const select = useSelect({
87
100
  multi: false,
88
101
 
89
102
  // 自定义高亮样式 (支持函数或对象)
90
- style: (feature) => {
103
+ style: (layerName, feature) => {
91
104
  // 自动识别数据来源
92
- const layer = feature.get('_origin_layer'); // WMS 注入的标记
105
+ const layer = feature.get('wms_layer_source'); // WMS 注入的标记
93
106
  const type = feature.get('type');
94
107
 
95
108
  // 根据业务逻辑返回不同样式
@@ -120,26 +133,116 @@ select.onSelect((res) => {
120
133
  // select.destroy();
121
134
  ```
122
135
 
136
+
137
+ ### 3. 异步调用
138
+
139
+ 如果创建地图的`useMap`在一个文件,而选择交互在另一个文件,可以使用异步调用。在文件中使用`onMapReady`和`getMapContext`方法来获取地图方法,而不需要传递跟地图相关的任何参数,但是必须指定地图容器的 id。例如:
140
+
141
+ ```js
142
+ import { onMapReady, getMapContext } from 'jgis/2d';
143
+
144
+ // 'map-container' 是地图容器的 id
145
+ onMapReady('map-container', ({ createLayer, flyTo }) => {
146
+
147
+ })
148
+
149
+
150
+ getMapContext('map-container').then(({ createLayer, flyTo }) => {
151
+
152
+ })
153
+
154
+ ```
155
+
156
+
123
157
  ---
124
158
 
125
159
  ## 🌍 快速开始 (3D)
126
160
 
127
161
  三维模块完全隔离,不会污染二维项目。
128
162
 
129
- ```javascript
130
- import { createMap3D, flyTo } from 'jgis/3d';
163
+ ### 1. 初始化地图
164
+
165
+ ```vue
166
+ <template>
167
+ <!-- ⚠️ 注意:必须给容器设置高度,否则地图无法显示 -->
168
+ <div id="map-container" style="height: 100vh; width: 100%;"></div>
169
+ </template>
170
+
171
+ <script setup>
172
+ import { onMounted } from 'vue';
173
+ import { useMap } from 'jgis/3d';
174
+
175
+ onMounted(() => {
176
+ // 初始化地图,会自动注册为全局激活实例
177
+ const { flyTo, addMarker } = useMap('map-container', {
178
+ center: [116.4, 39.9],
179
+ zoom: 10
180
+ });
181
+
182
+ addMarker(
183
+ '创建点位图层',
184
+ [
185
+ { lon: 104.397428, lat: 30.90923 },
186
+ { lon: 104.45343, lat: 30.83233 }
187
+ ],
188
+ {
189
+ style: (item) => new URL('./img.png', import.meta.url).href,
190
+ scale: 0.4,
191
+ // color: Cesium.Color.YELLOW,
192
+ disableDepthTestDistance: Number.POSITIVE_INFINITY,
193
+ scaleByDistance: new Cesium.NearFarScalar(1, 1, 100000, 0.2)
194
+ }
195
+ )
131
196
 
132
- // 初始化
133
- const viewer = createMap3D('cesium-container');
197
+ flyTo([104.397428, 30.90923, 10000], { duration: 1, pitch: -Math.PI / 2 })
134
198
 
135
- // 使用工具函数
136
- flyTo(viewer, {
137
- lng: 116.4,
138
- lat: 39.9,
139
- height: 2000
140
199
  });
200
+ </script>
201
+ ```
202
+
203
+ ### 2. 使用交互功能 (Select / Hover)
204
+
205
+
206
+ ```javascript
207
+ import { useMap } from 'jgis/3d';
208
+ const { useSelect } = useMap('map-container');
209
+
210
+
211
+ const { onSelect } = useSelect({
212
+ style: {
213
+ color: Cesium.Color.YELLOW,
214
+ scale: 0.5
215
+ }
216
+ })
217
+
218
+ onSelect((data) => {
219
+ console.log('获取的数据', data)
220
+ })
221
+
141
222
  ```
142
223
 
224
+
225
+
226
+ ### 3. 异步调用
227
+
228
+ 如果创建地图的`useMap`在一个文件,而选择交互在另一个文件,可以使用异步调用。在文件中使用`onMapReady`和`getMapContext`方法来获取地图方法,而不需要传递跟地图相关的任何参数,但是必须指定地图容器的 id。例如:
229
+
230
+ ```js
231
+ import { onMapReady, getMapContext } from 'jgis/3d';
232
+
233
+ // 'map-container' 是地图容器的 id
234
+ onMapReady('map-container', ({ createLayer, flyTo }) => {
235
+
236
+ })
237
+
238
+
239
+ getMapContext('map-container').then(({ createLayer, flyTo }) => {
240
+
241
+ })
242
+
243
+ ```
244
+
245
+
143
246
  ---
144
247
 
145
248
  ## 🛠️ 项目配置指南 (Vite & TS)
@@ -1,7 +1,7 @@
1
1
  import { mapConfigOptions, MapContext } from './types';
2
2
  /**
3
3
  * 创建地图
4
- * @param el 地图元素Id
4
+ * @param el 绑定地图元素Id
5
5
  * @param config 配置
6
6
  * @returns 地图方法和地图实例
7
7
  */
package/dist/2d/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var te=Object.defineProperty,re=Object.defineProperties;var ne=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var oe=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var q=(e,t,r)=>t in e?te(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R=(e,t)=>{for(var r in t||(t={}))oe.call(t,r)&&q(e,r,t[r]);if(Z)for(var r of Z(t))se.call(t,r)&&q(e,r,t[r]);return e},k=(e,t)=>re(e,ne(t));var I=(e,t,r)=>new Promise((n,o)=>{var s=c=>{try{a(r.next(c))}catch(u){o(u)}},i=c=>{try{a(r.throw(c))}catch(u){o(u)}},a=c=>c.done?n(c.value):Promise.resolve(c.value).then(s,i);a((r=r.apply(e,t)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("ol"),L=require("ol/layer"),w=require("ol/source"),A=require("ol/format"),ae=require("ol/Overlay"),T=require("ol/geom"),ce=require("ol/Feature");require("ol/extent");const p=require("ol/style"),ie=require("ol/events/condition.js"),le=require("ol/interaction/Select");var g=63710088e-1,ue={centimeters:g*100,centimetres:g*100,degrees:360/(2*Math.PI),feet:g*3.28084,inches:g*39.37,kilometers:g/1e3,kilometres:g/1e3,meters:g,metres:g,miles:g/1609.344,millimeters:g*1e3,millimetres:g*1e3,nauticalmiles:g/1852,radians:1,yards:g*1.0936};function W(e,t,r={}){const n={type:"Feature"};return(r.id===0||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=t||{},n.geometry=e,n}function C(e,t,r={}){if(!e)throw new Error("coordinates is required");if(!Array.isArray(e))throw new Error("coordinates must be an Array");if(e.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!G(e[0])||!G(e[1]))throw new Error("coordinates must contain numbers");return W({type:"Point",coordinates:e},t,r)}function fe(e,t,r={}){for(const o of e){if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(o[o.length-1].length!==o[0].length)throw new Error("First and last Position are not equivalent.");for(let s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error("First and last Position are not equivalent.")}return W({type:"Polygon",coordinates:e},t,r)}function ye(e,t="kilometers"){const r=ue[t];if(!r)throw new Error(t+" units is invalid");return e/r}function $(e){return e%(2*Math.PI)*180/Math.PI}function j(e){return e%360*Math.PI/180}function G(e){return!isNaN(e)&&e!==null&&!Array.isArray(e)}function ge(e){if(!e)throw new Error("coord is required");if(!Array.isArray(e)){if(e.type==="Feature"&&e.geometry!==null&&e.geometry.type==="Point")return[...e.geometry.coordinates];if(e.type==="Point")return[...e.coordinates]}if(Array.isArray(e)&&e.length>=2&&!Array.isArray(e[0])&&!Array.isArray(e[1]))return[...e];throw new Error("coord must be GeoJSON Point or an Array of numbers")}function de(e,t,r,n={}){const o=ge(e),s=j(o[0]),i=j(o[1]),a=j(r),c=ye(t,n.units),u=Math.asin(Math.sin(i)*Math.cos(c)+Math.cos(i)*Math.sin(c)*Math.cos(a)),d=s+Math.atan2(Math.sin(a)*Math.sin(c)*Math.cos(i),Math.cos(c)-Math.sin(i)*Math.sin(u)),x=$(d),l=$(u);return o[2]!==void 0?C([x,l,o[2]],n.properties):C([x,l],n.properties)}function me(e,t,r={}){const n=r.steps||64,o=r.properties?r.properties:!Array.isArray(e)&&e.type==="Feature"&&e.properties?e.properties:{},s=[];for(let i=0;i<n;i++)s.push(de(e,t,i*-360/n,r).geometry.coordinates);return s.push(s[0]),fe([s],o)}function J(e){return e.lttd&&e.lgtd?[Number(e.lgtd),Number(e.lttd)]:e.jd&&e.wd?[Number(e.jd),Number(e.wd)]:e.latitude&&e.longitude?[Number(e.longitude),Number(e.latitude)]:e.lon&&e.lat?[Number(e.lon),Number(e.lat)]:[0,0]}function B(e,t){e.getLayers().getArray().forEach(n=>{n.get("name")==t&&("setSource"in n&&n.setSource(null),"dispose"in n&&n.dispose(),e.removeLayer(n))})}function we(e,t,r){const n=[];let o;const s=r.type||"Point";t.forEach(a=>{switch(s){case"Point":o=be(a);break;case"LineString":o=Me(a);break;case"MultiLineString":o=Se(a);break;case"MultiPolygon":o=Pe(a);break;case"Polygon":o=Ee(a);break}if(!o)return;const c=new ce({geometry:o,data:a});c.set("layerName",e),n.push(c)});const i=new w.Vector;return n.length>0&&i.addFeatures(n),i}function he(e,t){return t.cqlFilter&&(t.cqlFilter?t.CQL_FILTER+=` and ${t.cqlFilter}`:t.CQL_FILTER=t.cqlFilter),new w.TileWMS({url:t.url,params:{LAYERS:t.layers,CQL_FILTER:t.CQL_FILTER},serverType:"geoserver",crossOrigin:"anonymous"})}function be(e){const t=J(e);if(t)return new T.Point(t)}function Me(e){return new T.LineString(e.coordinates)}function Se(e){return new T.MultiLineString(e.coordinates)}function Pe(e){return new T.MultiPolygon(e.coordinates)}function Ee(e){return new T.Polygon(e.coordinates)}function N(e,t){let r=null;return t.style?r=t.style:t.getStyle?r=(n,o)=>t.getStyle(e,n,o):r=Le(),r}function Le(){return(t,r)=>new p.Style({image:new p.Circle({radius:5,fill:new p.Fill({color:"red"})})})}function xe(e,t={}){const r=t.token||"dadcbbdb5206b626a29ca739686b3087",n=t.baseType||"img",o=t.noteType||"cia",s=new L.Tile({className:"tdt-base-layer",source:new w.XYZ({url:`http://t0.tianditu.com/DataServer?T=${n}_w&x={x}&y={y}&l={z}&tk=${r}`,maxZoom:t.maxZoom||18,minZoom:t.minZoom||2}),zIndex:t.zIndex||1});s.set("name","tdt-base-layer");const i=new L.Tile({className:"tdt-base-layer",source:new w.XYZ({url:`http://t0.tianditu.com/DataServer?T=${o}_w&x={x}&y={y}&l={z}&tk=${r}`,maxZoom:t.maxZoom||18,minZoom:t.minZoom||2}),zIndex:t.zIndex?t.zIndex+1:2});return i.set("name","tdt-baseNote-layer"),e.addLayer(s),e.addLayer(i),s}function U(e,t,r,n){(!n||!n.type)&&(n=Object.assign({},r,n));const o=n.type||"Point";let s;switch(o){case"GeoJSON":s=Fe(t,r,e,n);break;case"Wms":s=Te(t,e,n);break;case"Point":case"LineString":case"MultiLineString":case"Polygon":case"MultiPolygon":s=Ie(t,r,e,n);break;case"Circle":s=Ae(t,r,e,n);break;case"Overlay":s=Oe(t,r,e,n);break}return s}function ve(e,t){Array.isArray(t)?t.forEach(r=>{B(e,r)}):B(e,t)}function Fe(e,t,r,n){console.log(typeof t,t);const o=new A.GeoJSON().readFeatures(t,{dataProjection:"EPSG:4326",featureProjection:"EPSG:4326"}),s=new w.Vector;s.addFeatures(o);const i=new L.Vector({source:s,style:N(e,n),zIndex:n.zIndex||10});return i.set("name",e),i.set("type","webgl"),r.addLayer(i),i}function Te(e,t,r){const n=new L.Tile({opacity:r.opacity||1,source:he(e,r),zIndex:r.zIndex||10});return n.set("name",e),t.addLayer(n),n}function Ie(e,t,r,n){if(!t||t.length===0)return null;const o=new L.Vector({source:we(e,t,n),style:N(e,n),zIndex:n.zIndex||10});return o.set("name",e),o.set("type","webgl"),r.addLayer(o),o}function Ae(e,t,r,n){const o=J(t),s=me(o,n.radius,{steps:300,units:"meters"}),i=new A.GeoJSON().readFeature(s,{dataProjection:"EPSG:4326",featureProjection:"EPSG:4490"}),a=new w.Vector({wrapX:!1});a.addFeature(i);const c=new L.Vector({source:a,style:N(e,n),zIndex:n.zIndex?n.zIndex:10});return c.set("name",e),c.set("type","webgl"),r.addLayer(c),c}function Oe(e,t,r,n){const o=document.createElement("div"),s=new ae({element:o,stopEvent:!1,positioning:n.positioning||"bottom-center"});return s.set("name",e),s.set("type","webgl"),r.addOverlay(s),{overlayer:s,content:o}}const F=new Map,E={},v={},Re=(e,t)=>{F.has(e)&&console.warn(`Map with target '${e}' already exists. Overwriting...`),F.set(e,t),E[e]&&(E[e].forEach(r=>r(t)),delete E[e]),v[e]&&(v[e].forEach(r=>r(t)),delete v[e])};function D(e){const t=F.get(e);return t?Promise.resolve(t):(console.warn(`Map '${e}' not found. Make sure useMap() is called first.`),new Promise(r=>{v[e]=v[e]||[],v[e].push(r)}))}const ke=e=>{F.has(e)&&(F.delete(e),delete E[e])},H=(e,t)=>{const r=F.get(e);if(r){t(r);return}E[e]||(E[e]=[]),E[e].push(t)};function pe(e,t={}){if(!e&&!e.target)throw new Error("请传入地图容器");arguments.length===1&&typeof e=="object"&&(t=e,e=t.target);const n=Object.assign({zoom:10,center:[104.064839,30.548857],minZoom:2,maxZoom:19,projection:"EPSG:4326"},t),o=new V.Map({target:e,layers:[],view:new V.View({projection:n.projection,center:n.center,zoom:n.zoom,minZoom:n.minZoom,maxZoom:n.maxZoom})});return o.targetId=e,o}function je(e,t,r,n){U(e,t,r,k(R({},n),{type:"Point"}))}function Q(e,t,r){return new Promise((n,o)=>{e.getView().animate({center:t,duration:r.duration||1e3,zoom:r.zoom||X(e),rotation:r.rotation||0,easing:r.easing},n)})}function Y(e,t){const r=(t.extend[0]+t.extend[2])/2,n=(t.extend[1]+t.extend[3])/2;return Q(e,[r,n],t)}function Ne(e,t,r){const n=t.getGeometry().getExtent();return Y(e,k(R({},r),{extend:n}))}function _e(e){return e.getView().getProjection()}function X(e){return e.getView().getZoom()}function ze(e,t){e.getView().setZoom(t)}function Ze(e,t){e.un("click",()=>{}),e.un("pointermove",()=>{}),ke(t)}let P=null;function qe(e,t={}){const r=new A.GeoJSON;P=new le({condition:ie.click,multi:t.multi||!1,style:a=>{if(typeof t.getStyle=="function"){const c=a.get("layerName");return t.getStyle(c,a)}else return t.style},layers:t.layers?a=>t.layers.includes(a):void 0}),e.addInteraction(P);const n=P.getFeatures(),o=a=>I(null,null,function*(){const c=(t.layers||e.getLayers().getArray()).filter(h=>{const b=h.getSource();return h.getVisible()&&(b instanceof w.TileWMS||b instanceof w.ImageWMS)});if(c.length===0)return;const u=e.getView(),d=c.map(h=>I(null,null,function*(){const f=h.getSource().getFeatureInfoUrl(a.coordinate,u.getResolution(),u.getProjection(),{INFO_FORMAT:"application/json",FEATURE_COUNT:1});if(f)try{const M=yield(yield fetch(f)).json();if(M.features&&M.features.length>0){const m=r.readFeatures(M);return m.forEach(y=>{y.set("wms_layer_source",h),y.set("wms_event_source",a),y.set("layerName",h.get("name"))}),m}}catch(S){console.warn(S)}return[]})),l=(yield Promise.all(d)).flat();l.length>0&&(t.multi,n.extend(l),P.dispatchEvent({type:"select",selected:l,deselected:[],mapBrowserEvent:a}))});e.on("singleclick",o);const s=new Set;P.on("select",a=>{const c=n.getArray();if(c.length>0){const u=c.map(d=>({feature:d,properties:d.getProperties(),layer:d.get("wms_layer_source")||P.getLayer(d),event:d.get("wms_event_source")||a}));i(u)}else i(null)});const i=a=>s.forEach(c=>c(a));return{onSelect:a=>(s.add(a),()=>s.delete(a)),clear:()=>{s.clear(),n.clear()},destroy:()=>{e.removeInteraction(P),e.un("singleclick",o),s.clear()}}}function Ve(e,t={}){var x;const r=new A.GeoJSON,n=(x=t.debounceTime)!=null?x:200,o=new w.Vector,s=new L.Vector({source:o,map:e,style:t.style,zIndex:1e4,properties:{title:"JG_HOVER_LAYER"}});let i=null,a=null;const c=new Set,u=(l,h,b)=>{const f=l[0];if(i!==f)if(i=f,o.clear(),f?(o.addFeature(f),t.cursor!==!1&&(e.getTargetElement().style.cursor="pointer")):t.cursor!==!1&&(e.getTargetElement().style.cursor=""),f){const S={feature:f,layer:h,properties:f.getProperties(),coordinate:b};c.forEach(M=>M([S]))}else c.forEach(S=>S(null))},d=l=>{if(l.dragging)return;const h=l.pixel,b=l.coordinate;let f=!1;if(e.forEachFeatureAtPixel(h,(m,y)=>{f||y!==s&&(t.layers&&!t.layers.includes(y)||(f=!0,a&&clearTimeout(a),u([m],y,b)))}),f)return;i&&(i=null,o.clear(),e.getTargetElement().style.cursor="",c.forEach(m=>m(null))),a&&clearTimeout(a);const M=(t.layers||e.getLayers().getArray()).filter(m=>{const y=m.getSource();return m.getVisible()&&(y instanceof w.TileWMS||y instanceof w.ImageWMS)});M.length!==0&&(a=setTimeout(()=>I(null,null,function*(){const m=e.getView();for(const y of M){const _=y.getSource().getFeatureInfoUrl(b,m.getResolution(),m.getProjection(),{INFO_FORMAT:"application/json",FEATURE_COUNT:1});if(_)try{const O=yield(yield fetch(_)).json();if(O.features&&O.features.length>0){const z=r.readFeatures(O);z.forEach(ee=>ee.set("wms_layer_source",y)),u(z,y,b);return}}catch(K){}}}),n))};return e.on("pointermove",d),{onHover:l=>(c.add(l),()=>c.delete(l)),clear:()=>{o.clear(),i=null},destroy:()=>{e.un("pointermove",d),e.removeLayer(s),c.clear(),a&&clearTimeout(a)}}}const Ce=(e,t)=>{const r=pe(e,t);xe(r,t.baseLayers);const n={targetId:e,instance:r,addMarker:(o,s,i)=>je(r,o,s,i),createLayer:(o,s,i)=>U(r,o,s,i),removeLayer:o=>ve(r,o),useSelect:o=>qe(r,o),useHover:o=>Ve(r,o),flyTo:(o,s)=>Q(r,o,s),flyToByExtent:o=>Y(r,o),flyToByFeature:(o,s)=>Ne(r,o,s),getProjection:()=>_e(r),getZoom:()=>X(r),setZoom:o=>ze(r,o),getMapContext:o=>D(o),onMapReady:(o,s)=>H(o,s),destroyMap:()=>Ze(r,e)};return Re(e,n),n};function $e(e,t){H(e,t)}function Ge(e){return D(e)}exports.getMapContext=Ge;exports.onMapReady=$e;exports.useMap=Ce;
1
+ "use strict";var oe=Object.defineProperty,se=Object.defineProperties;var ae=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var ce=Object.prototype.hasOwnProperty,ie=Object.prototype.propertyIsEnumerable;var C=(e,t,r)=>t in e?oe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,N=(e,t)=>{for(var r in t||(t={}))ce.call(t,r)&&C(e,r,t[r]);if(V)for(var r of V(t))ie.call(t,r)&&C(e,r,t[r]);return e},j=(e,t)=>se(e,ae(t));var I=(e,t,r)=>new Promise((o,n)=>{var s=i=>{try{c(r.next(i))}catch(l){n(l)}},a=i=>{try{c(r.throw(i))}catch(l){n(l)}},c=i=>i.done?o(i.value):Promise.resolve(i.value).then(s,a);c((r=r.apply(e,t)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const $=require("ol"),L=require("ol/layer"),w=require("ol/source"),A=require("ol/format"),le=require("ol/Overlay"),T=require("ol/geom"),ue=require("ol/Feature");require("ol/extent");const p=require("ol/style"),fe=require("ol/control"),ye=require("ol/events/condition.js"),ge=require("ol/interaction/Select");var g=63710088e-1,de={centimeters:g*100,centimetres:g*100,degrees:360/(2*Math.PI),feet:g*3.28084,inches:g*39.37,kilometers:g/1e3,kilometres:g/1e3,meters:g,metres:g,miles:g/1609.344,millimeters:g*1e3,millimetres:g*1e3,nauticalmiles:g/1852,radians:1,yards:g*1.0936};function D(e,t,r={}){const o={type:"Feature"};return(r.id===0||r.id)&&(o.id=r.id),r.bbox&&(o.bbox=r.bbox),o.properties=t||{},o.geometry=e,o}function B(e,t,r={}){if(!e)throw new Error("coordinates is required");if(!Array.isArray(e))throw new Error("coordinates must be an Array");if(e.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!W(e[0])||!W(e[1]))throw new Error("coordinates must contain numbers");return D({type:"Point",coordinates:e},t,r)}function me(e,t,r={}){for(const n of e){if(n.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(n[n.length-1].length!==n[0].length)throw new Error("First and last Position are not equivalent.");for(let s=0;s<n[n.length-1].length;s++)if(n[n.length-1][s]!==n[0][s])throw new Error("First and last Position are not equivalent.")}return D({type:"Polygon",coordinates:e},t,r)}function we(e,t="kilometers"){const r=de[t];if(!r)throw new Error(t+" units is invalid");return e/r}function G(e){return e%(2*Math.PI)*180/Math.PI}function z(e){return e%360*Math.PI/180}function W(e){return!isNaN(e)&&e!==null&&!Array.isArray(e)}function he(e){if(!e)throw new Error("coord is required");if(!Array.isArray(e)){if(e.type==="Feature"&&e.geometry!==null&&e.geometry.type==="Point")return[...e.geometry.coordinates];if(e.type==="Point")return[...e.coordinates]}if(Array.isArray(e)&&e.length>=2&&!Array.isArray(e[0])&&!Array.isArray(e[1]))return[...e];throw new Error("coord must be GeoJSON Point or an Array of numbers")}function be(e,t,r,o={}){const n=he(e),s=z(n[0]),a=z(n[1]),c=z(r),i=we(t,o.units),l=Math.asin(Math.sin(a)*Math.cos(i)+Math.cos(a)*Math.sin(i)*Math.cos(c)),d=s+Math.atan2(Math.sin(c)*Math.sin(i)*Math.cos(a),Math.cos(i)-Math.sin(a)*Math.sin(l)),P=G(d),u=G(l);return n[2]!==void 0?B([P,u,n[2]],o.properties):B([P,u],o.properties)}function Se(e,t,r={}){const o=r.steps||64,n=r.properties?r.properties:!Array.isArray(e)&&e.type==="Feature"&&e.properties?e.properties:{},s=[];for(let a=0;a<o;a++)s.push(be(e,t,a*-360/o,r).geometry.coordinates);return s.push(s[0]),me([s],n)}function k(e,t){return typeof e!="object"||e===null?null:e.lttd&&e.lgtd?[Number(e.lgtd),Number(e.lttd)]:e.jd&&e.wd?[Number(e.jd),Number(e.wd)]:e.latitude&&e.longitude?[Number(e.longitude),Number(e.latitude)]:e.lon&&e.lat?[Number(e.lon),Number(e.lat)]:null}function J(e,t){e.getLayers().getArray().forEach(o=>{o.get("name")==t&&("setSource"in o&&o.setSource(null),"dispose"in o&&o.dispose(),e.removeLayer(o))})}function U(e,t,r,o=!1){const n=o?r.style||r.getStyle(e,t):void 0,s=o?999:-1;n&&typeof n.setZIndex=="function"&&n.setZIndex(s),t.setStyle(n)}function Le(e,t,r){if(!t)return;const o=r.time||300;let n=Date.now(),s=!1,a=0;t.running=!0;function c(){if(!t.running)return;const i=Date.now();i-n>=o&&(s=!s,n=i,U(e,t,r,s),t.changed()),a=requestAnimationFrame(c)}c(),t.clearFlash=()=>{t.running=!1,cancelAnimationFrame(a),t.setStyle(void 0)}}function Fe(e,t,r){var a,c;if(!r)return;let o=k(r);const n=(c=(a=H(e,t))==null?void 0:a.getFeatures)==null?void 0:c.call(a);return n?n.find(function(i){const l=i.getGeometry();return l&&l instanceof T.Geometry&&typeof l.intersectsCoordinate=="function"?l.intersectsCoordinate(o):!1}):void 0}function Me(e,t,r){const o=[];let n;const s=r.type||"Point";t.forEach(c=>{switch(s){case"Point":n=Pe(c);break;case"LineString":n=ve(c);break;case"MultiLineString":n=Ee(c);break;case"MultiPolygon":n=Te(c);break;case"Polygon":n=Ie(c);break}if(!n)return;const i=new ue({geometry:n,data:c});i.set("layerName",e),o.push(i)});const a=new w.Vector;return o.length>0&&a.addFeatures(o),a}function xe(e,t){return t.cqlFilter&&(t.cqlFilter?t.CQL_FILTER+=` and ${t.cqlFilter}`:t.CQL_FILTER=t.cqlFilter),new w.TileWMS({url:t.url,params:{LAYERS:t.layers,CQL_FILTER:t.CQL_FILTER},serverType:"geoserver",crossOrigin:"anonymous"})}function H(e,t){const r=Z(e,t);return r==null?void 0:r.getSource()}function Pe(e){const t=k(e);if(t)return new T.Point(t)}function ve(e){return new T.LineString(e.coordinates)}function Ee(e){return new T.MultiLineString(e.coordinates)}function Te(e){return new T.MultiPolygon(e.coordinates)}function Ie(e){return new T.Polygon(e.coordinates)}function O(e,t){let r=null;return t.style?r=t.style:t.getStyle?r=(o,n)=>t.getStyle(e,o,n):r=Ae(),r}function Ae(){return(t,r)=>new p.Style({image:new p.Circle({radius:5,fill:new p.Fill({color:"red"})})})}function ke(e,t={}){const r=t.token||"dadcbbdb5206b626a29ca739686b3087",o=t.baseType||"img",n=t.noteType||"cia",s=new L.Tile({className:"tdt-base-layer",source:new w.XYZ({url:`http://t0.tianditu.com/DataServer?T=${o}_w&x={x}&y={y}&l={z}&tk=${r}`,maxZoom:t.maxZoom||18,minZoom:t.minZoom||2}),zIndex:t.zIndex||1});s.set("name","tdt-base-layer");const a=new L.Tile({className:"tdt-base-layer",source:new w.XYZ({url:`http://t0.tianditu.com/DataServer?T=${n}_w&x={x}&y={y}&l={z}&tk=${r}`,maxZoom:t.maxZoom||18,minZoom:t.minZoom||2}),zIndex:t.zIndex?t.zIndex+1:2});return a.set("name","tdt-baseNote-layer"),e.addLayer(s),e.addLayer(a),s}function Q(e,t,r,o){(!o||!o.type)&&(o=Object.assign({},r,o));const n=o.type||"Point";let s;switch(n){case"GeoJSON":s=Re(t,r,e,o);break;case"Wms":s=Ne(t,e,o);break;case"Point":case"LineString":case"MultiLineString":case"Polygon":case"MultiPolygon":s=je(t,r,e,o);break;case"Circle":s=pe(t,r,e,o);break;case"Overlay":s=ze(t,e,o);break}return s}function Oe(e,t){Array.isArray(t)?t.forEach(r=>{J(e,r)}):J(e,t)}function Re(e,t,r,o){console.log(typeof t,t);const n=new A.GeoJSON().readFeatures(t,{dataProjection:"EPSG:4326",featureProjection:"EPSG:4326"}),s=new w.Vector;s.addFeatures(n);const a=new L.Vector({source:s,style:O(e,o),zIndex:o.zIndex||10});return a.set("name",e),a.set("type","webgl"),r.addLayer(a),a}function Ne(e,t,r){const o=new L.Tile({opacity:r.opacity||1,source:xe(e,r),zIndex:r.zIndex||10});return o.set("name",e),t.addLayer(o),o}function je(e,t,r,o){if(!t||t.length===0)return null;const n=new L.Vector({source:Me(e,t,o),style:O(e,o),zIndex:o.zIndex||10});return n.set("name",e),n.set("type","webgl"),r.addLayer(n),n}function pe(e,t,r,o){const n=k(t),s=Se(n,o.radius,{steps:300,units:"meters"}),a=new A.GeoJSON().readFeature(s,{dataProjection:"EPSG:4326",featureProjection:"EPSG:4490"}),c=new w.Vector({wrapX:!1});c.addFeature(a);const i=new L.Vector({source:c,style:O(e,o),zIndex:o.zIndex?o.zIndex:10});return i.set("name",e),i.set("type","webgl"),r.addLayer(i),i}function ze(e,t,r){const o=document.createElement("div"),n=new le({element:o,stopEvent:!1,positioning:r.positioning||"bottom-center"});return n.set("name",e),n.set("type","webgl"),t.addOverlay(n),{overlayer:n,content:o}}function Ze(e,t,r){const o=new L.Vector({source:new w.Vector({wrapX:!1}),zIndex:r.zIndex?r.zIndex:10,style:O(t,r)});return o.set("name",t),o.set("type","webgl"),e.addLayer(o),o}function Z(e,t){return e.getAllLayers().find(n=>n.get("name")===t)}function qe(e,t,r){const o=Z(e,t);return o.setVisible(r),o}const E=new Map,x={},v={},_e=(e,t)=>{E.has(e)&&console.warn(`Map with target '${e}' already exists. Overwriting...`),E.set(e,t),x[e]&&(x[e].forEach(r=>r(t)),delete x[e]),v[e]&&(v[e].forEach(r=>r(t)),delete v[e])};function X(e){const t=E.get(e);return t?Promise.resolve(t):new Promise(r=>{v[e]=v[e]||[],v[e].push(r)})}const Ve=e=>{E.has(e)&&(E.delete(e),delete x[e])},Y=(e,t)=>{const r=E.get(e);if(r){t(r);return}x[e]||(x[e]=[]),x[e].push(t)};function Ce(e,t={}){if(!e&&!e.target)throw new Error("is not a valid element");arguments.length===1&&typeof e=="object"&&(t=e,e=t.target);const o=Object.assign({zoom:10,center:[104.064839,30.548857],minZoom:2,maxZoom:19,projection:"EPSG:4326"},t),n=new $.Map({target:e,layers:[],view:new $.View({projection:o.projection,center:o.center,zoom:o.zoom,minZoom:o.minZoom,maxZoom:o.maxZoom}),controls:fe.defaults({zoom:!1,rotate:!1,attribution:!1})});return n.targetId=e,n}function $e(e,t,r,o){Q(e,t,r,j(N({},o),{type:"Point"}))}function K(e,t,r){return new Promise((o,n)=>{e.getView().animate({center:t,duration:r.duration||1e3,zoom:r.zoom||te(e),rotation:r.rotation||0,easing:r.easing},o)})}function ee(e,t){const r=(t.extend[0]+t.extend[2])/2,o=(t.extend[1]+t.extend[3])/2;return K(e,[r,o],t)}function Be(e,t,r){const o=t.getGeometry().getExtent();return ee(e,j(N({},r),{extend:o}))}function Ge(e){return e.getView().getProjection()}function te(e){return e.getView().getZoom()}function We(e,t){e.getView().setZoom(t)}function Je(e,t){e.un("click",()=>{}),e.un("pointermove",()=>{}),Ve(t)}let M=null;function De(e,t={}){const r=new A.GeoJSON;M=new ge({condition:ye.click,multi:t.multi||!1,style:c=>{if(typeof t.getStyle=="function"){const i=c.get("layerName");return t.getStyle(i,c)}else return t.style},layers:t.layers?c=>t.layers.includes(c):void 0}),e.addInteraction(M);const o=M.getFeatures(),n=c=>I(null,null,function*(){const i=(t.layers||e.getLayers().getArray()).filter(h=>{const b=h.getSource();return h.getVisible()&&(b instanceof w.TileWMS||b instanceof w.ImageWMS)});if(i.length===0)return;const l=e.getView(),d=i.map(h=>I(null,null,function*(){const f=h.getSource().getFeatureInfoUrl(c.coordinate,l.getResolution(),l.getProjection(),{INFO_FORMAT:"application/json",FEATURE_COUNT:1});if(f)try{const S=yield(yield fetch(f)).json();if(S.features&&S.features.length>0){const m=r.readFeatures(S);return m.forEach(y=>{y.set("wms_layer_source",h),y.set("wms_event_source",c),y.set("layerName",h.get("name"))}),m}}catch(F){console.warn(F)}return[]})),u=(yield Promise.all(d)).flat();u.length>0&&(t.multi,o.extend(u),M.dispatchEvent({type:"select",selected:u,deselected:[],mapBrowserEvent:c}))});e.on("singleclick",n);const s=new Set;M.on("select",c=>{const i=o.getArray();if(i.length>0){const l=i.map(d=>({feature:d,properties:d.getProperties(),layer:d.get("wms_layer_source")||M.getLayer(d),event:d.get("wms_event_source")||c}));a(l)}else a(null)});const a=c=>s.forEach(i=>i(c));return{onSelect:c=>(s.add(c),()=>s.delete(c)),clear:()=>{s.clear(),o.clear()},destroy:()=>{e.removeInteraction(M),e.un("singleclick",n),s.clear()}}}function Ue(e,t={}){var P;const r=new A.GeoJSON,o=(P=t.debounceTime)!=null?P:200,n=new w.Vector,s=new L.Vector({source:n,map:e,style:t.style,zIndex:1e4,properties:{title:"JG_HOVER_LAYER"}});let a=null,c=null;const i=new Set,l=(u,h,b)=>{const f=u[0];if(a!==f)if(a=f,n.clear(),f?(n.addFeature(f),t.cursor!==!1&&(e.getTargetElement().style.cursor="pointer")):t.cursor!==!1&&(e.getTargetElement().style.cursor=""),f){const F={feature:f,layer:h,properties:f.getProperties(),coordinate:b};i.forEach(S=>S([F]))}else i.forEach(F=>F(null))},d=u=>{if(u.dragging)return;const h=u.pixel,b=u.coordinate;let f=!1;if(e.forEachFeatureAtPixel(h,(m,y)=>{f||y!==s&&(t.layers&&!t.layers.includes(y)||(f=!0,c&&clearTimeout(c),l([m],y,b)))}),f)return;a&&(a=null,n.clear(),e.getTargetElement().style.cursor="",i.forEach(m=>m(null))),c&&clearTimeout(c);const S=(t.layers||e.getLayers().getArray()).filter(m=>{const y=m.getSource();return m.getVisible()&&(y instanceof w.TileWMS||y instanceof w.ImageWMS)});S.length!==0&&(c=setTimeout(()=>I(null,null,function*(){const m=e.getView();for(const y of S){const q=y.getSource().getFeatureInfoUrl(b,m.getResolution(),m.getProjection(),{INFO_FORMAT:"application/json",FEATURE_COUNT:1});if(q)try{const R=yield(yield fetch(q)).json();if(R.features&&R.features.length>0){const _=r.readFeatures(R);_.forEach(ne=>ne.set("wms_layer_source",y)),l(_,y,b);return}}catch(re){}}}),o))};return e.on("pointermove",d),{onHover:u=>(i.add(u),()=>i.delete(u)),clear:()=>{n.clear(),a=null},destroy:()=>{e.un("pointermove",d),e.removeLayer(s),i.clear(),c&&clearTimeout(c)}}}const He=(e,t)=>{const r=Ce(e,t);ke(r,t.baseLayers);const o={targetId:e,instance:r,addMarker:(n,s,a)=>$e(r,n,s,a),createLayer:(n,s,a)=>Q(r,n,s,a),createBlankLayer:(n,s)=>Ze(r,n,s),visibleLayer:(n,s)=>qe(r,n,s),removeLayer:n=>Oe(r,n),getLonLat:n=>k(n),getLayerByName:n=>Z(r,n),getSourceByName:n=>H(r,n),useSelect:n=>De(r,n),useHover:n=>Ue(r,n),queryFeature:(n,s)=>Fe(r,n,s),lightFeature:(n,s,a,c)=>U(n,s,a,c),flashFeature:(n,s,a)=>Le(n,s,a),flyTo:(n,s)=>K(r,n,s),flyToByExtent:n=>ee(r,n),flyToByFeature:(n,s)=>Be(r,n,s),getProjection:()=>Ge(r),getZoom:()=>te(r),setZoom:n=>We(r,n),getMapContext:n=>X(n),onMapReady:(n,s)=>Y(n,s),destroyMap:()=>Je(r,e)};return _e(e,o),o};function Qe(e,t){Y(e,t)}function Xe(e){return X(e)}exports.getMapContext=Xe;exports.onMapReady=Qe;exports.useMap=He;