首页 / deck.gl / API 文档
COORDINATE_SYSTEM
先看结论
坐标系统常量。它告诉图层数据里的位置该怎么解释——是经纬度、相对某个原点的偏移, 还是已经转换好的世界坐标。
import { COORDINATE_SYSTEM } from '@deck.gl/core'
常量
| 常量 | 位置的含义 |
|---|---|
COORDINATE_SYSTEM.DEFAULT | 默认值,等价于 LNGLAT |
COORDINATE_SYSTEM.LNGLAT | [经度, 纬度, 高度],度与米,适用于大多数地理数据 |
COORDINATE_SYSTEM.LNGLAT_OFFSETS | 相对 coordinateOrigin 的经纬度增量,[Δlng, Δlat, Δz] |
COORDINATE_SYSTEM.METER_OFFSETS | 相对 coordinateOrigin 的米制偏移,按投影平面计算 |
COORDINATE_SYSTEM.CARTESIAN | 直接给出世界坐标,不再做投影换算 |
相关图层属性
| 属性 | 说明 |
|---|---|
coordinateSystem | 选择上表中的某个常量 |
coordinateOrigin | 局部坐标的原点,[lng, lat] 或 [lng, lat, z],仅对 OFFSETS 系列有效 |
modelMatrix | 整体变换矩阵,用于把图层放到自定义坐标系中 |
示例:以站点为中心的局部坐标
var origin = [116.391, 39.907, 0];
// 数据里的位置是相对站点的米制偏移
var local = new deck.ScatterplotLayer({
id: 'local-points',
data: offsets, // [{ dx: 120, dy: -80, dz: 12 }, ...]
coordinateSystem: deck.COORDINATE_SYSTEM.METER_OFFSETS,
coordinateOrigin: origin,
getPosition: function (d) { return [d.dx, d.dy, d.dz]; },
getRadius: 6,
radiusUnits: 'pixels',
getFillColor: [64, 140, 220, 200]
});
什么时候用偏移坐标
经纬度用双精度浮点表示,把几百万个局部点整体平移到离原点很远的位置再计算,
着色器里的单精度浮点会产生可见抖动(顶点跳变)。以站点或瓦片中心为原点、
用米制偏移描述位置,能让数值保持在较小范围内,抖动随之消失。
这是三维管线里常见的做法,deck.gl 通过 METER_OFFSETS 直接支持。
v9 的不可变更新
deck.gl 9 的图层不可变。切换坐标系或原点必须新建图层实例,
用 clone 加 deckgl.setProps 完成:
var next = local.clone({
coordinateOrigin: [121.473, 31.230, 0],
coordinateSystem: deck.COORDINATE_SYSTEM.LNGLAT
});
deckgl.setProps({ layers: [next] });
坐标系与数据必须一起换。coordinateSystem 只改变解释方式,
不会替你换算数值。把经纬度数据标成 CARTESIAN,
所有点会挤在原点附近,看起来像图层消失。
经纬志(2026)。《COORDINATE_SYSTEM》。https://www.jingweizhi.com/deckgl/api/coordinate-system.html(访问日期 2026-11-03)。