OpenLayers加载高德瓦片与GCJ02坐标转换实战(08)
OpenLayers加载高德瓦片高德坐标最简单的地图集成方案如果你的数据来自高德地图API底图也用高德瓦片那恭喜你——这是所有地图集成方案里最简单的一种。坐标不用偏移、瓦片不用封装只需要做一次投影转换。这篇文章把完整实现和正反转换公式都整理清楚了。先说结论高德坐标GCJ02 高德瓦片只需要一步转换GCJ02经纬度 → EPSG:3857墨卡托手写公式10行搞定不需要任何第三方库。一、为什么这是最简单的场景要素坐标系说明数据GCJ02高德API返回的坐标底图GCJ02高德瓦片OpenLayersEPSG:3857需要投影转换数据和底图都是GCJ02不需要处理坐标偏移只做一次投影。对比其他方案场景转换步骤复杂度高德高德1步简单百度高德2步手写中等百度百度1步中等瓦片特殊百度天地图2步简单二、正反转换公式正向GCJ02 → EPSG:3857constgcj02ToMercator(coord){constR6378137constlngcoord[0]*Math.PI/180constlatcoord[1]*Math.PI/180constxR*lngconstyR*Math.log(Math.tan(Math.PI/4lat/2))return[x,y]}反向EPSG:3857 → GCJ02点击地图获取坐标时用constmercatorToGCJ02(coord){constR6378137constxcoord[0]constycoord[1]constlng(x/R)*180/Math.PIconstlat(2*Math.atan(Math.exp(y/R))-Math.PI/2)*180/Math.PIreturn[lng,lat]}验证constoriginal[116.411299,39.908054]constmercatorgcj02ToMercator(original)constbackmercatorToGCJ02(mercator)console.log(original[0].toFixed(6)back[0].toFixed(6))// trueconsole.log(original[1].toFixed(6)back[1].toFixed(6))// true精度说明手写公式是球体墨卡托和OpenLayers内置的fromLonLat椭球体有几米偏差。北京地区约3-5米瓦片地图场景完全够用。三、完整Vue3组件template div classwh100 refolMapRef/div /template script setup import {ref, onMounted} from vue import Map from ol/Map import View from ol/View import TileLayer from ol/layer/Tile import VectorLayer from ol/layer/Vector; import VectorSource from ol/source/Vector; import {GeoJSON} from ol/format; import {Circle as CircleStyle, Fill, Stroke, Style} from ol/style; import XYZ from ol/source/XYZ; // GCJ02经纬度 → WebMercator(EPSG:3857) const gcj02ToMercator (coord) { const R 6378137 const lng coord[0] * Math.PI / 180 const lat coord[1] * Math.PI / 180 const x R * lng const y R * Math.log(Math.tan(Math.PI / 4 lat / 2)) return [x, y] } // WebMercator(EPSG:3857) → GCJ02经纬度 const mercatorToGCJ02 (coord) { const R 6378137 const x coord[0] const y coord[1] const lng (x / R) * 180 / Math.PI const lat (2 * Math.atan(Math.exp(y / R)) - Math.PI / 2) * 180 / Math.PI return [lng, lat] } const olMapRef ref(null) onMounted(() { const center gcj02ToMercator([116.411299, 39.908054]) const map new Map({ target: olMapRef.value, layers: [ new TileLayer({ source: new XYZ({ url: http://webrd0{1-4}.is.autonavi.com/appmaptile?langzh_cnsize1scale1style8x{x}y{y}z{z}, tileSize: 256, crossOrigin: anonymous }) }) ], view: new View({ center: center, zoom: 10, projection: EPSG:3857 }) }) // 添加点验证 let geoJsonData { type: FeatureCollection, features: [{ type: Feature, id: 1, properties: { name: , level: 10, zIndex: 200 }, geometry: { type: Point, coordinates: center } }] } const layer new VectorLayer({ source: new VectorSource({ features: new GeoJSON({}).readFeatures(geoJsonData) }) }) layer.setStyle(new Style({ image: new CircleStyle({ radius: 5, fill: new Fill({ color: #ff0000 }), stroke: new Stroke({ color: #ff0000, width: 3 }) }), })) map.addLayer(layer) }) /script四、点击获取高德坐标在实际项目中经常需要点击地图获取高德坐标用于业务map.on(click,(e){// e.coordinate 是 EPSG:3857 墨卡托坐标constgcj02mercatorToGCJ02(e.coordinate)console.log(高德坐标经度${gcj02[0].toFixed(6)}, 纬度${gcj02[1].toFixed(6)})})五、全场景转换速查表源坐标底图转换方式GCJ02高德gcj02ToMercator1步BD09高德BD09 → GCJ02gcj02ToMercator2步BD09百度BD09 → BD09MCgcoord直接转BD09天地图BD09 → EPSG:4326 → EPSG:3857更新日期2026年8月调试版本OpenLayers 10.9.0

相关新闻

Semaphore实现线程同步

Semaphore实现线程同步

以下是您提供的 14 个 Java 并发程序示例的简要执行说明和核心要点。 1. Semaphore信号量示例 (Listing 1) 功能:演示使用 Semaphore 控制对共享资源(Shared.count)的访问,确保同一时间只有一个线程(IncThread 或 De…

2026/10/24 7:40:20 阅读更多 →
软件开发中的上下文湮灭:从代码考古到主动防腐的工程实践

软件开发中的上下文湮灭:从代码考古到主动防腐的工程实践

那天下午,我盯着屏幕上那个运行了三天三夜的脚本,它终于吐出了最后一行日志。脚本的任务很简单:遍历一个旧项目的代码仓库,找出所有被标记为“待重构”的注释块,然后生成一份报告。报告生成了,密密麻麻列出…

2026/10/25 16:35:28 阅读更多 →
Clawdbot本地化AI助手部署与配置指南

Clawdbot本地化AI助手部署与配置指南

1. Clawdbot项目概述Clawdbot是一款基于Openclaw框架开发的AI助手工具,主要用于自动化任务处理和智能交互。作为一款新兴的AI工具,它支持本地化部署和云端运行两种模式,能够根据用户需求进行灵活配置。从技术架构来看,Clawdbot采用…

2026/10/25 19:47:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →