Leaflet 1.6.0 集成天地图全流程指南从TK申请到图层加载实战天地图作为国内权威的地理信息服务与Leaflet这一轻量级地图库的结合能为WebGIS项目提供稳定可靠的基础地图支持。本文将手把手带你完成从开发者账号注册到最终地图展示的全过程特别针对新手容易遇到的密钥失效、图层偏移、跨域报错等问题提供解决方案。1. 天地图开发者账号申请与TK获取天地图要求开发者必须先注册账号并申请服务密钥TK才能调用其地图服务。以下是具体操作步骤访问天地图开放平台官网点击开发者注册填写企业/个人基本信息提交实名认证材料等待1-3个工作日的审核个人开发者通常当天可完成登录后进入我的应用创建新应用获取专属TK常见问题处理TK显示未授权检查是否完成了实名认证地图加载401错误确认TK是否填写正确特别注意不要包含多余空格服务调用次数不足免费版每日有调用限制可考虑升级企业套餐提示测试阶段可先用官网提供的演示TK但正式上线前务必替换为自己的密钥2. Leaflet基础环境搭建推荐使用CDN方式快速引入Leaflet 1.6.0!DOCTYPE html html head title天地图集成示例/title meta charsetutf-8 !-- 引入Leaflet CSS -- link relstylesheet hrefhttps://unpkg.com/leaflet1.6.0/dist/leaflet.css / style #map { width: 100vw; height: 100vh; } /style /head body div idmap/div !-- 引入Leaflet JS -- script srchttps://unpkg.com/leaflet1.6.0/dist/leaflet.js/script script // 地图初始化代码将在这里编写 /script /body /html3. 天地图WMTS服务解析与图层配置天地图提供多种图层类型每种都有特定的WMTS地址格式图层类型服务代码用途说明矢量底图vec_c道路网络基础地图矢量注记cva_c文字标注图层影像底图img_c卫星影像地图影像注记cia_c影像上的文字标注标准WMTS地址模板http://t{s}.tianditu.com/{layer}_c/wmts?tk您的密钥其中{s}表示服务器节点(0-7)可随机选择实现负载均衡完整图层配置示例// 矢量底图注记组合 var vectorBase L.tileLayer( http://t0.tianditu.com/vec_c/wmts?tkYOUR_TK, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ); var vectorLabel L.tileLayer( http://t0.tianditu.com/cva_c/wmts?tkYOUR_TK, { /* 相同参数 */ } ); // 影像底图注记组合 var imageBase L.tileLayer( http://t0.tianditu.com/img_c/wmts?tkYOUR_TK, { /* 相同参数 */ } ); var imageLabel L.tileLayer( http://t0.tianditu.com/cia_c/wmts?tkYOUR_TK, { /* 相同参数 */ } );4. 坐标系设置与常见问题排查Leaflet默认使用EPSG3857坐标系而天地图服务采用EPSG4326。正确的坐标系配置能避免图层偏移问题var map L.map(map, { crs: L.CRS.EPSG4326, // 关键设置 center: [39.9, 116.4], // 北京坐标 zoom: 11 }); // 图层组配置 var baseLayers { 矢量地图: L.layerGroup([vectorBase, vectorLabel]), 卫星影像: L.layerGroup([imageBase, imageLabel]) }; // 添加默认图层 baseLayers[矢量地图].addTo(map);典型问题解决方案跨域访问被拒绝现象控制台出现CORS错误解决确保使用http协议而非https访问天地图服务图层显示偏移检查crs参数是否设置为L.CRS.EPSG4326确认坐标顺序为[纬度, 经度]缩放级别异常调整zoomOffset参数通常设为1检查maxZoom/minZoom设置是否合理5. 完整可运行示例代码以下是一个集成了图层切换控件的完整HTML示例!DOCTYPE html html head title天地图Leaflet集成/title meta charsetutf-8 link relstylesheet hrefhttps://unpkg.com/leaflet1.6.0/dist/leaflet.css / style #map { width: 100%; height: 100vh; } .leaflet-control-layers { margin-top: 40px; } /style /head body div idmap/div script srchttps://unpkg.com/leaflet1.6.0/dist/leaflet.js/script script // 替换为你的实际TK const TK YOUR_ACTUAL_TK; // 初始化地图 var map L.map(map, { crs: L.CRS.EPSG4326, center: [39.9, 116.4], zoom: 11 }); // 定义所有图层 var layers { vectorBase: L.tileLayer( http://t0.tianditu.com/vec_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ), vectorLabel: L.tileLayer( http://t0.tianditu.com/cva_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ), imageBase: L.tileLayer( http://t0.tianditu.com/img_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ), imageLabel: L.tileLayer( http://t0.tianditu.com/cia_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ) }; // 配置图层组 var baseMaps { 矢量地图: L.layerGroup([layers.vectorBase, layers.vectorLabel]), 卫星影像: L.layerGroup([layers.imageBase, layers.imageLabel]) }; // 添加默认图层 baseMaps[矢量地图].addTo(map); // 添加图层控制 L.control.layers(baseMaps, null, { position: topright }).addTo(map); /script /body /html6. 性能优化与进阶技巧多服务器负载均衡// 随机选择服务器节点(0-7) const serverNode Math.floor(Math.random() * 8); const url http://t${serverNode}.tianditu.com/vec_c/wmts?tk${TK};本地存储TK建议将敏感TK信息存储在环境变量中而非硬编码在HTML里移动端适配map.touchZoom.enable(); map.doubleClickZoom.disable();自定义坐标系使用Proj4Leaflet// 引入Proj4Leaflet后 var customCRS new L.Proj.CRS(EPSG:4490, projlonglat ellpsGRS80 no_defs, { resolutions: [/* 自定义分辨率数组 */], origin: [-180, 90] } );实际项目中遇到最棘手的问题是图层的叠加顺序特别是当需要同时显示天地图底图和第三方WMS服务时。经过多次测试发现确保每个图层的zIndex属性正确设置是关键。另一个经验是在移动端使用天地图时适当降低maxZoom级别可以显著提升性能表现。
Leaflet 1.6.0 加载天地图卫星/路网图层保姆级教程(附完整代码与TK申请避坑)
发布时间:2026/6/1 18:36:20
Leaflet 1.6.0 集成天地图全流程指南从TK申请到图层加载实战天地图作为国内权威的地理信息服务与Leaflet这一轻量级地图库的结合能为WebGIS项目提供稳定可靠的基础地图支持。本文将手把手带你完成从开发者账号注册到最终地图展示的全过程特别针对新手容易遇到的密钥失效、图层偏移、跨域报错等问题提供解决方案。1. 天地图开发者账号申请与TK获取天地图要求开发者必须先注册账号并申请服务密钥TK才能调用其地图服务。以下是具体操作步骤访问天地图开放平台官网点击开发者注册填写企业/个人基本信息提交实名认证材料等待1-3个工作日的审核个人开发者通常当天可完成登录后进入我的应用创建新应用获取专属TK常见问题处理TK显示未授权检查是否完成了实名认证地图加载401错误确认TK是否填写正确特别注意不要包含多余空格服务调用次数不足免费版每日有调用限制可考虑升级企业套餐提示测试阶段可先用官网提供的演示TK但正式上线前务必替换为自己的密钥2. Leaflet基础环境搭建推荐使用CDN方式快速引入Leaflet 1.6.0!DOCTYPE html html head title天地图集成示例/title meta charsetutf-8 !-- 引入Leaflet CSS -- link relstylesheet hrefhttps://unpkg.com/leaflet1.6.0/dist/leaflet.css / style #map { width: 100vw; height: 100vh; } /style /head body div idmap/div !-- 引入Leaflet JS -- script srchttps://unpkg.com/leaflet1.6.0/dist/leaflet.js/script script // 地图初始化代码将在这里编写 /script /body /html3. 天地图WMTS服务解析与图层配置天地图提供多种图层类型每种都有特定的WMTS地址格式图层类型服务代码用途说明矢量底图vec_c道路网络基础地图矢量注记cva_c文字标注图层影像底图img_c卫星影像地图影像注记cia_c影像上的文字标注标准WMTS地址模板http://t{s}.tianditu.com/{layer}_c/wmts?tk您的密钥其中{s}表示服务器节点(0-7)可随机选择实现负载均衡完整图层配置示例// 矢量底图注记组合 var vectorBase L.tileLayer( http://t0.tianditu.com/vec_c/wmts?tkYOUR_TK, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ); var vectorLabel L.tileLayer( http://t0.tianditu.com/cva_c/wmts?tkYOUR_TK, { /* 相同参数 */ } ); // 影像底图注记组合 var imageBase L.tileLayer( http://t0.tianditu.com/img_c/wmts?tkYOUR_TK, { /* 相同参数 */ } ); var imageLabel L.tileLayer( http://t0.tianditu.com/cia_c/wmts?tkYOUR_TK, { /* 相同参数 */ } );4. 坐标系设置与常见问题排查Leaflet默认使用EPSG3857坐标系而天地图服务采用EPSG4326。正确的坐标系配置能避免图层偏移问题var map L.map(map, { crs: L.CRS.EPSG4326, // 关键设置 center: [39.9, 116.4], // 北京坐标 zoom: 11 }); // 图层组配置 var baseLayers { 矢量地图: L.layerGroup([vectorBase, vectorLabel]), 卫星影像: L.layerGroup([imageBase, imageLabel]) }; // 添加默认图层 baseLayers[矢量地图].addTo(map);典型问题解决方案跨域访问被拒绝现象控制台出现CORS错误解决确保使用http协议而非https访问天地图服务图层显示偏移检查crs参数是否设置为L.CRS.EPSG4326确认坐标顺序为[纬度, 经度]缩放级别异常调整zoomOffset参数通常设为1检查maxZoom/minZoom设置是否合理5. 完整可运行示例代码以下是一个集成了图层切换控件的完整HTML示例!DOCTYPE html html head title天地图Leaflet集成/title meta charsetutf-8 link relstylesheet hrefhttps://unpkg.com/leaflet1.6.0/dist/leaflet.css / style #map { width: 100%; height: 100vh; } .leaflet-control-layers { margin-top: 40px; } /style /head body div idmap/div script srchttps://unpkg.com/leaflet1.6.0/dist/leaflet.js/script script // 替换为你的实际TK const TK YOUR_ACTUAL_TK; // 初始化地图 var map L.map(map, { crs: L.CRS.EPSG4326, center: [39.9, 116.4], zoom: 11 }); // 定义所有图层 var layers { vectorBase: L.tileLayer( http://t0.tianditu.com/vec_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ), vectorLabel: L.tileLayer( http://t0.tianditu.com/cva_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ), imageBase: L.tileLayer( http://t0.tianditu.com/img_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ), imageLabel: L.tileLayer( http://t0.tianditu.com/cia_c/wmts?tk${TK}, { maxZoom: 18, tileSize: 256, zoomOffset: 1 } ) }; // 配置图层组 var baseMaps { 矢量地图: L.layerGroup([layers.vectorBase, layers.vectorLabel]), 卫星影像: L.layerGroup([layers.imageBase, layers.imageLabel]) }; // 添加默认图层 baseMaps[矢量地图].addTo(map); // 添加图层控制 L.control.layers(baseMaps, null, { position: topright }).addTo(map); /script /body /html6. 性能优化与进阶技巧多服务器负载均衡// 随机选择服务器节点(0-7) const serverNode Math.floor(Math.random() * 8); const url http://t${serverNode}.tianditu.com/vec_c/wmts?tk${TK};本地存储TK建议将敏感TK信息存储在环境变量中而非硬编码在HTML里移动端适配map.touchZoom.enable(); map.doubleClickZoom.disable();自定义坐标系使用Proj4Leaflet// 引入Proj4Leaflet后 var customCRS new L.Proj.CRS(EPSG:4490, projlonglat ellpsGRS80 no_defs, { resolutions: [/* 自定义分辨率数组 */], origin: [-180, 90] } );实际项目中遇到最棘手的问题是图层的叠加顺序特别是当需要同时显示天地图底图和第三方WMS服务时。经过多次测试发现确保每个图层的zIndex属性正确设置是关键。另一个经验是在移动端使用天地图时适当降低maxZoom级别可以显著提升性能表现。