@caoguo/maplibre 0.0.6 → 0.0.7

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.
Files changed (64) hide show
  1. package/dist/chunk-DENQSIV2.js +81 -0
  2. package/dist/chunk-DENQSIV2.js.map +1 -0
  3. package/dist/chunk-G7VY42ZG.js +210 -0
  4. package/dist/chunk-G7VY42ZG.js.map +1 -0
  5. package/dist/chunk-MLLIAWVI.js +214 -0
  6. package/dist/chunk-MLLIAWVI.js.map +1 -0
  7. package/dist/chunk-OLS4DD3F.js +27 -0
  8. package/dist/chunk-OLS4DD3F.js.map +1 -0
  9. package/dist/chunk-OUEPE6JT.js +26 -0
  10. package/dist/chunk-OUEPE6JT.js.map +1 -0
  11. package/dist/chunk-SKXL3DKL.js +125 -0
  12. package/dist/chunk-SKXL3DKL.js.map +1 -0
  13. package/dist/chunk-Y3JNDOHU.js +56 -0
  14. package/dist/chunk-Y3JNDOHU.js.map +1 -0
  15. package/dist/controls/index.cjs +227 -0
  16. package/dist/controls/index.cjs.map +1 -0
  17. package/dist/controls/index.d.cts +171 -0
  18. package/dist/controls/index.d.ts +171 -0
  19. package/dist/controls/index.js +4 -0
  20. package/dist/controls/index.js.map +1 -0
  21. package/dist/crs/index.cjs +137 -0
  22. package/dist/crs/index.cjs.map +1 -0
  23. package/dist/crs/index.d.cts +80 -0
  24. package/dist/crs/index.d.ts +80 -0
  25. package/dist/crs/index.js +3 -0
  26. package/dist/crs/index.js.map +1 -0
  27. package/dist/index.cjs +48 -13
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +11 -499
  30. package/dist/index.d.ts +11 -499
  31. package/dist/index.js +14 -643
  32. package/dist/index.js.map +1 -1
  33. package/dist/lod/index.cjs +60 -0
  34. package/dist/lod/index.cjs.map +1 -0
  35. package/dist/lod/index.d.cts +62 -0
  36. package/dist/lod/index.d.ts +62 -0
  37. package/dist/lod/index.js +3 -0
  38. package/dist/lod/index.js.map +1 -0
  39. package/dist/shaders/index.cjs +215 -0
  40. package/dist/shaders/index.cjs.map +1 -0
  41. package/dist/shaders/index.d.cts +131 -0
  42. package/dist/shaders/index.d.ts +131 -0
  43. package/dist/shaders/index.js +3 -0
  44. package/dist/shaders/index.js.map +1 -0
  45. package/dist/sourceUtils.cjs +30 -0
  46. package/dist/sourceUtils.cjs.map +1 -0
  47. package/dist/sourceUtils.d.cts +60 -0
  48. package/dist/sourceUtils.d.ts +60 -0
  49. package/dist/sourceUtils.js +3 -0
  50. package/dist/sourceUtils.js.map +1 -0
  51. package/dist/styles.cjs +47 -12
  52. package/dist/styles.cjs.map +1 -1
  53. package/dist/styles.d.cts +13 -4
  54. package/dist/styles.d.ts +13 -4
  55. package/dist/styles.js +1 -1
  56. package/dist/terrain.cjs +31 -0
  57. package/dist/terrain.cjs.map +1 -0
  58. package/dist/terrain.d.cts +28 -0
  59. package/dist/terrain.d.ts +28 -0
  60. package/dist/terrain.js +3 -0
  61. package/dist/terrain.js.map +1 -0
  62. package/package.json +31 -1
  63. package/dist/chunk-DNEF4DHG.js +0 -48
  64. package/dist/chunk-DNEF4DHG.js.map +0 -1
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 原生 MapLibre 地图 source 操作的幂等工具。
3
+ *
4
+ * 各业务 System(grid/water/pipeline/telecom/compute/transport)的 render()
5
+ * 通过 `this.map.instance` 直接调用原生 MapLibre,而非经 CaoguoMap 包装类的
6
+ * 幂等 addSource。为避免在每个 System 内重复书写 `if (!mlMap.getSource(id))`
7
+ * 样板,并根治「层级切换重渲染崩溃」(Source already exists),统一在此提供
8
+ * 幂等 upsert 与安全的 removeSource。
9
+ *
10
+ * 仅依赖原生 MapLibre 的 source 子集接口,便于各 System 直接传入 instance。
11
+ */
12
+ /**
13
+ * 原生 MapLibre source 操作的子集接口。
14
+ *
15
+ * 仅 `getSource` 为必填——它是所有 helper 判断「source 是否存在」的统一探针。
16
+ * 其余方法全部可选,因为各业务 System 对 `this.map.instance` 的局部类型断言
17
+ * 只声明了实际用到的若干方法(如 topology 只取 getSource/removeSource,
18
+ * traffic 只取 addSource/addLayer),强制统一必填字段会与这些子集冲突。
19
+ * helper 内部对每个要调用的方法做存在性检查,缺失时安全跳过或回退,
20
+ * 保证类型与运行时都安全(真实 MapLibre 实例始终具备全部方法)。
21
+ */
22
+ interface MlMapSourceApi {
23
+ getSource: (id: string) => unknown;
24
+ addSource?: (id: string, source: unknown) => void;
25
+ addLayer?: (layer: unknown) => void;
26
+ setData?: (id: string, data: unknown) => void;
27
+ removeSource?: (id: string) => void;
28
+ }
29
+ /**
30
+ * 幂等地确保一个 GeoJSON source 存在并持有给定数据。
31
+ *
32
+ * - 若 source 已存在且具备 setData:setData 更新(避免重复 addSource 抛错)。
33
+ * - 若 source 已存在但无 setData:回退为 addSource(MapLibre 对重复 id 会忽略/覆盖,
34
+ * 不抛错,仍可达成渲染目标)。
35
+ * - 若 source 不存在且具备 addSource:addSource 创建。
36
+ *
37
+ * 注意:若传入对象既无 setData 又无 addSource,则无法创建/更新 source。
38
+ * 各 System 传入的 `this.map.instance` 为真实 MapLibre 实例,始终具备这些方法。
39
+ *
40
+ * @param mlMap 原生 MapLibre 实例(或任意满足 MlMapSourceApi 的对象)
41
+ * @param id source 唯一标识
42
+ * @param data GeoJSON 数据(或 addSource 所需的 source spec)
43
+ */
44
+ declare function upsertSource(mlMap: MlMapSourceApi, id: string, data: unknown): void;
45
+ /**
46
+ * 安全地移除 source:仅当存在且具备 removeSource 时才移除,避免不存在时抛错。
47
+ *
48
+ * @param mlMap 原生 MapLibre 实例
49
+ * @param id source 唯一标识
50
+ */
51
+ declare function removeSourceSafe(mlMap: MlMapSourceApi, id: string): void;
52
+ /**
53
+ * 安全地批量移除 source。
54
+ *
55
+ * @param mlMap 原生 MapLibre 实例
56
+ * @param ids source 标识数组
57
+ */
58
+ declare function removeSourcesSafe(mlMap: MlMapSourceApi, ids: string[]): void;
59
+
60
+ export { type MlMapSourceApi, removeSourceSafe, removeSourcesSafe, upsertSource };
@@ -0,0 +1,3 @@
1
+ export { removeSourceSafe, removeSourcesSafe, upsertSource } from './chunk-OUEPE6JT.js';
2
+ //# sourceMappingURL=sourceUtils.js.map
3
+ //# sourceMappingURL=sourceUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"sourceUtils.js"}
package/dist/styles.cjs CHANGED
@@ -8,20 +8,18 @@ var WUHAN_ZOOM = 11;
8
8
  function caoguoStyle(theme$1 = "caoguo-dark") {
9
9
  return theme.buildStyle(theme$1);
10
10
  }
