Skip to content

tiles

提供与 3d-tiles-renderer 和地理空间数据的集成。主要导出 ArcgisTilesRenderer,可流式加载 ArcGIS Online 3D 瓦片并将地球重新定向到指定地理位置。

typescript
import { ArcgisTilesRenderer } from 'u-space/plugins/tiles';

const arcgisTilesRenderer = new ArcgisTilesRenderer(viewer);

// 设置原点为经度、纬度、高度
arcgisTilesRenderer.invalidate(120.002269, 30.284849, 4);

// 瓦片持续流式加载,使用 always 模式
viewer.frameloop = 'always';

arcgisTilesRenderer.enable();

// 经纬高转场景世界坐标
const position = arcgisTilesRenderer.lonLatHeightToPosition(120.002269, 30.284849, 8);

// 场景世界坐标转经纬高
const location = arcgisTilesRenderer.positionToLonLatHeight(position);

方法:

方法说明
invalidate(lon, lat, alt)将瓦片原点设置为指定的 WGS84 经纬高。lonlat 使用度,alt 使用米。可多次调用。返回一个取消订阅的函数。
lonLatHeightToPosition(lon, lat, height?, target?)将 WGS84 经纬高转换为当前场景的世界坐标。lonlat 使用度,height 使用米,返回 Vector3
positionToLonLatHeight(position, target?)将当前场景的世界坐标转换为 WGS84 经纬高,返回 { lon, lat, height }lonlat 使用度,height 使用米。
enable()将瓦片添加到场景并启动更新循环。
disable()从场景中移除瓦片并暂停更新循环。
dispose()禁用并完全释放瓦片渲染器。

坐标转换

invalidate(lon, lat, alt) 会通过 3d-tiles-rendererReorientationPlugin 把指定 WGS84 经纬高移动到场景原点。重定位完成后,默认场景轴向为:

  • +Y:高度方向(Up)
  • +Z:北向(North)
  • +X:西向(West),东向为 -X

lonLatHeightToPosition()positionToLonLatHeight() 复用瓦片当前的 group.matrixWorld 与 WGS84 椭球坐标,适合在 GIS 点位、POI、业务模型和 Three.js 场景世界坐标之间互转。

typescript
import { Vector3 } from 'three/webgpu';

const poiPosition = arcgisTilesRenderer.lonLatHeightToPosition(120.0024, 30.285, 12);
poi.position.copy(poiPosition);

const worldPosition = object.getWorldPosition(new Vector3());
const { lon, lat, height } = arcgisTilesRenderer.positionToLonLatHeight(worldPosition);

传给 positionToLonLatHeight()position 必须是场景世界坐标。如果坐标来自某个对象的局部空间,先通过 object.localToWorld(localPosition)object.getWorldPosition() 转成世界坐标。

如果在瓦片 root tileset 加载前调用 invalidate(),会先基于当前 WGS84 椭球立即应用一次重定位,保证后续坐标转换可用;root tileset 加载完成后会按最终 ellipsoid 再应用一次。

u-space docs