> **本文回答**：天地图矢量/影像/注记的瓦片地址与加载方式；CAD 叠加时为什么不用加偏。

## 一、瓦片地址

天地图使用 WGS84 原生坐标系，没有加偏问题。有两套投影：

| 投影 | URL 模板 T 字段 | 说明 |
|---|---|---|
| Web 墨卡托（推荐） | `vec_w` / `img_w` / `cva_w` | 与 vjmap 直接兼容 |
| 经纬度直投 | `vec_c` / `img_c` / `cva_c` | **vjmap 引擎只支持 Web 墨卡托瓦片网格，加载不了**（`_c` 瓦片会整体错位） |

### 常用瓦片

```
矢量底图（日间）： https://t{s}.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk={t}
影像底图：         https://t{s}.tianditu.gov.cn/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk={t}
矢量注记：         https://t{s}.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk={t}
影像注记：         https://t{s}.tianditu.gov.cn/DataServer?T=cia_w&X={x}&Y={y}&L={z}&tk={t}
```

`{s}` 范围 0~7（或 1~6，看文档），`{t}` 是申请的 token。`{s}` / `{t}` 只有 `svc.webMapUrl`（`tileShards` / `tileToken`）会替换；直接作 raster source 的 `tiles` 时要写成具体子域和 tk。

## 二、作为底图

```js
const svc = new vjmap.Service(URL, TOKEN);
const prj = new vjmap.LnglatProjection();   // 互联网底图用 LnglatProjection

const map = new vjmap.Map({
  container: "map",
  style: {
    version: svc.styleVersion(),
    sources: {
      tdt1: {
        type: "raster",
        tileSize: 256,     // 天地图是 256 瓦片；不写按默认 512 处理会发糊
        tiles: ["https://t3.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk=YOUR_TK"]
      },
      tdt2: {
        type: "raster",
        tileSize: 256,
        tiles: ["https://t3.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk=YOUR_TK"]
      }
    },
    layers: [
      { id: "tdt1", type: "raster", source: "tdt1" },
      { id: "tdt2", type: "raster", source: "tdt2" }
    ]
  },
  center: prj.toLngLat([117.212429, 39.196783]),
  zoom: 15,
  renderWorldCopies: false
});
map.attach(svc, prj);
await map.onLoad();
```

## 三、叠加 CAD WMS

天地图是 WGS84，**不需要 `webMapType` 参数**（默认就是 WGS84）。

```js
const cadMapId = "sys_cad2000";
const style = await svc.createStyle({ backcolor: 0xFFFFFF }, cadMapId);
const wmsurl = svc.wmsTileUrl({
  mapid: cadMapId,
  version: "v1",
  layers: style.stylename,
  srs: "EPSG:3857",
  crs: "EPSG:4548"         // CAD 图 EPSG（CGCS2000 117°E 三度带）
});
map.addSource("wms-cad", { type: "raster", tiles: [wmsurl], tileSize: 256 });
map.addLayer({ id: "wms-cad", type: "raster", source: "wms-cad", paint: { "raster-opacity": 1 } });
```

## 四、使用服务端代理（避免跨域 / 多 token 负载均衡）

```js
const tileUrl = svc.webMapUrl({
  tileCrs: "wgs84",
  tileUrl: [
    "https://t{s}.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk={t}",
    "https://t{s}.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk={t}"
  ],
  tileSize: 256,
  tileMaxZoom: 18,
  tileShards: "1,2,3,4,5,6",
  tileToken: [
    "6d53378dc5f7dbef8d84ffdd2b54139b",
    "69eb2fa0de3b2a668f1ef603a3f8bc73"          // 多 token 容灾
  ],
  srs: "EPSG:4527",                              // 自己 CAD 图的 EPSG
  mapbounds: res.bounds,                         // CAD 图坐标范围
  fourParameterBefore: "39000000,0,1,0"          // 若 CAD 只有 6 位坐标，补带系
});

map.addSource("web-tdt-source", { type: "raster", tiles: [tileUrl], tileSize: 256 });
map.addLayer({ id: "web-tdt-layer", type: "raster", source: "web-tdt-source" });
map.moveLayer("web-tdt-layer", map.getStyle().layers[0].id);  // 放到最底
```

## 五、Token 管理

- 开发阶段：官方申请个人 key。
- 生产环境：后端保管 key，前端用 `svc.webMapUrl` 让后端拼接；不要把 key 直接写在前端 `tiles`。
- 企业版：私有化部署 vjmap 时，可把天地图瓦片缓存到本机，自带 token 统一代理。

## 六、常见坑

1. **`vec_c`（经纬直投）在 vjmap 里显示不对** → vjmap 需要 Web 墨卡托 `vec_w`。
2. **单 token 大量请求 403** → 多 token 轮询；或升级商业版。
3. **影像图层没有注记** → 需同时加 `img_w` + `cia_w`。
4. **时区/版本问题**：天地图有 `_c`/`_w` 两套，新旧版本可能字段略有差异；以官方为准。