11
- function osmRasterStyle() {
11
+ function geoqRasterStyle() {
12
12
  return {
13
13
  version: 8,
14
14
  glyphs: "https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf",
15
15
  sources: {
16
- "osm-raster": {
16
+ "geoq-raster": {
17
17
  type: "raster",
18
18
  tiles: [
19
- "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
20
- "https://b.tile.openstreetmap.org/{z}/{x}/{y}.png",
21
- "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png"
19
+ "https://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}"
22
20
  ],
23
21
  tileSize: 256,
24
- attribution: "\xA9 OpenStreetMap contributors"
22
+ attribution: "\xA9 GeoQ \u667A\u56FE"
25
23
  }
26
24
  },
27
25
  layers: [
@@ -31,23 +29,60 @@ function osmRasterStyle() {
31
29
  paint: { "background-color": "#0a0f1e" }
32
30
  },
33
31
  {
34
- id: "osm-raster",
32
+ id: "geoq-raster",
35
33
  type: "raster",
36
- source: "osm-raster",
34
+ source: "geoq-raster",
37
35
  paint: {
38
- "raster-opacity": 0.85,
39
- "raster-saturation": -0.6,
40
- "raster-brightness-max": 0.7,
41
- "raster-contrast": 0.1
36
+ "raster-opacity": 0.9,
37
+ "raster-saturation": -0.2,
38
+ "raster-contrast": 0.05
42
39
  }
43
40
  }
44
41
  ]
45
42
  };
46
43
  }
44
+ var osmRasterStyle = geoqRasterStyle;
45
+ function buildGraticule(step = 10) {
46
+ const features = [];
47
+ for (let lon = -180; lon <= 180; lon += step) {
48
+ features.push({
49
+ type: "Feature",
50
+ properties: { kind: "meridian" },
51
+ geometry: { type: "LineString", coordinates: [[lon, -85], [lon, 85]] }
52
+ });
53
+ }
54
+ for (let lat = -80; lat <= 80; lat += step) {
55
+ features.push({
56
+ type: "Feature",
57
+ properties: { kind: "parallel" },
58
+ geometry: { type: "LineString", coordinates: [[-180, lat], [180, lat]] }
59
+ });
60
+ }
61
+ return { type: "FeatureCollection", features };
62
+ }
63
+ function localBasemapStyle() {
64
+ return {
65
+ version: 8,
66
+ sources: {
67
+ graticule: { type: "geojson", data: buildGraticule() }
68
+ },
69
+ layers: [
70
+ { id: "bg", type: "background", paint: { "background-color": "#0a0f1e" } },
71
+ {
72
+ id: "graticule",
73
+ type: "line",
74
+ source: "graticule",
75
+ paint: { "line-color": "#1e293b", "line-width": 0.6, "line-opacity": 0.6 }
76
+ }
77
+ ]
78
+ };
79
+ }
47
80
 
48
81
  exports.WUHAN_CENTER = WUHAN_CENTER;
49
82
  exports.WUHAN_ZOOM = WUHAN_ZOOM;
50
83
  exports.caoguoStyle = caoguoStyle;
84
+ exports.geoqRasterStyle = geoqRasterStyle;
85
+ exports.localBasemapStyle = localBasemapStyle;
51
86
  exports.osmRasterStyle = osmRasterStyle;
52
87
  //# sourceMappingURL=styles.cjs.map
53
88
  //# sourceMappingURL=styles.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.ts"],"names":["theme","buildStyle"],"mappings":";;;;;AAWO,IAAM,YAAA,GAAiC,CAAC,QAAA,EAAU,OAAO;AACzD,IAAM,UAAA,GAAa;AAGnB,SAAS,WAAA,CAAYA,UAAmB,aAAA,EAAmC;AAChF,EAAA,OAAOC,iBAAWD,OAAK,CAAA;AACzB;AAGO,SAAS,cAAA,GAAqC;AACnD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,6DAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL,kDAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,QAAA,EAAU,GAAA;AAAA,QACV,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,EAAE,kBAAA,EAAoB,SAAA;AAAU,OACzC;AAAA,MACA;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,YAAA;AAAA,QACR,KAAA,EAAO;AAAA,UACL,gBAAA,EAAkB,IAAA;AAAA,UAClB,mBAAA,EAAqB,IAAA;AAAA,UACrB,uBAAA,EAAyB,GAAA;AAAA,UACzB,iBAAA,EAAmB;AAAA;AACrB;AACF;AACF,GACF;AACF","file":"styles.cjs","sourcesContent":["/**\n * 草果地图内置样式。\n *\n * - `caoguoStyle()`:官方矢量主题(caoguo-dark / caoguo-light),\n * 由 @caoguo/theme 生成,底层使用 MapLibre 免费 demo 矢量瓦片,无需 token。\n * - `osmRasterStyle()`:OSM 栅格兜底样式,矢量主题加载失败时使用。\n */\n\nimport type { StyleSpecification } from 'maplibre-gl';\nimport { buildStyle, type ThemeName } from '@caoguo/theme';\n\nexport const WUHAN_CENTER: [number, number] = [114.3055, 30.5928];\nexport const WUHAN_ZOOM = 11;\n\n/** 草果官方矢量主题(默认暗色)。 */\nexport function caoguoStyle(theme: ThemeName = 'caoguo-dark'): StyleSpecification {\n return buildStyle(theme);\n}\n\n/** 暗色 OSM 栅格兜底底图(无需 key)。 */\nexport function osmRasterStyle(): StyleSpecification {\n return {\n version: 8,\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf',\n sources: {\n 'osm-raster': {\n type: 'raster',\n tiles: [\n 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'https://b.tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\n ],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'background',\n type: 'background',\n paint: { 'background-color': '#0a0f1e' },\n },\n {\n id: 'osm-raster',\n type: 'raster',\n source: 'osm-raster',\n paint: {\n 'raster-opacity': 0.85,\n 'raster-saturation': -0.6,\n 'raster-brightness-max': 0.7,\n 'raster-contrast': 0.1,\n },\n },\n ],\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/styles.ts"],"names":["theme","buildStyle"],"mappings":";;;;;AAYO,IAAM,YAAA,GAAiC,CAAC,QAAA,EAAU,OAAO;AACzD,IAAM,UAAA,GAAa;AAGnB,SAAS,WAAA,CAAYA,UAAmB,aAAA,EAAmC;AAChF,EAAA,OAAOC,iBAAWD,OAAK,CAAA;AACzB;AAQO,SAAS,eAAA,GAAsC;AACpD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,6DAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,aAAA,EAAe;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL;AAAA,SACF;AAAA,QACA,QAAA,EAAU,GAAA;AAAA,QACV,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,EAAE,kBAAA,EAAoB,SAAA;AAAU,OACzC;AAAA,MACA;AAAA,QACE,EAAA,EAAI,aAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,aAAA;AAAA,QACR,KAAA,EAAO;AAAA,UACL,gBAAA,EAAkB,GAAA;AAAA,UAClB,mBAAA,EAAqB,IAAA;AAAA,UACrB,iBAAA,EAAmB;AAAA;AACrB;AACF;AACF,GACF;AACF;AAGO,IAAM,cAAA,GAAiB;AAQ9B,SAAS,cAAA,CAAe,OAAO,EAAA,EAA+B;AAC5D,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,KAAA,IAAS,GAAA,GAAM,IAAA,EAAM,GAAA,IAAO,GAAA,EAAK,OAAO,IAAA,EAAM;AAC5C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAY,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,MAC/B,QAAA,EAAU,EAAE,IAAA,EAAM,YAAA,EAAc,aAAa,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,EAAE,CAAC,CAAA;AAAE,KACtE,CAAA;AAAA,EACH;AACA,EAAA,KAAA,IAAS,GAAA,GAAM,GAAA,EAAK,GAAA,IAAO,EAAA,EAAI,OAAO,IAAA,EAAM;AAC1C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAY,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,MAC/B,QAAA,EAAU,EAAE,IAAA,EAAM,YAAA,EAAc,aAAa,CAAC,CAAC,IAAA,EAAM,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAE,KACxE,CAAA;AAAA,EACH;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,QAAA,EAAS;AAC/C;AAEO,SAAS,iBAAA,GAAwC;AACtD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS;AAAA,MACP,WAAW,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,gBAAe;AAAE,KACvD;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,EAAE,IAAI,IAAA,EAAM,IAAA,EAAM,cAAc,KAAA,EAAO,EAAE,kBAAA,EAAoB,SAAA,EAAU,EAAE;AAAA,MACzE;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ,WAAA;AAAA,QACR,OAAO,EAAE,YAAA,EAAc,WAAW,YAAA,EAAc,GAAA,EAAK,gBAAgB,GAAA;AAAI;AAC3E;AACF,GACF;AACF","file":"styles.cjs","sourcesContent":["/**\n * 草果地图内置样式。\n *\n * - `caoguoStyle()`:官方矢量主题(caoguo-dark / caoguo-light),\n * 由 @caoguo/theme 生成,底层使用 MapLibre 免费 demo 矢量瓦片,无需 token。\n * - `geoqRasterStyle()` / `osmRasterStyle()`:国内可达的栅格兜底底图\n * (智图 GeoQ 公共服务,免 key,适配国内网络)。`osmRasterStyle` 保留为别名。\n */\n\nimport type { StyleSpecification } from 'maplibre-gl';\nimport { buildStyle, type ThemeName } from '@caoguo/theme';\n\nexport const WUHAN_CENTER: [number, number] = [114.3055, 30.5928];\nexport const WUHAN_ZOOM = 11;\n\n/** 草果官方矢量主题(默认暗色)。 */\nexport function caoguoStyle(theme: ThemeName = 'caoguo-dark'): StyleSpecification {\n return buildStyle(theme);\n}\n\n/**\n * 国内可达的栅格兜底底图(智图 GeoQ 公共服务,免 key)。\n * 使用 ChinaOnlineStreetPurplishBlue(蓝紫街道,贴合暗色演示主题)。\n * 替代原 OSM 兜底:OSM 在国内网络普遍不可达,导致部署在国内访问的\n * 演示中心底图空白。GeoQ 为 Esri 中国公共服务,长期稳定免 key。\n */\nexport function geoqRasterStyle(): StyleSpecification {\n return {\n version: 8,\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf',\n sources: {\n 'geoq-raster': {\n type: 'raster',\n tiles: [\n 'https://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',\n ],\n tileSize: 256,\n attribution: '© GeoQ 智图',\n },\n },\n layers: [\n {\n id: 'background',\n type: 'background',\n paint: { 'background-color': '#0a0f1e' },\n },\n {\n id: 'geoq-raster',\n type: 'raster',\n source: 'geoq-raster',\n paint: {\n 'raster-opacity': 0.9,\n 'raster-saturation': -0.2,\n 'raster-contrast': 0.05,\n },\n },\n ],\n };\n}\n\n/** 兼容别名:国内可达栅格兜底底图。 */\nexport const osmRasterStyle = geoqRasterStyle;\n\n/**\n * 纯本地底图(零外部依赖,完全离线)。\n * 暗色背景 + 全球经纬网,无需任何在线瓦片 / 字体服务。\n * 用于:国内网络无法访问 OSM / GeoQ 等境外或受限瓦片源时,\n * 保证演示中心地图永远可渲染(业务图层为自有 GeoJSON,叠加其上即可见)。\n */\nfunction buildGraticule(step = 10): GeoJSON.FeatureCollection {\n const features: GeoJSON.Feature[] = [];\n for (let lon = -180; lon <= 180; lon += step) {\n features.push({\n type: 'Feature',\n properties: { kind: 'meridian' },\n geometry: { type: 'LineString', coordinates: [[lon, -85], [lon, 85]] },\n });\n }\n for (let lat = -80; lat <= 80; lat += step) {\n features.push({\n type: 'Feature',\n properties: { kind: 'parallel' },\n geometry: { type: 'LineString', coordinates: [[-180, lat], [180, lat]] },\n });\n }\n return { type: 'FeatureCollection', features };\n}\n\nexport function localBasemapStyle(): StyleSpecification {\n return {\n version: 8,\n sources: {\n graticule: { type: 'geojson', data: buildGraticule() },\n },\n layers: [\n { id: 'bg', type: 'background', paint: { 'background-color': '#0a0f1e' } },\n {\n id: 'graticule',\n type: 'line',\n source: 'graticule',\n paint: { 'line-color': '#1e293b', 'line-width': 0.6, 'line-opacity': 0.6 },\n },\n ],\n };\n}\n\n\n"]}
package/dist/styles.d.cts CHANGED
@@ -6,14 +6,23 @@ import { ThemeName } from '@caoguo/theme';
6
6
  *
7
7
  * - `caoguoStyle()`:官方矢量主题(caoguo-dark / caoguo-light),
8
8
  * 由 @caoguo/theme 生成,底层使用 MapLibre 免费 demo 矢量瓦片,无需 token。
9
- * - `osmRasterStyle()`:OSM 栅格兜底样式,矢量主题加载失败时使用。
9
+ * - `geoqRasterStyle()` / `osmRasterStyle()`:国内可达的栅格兜底底图
10
+ * (智图 GeoQ 公共服务,免 key,适配国内网络)。`osmRasterStyle` 保留为别名。
10
11
  */
11
12
 
12
13
  declare const WUHAN_CENTER: [number, number];
13
14
  declare const WUHAN_ZOOM = 11;
14
15
  /** 草果官方矢量主题(默认暗色)。 */
15
16
  declare function caoguoStyle(theme?: ThemeName): StyleSpecification;
16
- /** 暗色 OSM 栅格兜底底图(无需 key)。 */
17
- declare function osmRasterStyle(): StyleSpecification;
17
+ /**
18
+ * 国内可达的栅格兜底底图(智图 GeoQ 公共服务,免 key)。
19
+ * 使用 ChinaOnlineStreetPurplishBlue(蓝紫街道,贴合暗色演示主题)。
20
+ * 替代原 OSM 兜底:OSM 在国内网络普遍不可达,导致部署在国内访问的
21
+ * 演示中心底图空白。GeoQ 为 Esri 中国公共服务,长期稳定免 key。
22
+ */
23
+ declare function geoqRasterStyle(): StyleSpecification;
24
+ /** 兼容别名:国内可达栅格兜底底图。 */
25
+ declare const osmRasterStyle: typeof geoqRasterStyle;
26
+ declare function localBasemapStyle(): StyleSpecification;
18
27
 
19
- export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, osmRasterStyle };
28
+ export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, geoqRasterStyle, localBasemapStyle, osmRasterStyle };
package/dist/styles.d.ts CHANGED
@@ -6,14 +6,23 @@ import { ThemeName } from '@caoguo/theme';
6
6
  *
