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 +119 -16
- package/dist/2d/index.d.ts +1 -1
- package/dist/2d/index.js +1 -1
- package/dist/2d/index.mjs +347 -286
- package/dist/2d/layer.d.ts +21 -2
- package/dist/2d/types.d.ts +16 -6
- package/dist/2d/utils.d.ts +5 -2
- package/dist/3d/core.d.ts +39 -8
- package/dist/3d/index.d.ts +20 -4
- package/dist/3d/index.js +1 -1
- package/dist/3d/index.mjs +251 -77
- package/dist/3d/interaction.d.ts +5 -0
- package/dist/3d/layer.d.ts +29 -0
- package/dist/3d/store.d.ts +16 -0
- package/dist/3d/types.d.ts +56 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +7 -3
- package/dist/utils/index.d.ts +0 -0
- package/package.json +1 -1
- package/dist/2d/index2.d.ts +0 -23
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 {
|
|
59
|
+
import { useMap } from 'jgis/2d';
|
|
57
60
|
|
|
58
61
|
onMounted(() => {
|
|
59
62
|
// 初始化地图,会自动注册为全局激活实例
|
|
60
|
-
|
|
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
|
-
|
|
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('
|
|
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
|
-
|
|
130
|
-
|
|
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)
|
package/dist/2d/index.d.ts
CHANGED
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;
|