map-ol-utils 0.1.27 → 0.1.29
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 +573 -0
- package/dist/index.cjs +837 -805
- package/dist/index.d.cts +103 -48
- package/dist/index.d.ts +103 -48
- package/dist/index.js +848 -823
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -69,6 +69,7 @@ var index_exports = {};
|
|
|
69
69
|
__export(index_exports, {
|
|
70
70
|
GeometryType: () => GeometryType,
|
|
71
71
|
activeFeatureByUid: () => activeFeatureByUid,
|
|
72
|
+
addFeaturesByLayer: () => addFeaturesByLayer,
|
|
72
73
|
addMassMarksLayer: () => addMassMarksLayer,
|
|
73
74
|
appendFeaturesByLayer: () => appendFeaturesByLayer,
|
|
74
75
|
buildMassMarksStyles: () => buildMassMarksStyles,
|
|
@@ -126,19 +127,9 @@ var import_Map = __toESM(require("ol/Map"), 1);
|
|
|
126
127
|
var import_View = __toESM(require("ol/View"), 1);
|
|
127
128
|
var import_control = require("ol/control");
|
|
128
129
|
|
|
129
|
-
// src/
|
|
130
|
-
var import_format = require("ol/format");
|
|
131
|
-
var import_ol = require("ol");
|
|
132
|
-
var import_Cluster = __toESM(require("ol/source/Cluster"), 1);
|
|
133
|
-
var import_interaction = require("ol/interaction");
|
|
134
|
-
var import_Circle = __toESM(require("ol/style/Circle"), 1);
|
|
130
|
+
// src/overlay.ts
|
|
135
131
|
var import_gcoord = __toESM(require("gcoord"), 1);
|
|
136
|
-
var
|
|
137
|
-
var import_Vector2 = __toESM(require("ol/source/Vector"), 1);
|
|
138
|
-
var import_geom = require("ol/geom");
|
|
139
|
-
var import_condition = require("ol/events/condition");
|
|
140
|
-
var import_extent = require("ol/extent");
|
|
141
|
-
var import_style = require("ol/style");
|
|
132
|
+
var import_ol = require("ol");
|
|
142
133
|
var removeOverlays = (key = "") => {
|
|
143
134
|
if (instance) {
|
|
144
135
|
const overlays = instance.getOverlays().getArray().filter((overlay) => overlay.get(key || "position"));
|
|
@@ -164,6 +155,18 @@ var createAnimationMarker = (imgUrl, data) => {
|
|
|
164
155
|
overlay.set("_isAnimationMarker", true);
|
|
165
156
|
instance.addOverlay(overlay);
|
|
166
157
|
};
|
|
158
|
+
var createOverlay = (config = { id: "popup-container", positioning: "top-center" }) => {
|
|
159
|
+
return new import_ol.Overlay(
|
|
160
|
+
Object.assign(
|
|
161
|
+
{
|
|
162
|
+
element: document.getElementById(config.id) || void 0
|
|
163
|
+
},
|
|
164
|
+
config
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// src/layer-manager.ts
|
|
167
170
|
var resetActiveVector = () => {
|
|
168
171
|
removeOverlays();
|
|
169
172
|
const layers = instance.getAllLayers();
|
|
@@ -172,167 +175,6 @@ var resetActiveVector = () => {
|
|
|
172
175
|
interaction == null ? void 0 : interaction.getFeatures().clear();
|
|
173
176
|
});
|
|
174
177
|
};
|
|
175
|
-
var setFitViewByCoords = (coords, mapInstance = instance, fitOptions) => {
|
|
176
|
-
const view = mapInstance.getView();
|
|
177
|
-
if (coords.length === 1) {
|
|
178
|
-
view.animate(__spreadValues({
|
|
179
|
-
zoom: 14,
|
|
180
|
-
duration: 1e3,
|
|
181
|
-
center: coords[0]
|
|
182
|
-
}, fitOptions || {}));
|
|
183
|
-
} else {
|
|
184
|
-
const extent = (0, import_extent.boundingExtent)(coords);
|
|
185
|
-
view.fit(extent, __spreadValues({
|
|
186
|
-
padding: [50, 50, 50, 50],
|
|
187
|
-
duration: 1e3
|
|
188
|
-
}, fitOptions || {}));
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
var setFitViewByGeom = (geom, mapInstance = instance, fitOptions) => {
|
|
192
|
-
mapInstance.getView().fit(geom, __spreadValues({
|
|
193
|
-
padding: [50, 50, 50, 50],
|
|
194
|
-
duration: 1e3
|
|
195
|
-
}, fitOptions || {}));
|
|
196
|
-
};
|
|
197
|
-
var setFitViewByLayer = (layer, mapInstance = instance, fitOptions) => {
|
|
198
|
-
var _a;
|
|
199
|
-
const extent = ((_a = layer.getSource()) == null ? void 0 : _a.getExtent()) || [];
|
|
200
|
-
mapInstance.getView().fit(extent, __spreadValues({
|
|
201
|
-
padding: [50, 50, 50, 50],
|
|
202
|
-
duration: 1e3
|
|
203
|
-
}, fitOptions || {}));
|
|
204
|
-
};
|
|
205
|
-
var assembleGeoJson = (dataList, config) => {
|
|
206
|
-
const { key, crsForm } = config;
|
|
207
|
-
const tempList = [];
|
|
208
|
-
dataList.forEach((item) => {
|
|
209
|
-
try {
|
|
210
|
-
const pathArray = Array.isArray(item[key]) ? item[key] : JSON.parse(item[key] || "[]");
|
|
211
|
-
if (pathArray.length) {
|
|
212
|
-
const type = item["geoType"] || determineGeometryType(pathArray);
|
|
213
|
-
if (type !== "Invalid" /* Invalid */) {
|
|
214
|
-
tempList.push({
|
|
215
|
-
type: "Feature",
|
|
216
|
-
properties: __spreadValues({}, item),
|
|
217
|
-
geometry: {
|
|
218
|
-
type,
|
|
219
|
-
coordinates: pathArray
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
} catch (e) {
|
|
225
|
-
console.error(`\u521B\u5EFA\u7EBF\u72B6\u6570\u636E\u5931\u8D25\uFF1A${e}`);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
return import_gcoord.default.transform(
|
|
229
|
-
{ type: "FeatureCollection", features: tempList },
|
|
230
|
-
crsForm || import_gcoord.default.WGS84,
|
|
231
|
-
import_gcoord.default.WGS84
|
|
232
|
-
);
|
|
233
|
-
};
|
|
234
|
-
var createVectorStyle = (feature, config) => {
|
|
235
|
-
const {
|
|
236
|
-
isLine,
|
|
237
|
-
colorMap,
|
|
238
|
-
fillColor,
|
|
239
|
-
colorKey,
|
|
240
|
-
strokeColor,
|
|
241
|
-
fillOpacity,
|
|
242
|
-
strokeWeight,
|
|
243
|
-
activeFillColor,
|
|
244
|
-
activeFillOpacity,
|
|
245
|
-
activeStrokeColor,
|
|
246
|
-
activeStrokeWeight
|
|
247
|
-
} = config || {};
|
|
248
|
-
const data = feature.getProperties();
|
|
249
|
-
const activeStyle = new import_style.Style({
|
|
250
|
-
stroke: new import_style.Stroke({
|
|
251
|
-
width: activeStrokeWeight || strokeWeight || 4,
|
|
252
|
-
color: activeStrokeColor || (colorKey ? (colorMap == null ? void 0 : colorMap.get(data[colorKey])) || strokeColor : strokeColor)
|
|
253
|
-
})
|
|
254
|
-
});
|
|
255
|
-
const unActiveStyle = new import_style.Style({
|
|
256
|
-
stroke: new import_style.Stroke({
|
|
257
|
-
width: strokeWeight || 2,
|
|
258
|
-
color: colorKey ? (colorMap == null ? void 0 : colorMap.get(data[colorKey])) || strokeColor : strokeColor
|
|
259
|
-
})
|
|
260
|
-
});
|
|
261
|
-
if (!isLine) {
|
|
262
|
-
activeStyle.setFill(
|
|
263
|
-
new import_style.Fill({
|
|
264
|
-
color: hexToRgba(
|
|
265
|
-
activeFillColor || fillColor || "",
|
|
266
|
-
activeFillOpacity || 1
|
|
267
|
-
) || hexToRgba(
|
|
268
|
-
(colorKey ? (colorMap == null ? void 0 : colorMap.get(data[colorKey])) || fillColor : fillColor) || "",
|
|
269
|
-
fillOpacity || 1
|
|
270
|
-
)
|
|
271
|
-
})
|
|
272
|
-
);
|
|
273
|
-
unActiveStyle.setFill(
|
|
274
|
-
new import_style.Fill({
|
|
275
|
-
color: hexToRgba(
|
|
276
|
-
(colorKey ? (colorMap == null ? void 0 : colorMap.get(data[colorKey])) || fillColor : fillColor) || "",
|
|
277
|
-
fillOpacity || 1
|
|
278
|
-
)
|
|
279
|
-
})
|
|
280
|
-
);
|
|
281
|
-
}
|
|
282
|
-
feature.setProperties(
|
|
283
|
-
Object.assign(data, {
|
|
284
|
-
activeStyle,
|
|
285
|
-
unActiveStyle
|
|
286
|
-
})
|
|
287
|
-
);
|
|
288
|
-
return unActiveStyle;
|
|
289
|
-
};
|
|
290
|
-
var createBusinessLayer = (dataList, config) => {
|
|
291
|
-
const { isAutoFit, layerName, openClick } = config;
|
|
292
|
-
const geoJson = assembleGeoJson(dataList, config);
|
|
293
|
-
const vectorLayer = new import_Vector.default({
|
|
294
|
-
zIndex: 5,
|
|
295
|
-
className: layerName ? layerName : "ol-layer",
|
|
296
|
-
source: new import_Vector2.default({
|
|
297
|
-
features: new import_format.GeoJSON().readFeatures(geoJson).map((feature) => {
|
|
298
|
-
feature.setStyle(createVectorStyle(feature, config));
|
|
299
|
-
return feature;
|
|
300
|
-
})
|
|
301
|
-
})
|
|
302
|
-
});
|
|
303
|
-
if (openClick) {
|
|
304
|
-
createSelectByLayer(vectorLayer);
|
|
305
|
-
}
|
|
306
|
-
vectorLayer.setProperties({
|
|
307
|
-
_isCustom: true,
|
|
308
|
-
_isAutoFit: isAutoFit,
|
|
309
|
-
_isVectorLayer: true,
|
|
310
|
-
_vectorConfig: config,
|
|
311
|
-
_layerName: layerName,
|
|
312
|
-
_dataList: [...dataList],
|
|
313
|
-
_uuidSet: new Set(dataList.map((item) => item._uuid) || [])
|
|
314
|
-
});
|
|
315
|
-
return vectorLayer;
|
|
316
|
-
};
|
|
317
|
-
var appendFeaturesByLayer = (targetLayer, dataList, crsForm) => {
|
|
318
|
-
const vectorSource = targetLayer.getSource();
|
|
319
|
-
const tempSet = targetLayer.get("_uuidSet") || /* @__PURE__ */ new Set();
|
|
320
|
-
dataList.forEach((item) => tempSet.add(item._uuid));
|
|
321
|
-
targetLayer.set("_uuidSet", tempSet);
|
|
322
|
-
const { _vectorConfig: config } = targetLayer.getProperties() || {};
|
|
323
|
-
const geoJson = assembleGeoJson(
|
|
324
|
-
dataList,
|
|
325
|
-
Object.assign({}, config, { crsForm })
|
|
326
|
-
);
|
|
327
|
-
vectorSource.addFeatures(
|
|
328
|
-
new import_format.GeoJSON().readFeatures(geoJson).map((feature) => {
|
|
329
|
-
feature.setStyle(createVectorStyle(feature, config));
|
|
330
|
-
return feature;
|
|
331
|
-
})
|
|
332
|
-
);
|
|
333
|
-
};
|
|
334
|
-
var createVectorFaceLayer = (dataList = [], config) => createBusinessLayer(dataList, Object.assign({}, config, { isLine: false }));
|
|
335
|
-
var createVectorLineLayer = (dataList = [], config) => createBusinessLayer(dataList, Object.assign({}, config, { isLine: true }));
|
|
336
178
|
var removeAllLayers = () => {
|
|
337
179
|
removeOverlays();
|
|
338
180
|
if (instance) {
|
|
@@ -395,57 +237,416 @@ var activeFeatureByUid = (uid) => {
|
|
|
395
237
|
}
|
|
396
238
|
}
|
|
397
239
|
};
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
240
|
+
|
|
241
|
+
// src/create-map.ts
|
|
242
|
+
var import_interaction = require("ol/interaction");
|
|
243
|
+
|
|
244
|
+
// src/base-layer.ts
|
|
245
|
+
var import_source = require("ol/source");
|
|
246
|
+
var import_tilegrid = require("ol/tilegrid");
|
|
247
|
+
var import_layer = require("ol/layer");
|
|
248
|
+
var import_WMTS = __toESM(require("ol/tilegrid/WMTS"), 1);
|
|
249
|
+
|
|
250
|
+
// src/constants.ts
|
|
251
|
+
var DEFAULT_TIANDITU_TK = "c77eddc667c5bed016fded560baf93e7";
|
|
252
|
+
var DEFAULT_ZHEJIANG_TOKEN = "3b0cdd02-c366-4363-b6de-081a9f12b364";
|
|
253
|
+
|
|
254
|
+
// src/base-layer.ts
|
|
255
|
+
var createBaseLayer = (layerName = "hzsyvector_dark") => {
|
|
256
|
+
const config = {
|
|
257
|
+
zIndex: -5,
|
|
258
|
+
preload: 1,
|
|
259
|
+
minZoom: 8,
|
|
260
|
+
maxZoom: 21,
|
|
261
|
+
source: new import_source.XYZ({
|
|
262
|
+
tileGrid: new import_tilegrid.TileGrid({
|
|
263
|
+
tileSize: 256,
|
|
264
|
+
resolutions: [
|
|
265
|
+
0.00549933137253187,
|
|
266
|
+
0.00274966568626595,
|
|
267
|
+
0.00137483284313297,
|
|
268
|
+
687416421566485e-18,
|
|
269
|
+
343708210783242e-18,
|
|
270
|
+
171854105391621e-18,
|
|
271
|
+
859270526958104e-19,
|
|
272
|
+
429635263479052e-19,
|
|
273
|
+
214817631739526e-19,
|
|
274
|
+
107408815869763e-19,
|
|
275
|
+
537044079348816e-20,
|
|
276
|
+
268522039674407e-20,
|
|
277
|
+
134261019837204e-20
|
|
278
|
+
],
|
|
279
|
+
origin: [118.122911693886, 31.2869311022836],
|
|
280
|
+
extent: [
|
|
281
|
+
116.43263049006,
|
|
282
|
+
28.6201742126026,
|
|
283
|
+
123.705594256347,
|
|
284
|
+
31.9765041681924
|
|
285
|
+
]
|
|
286
|
+
}),
|
|
287
|
+
projection: "EPSG:4326",
|
|
288
|
+
urls: [
|
|
289
|
+
`https://cb.hangzhoumap.gov.cn/E36CCEA93443D1495DB9B9F2B2FFE348CB1A367D75176F815040AB19E54CDCA5DAAA25813AF965E2ABD0CC2463DD1223/PBS/rest/services/hzsyvector_dark/Mapserver/tile/${layerName}/{z}/{y}/{x}`
|
|
290
|
+
]
|
|
291
|
+
}),
|
|
292
|
+
properties: {
|
|
293
|
+
_isBaseLayer: true,
|
|
294
|
+
_layerName: layerName
|
|
431
295
|
}
|
|
432
|
-
return massMarksStyles;
|
|
433
296
|
};
|
|
297
|
+
return new import_layer.Tile(config);
|
|
434
298
|
};
|
|
435
|
-
var
|
|
436
|
-
const
|
|
437
|
-
const
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
299
|
+
var createMapWorldLayer = (layerName, tk = DEFAULT_TIANDITU_TK) => {
|
|
300
|
+
const [name, matrixSet] = layerName.split("_");
|
|
301
|
+
const config = {
|
|
302
|
+
preload: 1,
|
|
303
|
+
zIndex: -10,
|
|
304
|
+
cacheSize: 20240,
|
|
305
|
+
properties: {
|
|
306
|
+
_isBaseLayer: true,
|
|
307
|
+
_layerName: layerName
|
|
308
|
+
},
|
|
309
|
+
source: new import_source.WMTS({
|
|
310
|
+
crossOrigin: "anonymous",
|
|
311
|
+
projection: "EPSG:4326",
|
|
312
|
+
wrapX: true,
|
|
313
|
+
layer: name,
|
|
314
|
+
style: "default",
|
|
315
|
+
version: "1.0.0",
|
|
316
|
+
format: "image/png",
|
|
317
|
+
matrixSet,
|
|
318
|
+
tileGrid: new import_WMTS.default({
|
|
319
|
+
tileSize: 256,
|
|
320
|
+
origin: [-180, 90],
|
|
321
|
+
matrixIds: [
|
|
322
|
+
"1",
|
|
323
|
+
"2",
|
|
324
|
+
"3",
|
|
325
|
+
"4",
|
|
326
|
+
"5",
|
|
327
|
+
"6",
|
|
328
|
+
"7",
|
|
329
|
+
"8",
|
|
330
|
+
"9",
|
|
331
|
+
"10",
|
|
332
|
+
"11",
|
|
333
|
+
"12",
|
|
334
|
+
"13",
|
|
335
|
+
"14",
|
|
336
|
+
"15",
|
|
337
|
+
"16",
|
|
338
|
+
"17",
|
|
339
|
+
"18",
|
|
340
|
+
"19"
|
|
341
|
+
],
|
|
342
|
+
resolutions: [
|
|
343
|
+
0.703125,
|
|
344
|
+
0.3515625,
|
|
345
|
+
0.17578125,
|
|
346
|
+
0.087890625,
|
|
347
|
+
0.0439453125,
|
|
348
|
+
0.02197265625,
|
|
349
|
+
0.010986328125,
|
|
350
|
+
0.0054931640625,
|
|
351
|
+
0.00274658203125,
|
|
352
|
+
0.001373291015625,
|
|
353
|
+
6866455078125e-16,
|
|
354
|
+
34332275390625e-17,
|
|
355
|
+
171661376953125e-18,
|
|
356
|
+
858306884765625e-19,
|
|
357
|
+
4291534423828125e-20,
|
|
358
|
+
21457672119140625e-21,
|
|
359
|
+
10728836059570312e-21,
|
|
360
|
+
5364418029785156e-21,
|
|
361
|
+
2682209014892578e-21
|
|
362
|
+
]
|
|
363
|
+
}),
|
|
364
|
+
url: `https://t{0-7}.tianditu.gov.cn/${layerName}/wmts?tk=${tk}`
|
|
365
|
+
})
|
|
366
|
+
};
|
|
367
|
+
return new import_layer.Tile(config);
|
|
368
|
+
};
|
|
369
|
+
var createZheJiangLayer = (layerName = "emap", tk = DEFAULT_ZHEJIANG_TOKEN) => {
|
|
370
|
+
return new import_layer.Tile({
|
|
371
|
+
preload: 1,
|
|
372
|
+
minZoom: 4,
|
|
373
|
+
maxZoom: 20,
|
|
374
|
+
zIndex: -10,
|
|
375
|
+
cacheSize: 20240,
|
|
376
|
+
source: new import_source.XYZ({
|
|
377
|
+
wrapX: true,
|
|
378
|
+
projection: "EPSG:4326",
|
|
379
|
+
crossOrigin: "anonymous",
|
|
380
|
+
url: `https://ditu{0-6}.zjzwfw.gov.cn/services/wmts/${layerName}/default/oss/getTile/{z}/{y}/{x}?token=${tk}`
|
|
381
|
+
})
|
|
382
|
+
});
|
|
383
|
+
};
|
|
384
|
+
var getLayerByName = (name) => instance.getAllLayers().find((item) => (item.get("_layerName") || item.getClassName()) === name);
|
|
385
|
+
var removeLayerByName = (name) => {
|
|
386
|
+
const layer = getLayerByName(name);
|
|
387
|
+
if (layer) {
|
|
388
|
+
const source = layer.getSource();
|
|
389
|
+
if (source && source.dispose) {
|
|
390
|
+
source.dispose();
|
|
391
|
+
}
|
|
392
|
+
instance.removeLayer(layer);
|
|
393
|
+
layer.dispose();
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
var changeLayersByNames = (activeNames, allLayerNames) => {
|
|
397
|
+
const changeLayers = instance.getAllLayers().filter((item) => allLayerNames.includes(item.getClassName()));
|
|
398
|
+
changeLayers.forEach((layer) => {
|
|
399
|
+
layer.setVisible(activeNames == null ? void 0 : activeNames.includes(layer.getClassName()));
|
|
400
|
+
});
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
// src/create-map.ts
|
|
404
|
+
var instance;
|
|
405
|
+
var mapCenter = [119.71512016971076, 30.122490541963536];
|
|
406
|
+
var createMapInstance = (config = {}) => {
|
|
407
|
+
if (instance) {
|
|
408
|
+
return instance;
|
|
409
|
+
}
|
|
410
|
+
instance = createMap(config);
|
|
411
|
+
return instance;
|
|
412
|
+
};
|
|
413
|
+
var createMap = (config = {}) => {
|
|
414
|
+
const innerConfig = Object.assign(
|
|
415
|
+
{
|
|
416
|
+
zoom: 9.4,
|
|
417
|
+
maxZoom: 18,
|
|
418
|
+
minZoom: 9.4,
|
|
419
|
+
center: mapCenter,
|
|
420
|
+
baseLayer: "vec-layer",
|
|
421
|
+
projection: "EPSG:4326",
|
|
422
|
+
layers: [createBaseLayer()],
|
|
423
|
+
constrainResolution: false,
|
|
424
|
+
smoothExtentConstraint: false,
|
|
425
|
+
tk: DEFAULT_TIANDITU_TK
|
|
426
|
+
},
|
|
427
|
+
config || {}
|
|
428
|
+
);
|
|
429
|
+
const map = new import_Map.default({
|
|
430
|
+
view: new import_View.default(innerConfig),
|
|
431
|
+
controls: (0, import_control.defaults)({
|
|
432
|
+
zoom: false,
|
|
433
|
+
rotate: false,
|
|
434
|
+
attribution: false
|
|
435
|
+
}),
|
|
436
|
+
interactions: (0, import_interaction.defaults)({
|
|
437
|
+
pinchRotate: false,
|
|
438
|
+
doubleClickZoom: false,
|
|
439
|
+
altShiftDragRotate: false
|
|
440
|
+
}),
|
|
441
|
+
layers: innerConfig.layers || [createBaseLayer()]
|
|
442
|
+
});
|
|
443
|
+
mapCenter = innerConfig.center || mapCenter;
|
|
444
|
+
map.activeBaseLayer = innerConfig.baseLayer;
|
|
445
|
+
map.getLayerByName = getLayerByName;
|
|
446
|
+
map.removeLayerByName = removeLayerByName;
|
|
447
|
+
map.changeLayersByNames = changeLayersByNames;
|
|
448
|
+
map.on("pointermove", (evt) => {
|
|
449
|
+
map.getTargetElement().style.cursor = map.hasFeatureAtPixel(evt.pixel) ? "pointer" : "";
|
|
450
|
+
});
|
|
451
|
+
return map;
|
|
452
|
+
};
|
|
453
|
+
var disposeMap = () => {
|
|
454
|
+
instance.getOverlays().forEach((overlay) => {
|
|
455
|
+
instance.removeOverlay(overlay);
|
|
456
|
+
});
|
|
457
|
+
instance.getInteractions().clear();
|
|
458
|
+
const layers = instance.getAllLayers();
|
|
459
|
+
layers.forEach((layer) => {
|
|
460
|
+
const source = layer.getSource();
|
|
461
|
+
if (source && source.dispose) {
|
|
462
|
+
source.dispose();
|
|
463
|
+
}
|
|
464
|
+
instance.removeLayer(layer);
|
|
465
|
+
layer.dispose();
|
|
466
|
+
});
|
|
467
|
+
instance.setTarget("");
|
|
468
|
+
instance.dispose();
|
|
469
|
+
instance = void 0;
|
|
470
|
+
};
|
|
471
|
+
var getMapInstance = () => instance;
|
|
472
|
+
var resetZoomAndCenter = (center = mapCenter) => {
|
|
473
|
+
if (instance) {
|
|
474
|
+
const view = instance.getView();
|
|
475
|
+
view.animate({
|
|
476
|
+
zoom: 9.4,
|
|
477
|
+
center,
|
|
478
|
+
duration: 1e3
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
var resetMap = (config = { center: mapCenter, isClearAll: true }) => {
|
|
483
|
+
removeAllLayers();
|
|
484
|
+
resetZoomAndCenter(config.center || mapCenter);
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
// src/helper.ts
|
|
488
|
+
var hexToRgba = (hex, alpha) => {
|
|
489
|
+
if (hex.startsWith("#")) {
|
|
490
|
+
let tempHex = hex.replace("#", "");
|
|
491
|
+
if (tempHex.length === 3) {
|
|
492
|
+
tempHex = tempHex[0] + tempHex[0] + tempHex[1] + tempHex[1] + tempHex[2] + tempHex[2];
|
|
493
|
+
}
|
|
494
|
+
const r = parseInt(tempHex.substring(0, 2), 16);
|
|
495
|
+
const g = parseInt(tempHex.substring(2, 4), 16);
|
|
496
|
+
const b = parseInt(tempHex.substring(4, 6), 16);
|
|
497
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
498
|
+
} else {
|
|
499
|
+
return hex;
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
var getLayersDataList = () => {
|
|
503
|
+
var _a;
|
|
504
|
+
return ((_a = instance) == null ? void 0 : _a.getAllLayers().map((layer) => layer.get("_dataList") || []).flat(2)) || [];
|
|
505
|
+
};
|
|
506
|
+
var determineGeometryType = (coordinates) => {
|
|
507
|
+
const getArrayDepth = (arr) => {
|
|
508
|
+
if (!Array.isArray(arr) || arr.length === 0) return 0;
|
|
509
|
+
return 1 + getArrayDepth(arr[0]);
|
|
510
|
+
};
|
|
511
|
+
const isClosedRing = (coords) => {
|
|
512
|
+
if (!Array.isArray(coords) || coords.length < 3) return false;
|
|
513
|
+
const first = coords[0];
|
|
514
|
+
const last = coords[coords.length - 1];
|
|
515
|
+
return first[0] === last[0] && first[1] === last[1];
|
|
516
|
+
};
|
|
517
|
+
const isValidCoordinate = (coord) => {
|
|
518
|
+
return Array.isArray(coord) && coord.length >= 2 && typeof coord[0] === "number" && typeof coord[1] === "number";
|
|
519
|
+
};
|
|
520
|
+
const isValidLineString = (coords) => {
|
|
521
|
+
return Array.isArray(coords) && coords.length >= 2 && coords.every(isValidCoordinate);
|
|
522
|
+
};
|
|
523
|
+
const isValidPolygon = (coords) => {
|
|
524
|
+
if (!Array.isArray(coords)) return false;
|
|
525
|
+
const rings = getArrayDepth(coords) === 2 ? [coords] : coords;
|
|
526
|
+
return rings.every(
|
|
527
|
+
(ring) => Array.isArray(ring) && ring.length >= 4 && isClosedRing(ring) && ring.every(isValidCoordinate)
|
|
528
|
+
);
|
|
529
|
+
};
|
|
530
|
+
const depth = getArrayDepth(coordinates);
|
|
531
|
+
try {
|
|
532
|
+
if (depth < 2 || !coordinates || coordinates.length === 0) {
|
|
533
|
+
return "Invalid" /* Invalid */;
|
|
534
|
+
} else if (depth === 2 && isValidLineString(coordinates)) {
|
|
535
|
+
return isClosedRing(coordinates) && coordinates.length >= 4 ? "Polygon" /* Polygon */ : "LineString" /* LineString */;
|
|
536
|
+
} else if (depth === 3 && Array.isArray(coordinates) && coordinates.every(isValidLineString)) {
|
|
537
|
+
if (isValidPolygon(coordinates)) {
|
|
538
|
+
return "Polygon" /* Polygon */;
|
|
539
|
+
} else if (coordinates.every((arr) => !isClosedRing(arr))) {
|
|
540
|
+
return "MultiLineString" /* MultiLineString */;
|
|
541
|
+
} else {
|
|
542
|
+
return "Invalid" /* Invalid */;
|
|
543
|
+
}
|
|
544
|
+
} else if (depth === 4 && Array.isArray(coordinates) && coordinates.every((rings) => isValidPolygon(rings))) {
|
|
545
|
+
return "MultiPolygon" /* MultiPolygon */;
|
|
546
|
+
} else {
|
|
547
|
+
return "Invalid" /* Invalid */;
|
|
548
|
+
}
|
|
549
|
+
} catch (error) {
|
|
550
|
+
console.error("Error analyzing coordinates:", error);
|
|
551
|
+
return "Invalid" /* Invalid */;
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
// src/ogc-utils.ts
|
|
556
|
+
var import_source2 = require("ol/source");
|
|
557
|
+
var import_Tile = __toESM(require("ol/layer/Tile"), 1);
|
|
558
|
+
var import_format = require("ol/format");
|
|
559
|
+
var import_WMTS2 = require("ol/source/WMTS");
|
|
560
|
+
var parser = new import_format.WMTSCapabilities();
|
|
561
|
+
var capabilitiesMap = /* @__PURE__ */ new Map();
|
|
562
|
+
var getCapabilities = (url) => {
|
|
563
|
+
return new Promise((resolve) => {
|
|
564
|
+
const capabilities = capabilitiesMap.get(url);
|
|
565
|
+
if (capabilities) {
|
|
566
|
+
resolve(capabilities);
|
|
567
|
+
} else {
|
|
568
|
+
fetch(url).then((data) => data.text()).then((text) => {
|
|
569
|
+
const capabilities2 = parser.read(text);
|
|
570
|
+
capabilitiesMap.set(url, capabilities2);
|
|
571
|
+
resolve(capabilities2);
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
});
|
|
575
|
+
};
|
|
576
|
+
var createWmtsLayer = (serverUrl) => (config) => __async(null, null, function* () {
|
|
577
|
+
const { style, format, version, layerName, matrixSet } = config;
|
|
578
|
+
const [workspace, datastore] = layerName.split(":");
|
|
579
|
+
const capabilitiesUrl = `${serverUrl}/${workspace}/${datastore}/gwc/service/wmts?request=GetCapabilities`;
|
|
580
|
+
return new Promise((resolve, reject) => {
|
|
581
|
+
getCapabilities(capabilitiesUrl).then((data) => {
|
|
582
|
+
const options = (0, import_WMTS2.optionsFromCapabilities)(data, {
|
|
583
|
+
Style: style || "",
|
|
584
|
+
layer: datastore,
|
|
585
|
+
version: version || "1.1.0",
|
|
586
|
+
format: format || "image/png",
|
|
587
|
+
matrixSet: matrixSet || "EPSG:4326"
|
|
588
|
+
});
|
|
589
|
+
if (options) {
|
|
590
|
+
resolve(
|
|
591
|
+
new import_Tile.default({
|
|
592
|
+
zIndex: 3,
|
|
593
|
+
className: layerName,
|
|
594
|
+
source: new import_source2.WMTS(options)
|
|
595
|
+
})
|
|
596
|
+
);
|
|
597
|
+
} else {
|
|
598
|
+
reject(new Error("Unable to create TileLayer"));
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
// src/view-fit.ts
|
|
605
|
+
var import_extent = require("ol/extent");
|
|
606
|
+
var DEFAULT_FIT_OPTIONS = {
|
|
607
|
+
padding: [50, 50, 50, 50],
|
|
608
|
+
duration: 1e3
|
|
609
|
+
};
|
|
610
|
+
var setFitViewByCoords = (coords, mapInstance = instance, fitOptions) => {
|
|
611
|
+
const view = mapInstance.getView();
|
|
612
|
+
if (coords.length === 1) {
|
|
613
|
+
view.animate(__spreadValues({
|
|
614
|
+
zoom: 14,
|
|
615
|
+
duration: 1e3,
|
|
616
|
+
center: coords[0]
|
|
617
|
+
}, fitOptions || {}));
|
|
618
|
+
} else {
|
|
619
|
+
const extent = (0, import_extent.boundingExtent)(coords);
|
|
620
|
+
view.fit(extent, __spreadValues(__spreadValues({}, DEFAULT_FIT_OPTIONS), fitOptions || {}));
|
|
621
|
+
}
|
|
622
|
+
};
|
|
623
|
+
var setFitViewByGeom = (geom, mapInstance = instance, fitOptions) => {
|
|
624
|
+
mapInstance.getView().fit(geom, __spreadValues(__spreadValues({}, DEFAULT_FIT_OPTIONS), fitOptions || {}));
|
|
625
|
+
};
|
|
626
|
+
var setFitViewByLayer = (layer, mapInstance = instance, fitOptions) => {
|
|
627
|
+
var _a;
|
|
628
|
+
const extent = ((_a = layer.getSource()) == null ? void 0 : _a.getExtent()) || [];
|
|
629
|
+
mapInstance.getView().fit(extent, __spreadValues(__spreadValues({}, DEFAULT_FIT_OPTIONS), fitOptions || {}));
|
|
630
|
+
};
|
|
631
|
+
|
|
632
|
+
// src/select.ts
|
|
633
|
+
var import_extent2 = require("ol/extent");
|
|
634
|
+
var import_interaction2 = require("ol/interaction");
|
|
635
|
+
var import_condition = require("ol/events/condition");
|
|
636
|
+
var selectEventHandle = (vectorLayer, feature) => {
|
|
637
|
+
const data = feature.getProperties();
|
|
638
|
+
const { activeStyle } = data;
|
|
639
|
+
feature.setStyle(activeStyle);
|
|
640
|
+
emitter_default.emit("selected-feature", data);
|
|
641
|
+
vectorLayer.set("_hasActive", true);
|
|
642
|
+
if (vectorLayer.get("_isDynamic")) {
|
|
643
|
+
const activeImage = activeStyle.getImage();
|
|
644
|
+
setTimeout(() => {
|
|
645
|
+
emitter_default.emit(
|
|
646
|
+
"dynamic-marker",
|
|
647
|
+
Object.assign({}, data.rawData || {}, {
|
|
648
|
+
lnglat: data.lnglat,
|
|
649
|
+
style: data.style,
|
|
449
650
|
crsForm: data.crsForm,
|
|
450
651
|
width: activeImage.getWidth(),
|
|
451
652
|
height: activeImage.getHeight()
|
|
@@ -459,12 +660,12 @@ var selectEventHandle = (vectorLayer, feature) => {
|
|
|
459
660
|
view.animate({
|
|
460
661
|
duration: 1e3,
|
|
461
662
|
zoom: view.getZoom(),
|
|
462
|
-
center: (0,
|
|
663
|
+
center: (0, import_extent2.getCenter)(feature.getGeometry().getExtent())
|
|
463
664
|
});
|
|
464
665
|
}
|
|
465
666
|
};
|
|
466
667
|
var createSelectByLayer = (vectorLayer) => {
|
|
467
|
-
const interaction = new
|
|
668
|
+
const interaction = new import_interaction2.Select({
|
|
468
669
|
style: null,
|
|
469
670
|
multi: false,
|
|
470
671
|
hitTolerance: 10,
|
|
@@ -477,626 +678,457 @@ var createSelectByLayer = (vectorLayer) => {
|
|
|
477
678
|
hasFeature = true;
|
|
478
679
|
},
|
|
479
680
|
{
|
|
480
|
-
layerFilter: (layer) => layer === vectorLayer
|
|
481
|
-
}
|
|
482
|
-
);
|
|
483
|
-
return (0, import_condition.singleClick)(evt) && hasFeature;
|
|
484
|
-
}
|
|
485
|
-
});
|
|
486
|
-
interaction.on("select", (evt) => {
|
|
487
|
-
const { selected, deselected } = evt;
|
|
488
|
-
if (selected.length) {
|
|
489
|
-
const feature = selected[0];
|
|
490
|
-
const isClusterLayer = vectorLayer.get("_isClusterLayer");
|
|
491
|
-
if (isClusterLayer) {
|
|
492
|
-
const features = feature.get("features");
|
|
493
|
-
if (features.length === 1) {
|
|
494
|
-
selectEventHandle(vectorLayer, features[0]);
|
|
495
|
-
}
|
|
496
|
-
} else {
|
|
497
|
-
selectEventHandle(vectorLayer, feature);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
if (deselected.length) {
|
|
501
|
-
const feature = deselected[0];
|
|
502
|
-
const data = feature.getProperties();
|
|
503
|
-
feature.setStyle(data.unActiveStyle);
|
|
504
|
-
vectorLayer.set("_hasActive", false);
|
|
505
|
-
}
|
|
506
|
-
});
|
|
507
|
-
instance.addInteraction(interaction);
|
|
508
|
-
vectorLayer.set("_selectInteraction", interaction);
|
|
509
|
-
return interaction;
|
|
510
|
-
};
|
|
511
|
-
var createMassMarksLayer = (dataList, styleList = []) => {
|
|
512
|
-
const features = dataList.map((item) => {
|
|
513
|
-
const { crsForm } = item;
|
|
514
|
-
const coord = import_gcoord.default.transform(
|
|
515
|
-
[+item.lnglat[0], +item.lnglat[1]],
|
|
516
|
-
crsForm || import_gcoord.default.WGS84,
|
|
517
|
-
import_gcoord.default.WGS84
|
|
518
|
-
);
|
|
519
|
-
const feature = new import_ol.Feature({
|
|
520
|
-
geometry: new import_geom.Point(coord)
|
|
521
|
-
});
|
|
522
|
-
feature.setProperties(__spreadProps(__spreadValues({}, item), {
|
|
523
|
-
unActiveStyle: styleList[item.style],
|
|
524
|
-
activeStyle: styleList[item.style + styleList.length / 2]
|
|
525
|
-
}));
|
|
526
|
-
feature.setStyle(styleList[item.style]);
|
|
527
|
-
return feature;
|
|
528
|
-
});
|
|
529
|
-
const vectorLayer = new import_Vector.default({
|
|
530
|
-
zIndex: 2e3,
|
|
531
|
-
source: new import_Vector2.default({
|
|
532
|
-
features
|
|
533
|
-
})
|
|
534
|
-
});
|
|
535
|
-
vectorLayer.setProperties({
|
|
536
|
-
_isCustom: true,
|
|
537
|
-
_isVectorLayer: true,
|
|
538
|
-
_isMassMarksLayer: true,
|
|
539
|
-
_statusNum: styleList.length / 2,
|
|
540
|
-
_dataList: [...dataList],
|
|
541
|
-
_uuidSet: new Set(dataList.map((item) => item._uuid) || [])
|
|
542
|
-
});
|
|
543
|
-
return vectorLayer;
|
|
544
|
-
};
|
|
545
|
-
var addMassMarksLayer = (getImgUrlFn) => {
|
|
546
|
-
return (dataList = [], iconConfig, openClick = true) => {
|
|
547
|
-
const {
|
|
548
|
-
offset = [0, 0],
|
|
549
|
-
baseUrl,
|
|
550
|
-
hasLine,
|
|
551
|
-
hasFace,
|
|
552
|
-
layerName,
|
|
553
|
-
isDynamic,
|
|
554
|
-
isAutoFit,
|
|
555
|
-
statusNum,
|
|
556
|
-
markerIcon,
|
|
557
|
-
marksStyles,
|
|
558
|
-
markerSize,
|
|
559
|
-
activeScale,
|
|
560
|
-
vectorConfig
|
|
561
|
-
} = iconConfig;
|
|
562
|
-
const massMarksStyles = marksStyles ? marksStyles : buildMassMarksStyles(getImgUrlFn)({
|
|
563
|
-
baseUrl,
|
|
564
|
-
markerIcon,
|
|
565
|
-
markerSize,
|
|
566
|
-
statusNum: statusNum || 5,
|
|
567
|
-
activeScale: activeScale || 1.3
|
|
568
|
-
});
|
|
569
|
-
const massMarksLayer = createMassMarksLayer(dataList, massMarksStyles);
|
|
570
|
-
if (openClick) {
|
|
571
|
-
massMarksLayer.setProperties({
|
|
572
|
-
_offset: offset,
|
|
573
|
-
_isAutoFit: isAutoFit
|
|
574
|
-
});
|
|
575
|
-
createSelectByLayer(massMarksLayer);
|
|
576
|
-
}
|
|
577
|
-
if (hasLine) {
|
|
578
|
-
const vectorLayer = createBusinessLayer(
|
|
579
|
-
dataList,
|
|
580
|
-
Object.assign(
|
|
581
|
-
{},
|
|
582
|
-
{
|
|
583
|
-
key: "line",
|
|
584
|
-
isLine: true,
|
|
585
|
-
openClick: false,
|
|
586
|
-
strokeWeight: 4,
|
|
587
|
-
strokeColor: "rgba(29, 235, 255, 0.8)"
|
|
588
|
-
},
|
|
589
|
-
vectorConfig || {}
|
|
590
|
-
)
|
|
591
|
-
);
|
|
592
|
-
instance.addLayer(vectorLayer);
|
|
593
|
-
}
|
|
594
|
-
if (hasFace) {
|
|
595
|
-
const vectorLayer = createBusinessLayer(
|
|
596
|
-
dataList,
|
|
597
|
-
Object.assign(
|
|
598
|
-
{},
|
|
599
|
-
{
|
|
600
|
-
isLine: false,
|
|
601
|
-
key: "faceList",
|
|
602
|
-
strokeWeight: 1,
|
|
603
|
-
openClick: false,
|
|
604
|
-
fillColor: "#4247DF",
|
|
605
|
-
strokeStyle: "dashed",
|
|
606
|
-
strokeColor: "#4247DF"
|
|
607
|
-
},
|
|
608
|
-
vectorConfig || {}
|
|
609
|
-
)
|
|
681
|
+
layerFilter: (layer) => layer === vectorLayer
|
|
682
|
+
}
|
|
610
683
|
);
|
|
611
|
-
|
|
684
|
+
return (0, import_condition.singleClick)(evt) && hasFeature;
|
|
612
685
|
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
return massMarksLayer;
|
|
625
|
-
};
|
|
626
|
-
};
|
|
627
|
-
var updateMarksLayersByStatus = (checkedStatusList = []) => {
|
|
628
|
-
const hideStyle = new import_style.Style({});
|
|
629
|
-
const tempList = [];
|
|
630
|
-
const targetLayers = instance.getAllLayers().filter((layer) => layer.get("_isMassMarksLayer"));
|
|
631
|
-
targetLayers.forEach((layer) => {
|
|
632
|
-
const features = layer.getSource().getFeatures();
|
|
633
|
-
features.forEach((feature) => {
|
|
634
|
-
const data = feature.getProperties();
|
|
635
|
-
if (!checkedStatusList.includes(data.status)) {
|
|
636
|
-
feature.setStyle(hideStyle);
|
|
686
|
+
});
|
|
687
|
+
interaction.on("select", (evt) => {
|
|
688
|
+
const { selected, deselected } = evt;
|
|
689
|
+
if (selected.length) {
|
|
690
|
+
const feature = selected[0];
|
|
691
|
+
const isClusterLayer = vectorLayer.get("_isClusterLayer");
|
|
692
|
+
if (isClusterLayer) {
|
|
693
|
+
const features = feature.get("features");
|
|
694
|
+
if (features.length === 1) {
|
|
695
|
+
selectEventHandle(vectorLayer, features[0]);
|
|
696
|
+
}
|
|
637
697
|
} else {
|
|
638
|
-
|
|
639
|
-
feature.setStyle(data.unActiveStyle);
|
|
698
|
+
selectEventHandle(vectorLayer, feature);
|
|
640
699
|
}
|
|
641
|
-
});
|
|
642
|
-
});
|
|
643
|
-
return tempList;
|
|
644
|
-
};
|
|
645
|
-
var createOverlay = (config = { id: "popup-container", positioning: "top-center" }) => {
|
|
646
|
-
return new import_ol.Overlay(
|
|
647
|
-
Object.assign(
|
|
648
|
-
{
|
|
649
|
-
element: document.getElementById(config.id) || void 0
|
|
650
|
-
},
|
|
651
|
-
config
|
|
652
|
-
)
|
|
653
|
-
);
|
|
654
|
-
};
|
|
655
|
-
var createClusterLayer = (dataList, config) => {
|
|
656
|
-
const count = dataList.length;
|
|
657
|
-
const styleCache = {};
|
|
658
|
-
const {
|
|
659
|
-
distance,
|
|
660
|
-
minDistance,
|
|
661
|
-
openClick,
|
|
662
|
-
buildStyle,
|
|
663
|
-
singleStyles,
|
|
664
|
-
computedRadius,
|
|
665
|
-
layerName = "cluster-layer"
|
|
666
|
-
} = config;
|
|
667
|
-
const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
|
|
668
|
-
styleCache[1] = singleStyles;
|
|
669
|
-
const innerBuildStyle = (feature) => {
|
|
670
|
-
const size = feature.get("features").length;
|
|
671
|
-
let style = styleCache[size];
|
|
672
|
-
const tempRadius = computedRadius ? computedRadius(size) : innerComputedRadius(size);
|
|
673
|
-
if (!style) {
|
|
674
|
-
style = new import_style.Style({
|
|
675
|
-
image: new import_Circle.default({
|
|
676
|
-
radius: tempRadius * 20,
|
|
677
|
-
stroke: new import_style.Stroke({
|
|
678
|
-
width: 2,
|
|
679
|
-
color: `hsla(${180 - tempRadius * 180}, 100%, 40%, 1)`
|
|
680
|
-
}),
|
|
681
|
-
fill: new import_style.Fill({
|
|
682
|
-
color: `hsla(${180 - tempRadius * 180}, 100%, 50%, 1)`
|
|
683
|
-
})
|
|
684
|
-
}),
|
|
685
|
-
text: new import_style.Text({
|
|
686
|
-
text: size.toString(),
|
|
687
|
-
fill: new import_style.Fill({
|
|
688
|
-
color: `hsla(${180 - tempRadius * 180}, 100%, 10%, 1)`
|
|
689
|
-
}),
|
|
690
|
-
textBaseline: "middle"
|
|
691
|
-
})
|
|
692
|
-
});
|
|
693
|
-
styleCache[size] = style;
|
|
694
700
|
}
|
|
695
|
-
if (
|
|
696
|
-
const
|
|
697
|
-
const
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
activeStyle: style[index + style.length / 2]
|
|
701
|
-
});
|
|
702
|
-
return style[index];
|
|
701
|
+
if (deselected.length) {
|
|
702
|
+
const feature = deselected[0];
|
|
703
|
+
const data = feature.getProperties();
|
|
704
|
+
feature.setStyle(data.unActiveStyle);
|
|
705
|
+
vectorLayer.set("_hasActive", false);
|
|
703
706
|
}
|
|
704
|
-
return style;
|
|
705
|
-
};
|
|
706
|
-
const vectorLayer = new import_Vector.default({
|
|
707
|
-
zIndex: 200,
|
|
708
|
-
className: layerName,
|
|
709
|
-
source: new import_Cluster.default({
|
|
710
|
-
distance: distance || 80,
|
|
711
|
-
minDistance: minDistance || 0,
|
|
712
|
-
source: new import_Vector2.default({
|
|
713
|
-
features: dataList.map((item) => {
|
|
714
|
-
const feature = new import_ol.Feature(new import_geom.Point(item.lnglat));
|
|
715
|
-
feature.setProperties(item);
|
|
716
|
-
return feature;
|
|
717
|
-
})
|
|
718
|
-
})
|
|
719
|
-
}),
|
|
720
|
-
style: (feature) => buildStyle ? buildStyle(feature) : innerBuildStyle(feature)
|
|
721
|
-
});
|
|
722
|
-
vectorLayer.setProperties({
|
|
723
|
-
_isCustom: true,
|
|
724
|
-
_isVectorLayer: true,
|
|
725
|
-
_isClusterLayer: true
|
|
726
707
|
});
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
return vectorLayer;
|
|
708
|
+
instance.addInteraction(interaction);
|
|
709
|
+
vectorLayer.set("_selectInteraction", interaction);
|
|
710
|
+
return interaction;
|
|
731
711
|
};
|
|
732
712
|
|
|
733
|
-
// src/
|
|
734
|
-
var
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
var
|
|
738
|
-
var
|
|
739
|
-
var
|
|
740
|
-
var
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
28.6201742126026,
|
|
770
|
-
123.705594256347,
|
|
771
|
-
31.9765041681924
|
|
772
|
-
]
|
|
773
|
-
}),
|
|
774
|
-
projection: "EPSG:4326",
|
|
775
|
-
urls: [
|
|
776
|
-
`https://ywtg.citybrain.hangzhou.gov.cn/${layerName}/{z}/{y}/{x}`,
|
|
777
|
-
`https://ywtg.citybrain.hangzhou.gov.cn:9456/${layerName}/{z}/{y}/{x}`,
|
|
778
|
-
`https://ywtg.citybrain.hangzhou.gov.cn:9457/${layerName}/{z}/{y}/{x}`,
|
|
779
|
-
`https://ywtg.citybrain.hangzhou.gov.cn:9458/${layerName}/{z}/{y}/{x}`,
|
|
780
|
-
`https://ywtg.citybrain.hangzhou.gov.cn:9459/${layerName}/{z}/{y}/{x}`
|
|
781
|
-
]
|
|
782
|
-
}),
|
|
783
|
-
properties: {
|
|
784
|
-
_isBaseLayer: true,
|
|
785
|
-
_layerName: layerName
|
|
786
|
-
}
|
|
787
|
-
};
|
|
788
|
-
return new import_layer.Tile(config);
|
|
789
|
-
};
|
|
790
|
-
var createMapWorldLayer = (layerName, tk = "c77eddc667c5bed016fded560baf93e7") => {
|
|
791
|
-
const [name, matrixSet] = layerName.split("_");
|
|
792
|
-
const config = {
|
|
793
|
-
preload: 1,
|
|
794
|
-
zIndex: -10,
|
|
795
|
-
cacheSize: 20240,
|
|
796
|
-
properties: {
|
|
797
|
-
_isBaseLayer: true,
|
|
798
|
-
_layerName: layerName
|
|
799
|
-
},
|
|
800
|
-
source: new import_source2.WMTS({
|
|
801
|
-
crossOrigin: "anonymous",
|
|
802
|
-
projection: "EPSG:4326",
|
|
803
|
-
wrapX: true,
|
|
804
|
-
layer: name,
|
|
805
|
-
style: "default",
|
|
806
|
-
version: "1.0.0",
|
|
807
|
-
format: "image/png",
|
|
808
|
-
matrixSet,
|
|
809
|
-
tileGrid: new import_WMTS.default({
|
|
810
|
-
tileSize: 256,
|
|
811
|
-
origin: [-180, 90],
|
|
812
|
-
matrixIds: [
|
|
813
|
-
"1",
|
|
814
|
-
"2",
|
|
815
|
-
"3",
|
|
816
|
-
"4",
|
|
817
|
-
"5",
|
|
818
|
-
"6",
|
|
819
|
-
"7",
|
|
820
|
-
"8",
|
|
821
|
-
"9",
|
|
822
|
-
"10",
|
|
823
|
-
"11",
|
|
824
|
-
"12",
|
|
825
|
-
"13",
|
|
826
|
-
"14",
|
|
827
|
-
"15",
|
|
828
|
-
"16",
|
|
829
|
-
"17",
|
|
830
|
-
"18",
|
|
831
|
-
"19"
|
|
832
|
-
],
|
|
833
|
-
resolutions: [
|
|
834
|
-
0.703125,
|
|
835
|
-
0.3515625,
|
|
836
|
-
0.17578125,
|
|
837
|
-
0.087890625,
|
|
838
|
-
0.0439453125,
|
|
839
|
-
0.02197265625,
|
|
840
|
-
0.010986328125,
|
|
841
|
-
0.0054931640625,
|
|
842
|
-
0.00274658203125,
|
|
843
|
-
0.001373291015625,
|
|
844
|
-
6866455078125e-16,
|
|
845
|
-
34332275390625e-17,
|
|
846
|
-
171661376953125e-18,
|
|
847
|
-
858306884765625e-19,
|
|
848
|
-
4291534423828125e-20,
|
|
849
|
-
21457672119140625e-21,
|
|
850
|
-
10728836059570312e-21,
|
|
851
|
-
5364418029785156e-21,
|
|
852
|
-
2682209014892578e-21
|
|
853
|
-
]
|
|
854
|
-
}),
|
|
855
|
-
url: `https://t{0-7}.tianditu.gov.cn/${layerName}/wmts?tk=${tk}`
|
|
856
|
-
})
|
|
857
|
-
};
|
|
858
|
-
return new import_layer.Tile(config);
|
|
713
|
+
// src/vector-layer.ts
|
|
714
|
+
var import_format2 = require("ol/format");
|
|
715
|
+
var import_gcoord2 = __toESM(require("gcoord"), 1);
|
|
716
|
+
var import_Vector = __toESM(require("ol/layer/Vector"), 1);
|
|
717
|
+
var import_Vector2 = __toESM(require("ol/source/Vector"), 1);
|
|
718
|
+
var import_style = require("ol/style");
|
|
719
|
+
var resolveColor = (data, colorKey, colorMap, fallback) => colorKey ? (colorMap == null ? void 0 : colorMap.get(data[colorKey])) || fallback : fallback;
|
|
720
|
+
var assembleGeoJson = (dataList, config) => {
|
|
721
|
+
const { key, crsForm } = config;
|
|
722
|
+
const tempList = [];
|
|
723
|
+
dataList.forEach((item) => {
|
|
724
|
+
try {
|
|
725
|
+
const raw = item[key];
|
|
726
|
+
const pathArray = Array.isArray(raw) ? raw : JSON.parse(raw || "[]");
|
|
727
|
+
if (pathArray.length) {
|
|
728
|
+
const type = item["geoType"] || determineGeometryType(pathArray);
|
|
729
|
+
if (type !== "Invalid" /* Invalid */) {
|
|
730
|
+
tempList.push({
|
|
731
|
+
type: "Feature",
|
|
732
|
+
properties: __spreadValues({}, item),
|
|
733
|
+
geometry: {
|
|
734
|
+
type,
|
|
735
|
+
coordinates: pathArray
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
} catch (e) {
|
|
741
|
+
console.error(`\u521B\u5EFA\u7EBF\u72B6\u6570\u636E\u5931\u8D25\uFF1A${e}`);
|
|
742
|
+
}
|
|
743
|
+
});
|
|
744
|
+
return import_gcoord2.default.transform(
|
|
745
|
+
{ type: "FeatureCollection", features: tempList },
|
|
746
|
+
crsForm || import_gcoord2.default.WGS84,
|
|
747
|
+
import_gcoord2.default.WGS84
|
|
748
|
+
);
|
|
859
749
|
};
|
|
860
|
-
var
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
750
|
+
var createVectorStyle = (feature, config) => {
|
|
751
|
+
const {
|
|
752
|
+
isLine,
|
|
753
|
+
colorMap,
|
|
754
|
+
fillColor,
|
|
755
|
+
colorKey,
|
|
756
|
+
strokeColor,
|
|
757
|
+
fillOpacity,
|
|
758
|
+
strokeWeight,
|
|
759
|
+
activeFillColor,
|
|
760
|
+
activeFillOpacity,
|
|
761
|
+
activeStrokeColor,
|
|
762
|
+
activeStrokeWeight
|
|
763
|
+
} = config || {};
|
|
764
|
+
const data = feature.getProperties();
|
|
765
|
+
const activeStyle = new import_style.Style({
|
|
766
|
+
stroke: new import_style.Stroke({
|
|
767
|
+
width: activeStrokeWeight || strokeWeight || 4,
|
|
768
|
+
color: activeStrokeColor || resolveColor(data, colorKey, colorMap, strokeColor)
|
|
872
769
|
})
|
|
873
770
|
});
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
771
|
+
const unActiveStyle = new import_style.Style({
|
|
772
|
+
stroke: new import_style.Stroke({
|
|
773
|
+
width: strokeWeight || 2,
|
|
774
|
+
color: resolveColor(data, colorKey, colorMap, strokeColor)
|
|
775
|
+
})
|
|
776
|
+
});
|
|
777
|
+
if (!isLine) {
|
|
778
|
+
activeStyle.setFill(
|
|
779
|
+
new import_style.Fill({
|
|
780
|
+
color: hexToRgba(
|
|
781
|
+
activeFillColor || fillColor || "",
|
|
782
|
+
activeFillOpacity || 1
|
|
783
|
+
) || hexToRgba(
|
|
784
|
+
resolveColor(data, colorKey, colorMap, fillColor) || "",
|
|
785
|
+
fillOpacity || 1
|
|
786
|
+
)
|
|
787
|
+
})
|
|
788
|
+
);
|
|
789
|
+
unActiveStyle.setFill(
|
|
790
|
+
new import_style.Fill({
|
|
791
|
+
color: hexToRgba(
|
|
792
|
+
resolveColor(data, colorKey, colorMap, fillColor) || "",
|
|
793
|
+
fillOpacity || 1
|
|
794
|
+
)
|
|
795
|
+
})
|
|
796
|
+
);
|
|
885
797
|
}
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
changeLayers.forEach((layer) => {
|
|
890
|
-
layer.setVisible(activeNames == null ? void 0 : activeNames.includes(layer.getClassName()));
|
|
798
|
+
feature.setProperties({
|
|
799
|
+
activeStyle,
|
|
800
|
+
unActiveStyle
|
|
891
801
|
});
|
|
802
|
+
return unActiveStyle;
|
|
892
803
|
};
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
804
|
+
var createBusinessLayer = (dataList, config) => {
|
|
805
|
+
const { isAutoFit, layerName, openClick } = config;
|
|
806
|
+
const geoJson = assembleGeoJson(dataList, config);
|
|
807
|
+
const vectorLayer = new import_Vector.default({
|
|
808
|
+
zIndex: 5,
|
|
809
|
+
className: layerName ? layerName : "ol-layer",
|
|
810
|
+
source: new import_Vector2.default({
|
|
811
|
+
features: new import_format2.GeoJSON().readFeatures(geoJson).map((feature) => {
|
|
812
|
+
feature.setStyle(createVectorStyle(feature, config));
|
|
813
|
+
return feature;
|
|
814
|
+
})
|
|
815
|
+
})
|
|
816
|
+
});
|
|
817
|
+
if (openClick) {
|
|
818
|
+
createSelectByLayer(vectorLayer);
|
|
900
819
|
}
|
|
901
|
-
|
|
902
|
-
|
|
820
|
+
vectorLayer.setProperties({
|
|
821
|
+
_isCustom: true,
|
|
822
|
+
_isAutoFit: isAutoFit,
|
|
823
|
+
_isVectorLayer: true,
|
|
824
|
+
_vectorConfig: config,
|
|
825
|
+
_layerName: layerName,
|
|
826
|
+
_dataList: [...dataList],
|
|
827
|
+
_uuidSet: new Set(dataList.map((item) => item._uuid) || [])
|
|
828
|
+
});
|
|
829
|
+
return vectorLayer;
|
|
903
830
|
};
|
|
904
|
-
var
|
|
905
|
-
const
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
layers: [createBaseLayer()],
|
|
914
|
-
constrainResolution: false,
|
|
915
|
-
smoothExtentConstraint: false,
|
|
916
|
-
tk: "c77eddc667c5bed016fded560baf93e7"
|
|
917
|
-
},
|
|
918
|
-
config || {}
|
|
831
|
+
var appendFeaturesByLayer = (targetLayer, dataList, crsForm) => {
|
|
832
|
+
const vectorSource = targetLayer.getSource();
|
|
833
|
+
const tempSet = targetLayer.get("_uuidSet") || /* @__PURE__ */ new Set();
|
|
834
|
+
dataList.forEach((item) => tempSet.add(item._uuid));
|
|
835
|
+
targetLayer.set("_uuidSet", tempSet);
|
|
836
|
+
const { _vectorConfig: config } = targetLayer.getProperties() || {};
|
|
837
|
+
const geoJson = assembleGeoJson(
|
|
838
|
+
dataList,
|
|
839
|
+
Object.assign({}, config, { crsForm })
|
|
919
840
|
);
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
841
|
+
vectorSource.addFeatures(
|
|
842
|
+
new import_format2.GeoJSON().readFeatures(geoJson).map((feature) => {
|
|
843
|
+
feature.setStyle(createVectorStyle(feature, config));
|
|
844
|
+
return feature;
|
|
845
|
+
})
|
|
846
|
+
);
|
|
847
|
+
};
|
|
848
|
+
var createVectorFaceLayer = (dataList = [], config) => createBusinessLayer(dataList, Object.assign({}, config, { isLine: false }));
|
|
849
|
+
var createVectorLineLayer = (dataList = [], config) => createBusinessLayer(dataList, Object.assign({}, config, { isLine: true }));
|
|
850
|
+
|
|
851
|
+
// src/mass-marks.ts
|
|
852
|
+
var import_ol2 = require("ol");
|
|
853
|
+
var import_geom = require("ol/geom");
|
|
854
|
+
var import_gcoord3 = __toESM(require("gcoord"), 1);
|
|
855
|
+
var import_style2 = require("ol/style");
|
|
856
|
+
var import_Vector3 = __toESM(require("ol/layer/Vector"), 1);
|
|
857
|
+
var import_Vector4 = __toESM(require("ol/source/Vector"), 1);
|
|
858
|
+
var buildMassMarksStyles = (getImgUrlFn) => {
|
|
859
|
+
return (iconConfig) => {
|
|
860
|
+
const {
|
|
861
|
+
baseUrl,
|
|
862
|
+
markerIcon,
|
|
863
|
+
statusNum = 5,
|
|
864
|
+
activeScale = 1.3,
|
|
865
|
+
markerSize = [32, 32]
|
|
866
|
+
} = iconConfig;
|
|
867
|
+
const getMarkerUrl = getImgUrlFn(baseUrl);
|
|
868
|
+
const [x, y] = markerSize;
|
|
869
|
+
const massMarksStyles = new Array(statusNum * 2);
|
|
870
|
+
for (let i = 0; i < statusNum; i++) {
|
|
871
|
+
const imageUrl = getMarkerUrl(`${markerIcon}-${i}`, ".webp");
|
|
872
|
+
massMarksStyles[i] = new import_style2.Style({
|
|
873
|
+
zIndex: 88 + i,
|
|
874
|
+
image: new import_style2.Icon({
|
|
875
|
+
width: x,
|
|
876
|
+
height: y,
|
|
877
|
+
src: imageUrl,
|
|
878
|
+
anchor: [0.5, 1]
|
|
879
|
+
})
|
|
880
|
+
});
|
|
881
|
+
const activeImage = getMarkerUrl(`${markerIcon}-${i}-active`, ".webp");
|
|
882
|
+
massMarksStyles[i + statusNum] = new import_style2.Style({
|
|
883
|
+
zIndex: 120,
|
|
884
|
+
image: new import_style2.Icon({
|
|
885
|
+
width: x * activeScale,
|
|
886
|
+
height: y * activeScale,
|
|
887
|
+
anchor: [0.5, 1],
|
|
888
|
+
src: activeImage ? activeImage : imageUrl
|
|
889
|
+
})
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
return massMarksStyles;
|
|
893
|
+
};
|
|
894
|
+
};
|
|
895
|
+
var createFeatures = (dataList, styleList = []) => {
|
|
896
|
+
return dataList.map((item) => {
|
|
897
|
+
const { crsForm } = item;
|
|
898
|
+
const coord = import_gcoord3.default.transform(
|
|
899
|
+
[+item.lnglat[0], +item.lnglat[1]],
|
|
900
|
+
crsForm || import_gcoord3.default.WGS84,
|
|
901
|
+
import_gcoord3.default.WGS84
|
|
902
|
+
);
|
|
903
|
+
const feature = new import_ol2.Feature({
|
|
904
|
+
geometry: new import_geom.Point(coord)
|
|
905
|
+
});
|
|
906
|
+
feature.setProperties(__spreadProps(__spreadValues({}, item), {
|
|
907
|
+
unActiveStyle: styleList[item.style],
|
|
908
|
+
activeStyle: styleList[item.style + styleList.length / 2]
|
|
909
|
+
}));
|
|
910
|
+
feature.setStyle(styleList[item.style]);
|
|
911
|
+
return feature;
|
|
943
912
|
});
|
|
944
|
-
return instance2;
|
|
945
913
|
};
|
|
946
|
-
var
|
|
947
|
-
|
|
948
|
-
|
|
914
|
+
var addFeaturesByLayer = (targetLayer, dataList, config) => {
|
|
915
|
+
const massMarksStyles = targetLayer.get("_massMarksStyles");
|
|
916
|
+
const targetSource = targetLayer == null ? void 0 : targetLayer.getSource();
|
|
917
|
+
const { clear } = config;
|
|
918
|
+
if (clear) {
|
|
919
|
+
targetSource == null ? void 0 : targetSource.clear();
|
|
920
|
+
}
|
|
921
|
+
targetSource == null ? void 0 : targetSource.addFeatures(createFeatures(dataList, massMarksStyles));
|
|
922
|
+
};
|
|
923
|
+
var createMassMarksLayer = (dataList, styleList = []) => {
|
|
924
|
+
const vectorLayer = new import_Vector3.default({
|
|
925
|
+
zIndex: 2e3,
|
|
926
|
+
source: new import_Vector4.default({
|
|
927
|
+
features: createFeatures(dataList, styleList)
|
|
928
|
+
})
|
|
949
929
|
});
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
instance.removeLayer(layer);
|
|
958
|
-
layer.dispose();
|
|
930
|
+
vectorLayer.setProperties({
|
|
931
|
+
_isCustom: true,
|
|
932
|
+
_isVectorLayer: true,
|
|
933
|
+
_isMassMarksLayer: true,
|
|
934
|
+
_statusNum: styleList.length / 2,
|
|
935
|
+
_dataList: [...dataList],
|
|
936
|
+
_uuidSet: new Set(dataList.map((item) => item._uuid) || [])
|
|
959
937
|
});
|
|
960
|
-
|
|
961
|
-
instance.dispose();
|
|
962
|
-
instance = void 0;
|
|
938
|
+
return vectorLayer;
|
|
963
939
|
};
|
|
964
|
-
var
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
940
|
+
var addMassMarksLayer = (getImgUrlFn) => {
|
|
941
|
+
return (dataList = [], iconConfig, openClick = true) => {
|
|
942
|
+
const {
|
|
943
|
+
offset = [0, 0],
|
|
944
|
+
baseUrl,
|
|
945
|
+
hasLine,
|
|
946
|
+
hasFace,
|
|
947
|
+
layerName,
|
|
948
|
+
isDynamic,
|
|
949
|
+
isAutoFit,
|
|
950
|
+
statusNum,
|
|
951
|
+
markerIcon,
|
|
952
|
+
marksStyles,
|
|
953
|
+
markerSize,
|
|
954
|
+
activeScale,
|
|
955
|
+
vectorConfig
|
|
956
|
+
} = iconConfig;
|
|
957
|
+
const massMarksStyles = marksStyles ? marksStyles : buildMassMarksStyles(getImgUrlFn)({
|
|
958
|
+
baseUrl,
|
|
959
|
+
markerIcon,
|
|
960
|
+
markerSize,
|
|
961
|
+
statusNum: statusNum || 5,
|
|
962
|
+
activeScale: activeScale || 1.3
|
|
972
963
|
});
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
};
|
|
979
|
-
|
|
980
|
-
// src/helper.ts
|
|
981
|
-
var hexToRgba = (hex, alpha) => {
|
|
982
|
-
if (hex.startsWith("#")) {
|
|
983
|
-
let tempHex = hex.replace("#", "");
|
|
984
|
-
if (tempHex.length === 3) {
|
|
985
|
-
tempHex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
|
|
964
|
+
const massMarksLayer = createMassMarksLayer(dataList, massMarksStyles);
|
|
965
|
+
if (openClick) {
|
|
966
|
+
massMarksLayer.setProperties({
|
|
967
|
+
_offset: offset,
|
|
968
|
+
_isAutoFit: isAutoFit
|
|
969
|
+
});
|
|
970
|
+
createSelectByLayer(massMarksLayer);
|
|
986
971
|
}
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
}
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
972
|
+
if (hasLine) {
|
|
973
|
+
const vectorLayer = createBusinessLayer(
|
|
974
|
+
dataList,
|
|
975
|
+
Object.assign(
|
|
976
|
+
{},
|
|
977
|
+
{
|
|
978
|
+
key: "line",
|
|
979
|
+
isLine: true,
|
|
980
|
+
openClick: false,
|
|
981
|
+
strokeWeight: 4,
|
|
982
|
+
strokeColor: "rgba(29, 235, 255, 0.8)"
|
|
983
|
+
},
|
|
984
|
+
vectorConfig || {}
|
|
985
|
+
)
|
|
986
|
+
);
|
|
987
|
+
instance.addLayer(vectorLayer);
|
|
988
|
+
}
|
|
989
|
+
if (hasFace) {
|
|
990
|
+
const vectorLayer = createBusinessLayer(
|
|
991
|
+
dataList,
|
|
992
|
+
Object.assign(
|
|
993
|
+
{},
|
|
994
|
+
{
|
|
995
|
+
isLine: false,
|
|
996
|
+
key: "faceList",
|
|
997
|
+
strokeWeight: 1,
|
|
998
|
+
openClick: false,
|
|
999
|
+
fillColor: "#4247DF",
|
|
1000
|
+
strokeStyle: "dashed",
|
|
1001
|
+
strokeColor: "#4247DF"
|
|
1002
|
+
},
|
|
1003
|
+
vectorConfig || {}
|
|
1004
|
+
)
|
|
1005
|
+
);
|
|
1006
|
+
instance.addLayer(vectorLayer);
|
|
1007
|
+
}
|
|
1008
|
+
massMarksLayer.setProperties({
|
|
1009
|
+
_isCustom: true,
|
|
1010
|
+
_offset: offset,
|
|
1011
|
+
_hasLine: hasLine,
|
|
1012
|
+
_hasFace: hasFace,
|
|
1013
|
+
className: layerName,
|
|
1014
|
+
_layerName: layerName,
|
|
1015
|
+
_isVectorLayer: true,
|
|
1016
|
+
_isDynamic: isDynamic,
|
|
1017
|
+
_massMarksStyles: massMarksStyles
|
|
1018
|
+
});
|
|
1019
|
+
instance.addLayer(massMarksLayer);
|
|
1020
|
+
return massMarksLayer;
|
|
1022
1021
|
};
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1022
|
+
};
|
|
1023
|
+
var updateMarksLayersByStatus = (checkedStatusList = []) => {
|
|
1024
|
+
const hideStyle = new import_style2.Style({});
|
|
1025
|
+
const tempList = [];
|
|
1026
|
+
const targetLayers = instance.getAllLayers().filter((layer) => layer.get("_isMassMarksLayer"));
|
|
1027
|
+
targetLayers.forEach((layer) => {
|
|
1028
|
+
const features = layer.getSource().getFeatures();
|
|
1029
|
+
features.forEach((feature) => {
|
|
1030
|
+
const data = feature.getProperties();
|
|
1031
|
+
if (!checkedStatusList.includes(data.status)) {
|
|
1032
|
+
feature.setStyle(hideStyle);
|
|
1034
1033
|
} else {
|
|
1035
|
-
|
|
1034
|
+
tempList.push(data);
|
|
1035
|
+
feature.setStyle(data.unActiveStyle);
|
|
1036
1036
|
}
|
|
1037
|
-
}
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
return "Invalid" /* Invalid */;
|
|
1041
|
-
}
|
|
1042
|
-
} catch (error) {
|
|
1043
|
-
console.error("Error analyzing coordinates:", error);
|
|
1044
|
-
return "Invalid" /* Invalid */;
|
|
1045
|
-
}
|
|
1037
|
+
});
|
|
1038
|
+
});
|
|
1039
|
+
return tempList;
|
|
1046
1040
|
};
|
|
1047
1041
|
|
|
1048
|
-
// src/
|
|
1049
|
-
var
|
|
1050
|
-
var
|
|
1051
|
-
var
|
|
1052
|
-
var
|
|
1053
|
-
var
|
|
1054
|
-
var
|
|
1055
|
-
var
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1042
|
+
// src/cluster.ts
|
|
1043
|
+
var import_ol3 = require("ol");
|
|
1044
|
+
var import_geom2 = require("ol/geom");
|
|
1045
|
+
var import_Cluster = __toESM(require("ol/source/Cluster"), 1);
|
|
1046
|
+
var import_Circle = __toESM(require("ol/style/Circle"), 1);
|
|
1047
|
+
var import_Vector5 = __toESM(require("ol/layer/Vector"), 1);
|
|
1048
|
+
var import_Vector6 = __toESM(require("ol/source/Vector"), 1);
|
|
1049
|
+
var import_style3 = require("ol/style");
|
|
1050
|
+
var createClusterLayer = (dataList, config) => {
|
|
1051
|
+
const count = dataList.length;
|
|
1052
|
+
const styleCache = {};
|
|
1053
|
+
const {
|
|
1054
|
+
distance,
|
|
1055
|
+
minDistance,
|
|
1056
|
+
openClick,
|
|
1057
|
+
buildStyle,
|
|
1058
|
+
singleStyles,
|
|
1059
|
+
computedRadius,
|
|
1060
|
+
layerName = "cluster-layer"
|
|
1061
|
+
} = config;
|
|
1062
|
+
const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
|
|
1063
|
+
styleCache[1] = singleStyles;
|
|
1064
|
+
const innerBuildStyle = (feature) => {
|
|
1065
|
+
const size = feature.get("features").length;
|
|
1066
|
+
let style = styleCache[size];
|
|
1067
|
+
const tempRadius = computedRadius ? computedRadius(size) : innerComputedRadius(size);
|
|
1068
|
+
if (!style) {
|
|
1069
|
+
style = new import_style3.Style({
|
|
1070
|
+
image: new import_Circle.default({
|
|
1071
|
+
radius: tempRadius * 20,
|
|
1072
|
+
stroke: new import_style3.Stroke({
|
|
1073
|
+
width: 2,
|
|
1074
|
+
color: `hsla(${180 - tempRadius * 180}, 100%, 40%, 1)`
|
|
1075
|
+
}),
|
|
1076
|
+
fill: new import_style3.Fill({
|
|
1077
|
+
color: `hsla(${180 - tempRadius * 180}, 100%, 50%, 1)`
|
|
1078
|
+
})
|
|
1079
|
+
}),
|
|
1080
|
+
text: new import_style3.Text({
|
|
1081
|
+
text: size.toString(),
|
|
1082
|
+
fill: new import_style3.Fill({
|
|
1083
|
+
color: `hsla(${180 - tempRadius * 180}, 100%, 10%, 1)`
|
|
1084
|
+
}),
|
|
1085
|
+
textBaseline: "middle"
|
|
1086
|
+
})
|
|
1065
1087
|
});
|
|
1088
|
+
styleCache[size] = style;
|
|
1066
1089
|
}
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
return new Promise((resolve, reject) => {
|
|
1074
|
-
getCapabilities(capabilitiesUrl).then((data) => {
|
|
1075
|
-
const options = (0, import_WMTS2.optionsFromCapabilities)(data, {
|
|
1076
|
-
Style: style || "",
|
|
1077
|
-
layer: datastore,
|
|
1078
|
-
version: version || "1.1.0",
|
|
1079
|
-
format: format || "image/png",
|
|
1080
|
-
matrixSet: matrixSet || "EPSG:4326"
|
|
1090
|
+
if (Array.isArray(style)) {
|
|
1091
|
+
const tempFeature = feature.get("features")[0];
|
|
1092
|
+
const index = tempFeature.get("styleIndex") || 0;
|
|
1093
|
+
tempFeature.setProperties({
|
|
1094
|
+
unActiveStyle: style[index],
|
|
1095
|
+
activeStyle: style[index + style.length / 2]
|
|
1081
1096
|
});
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1097
|
+
return style[index];
|
|
1098
|
+
}
|
|
1099
|
+
return style;
|
|
1100
|
+
};
|
|
1101
|
+
const vectorLayer = new import_Vector5.default({
|
|
1102
|
+
zIndex: 200,
|
|
1103
|
+
className: layerName,
|
|
1104
|
+
source: new import_Cluster.default({
|
|
1105
|
+
distance: distance || 80,
|
|
1106
|
+
minDistance: minDistance || 0,
|
|
1107
|
+
source: new import_Vector6.default({
|
|
1108
|
+
features: dataList.map((item) => {
|
|
1109
|
+
const feature = new import_ol3.Feature(new import_geom2.Point(item.lnglat));
|
|
1110
|
+
feature.setProperties(item);
|
|
1111
|
+
return feature;
|
|
1112
|
+
})
|
|
1113
|
+
})
|
|
1114
|
+
}),
|
|
1115
|
+
style: (feature) => buildStyle ? buildStyle(feature) : innerBuildStyle(feature)
|
|
1094
1116
|
});
|
|
1095
|
-
|
|
1117
|
+
vectorLayer.setProperties({
|
|
1118
|
+
_isCustom: true,
|
|
1119
|
+
_isVectorLayer: true,
|
|
1120
|
+
_isClusterLayer: true
|
|
1121
|
+
});
|
|
1122
|
+
if (openClick) {
|
|
1123
|
+
createSelectByLayer(vectorLayer);
|
|
1124
|
+
}
|
|
1125
|
+
return vectorLayer;
|
|
1126
|
+
};
|
|
1096
1127
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1097
1128
|
0 && (module.exports = {
|
|
1098
1129
|
GeometryType,
|
|
1099
1130
|
activeFeatureByUid,
|
|
1131
|
+
addFeaturesByLayer,
|
|
1100
1132
|
addMassMarksLayer,
|
|
1101
1133
|
appendFeaturesByLayer,
|
|
1102
1134
|
buildMassMarksStyles,
|