7
7
  * - `caoguoStyle()`:官方矢量主题(caoguo-dark / caoguo-light),
8
8
  * 由 @caoguo/theme 生成,底层使用 MapLibre 免费 demo 矢量瓦片,无需 token。
9
- * - `osmRasterStyle()`:OSM 栅格兜底样式,矢量主题加载失败时使用。
9
+ * - `geoqRasterStyle()` / `osmRasterStyle()`:国内可达的栅格兜底底图
10
+ * (智图 GeoQ 公共服务,免 key,适配国内网络)。`osmRasterStyle` 保留为别名。
10
11
  */
11
12
 
12
13
  declare const WUHAN_CENTER: [number, number];
13
14
  declare const WUHAN_ZOOM = 11;
14
15
  /** 草果官方矢量主题(默认暗色)。 */
15
16
  declare function caoguoStyle(theme?: ThemeName): StyleSpecification;
16
- /** 暗色 OSM 栅格兜底底图(无需 key)。 */
17
- declare function osmRasterStyle(): StyleSpecification;
17
+ /**
18
+ * 国内可达的栅格兜底底图(智图 GeoQ 公共服务,免 key)。
19
+ * 使用 ChinaOnlineStreetPurplishBlue(蓝紫街道,贴合暗色演示主题)。
20
+ * 替代原 OSM 兜底:OSM 在国内网络普遍不可达,导致部署在国内访问的
21
+ * 演示中心底图空白。GeoQ 为 Esri 中国公共服务,长期稳定免 key。
22
+ */
23
+ declare function geoqRasterStyle(): StyleSpecification;
24
+ /** 兼容别名:国内可达栅格兜底底图。 */
25
+ declare const osmRasterStyle: typeof geoqRasterStyle;
26
+ declare function localBasemapStyle(): StyleSpecification;
18
27
 
