Skip to content

从 0.2 迁移到 0.3 ​

公开 API 已收敛为稳定形状,随 0.3 发布。0.2 的顶层拍平方法、错误路径和分裂形状已删除,没有兼容层。本文给出旧写法到新写法的对照。

初始化路径与运行时路径同构:postProcess.toneMapping.exposure 既是 ViewerOptions.postProcess.toneMapping.exposure,也是 viewer.postProcess.toneMapping.exposure。

色调映射

顶层 postProcess.toneMappingExposure 已删除,没有兼容 alias。请改用 postProcess.toneMapping.exposure;算子与开关分别是 toneMapping.mode(默认 'agx')和 toneMapping.enabled。

领域门面 ​

0.20.3
viewer.layersviewer.overlays
ViewerOptions.layersViewerOptions.overlays
viewer.tileset(裸球 / 地形 renderer)viewer.globe(show / opacity / material / ellipsoid / raw)
viewer.load3DTileset / get3DTileset / remove3DTilesetviewer.tilesets.add / .get / .remove
viewer.setTerrain(options) / setTerrain(null)viewer.terrain.set(options) / viewer.terrain.clear()
viewer.addModelviewer.models.add
viewer.highlightviewer.highlighter
viewer.scene.highlightviewer.highlighter.outline / .overlay
ViewerOptions.scene.highlightViewerOptions.highlighter
viewer.scene.surface.materialModeviewer.globe.material.mode
viewer.scene.surface.material.*viewer.globe.material.*
ViewerOptions.scene.surface删除;地表着色只在运行时 viewer.globe.material。没有 ViewerOptions.globe
viewer.scene.postProcessviewer.postProcess
ViewerOptions.scene.postProcessViewerOptions.postProcess
viewer.toneMappingExposureviewer.postProcess.toneMapping.exposure
viewer.threeScene / viewer.scene.threeSceneviewer.scene.raw
viewer.threeCamera / viewer.camera.threeCameraviewer.camera.raw
viewer.renderer(裸 Three.js 对象)viewer.renderer 门面;原生对象是 viewer.renderer.raw
viewer.resolutionScaleviewer.renderer.resolutionScale
ViewerOptions.resolutionScaleViewerOptions.renderer.resolutionScale
viewer.addHismLayer 等顶层方法viewer.hism.add / .get / .remove
LayerManager.getAll()viewer.overlays.list()
widgets.settingPanelwidgets.settingsPanel

原生对象出口统一为 .raw。viewer.controls.raw === viewer.controls(同一实例,只是类型未收窄);renderer.raw / globe.raw / scene.raw / camera.raw 指向被门面包起来的另一个对象。

3D Tiles 数据源 ​

图层级字段(id / show)与数据源拆开,和影像 overlay 一样用 { source }:

ts
// 0.2
viewer.load3DTileset({
  type: 'url',
  id: 'city',
  url: 'https://example.com/tileset.json',
  creasedNormals: true
})

// 0.3
viewer.tilesets.add({
  id: 'city',
  source: {
    type: 'url',
    url: 'https://example.com/tileset.json'
  },
  creasedNormals: true
})

Cesium Ion 同理:source: { type: 'cesium-ion', assetId, apiToken }。

地形与影像 ​

URL 地形必须带 type: 'url'。天地图令牌字段从 token 改为 apiToken。影像 / 模型可见性字段从 visible 改为 show。

ts
// 0.2
new Viewer(el, {
  layers: [{ source: { type: 'xyz', url } }],
  terrain: { url: 'https://example.com/terrain/' }
})
viewer.setTerrain(null)

// 0.3
new Viewer(el, {
  overlays: [{ source: { type: 'xyz', url } }],
  terrain: { type: 'url', url: 'https://example.com/terrain/' }
})
viewer.terrain.clear()

隐藏裸球 / 地形用 viewer.globe.show = false,不要写 viewer.globe.raw.group.visible。淡整张皮肤(网格 + 已贴 overlays)用 viewer.globe.opacity(0~1);opacity === 0 不等于 show = false。没有 ViewerOptions.globe,构造后赋值。

相机 ​

初始化 camera.destination 必须带高度(LonLatHeightLike)。运行时 flyTo / setView 的 destination 可以是无高度的 LonLatLike,此时保持当前高度。

ts
// 0.2
camera: {
  longitude: 121.4737,
  latitude: 31.2304,
  height: 1200,
  pitch: -25,
  far: 3e7
}

// 0.3
camera: {
  destination: { longitude: 121.4737, latitude: 31.2304, height: 1200 },
  orientation: { pitch: -25 },
  projection: { far: 3e7 }
}

camera.getState() 已返回 { destination, orientation },可直接交给 setView。

坐标类型 ​

0.20.3
CartographicInput 等LonLat / LonLatHeight / LonLatLike / LonLatHeightLike

LonLat 只有经纬度;LonLatHeight 高度必填。实现不会把缺省高度补成 0。采样入参是 LonLatLike(不要靠元组第三位当高度)。未命中返回 undefined,高度 0 是命中,用 === undefined 判断 miss。

sampleHeight / sampleHeightMostDetailed 各有单点与批量两个重载:批量同步版与逐点结果逐元素相等。

实体描边与文字 ​

描边是可选子对象:存在即开启,没有 boolean 联合,没有 enabled。outline.width 默认 1。

ts
// 0.2
point: { color: '#38bdf8', outlineColor: '#0f172a', outlineWidth: 2 }
text: { fillColor: '#ffffff', outlineColor: '#0f172a', outlineWidth: 2 }
polygon: { outline: true, outlineColor: '#5eead4' }

// 0.3
point: { color: '#38bdf8', outline: { color: '#0f172a', width: 2 } }
text: { color: '#ffffff', outline: { color: '#0f172a', width: 2 } }
polygon: { outline: { color: '#5eead4' } }

文字运行时句柄是 symbol.text.color,不再使用 fillColor。点、多边形和文字的运行时描边统一为 outline.color,点与文字还支持 outline.width;旧 outlineColor / outlineWidth 已移除。初始化未提供描边时,运行时 outline 为 undefined,不可新增或替换;已配置的点和文字可用宽度 0 隐藏,改回正数恢复。

后处理与高亮 ​

ts
// 0.2
scene: {
  postProcess: { toneMappingExposure: 5, taa: true },
  highlight: { outline: { enabled: false } }
}
viewer.toneMappingExposure = 8
viewer.highlight.set(pick)

// 0.3
postProcess: { toneMapping: { exposure: 5 }, taa: true }
highlighter: { outline: { enabled: false } }
viewer.postProcess.toneMapping.exposure = 8
viewer.highlighter.set(pick)

fallbackAmbientLight 的开关是 enabled,不是 show。

调试面板 ​

widgets.settingsPanel 的初始值改为嵌套:atmosphere / clouds / postProcess / renderer / showFps。localStorage 键版本为 v2,旧扁平缓存不会自动迁移。

控制器 ​

viewer.controls 的公开类型是 ViewerControls,只承诺交互开关、距离/俯仰、事件与生命周期。上游 GlobeControls 其余成员走 viewer.controls.raw。