@3clear/basegis 0.1.1 → 0.1.2
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 +246 -64
- package/dist/basegis.js +4379 -2673
- package/dist/leaflet-pixi-overlay-BSJNo_DO.js +253 -0
- package/dist/methods.js +2177 -1028
- package/dist/pixi-vendor-BFDHT3Bf.js +25208 -0
- package/dist/pointLarge-Ct8TsOPW.js +690 -0
- package/dist/style.css +1 -1
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -13,17 +13,19 @@
|
|
|
13
13
|
## 安装
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm install @3clear/basegis leaflet axios
|
|
16
|
+
npm install @3clear/basegis leaflet axios
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
`d3-contour`、`pixi.js` 和 `leaflet-pixi-overlay` 已随 BaseGIS 构建产物发布,业务项目不需要单独安装。其中 Pixi 相关代码只在首次使用 Leaflet 海量点能力时按需加载。
|
|
20
|
+
|
|
19
21
|
使用样式:
|
|
20
22
|
|
|
21
23
|
```js
|
|
22
24
|
import '@3clear/basegis/style.css'
|
|
23
25
|
```
|
|
24
26
|
|
|
25
|
-
Cesium 当前不随 npm
|
|
26
|
-
如果需要加载 GeoTIFF
|
|
27
|
+
Cesium 当前不随 npm 包发布,项目需要按原项目方式把 Cesium 静态资源放到 `public/lib/Cesium`,并保证初始化前能访问 `window.Cesium`。
|
|
28
|
+
如果需要加载 GeoTIFF 网格,需要项目提前提供 `window.GeoTIFF`。
|
|
27
29
|
|
|
28
30
|
## 出口
|
|
29
31
|
|
|
@@ -39,6 +41,7 @@ import {
|
|
|
39
41
|
PointLargeLayerController,
|
|
40
42
|
PointDensityController,
|
|
41
43
|
ContourLayerController,
|
|
44
|
+
RasterContourController,
|
|
42
45
|
PressureContourLayer,
|
|
43
46
|
createPressureDataResolver,
|
|
44
47
|
buildPressureRenderData,
|
|
@@ -281,15 +284,8 @@ const mapCore = new BaseGIS({
|
|
|
281
284
|
// 创建地图实例。
|
|
282
285
|
mapCore.init()
|
|
283
286
|
|
|
284
|
-
//
|
|
285
|
-
mapCore.setEngine('leaflet')
|
|
286
|
-
|
|
287
|
-
// 真正切换地图引擎,需要再次 init。
|
|
288
|
-
// init 内部会先销毁旧 adapter,再按新 engineType 创建新地图实例。
|
|
289
|
-
mapCore.init({
|
|
290
|
-
engineType: 'leaflet',
|
|
291
|
-
containerId: 'map',
|
|
292
|
-
})
|
|
287
|
+
// 只传目标引擎即可完成切换、视野保留和托管图层恢复。
|
|
288
|
+
await mapCore.setEngine('leaflet')
|
|
293
289
|
|
|
294
290
|
// 覆盖运行时配置,不会自动重建地图。
|
|
295
291
|
mapCore.setConfig({ view: { defaultSceneMode: '2d' } })
|
|
@@ -304,13 +300,33 @@ mapCore.getMapInstance()
|
|
|
304
300
|
mapCore.destroy()
|
|
305
301
|
```
|
|
306
302
|
|
|
303
|
+
Cesium 默认使用最高 2 倍设备像素比、FXAA 和 4 倍 MSAA,避免高分屏上的细线出现明显像素阶梯。可按设备性能覆盖:
|
|
304
|
+
|
|
305
|
+
```js
|
|
306
|
+
const mapCore = new BaseGIS({
|
|
307
|
+
config: {
|
|
308
|
+
engine: {
|
|
309
|
+
cesium: {
|
|
310
|
+
renderQuality: {
|
|
311
|
+
maximumDevicePixelRatio: 1.5,
|
|
312
|
+
fxaa: true,
|
|
313
|
+
msaaSamples: 4,
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
})
|
|
319
|
+
```
|
|
320
|
+
|
|
307
321
|
方法说明:
|
|
308
322
|
|
|
309
323
|
| 方法 | 参数 | 说明 |
|
|
310
324
|
| --- | --- | --- |
|
|
311
|
-
| `init(options)` | `{ container, containerId, engineType }` |
|
|
312
|
-
| `
|
|
313
|
-
| `
|
|
325
|
+
| `init(options)` | `{ container, containerId, engineType }` | 初始化地图。重复调用时会自动恢复 BaseGIS 托管图层。 |
|
|
326
|
+
| `setEngine(engineType, options)` | 引擎类型、初始化参数 | 未初始化时记录默认引擎;已初始化时自动切换、保留视野并恢复托管图层。 |
|
|
327
|
+
| `switchEngine(engineType, options)` | 引擎类型、初始化参数 | `setEngine()` 的兼容别名。 |
|
|
328
|
+
| `whenReady()` | 无 | 等待最近一次 `init()` 触发的托管图层恢复完成。 |
|
|
329
|
+
| `destroy()` | 无 | 销毁当前地图实例和 adapter,并清空托管图层快照。 |
|
|
314
330
|
| `setConfig(config)` | `Object` | 合并运行时配置;不自动重建地图。 |
|
|
315
331
|
| `getEngineType()` | 无 | 返回当前引擎类型。 |
|
|
316
332
|
| `getConfig()` | 无 | 返回当前运行时配置。 |
|
|
@@ -318,62 +334,55 @@ mapCore.destroy()
|
|
|
318
334
|
|
|
319
335
|
#### 推荐的引擎切换写法
|
|
320
336
|
|
|
321
|
-
页面上做 Cesium / Leaflet
|
|
337
|
+
页面上做 Cesium / Leaflet 切换时,直接调用 `setEngine()`。它会保留当前视野、重建目标引擎,并等待托管图层自动恢复。
|
|
322
338
|
|
|
323
339
|
```js
|
|
324
|
-
async function
|
|
340
|
+
async function changeEngine(engineType) {
|
|
325
341
|
if (!mapCore || mapCore.getEngineType() === engineType) {
|
|
326
342
|
return
|
|
327
343
|
}
|
|
328
344
|
|
|
329
|
-
const result = mapCore.
|
|
330
|
-
engineType,
|
|
331
|
-
containerId: 'map',
|
|
332
|
-
})
|
|
345
|
+
const result = await mapCore.setEngine(engineType)
|
|
333
346
|
|
|
334
347
|
if (!result.success) {
|
|
335
348
|
console.warn(result.message)
|
|
336
349
|
return
|
|
337
350
|
}
|
|
338
|
-
|
|
339
|
-
// 地图实例已经重建,业务图层需要用自己的数据源重新加载。
|
|
340
|
-
await reloadBusinessLayers()
|
|
341
351
|
}
|
|
342
352
|
```
|
|
343
353
|
|
|
344
|
-
|
|
354
|
+
直接重复调用 `init({ engineType })` 也会自动开始恢复;如果后续逻辑依赖恢复完成,需要再等待 `whenReady()`:
|
|
345
355
|
|
|
346
356
|
```js
|
|
347
|
-
mapCore.setEngine('leaflet')
|
|
348
357
|
const result = mapCore.init({
|
|
358
|
+
engineType: 'leaflet',
|
|
349
359
|
containerId: 'map',
|
|
350
360
|
})
|
|
361
|
+
|
|
362
|
+
if (result.success) {
|
|
363
|
+
await mapCore.whenReady()
|
|
364
|
+
}
|
|
351
365
|
```
|
|
352
366
|
|
|
353
|
-
|
|
367
|
+
`switchEngine()` 作为兼容别名保留,行为与 `setEngine()` 一致。
|
|
354
368
|
|
|
355
369
|
#### 切换后的图层处理
|
|
356
370
|
|
|
357
|
-
引擎切换不是把 Cesium
|
|
371
|
+
引擎切换不是把 Cesium 图层对象“搬到” Leaflet,也不是把 Leaflet 图层对象“搬到” Cesium。BaseGIS 会保存托管图层的业务参数,并在新 adapter 中重新创建图层。
|
|
358
372
|
|
|
359
|
-
- `
|
|
360
|
-
-
|
|
361
|
-
-
|
|
373
|
+
- 自动恢复范围包括图片、网格、海量点、点位抽稀、等值线和三维体图层,对应 `upsert*Layer` 方法及 Controller。
|
|
374
|
+
- 图层最新的数据参数、显隐、清空、删除、海量点删除和高亮状态会同步到 BaseGIS 快照。
|
|
375
|
+
- 快照只保存业务参数引用,不复制大数组,不保存任何底层引擎对象。
|
|
376
|
+
- 三维体图层切到 Leaflet 时会返回不支持结果,但快照仍保留,切回 Cesium 后会继续恢复。
|
|
362
377
|
- Cesium 专有能力在 Leaflet 下不可用,例如 DEM、三维体渲染、三维切片/剖面渲染。
|
|
363
|
-
-
|
|
378
|
+
- 一次性绘制对象、点击监听、风场、剖面图层和页面直接操作底层引擎创建的对象不在托管范围内,需要业务自行恢复。
|
|
364
379
|
|
|
365
|
-
|
|
380
|
+
切换结果中可以查看恢复明细:
|
|
366
381
|
|
|
367
382
|
```js
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
await contour.load(currentContourPayload)
|
|
372
|
-
|
|
373
|
-
if (mapCore.getEngineType() === 'cesium') {
|
|
374
|
-
mapCore.upsertVolumeLayer(currentVolumePayload)
|
|
375
|
-
}
|
|
376
|
-
}
|
|
383
|
+
const result = await mapCore.setEngine('leaflet')
|
|
384
|
+
console.log(result.data.restore.restored)
|
|
385
|
+
console.log(result.data.restore.failed)
|
|
377
386
|
```
|
|
378
387
|
|
|
379
388
|
|
|
@@ -1444,6 +1453,8 @@ if (result.success) {
|
|
|
1444
1453
|
|
|
1445
1454
|
用于海量点位渲染。它会尽量把传入的有效点位全部渲染出来,适合站点、设备、告警、监测点等需要保留全部点位并支持点击、高亮、删除、显隐的场景。
|
|
1446
1455
|
|
|
1456
|
+
Leaflet 模式使用 BaseGIS 内置的 `pixi.js` 和 `leaflet-pixi-overlay` 异步渲染,业务项目无需安装这两个依赖;Cesium 模式不加载 Pixi 相关代码。
|
|
1457
|
+
|
|
1447
1458
|
如果业务目标是“地图缩小时按屏幕网格抽稀,只显示代表点”,应使用后文的 `PointDensityController`。
|
|
1448
1459
|
|
|
1449
1460
|
### Demo 位置
|
|
@@ -2189,6 +2200,8 @@ await contour.load({
|
|
|
2189
2200
|
color: '#ff4d4f',
|
|
2190
2201
|
width: 2,
|
|
2191
2202
|
},
|
|
2203
|
+
showLabel: true,
|
|
2204
|
+
labelFormatter: (item) => String(item.value),
|
|
2192
2205
|
})
|
|
2193
2206
|
|
|
2194
2207
|
await contour.update({
|
|
@@ -2203,7 +2216,182 @@ contour.clear()
|
|
|
2203
2216
|
contour.destroy()
|
|
2204
2217
|
```
|
|
2205
2218
|
|
|
2206
|
-
数据别名支持 `contours / isolines / isoline / lines / data / items
|
|
2219
|
+
数据别名支持 `contours / isolines / isoline / lines / data / items`。开启 `showLabel` 后,Cesium 和 Leaflet 都会根据当前屏幕范围重新选择可见线段上的位置;地图平移、缩放、容器尺寸变化或切换引擎时只重排标签,不重新生成等值线。
|
|
2220
|
+
|
|
2221
|
+
Cesium 在默认椭球地表上使用 `PolylineCollection` 批量落图;真正启用 DEM 地形后才使用 `GroundPolylinePrimitive`。新批次就绪后再替换旧批次,不为每条线创建独立 Entity。标签定位可通过 `labelLineThinStep` 抽样投影点,不会改变实际绘制的等值线。
|
|
2222
|
+
|
|
2223
|
+
Leaflet 默认复用高精度 SVG renderer,并使用 `smoothFactor: 0.5` 做屏幕空间简化:缩小时清理挤在同一像素内的折点,放大后自动保留曲线细节,避免全局 `preferCanvas` 放大细线锯齿。线位于 `dt-contour-pane`(层级 `450`),稳定显示在图片图层上方,并保持在 `markerPane` 数值标签下方;显式传入 `pane` 时仍以业务配置为准。
|
|
2224
|
+
|
|
2225
|
+
屏幕标注参数:
|
|
2226
|
+
|
|
2227
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
2228
|
+
| --- | --- | --- | --- |
|
|
2229
|
+
| `showLabel/showLabels` | `boolean` | `false` | 是否显示等值线数值。 |
|
|
2230
|
+
| `labelFormatter(item, record)` | `Function` | 等值级别 | 格式化标签文本。 |
|
|
2231
|
+
| `labelColor` | `string` | `#34464f` | 文字颜色。 |
|
|
2232
|
+
| `labelBackgroundColor` | `string` | `rgba(255,255,255,0.78)` | 背景色。 |
|
|
2233
|
+
| `labelBorderColor/labelBorderWidth` | `string/number` | `rgba(93,112,116,0.35)` / `0.5` | 边框颜色和宽度。 |
|
|
2234
|
+
| `labelBorderRadius` | `number` | `8` | 圆角,单位 px。 |
|
|
2235
|
+
| `labelFontSize/labelFontWeight` | `number/string` | `10/600` | 字号和字重。 |
|
|
2236
|
+
| `labelPaddingX/labelPaddingY` | `number` | `4/0` | 标签内部留白。 |
|
|
2237
|
+
| `labelMinWidth` | `number` | `32` | 标签最小宽度,短数值保持横向胶囊形状。 |
|
|
2238
|
+
| `labelViewportPadding` | `number/object/Function` | `24` | 屏幕安全边距;对象为 `top/right/bottom/left`,函数接收 `{width,height}`。 |
|
|
2239
|
+
| `labelMinScreenLength` | `number` | `72` | 可见线段达到该像素长度后才允许放标签。 |
|
|
2240
|
+
| `labelLineThinStep` | `number` | Cesium `3`,Leaflet `1` | 标签定位时的投影抽样步长,不影响实际线几何。 |
|
|
2241
|
+
| `labelCollisionPadding` | `number` | `7` | 标签碰撞间距。 |
|
|
2242
|
+
| `labelMaxPerLevel` | `number` | `Infinity` | 每个等值级别在当前视野中的标签上限;默认按可见线数量自动决定。 |
|
|
2243
|
+
| `labelDisableDepthTestDistance` | `number` | `Infinity` | Cesium 标签关闭深度检测的距离。 |
|
|
2244
|
+
|
|
2245
|
+
`getState()` 的 `labelCount` 是当前视野实际显示的标签数量。Cesium 状态额外包含 `lineRenderer/lineBuildElapsed/labelLayoutElapsed/primitiveReadyElapsed`,用于区分线构建、标签排版和异步就绪耗时。`onStateChange(state)` 会在视野重排后回传新状态。页面存在侧栏等遮挡时,可通过 `labelViewportPadding` 排除对应区域。
|
|
2246
|
+
|
|
2247
|
+
## RasterContourController
|
|
2248
|
+
|
|
2249
|
+
用于从 GeoTIFF、灰度图或数值网格直接计算并绘制等值线。内部统一使用 `d3-contour` 追踪等值线,输出仍交给 `ContourLayerController`,所以页面不需要区分 Cesium 和 Leaflet;调用 `BaseGIS.setEngine()` 时,已经生成的等值线会随托管图层自动恢复。
|
|
2250
|
+
|
|
2251
|
+
### 1. GeoTIFF 生成等值线
|
|
2252
|
+
|
|
2253
|
+
```js
|
|
2254
|
+
import { RasterContourController } from '@3clear/basegis/methods'
|
|
2255
|
+
|
|
2256
|
+
const rasterContour = new RasterContourController({
|
|
2257
|
+
mapCore,
|
|
2258
|
+
layerId: 'temperature-raster-contour',
|
|
2259
|
+
// thresholds / interval / thresholdCount 三选一。
|
|
2260
|
+
interval: 5,
|
|
2261
|
+
smooth: true,
|
|
2262
|
+
visible: true,
|
|
2263
|
+
})
|
|
2264
|
+
|
|
2265
|
+
const result = await rasterContour.loadGeoTiff({
|
|
2266
|
+
tifUrl: '/data/temperature.tif',
|
|
2267
|
+
// TIF 范围不准确时可用 WGS84 四至覆盖文件元数据。
|
|
2268
|
+
area: {
|
|
2269
|
+
startLon: -180,
|
|
2270
|
+
startLat: -90,
|
|
2271
|
+
endLon: 180,
|
|
2272
|
+
endLat: 90,
|
|
2273
|
+
},
|
|
2274
|
+
band: 0,
|
|
2275
|
+
interval: 5,
|
|
2276
|
+
clampToGround: true,
|
|
2277
|
+
showLabel: true,
|
|
2278
|
+
labelFormatter: (item) => String(Math.round(item.value)),
|
|
2279
|
+
labelViewportPadding: { top: 32, right: 32, bottom: 32, left: 360 },
|
|
2280
|
+
styleCallback: (item) => ({
|
|
2281
|
+
color: item.value >= 30 ? '#ff6b6b' : '#d5f4ff',
|
|
2282
|
+
width: item.value % 10 === 0 ? 2 : 1,
|
|
2283
|
+
weight: item.value % 10 === 0 ? 2 : 1,
|
|
2284
|
+
}),
|
|
2285
|
+
})
|
|
2286
|
+
|
|
2287
|
+
if (!result.success) {
|
|
2288
|
+
console.warn(result.message)
|
|
2289
|
+
}
|
|
2290
|
+
|
|
2291
|
+
// 仅调整等值距时复用已解析网格,不再请求和解码 TIF。
|
|
2292
|
+
await rasterContour.update({ interval: 2 })
|
|
2293
|
+
```
|
|
2294
|
+
|
|
2295
|
+
GeoTIFF 依赖宿主页面提供 `window.GeoTIFF`。控制器会读取波段、尺寸、坐标系和范围;当前原生支持 EPSG:4326、EPSG:3857。其他投影可先转换为 WGS84,或传入 WGS84 `area` 覆盖原始范围。
|
|
2296
|
+
|
|
2297
|
+
### 2. 灰度图生成等值线
|
|
2298
|
+
|
|
2299
|
+
```js
|
|
2300
|
+
await rasterContour.loadGrayImage({
|
|
2301
|
+
grayImageUrl: '/data/pressure-gray.png',
|
|
2302
|
+
area: [-180, -90, 180, 90],
|
|
2303
|
+
grayMinValue: 0,
|
|
2304
|
+
grayMaxValue: 255,
|
|
2305
|
+
minValue: 960,
|
|
2306
|
+
maxValue: 1040,
|
|
2307
|
+
noDataValue: 255,
|
|
2308
|
+
interval: 4,
|
|
2309
|
+
})
|
|
2310
|
+
```
|
|
2311
|
+
|
|
2312
|
+
灰度换算规则:
|
|
2313
|
+
|
|
2314
|
+
```text
|
|
2315
|
+
业务值 = (灰度值 - grayMinValue) / (grayMaxValue - grayMinValue)
|
|
2316
|
+
* (maxValue - minValue) + minValue
|
|
2317
|
+
```
|
|
2318
|
+
|
|
2319
|
+
灰度图片本身没有地理范围和业务值含义,因此 `area` 必填;要表达真实数据,还应传正确的灰度范围与业务值范围。已经着色的彩色 PNG 不能反推出原始业务值,应使用对应 TIF 或直接传数值网格。
|
|
2320
|
+
|
|
2321
|
+
### 3. 数值网格生成等值线
|
|
2322
|
+
|
|
2323
|
+
```js
|
|
2324
|
+
await rasterContour.loadGrid({
|
|
2325
|
+
values: [12, 14, 16, 18, 20, 22],
|
|
2326
|
+
width: 3,
|
|
2327
|
+
height: 2,
|
|
2328
|
+
area: [100, 20, 103, 22],
|
|
2329
|
+
thresholds: [15, 20],
|
|
2330
|
+
})
|
|
2331
|
+
|
|
2332
|
+
// values 也可以直接传二维数组,此时不需要 width / height。
|
|
2333
|
+
await rasterContour.loadGrid({
|
|
2334
|
+
values: [
|
|
2335
|
+
[12, 14, 16],
|
|
2336
|
+
[18, 20, 22],
|
|
2337
|
+
],
|
|
2338
|
+
area: [100, 20, 103, 22],
|
|
2339
|
+
thresholdCount: 6,
|
|
2340
|
+
})
|
|
2341
|
+
```
|
|
2342
|
+
|
|
2343
|
+
### 4. 参数
|
|
2344
|
+
|
|
2345
|
+
数据源参数:
|
|
2346
|
+
|
|
2347
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
2348
|
+
| --- | --- | --- | --- | --- |
|
|
2349
|
+
| `mapCore/baseGIS` | `BaseGIS` | 构造时必填 | `null` | 当前 BaseGIS 实例。 |
|
|
2350
|
+
| `layerId/contourLayerId` | `string` | 否 | `raster-contour-default` | 等值线图层 id。 |
|
|
2351
|
+
| `sourceType` | `geotiff/grayscale/grid` | 否 | 自动判断 | `loadGeoTiff/loadGrayImage/loadGrid` 会自动补齐。 |
|
|
2352
|
+
| `tifUrl/tiffUrl` | `string` | GeoTIFF 必填 | `''` | GeoTIFF 地址。 |
|
|
2353
|
+
| `arrayBuffer` | `ArrayBuffer` | 否 | `null` | 可代替 `tifUrl` 直接传 TIF 内容。 |
|
|
2354
|
+
| `band` | `number` | 否 | `0` | GeoTIFF 波段下标,从 0 开始。 |
|
|
2355
|
+
| `imageIndex` | `number` | 否 | `0` | 多图像 GeoTIFF 的图像下标。 |
|
|
2356
|
+
| `grayImageUrl/imageUrl` | `string` | 灰度图必填 | `''` | 灰度图地址,服务端必须允许 Canvas 跨域读取。 |
|
|
2357
|
+
| `values/data/grid` | `Array/TypedArray` | 数值网格必填 | - | 一维或二维数值。 |
|
|
2358
|
+
| `width/height` | `number` | 一维网格必填 | `0` | 一维数组的网格尺寸。 |
|
|
2359
|
+
| `area` | `object/number[]` | 图片和普通网格必填 | `null` | WGS84 范围;数组顺序为 `[west,south,east,north]`。 |
|
|
2360
|
+
| `sourceProjection` | `string` | 否 | 自动读取 | 支持 `EPSG:4326`、`EPSG:3857`。 |
|
|
2361
|
+
| `noDataValue` | `number` | 否 | TIF 自动读取 | 指定无效值;灰度图不传时仅透明像素无效。 |
|
|
2362
|
+
| `validMin/validMax` | `number` | 否 | - | 过滤值域外数据。 |
|
|
2363
|
+
| `scale/offset` | `number` | 否 | `1/0` | 数值换算为 `value * scale + offset`。 |
|
|
2364
|
+
| `isSplit` | `boolean` | 否 | `false` | 把左右半幅交换,处理以 0° 经线为边界的全球数据。 |
|
|
2365
|
+
|
|
2366
|
+
等值线参数:
|
|
2367
|
+
|
|
2368
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
2369
|
+
| --- | --- | --- | --- | --- |
|
|
2370
|
+
| `thresholds/levels` | `number[]` | 三选一 | - | 显式等值线级别,仅保留实际值域内的值。 |
|
|
2371
|
+
| `interval/contourInterval` | `number` | 三选一 | - | 固定等值距。 |
|
|
2372
|
+
| `thresholdCount/levelCount` | `number` | 三选一 | `12` | 自动均分级别数量,范围 1~100。 |
|
|
2373
|
+
| `smooth` | `boolean` | 否 | `true` | 是否平滑等值线。 |
|
|
2374
|
+
| `smoothingIterations` | `number` | 否 | `0` | Chaikin 补点平滑次数,范围 0~3;气象格点通常取 1~2,次数越高,点数越多。 |
|
|
2375
|
+
| `excludeBoundary` | `boolean` | 否 | `true` | 去掉 d3 面边界中贴着栅格四边的伪矩形线。 |
|
|
2376
|
+
| `maxCells` | `number` | 否 | `1000000` | 超过该像元数时先等比例抽样,避免大图阻塞页面。 |
|
|
2377
|
+
| `minimumLinePoints` | `number` | 否 | `3` | 最短线点数,用于过滤栅格四角的两点补边。 |
|
|
2378
|
+
| `coordinatePrecision` | `number` | 否 | `6` | 输出经纬度小数位数。 |
|
|
2379
|
+
| `visible` | `boolean` | 否 | `true` | 初始显隐。 |
|
|
2380
|
+
| 其他渲染参数 | - | 否 | - | 与 `ContourLayerController` 相同,如 `color/width/weight/styleCallback/showLabel/labelViewportPadding`。 |
|
|
2381
|
+
|
|
2382
|
+
### 5. 方法和状态
|
|
2383
|
+
|
|
2384
|
+
| 方法 | 说明 |
|
|
2385
|
+
| --- | --- |
|
|
2386
|
+
| `load(payload, options)` | 自动判断数据源并生成等值线。 |
|
|
2387
|
+
| `loadGeoTiff(payload, options)` | 从 GeoTIFF 生成。 |
|
|
2388
|
+
| `loadGrayImage(payload, options)` | 从灰度图生成。 |
|
|
2389
|
+
| `loadGrid(payload, options)` | 从数值网格生成。 |
|
|
2390
|
+
| `update(payload)` | 合并配置后重新计算;仅修改等值线或渲染参数时复用已解析网格,修改数据源参数时自动重新加载。 |
|
|
2391
|
+
| `show/hide/toggle` | 控制等值线显隐。 |
|
|
2392
|
+
| `clear/destroy` | 清空或销毁控制器。 |
|
|
2393
|
+
| `getState()` | 返回尺寸、值域、级别、线数、当前标注数、投影、耗时和底层 contour 状态。 |
|
|
2394
|
+
| `getRasterData()` | 返回当前标准栅格,包含 `values/width/height/area`。 |
|
|
2207
2395
|
|
|
2208
2396
|
[//]: # ()
|
|
2209
2397
|
[//]: # (## PressureContourLayer)
|
|
@@ -2460,20 +2648,19 @@ export function useBaseGIS(options = {}) {
|
|
|
2460
2648
|
mapCore.value = null
|
|
2461
2649
|
})
|
|
2462
2650
|
|
|
2463
|
-
function
|
|
2651
|
+
async function setEngine(engineType) {
|
|
2464
2652
|
if (!mapCore.value || mapCore.value.getEngineType() === engineType) {
|
|
2465
2653
|
return { success: true }
|
|
2466
2654
|
}
|
|
2467
2655
|
|
|
2468
|
-
return mapCore.value.
|
|
2656
|
+
return mapCore.value.setEngine(engineType, {
|
|
2469
2657
|
...options,
|
|
2470
|
-
engineType,
|
|
2471
2658
|
})
|
|
2472
2659
|
}
|
|
2473
2660
|
|
|
2474
2661
|
return {
|
|
2475
2662
|
mapCore,
|
|
2476
|
-
|
|
2663
|
+
setEngine,
|
|
2477
2664
|
}
|
|
2478
2665
|
}
|
|
2479
2666
|
```
|
|
@@ -2488,22 +2675,22 @@ export function useBaseGIS(options = {}) {
|
|
|
2488
2675
|
<script setup>
|
|
2489
2676
|
import { useBaseGIS } from './useBaseGIS'
|
|
2490
2677
|
|
|
2491
|
-
const { mapCore,
|
|
2678
|
+
const { mapCore, setEngine } = useBaseGIS({
|
|
2492
2679
|
engineType: 'cesium',
|
|
2493
2680
|
containerId: 'map',
|
|
2494
2681
|
})
|
|
2495
2682
|
</script>
|
|
2496
2683
|
```
|
|
2497
2684
|
|
|
2498
|
-
|
|
2685
|
+
BaseGIS 托管图层会自动恢复,页面不需要重新请求数据:
|
|
2499
2686
|
|
|
2500
2687
|
```js
|
|
2501
|
-
const result =
|
|
2502
|
-
|
|
2503
|
-
await reloadBusinessLayers()
|
|
2504
|
-
}
|
|
2688
|
+
const result = await setEngine('leaflet')
|
|
2689
|
+
console.log(result.data?.restore)
|
|
2505
2690
|
```
|
|
2506
2691
|
|
|
2692
|
+
只有风场、剖面、一次性绘制对象或页面直接创建的底层引擎对象需要在切换成功后自行恢复。
|
|
2693
|
+
|
|
2507
2694
|
## 能力支持说明
|
|
2508
2695
|
|
|
2509
2696
|
| 能力 | Cesium | Leaflet |
|
|
@@ -2634,18 +2821,13 @@ mapCore.init()
|
|
|
2634
2821
|
|
|
2635
2822
|
### 切换引擎后图层没了
|
|
2636
2823
|
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
处理方式是:页面或 store 保存业务数据,切换成功后重新调用对应的加载方法。
|
|
2824
|
+
直接使用 `setEngine()`。BaseGIS 会保留视野,并自动恢复图片、网格、海量点、点位抽稀、等值线和三维体等托管图层:
|
|
2640
2825
|
|
|
2641
2826
|
```js
|
|
2642
|
-
const result = mapCore.
|
|
2643
|
-
engineType: 'leaflet',
|
|
2644
|
-
containerId: 'map',
|
|
2645
|
-
})
|
|
2827
|
+
const result = await mapCore.setEngine('leaflet')
|
|
2646
2828
|
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
await pointLayer.load({ points: currentPoints })
|
|
2650
|
-
}
|
|
2829
|
+
console.log(result.data?.restore?.restored)
|
|
2830
|
+
console.log(result.data?.restore?.failed)
|
|
2651
2831
|
```
|
|
2832
|
+
|
|
2833
|
+
如果丢失的是 `drawPoint/drawLine/drawPolygon/drawText/addMarker`、点击监听、风场、剖面图层或页面直接创建的 Cesium / Leaflet 对象,它们不属于托管图层,需要业务在切换成功后自行恢复。
|