19
- export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, osmRasterStyle };
28
+ export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, geoqRasterStyle, localBasemapStyle, osmRasterStyle };
package/dist/styles.js CHANGED
@@ -1,3 +1,3 @@
1
- export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, osmRasterStyle } from './chunk-DNEF4DHG.js';
1
+ export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, geoqRasterStyle, localBasemapStyle, osmRasterStyle } from './chunk-DENQSIV2.js';
2
2
  //# sourceMappingURL=styles.js.map
3
3
  //# sourceMappingURL=styles.js.map
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ // src/terrain.ts
4
+ var DEFAULT_TERRAIN_TILES = [
5
+ "https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png"
6
+ ];
7
+ function applyTerrain(mlMap, opts = {}) {
8
+ const sourceId = opts.sourceId ?? "cg-dem";
9
+ if (!mlMap.getSource(sourceId)) {
10
+ mlMap.addSource(sourceId, {
11
+ type: "raster-dem",
12
+ tiles: opts.tiles ?? DEFAULT_TERRAIN_TILES,
13
+ encoding: opts.encoding ?? "terrarium",
14
+ tileSize: 256,
15
+ maxzoom: opts.maxzoom ?? 15
16
+ });
17
+ }
18
+ mlMap.setTerrain({ source: sourceId, exaggeration: opts.exaggeration ?? 1.5 });
19
+ }
20
+ function removeTerrain(mlMap, sourceId = "cg-dem") {
21
+ mlMap.setTerrain(null);
22
+ if (mlMap.getSource(sourceId)) {
23
+ mlMap.removeSource(sourceId);
24
+ }
25
+ }
26
+
27
+ exports.DEFAULT_TERRAIN_TILES = DEFAULT_TERRAIN_TILES;
28
+ exports.applyTerrain = applyTerrain;
29
+ exports.removeTerrain = removeTerrain;
30
+ //# sourceMappingURL=terrain.cjs.map
31
+ //# sourceMappingURL=terrain.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/terrain.ts"],"names":[],"mappings":";;;AAsBO,IAAM,qBAAA,GAAwB;AAAA,EACnC;AACF;AAGO,SAAS,YAAA,CAAa,KAAA,EAAc,IAAA,GAAuB,EAAC,EAAS;AAC1E,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,QAAA;AAClC,EAAA,IAAI,CAAC,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,UAAU,QAAA,EAAU;AAAA,MACxB,IAAA,EAAM,YAAA;AAAA,MACN,KAAA,EAAO,KAAK,KAAA,IAAS,qBAAA;AAAA,MACrB,QAAA,EAAU,KAAK,QAAA,IAAY,WAAA;AAAA,MAC3B,QAAA,EAAU,GAAA;AAAA,MACV,OAAA,EAAS,KAAK,OAAA,IAAW;AAAA,KACjB,CAAA;AAAA,EACZ;AACA,EAAA,KAAA,CAAM,UAAA,CAAW,EAAE,MAAA,EAAQ,QAAA,EAAU,cAAc,IAAA,CAAK,YAAA,IAAgB,KAAc,CAAA;AACxF;AAGO,SAAS,aAAA,CAAc,KAAA,EAAc,QAAA,GAAW,QAAA,EAAgB;AACrE,EAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AACrB,EAAA,IAAI,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAA,EAAG;AAC7B,IAAA,KAAA,CAAM,aAAa,QAAQ,CAAA;AAAA,EAC7B;AACF","file":"terrain.cjs","sourcesContent":["/**\n * 3D 地形渲染(F-1.5)\n *\n * 注入 raster-dem 高程源并调用 maplibre-gl 原生 `setTerrain`,使地图呈现地形起伏。\n * DEM 瓦片默认使用公共 Terrarium 源(elevation-tiles-prod,Terrain-RGB 编码,支持 CORS),\n * 可在 opts.tiles 覆盖为私有瓦片服务(如 MinIO / 本地 MBTiles 服务)。\n */\n\nimport type { Map as MlMap } from 'maplibre-gl';\n\nexport interface TerrainOptions {\n /** DEM source id(默认 cg-dem) */\n sourceId?: string;\n /** DEM 瓦片模板,{z}/{x}/{y} 占位 */\n tiles?: string[];\n encoding?: 'terrarium' | 'mapbox';\n /** 地形夸张系数(默认 1.5) */\n exaggeration?: number;\n maxzoom?: number;\n}\n\n/** 默认 DEM 瓦片源(Mapzen Terrarium,Terrain-RGB,支持 CORS,无需鉴权) */\nexport const DEFAULT_TERRAIN_TILES = [\n 'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png',\n];\n\n/** 在原生 MapLibre 实例上启用地形(纯函数,便于单测) */\nexport function applyTerrain(mlMap: MlMap, opts: TerrainOptions = {}): void {\n const sourceId = opts.sourceId ?? 'cg-dem';\n if (!mlMap.getSource(sourceId)) {\n mlMap.addSource(sourceId, {\n type: 'raster-dem',\n tiles: opts.tiles ?? DEFAULT_TERRAIN_TILES,\n encoding: opts.encoding ?? 'terrarium',\n tileSize: 256,\n maxzoom: opts.maxzoom ?? 15,\n } as never);\n }\n mlMap.setTerrain({ source: sourceId, exaggeration: opts.exaggeration ?? 1.5 } as never);\n}\n\n/** 关闭地形(纯函数),移除 DEM 源 */\nexport function removeTerrain(mlMap: MlMap, sourceId = 'cg-dem'): void {\n mlMap.setTerrain(null);\n if (mlMap.getSource(sourceId)) {\n mlMap.removeSource(sourceId);\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import { Map } from 'maplibre-gl';
2
+
3
+ /**
4
+ * 3D 地形渲染(F-1.5)
5
+ *
6
+ * 注入 raster-dem 高程源并调用 maplibre-gl 原生 `setTerrain`,使地图呈现地形起伏。
7
+ * DEM 瓦片默认使用公共 Terrarium 源(elevation-tiles-prod,Terrain-RGB 编码,支持 CORS),
8
+ * 可在 opts.tiles 覆盖为私有瓦片服务(如 MinIO / 本地 MBTiles 服务)。
9
+ */
10
+
11
+ interface TerrainOptions {
12
+ /** DEM source id(默认 cg-dem) */
13
+ sourceId?: string;
14
+ /** DEM 瓦片模板,{z}/{x}/{y} 占位 */
15
+ tiles?: string[];
16
+ encoding?: 'terrarium' | 'mapbox';
17
+ /** 地形夸张系数(默认 1.5) */
18
+ exaggeration?: number;
19
+ maxzoom?: number;
20
+ }
21
+ /** 默认 DEM 瓦片源(Mapzen Terrarium,Terrain-RGB,支持 CORS,无需鉴权) */
22
+ declare const DEFAULT_TERRAIN_TILES: string[];
23
+ /** 在原生 MapLibre 实例上启用地形(纯函数,便于单测) */
24
+ declare function applyTerrain(mlMap: Map, opts?: TerrainOptions): void;
25
+ /** 关闭地形(纯函数),移除 DEM 源 */
26
+ declare function removeTerrain(mlMap: Map, sourceId?: string): void;
27
+
28
+ export { DEFAULT_TERRAIN_TILES, type TerrainOptions, applyTerrain, removeTerrain };
@@ -0,0 +1,28 @@
1
+ import { Map } from 'maplibre-gl';
2
+
3
+ /**
4
+ * 3D 地形渲染(F-1.5)
5
+ *
6
+ * 注入 raster-dem 高程源并调用 maplibre-gl 原生 `setTerrain`,使地图呈现地形起伏。
7
+ * DEM 瓦片默认使用公共 Terrarium 源(elevation-tiles-prod,Terrain-RGB 编码,支持 CORS),
8
+ * 可在 opts.tiles 覆盖为私有瓦片服务(如 MinIO / 本地 MBTiles 服务)。
9
+ */
10
+
11
+ interface TerrainOptions {
12
+ /** DEM source id(默认 cg-dem) */
13
+ sourceId?: string;
14
+ /** DEM 瓦片模板,{z}/{x}/{y} 占位 */
15
+ tiles?: string[];
16
+ encoding?: 'terrarium' | 'mapbox';
17
+ /** 地形夸张系数(默认 1.5) */
18
+ exaggeration?: number;
19
+ maxzoom?: number;
20
+ }
21
+ /** 默认 DEM 瓦片源(Mapzen Terrarium,Terrain-RGB,支持 CORS,无需鉴权) */
22
+ declare const DEFAULT_TERRAIN_TILES: string[];
23
+ /** 在原生 MapLibre 实例上启用地形(纯函数,便于单测) */
24
+ declare function applyTerrain(mlMap: Map, opts?: TerrainOptions): void;
25
+ /** 关闭地形(纯函数),移除 DEM 源 */
26
+ declare function removeTerrain(mlMap: Map, sourceId?: string): void;
27
+
28
+ export { DEFAULT_TERRAIN_TILES, type TerrainOptions, applyTerrain, removeTerrain };
@@ -0,0 +1,3 @@
1
+ export { DEFAULT_TERRAIN_TILES, applyTerrain, removeTerrain } from './chunk-OLS4DD3F.js';
2
+ //# sourceMappingURL=terrain.js.map
3
+ //# sourceMappingURL=terrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"terrain.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caoguo/maplibre",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "草果地图引擎核心 — 基于 MapLibre GL 的国内坐标系/离线瓦片/辉光/LOD 一体化封装",
5
5
  "license": "Apache-2.0",
6
6
  "author": "caoguo <caoguo@hb.cn>",
@@ -56,6 +56,36 @@
56
56
  "types": "./dist/offline/index.d.ts",
57
57
  "import": "./dist/offline/index.js",
58
58
  "require": "./dist/offline/index.cjs"
59
+ },
60
+ "./controls": {
61
+ "types": "./dist/controls/index.d.ts",
62
+ "import": "./dist/controls/index.js",
63
+ "require": "./dist/controls/index.cjs"
64
+ },
65
+ "./crs": {
66
+ "types": "./dist/crs/index.d.ts",
67
+ "import": "./dist/crs/index.js",
68
+ "require": "./dist/crs/index.cjs"
69
+ },
70
+ "./lod": {
71
+ "types": "./dist/lod/index.d.ts",
72
+ "import": "./dist/lod/index.js",
73
+ "require": "./dist/lod/index.cjs"
74
+ },
75
+ "./shaders": {
76
+ "types": "./dist/shaders/index.d.ts",
77
+ "import": "./dist/shaders/index.js",
78
+ "require": "./dist/shaders/index.cjs"
79
+ },
80
+ "./terrain": {
81
+ "types": "./dist/terrain.d.ts",
82
+ "import": "./dist/terrain.js",
83
+ "require": "./dist/terrain.cjs"
84
+ },
85
+ "./sourceUtils": {
86
+ "types": "./dist/sourceUtils.d.ts",
87
+ "import": "./dist/sourceUtils.js",
88
+ "require": "./dist/sourceUtils.cjs"
59
89
  }
60
90
  },
61
91
  "files": [
@@ -1,48 +0,0 @@
1
- import { buildStyle } from '@caoguo/theme';
2
-
3
- // src/styles.ts
4
- var WUHAN_CENTER = [114.3055, 30.5928];
5
- var WUHAN_ZOOM = 11;
6
- function caoguoStyle(theme = "caoguo-dark") {
7
- return buildStyle(theme);
8
- }
9
- function osmRasterStyle() {
10
- return {
11
- version: 8,
12
- glyphs: "https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf",
13
- sources: {
14
- "osm-raster": {
15
- type: "raster",
16
- tiles: [
17
- "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
18
- "https://b.tile.openstreetmap.org/{z}/{x}/{y}.png",
19
- "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png"
20
- ],
21
- tileSize: 256,
22
- attribution: "\xA9 OpenStreetMap contributors"
23
- }
24
- },
25
- layers: [
26
- {
27
- id: "background",
28
- type: "background",
29
- paint: { "background-color": "#0a0f1e" }
30
- },
31
- {
32
- id: "osm-raster",
33
- type: "raster",
34
- source: "osm-raster",
35
- paint: {
36
- "raster-opacity": 0.85,
37
- "raster-saturation": -0.6,
38
- "raster-brightness-max": 0.7,
39
- "raster-contrast": 0.1
40
- }
41
- }
42
- ]
43
- };
44
- }
45
-
46
- export { WUHAN_CENTER, WUHAN_ZOOM, caoguoStyle, osmRasterStyle };
47
- //# sourceMappingURL=chunk-DNEF4DHG.js.map
48
- //# sourceMappingURL=chunk-DNEF4DHG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/styles.ts"],"names":[],"mappings":";;;AAWO,IAAM,YAAA,GAAiC,CAAC,QAAA,EAAU,OAAO;AACzD,IAAM,UAAA,GAAa;AAGnB,SAAS,WAAA,CAAY,QAAmB,aAAA,EAAmC;AAChF,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB;AAGO,SAAS,cAAA,GAAqC;AACnD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,6DAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL,kDAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,QAAA,EAAU,GAAA;AAAA,QACV,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,EAAE,kBAAA,EAAoB,SAAA;AAAU,OACzC;AAAA,MACA;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,YAAA;AAAA,QACR,KAAA,EAAO;AAAA,UACL,gBAAA,EAAkB,IAAA;AAAA,UAClB,mBAAA,EAAqB,IAAA;AAAA,UACrB,uBAAA,EAAyB,GAAA;AAAA,UACzB,iBAAA,EAAmB;AAAA;AACrB;AACF;AACF,GACF;AACF","file":"chunk-DNEF4DHG.js","sourcesContent":["/**\n * 草果地图内置样式。\n *\n * - `caoguoStyle()`:官方矢量主题(caoguo-dark / caoguo-light),\n * 由 @caoguo/theme 生成,底层使用 MapLibre 免费 demo 矢量瓦片,无需 token。\n * - `osmRasterStyle()`:OSM 栅格兜底样式,矢量主题加载失败时使用。\n */\n\nimport type { StyleSpecification } from 'maplibre-gl';\nimport { buildStyle, type ThemeName } from '@caoguo/theme';\n\nexport const WUHAN_CENTER: [number, number] = [114.3055, 30.5928];\nexport const WUHAN_ZOOM = 11;\n\n/** 草果官方矢量主题(默认暗色)。 */\nexport function caoguoStyle(theme: ThemeName = 'caoguo-dark'): StyleSpecification {\n return buildStyle(theme);\n}\n\n/** 暗色 OSM 栅格兜底底图(无需 key)。 */\nexport function osmRasterStyle(): StyleSpecification {\n return {\n version: 8,\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf',\n sources: {\n 'osm-raster': {\n type: 'raster',\n tiles: [\n 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'https://b.tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\n ],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'background',\n type: 'background',\n paint: { 'background-color': '#0a0f1e' },\n },\n {\n id: 'osm-raster',\n type: 'raster',\n source: 'osm-raster',\n paint: {\n 'raster-opacity': 0.85,\n 'raster-saturation': -0.6,\n 'raster-brightness-max': 0.7,\n 'raster-contrast': 0.1,\n },\n },\n ],\n };\n}\n"]}