
1. 从一次「标点不显示」说起百度地图 Web 经纬度标点到底难在哪百度地图 Web 端经纬度标点说白了就是给你一串{lng, lat}坐标让它在网页地图上变成一个个带编号的小图钉。听起来简单但真正动手时新手最容易卡在三件事上第一BMapGL 的 AK 申请和引用方式变了老教程里的api.map.baidu.com/api?v2.0已经不吃香第二标点数据从后端来、地图脚本从前端来跨域和路径问题一叠加就白屏第三本地file://打开能跑一放到服务器用 nginx 托管就 404 或 AK 校验失败。这篇就按「一次跑通标点展示 Key 调用链路」的目标来写。适合谁会一点 JavaScript、想把经纬度数据画到百度地图上、并且准备用 nginx 部署的前后端同学。核心检索词先摆出来——百度地图、web 经纬度标点、nginx、JavaScript、BMapGL这五个词会贯穿全文。我试过把标点、编号、卫星图、nginx 反代、统一 Key 通道串成一条线下面直接给可复制的骨架。2. TaoToken 前置统一 Key 与 API 通道怎么摆在讲地图代码之前先把 Key 这条链路理清。百度地图的 AK 是给 BMapGL 用的而如果你还想在同一个项目里调用大模型能力比如让模型根据经纬度生成标点描述、或者做地址语义解析就会多出一套 Key 管理。TaoToken 在这里的角色是统一 Key / API 通道官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口 https://taotoken.net/api 。你需要提前准备的东西百度地图开放平台申请一个浏览器端 AK白名单填你的域名或*调试期。TaoToken 侧创建一个 API Key用于后续模型对话或编码类调用。一台能跑 nginx 的机器本地虚拟机或云主机都行用来托管demo.html和做反向代理。注意百度地图 AK 和 TaoToken Key 是两套体系别混用。地图标点走 BMapGL 百度 AK模型能力走 TaoToken 通道。本文的重点是让这两条链路在同一个 nginx 配置下都能通。如果你后面要做长期编码或 Agent 类任务可以了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。只是验证模型通不通用模型对话页更快https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。3. 可复制配置BMapGL 标点代码 nginx.conf settings.json 骨架3.1 标点初始化代码BMapGL JavaScript先给一份能直接跑的demo.html。关键点引用 BMapGL 时用typewebglv1.0标点用BMapGL.Marker编号用BMapGL.Label挂在 marker 上卫星图用map.setMapType(BMAP_EARTH_MAP)。!DOCTYPE html html langzh-CN head meta charsetutf-8 / meta nameviewport contentinitial-scale1.0, user-scalableno / style html, body, #allmap { width: 100%; height: 100%; margin: 0; overflow: hidden; } /style !-- 注意ak 换成你自己的浏览器端密钥 -- script srchttps://api.map.baidu.com/api?typewebglv1.0ak你的百度AK/script /head body div idallmap/div script var map new BMapGL.Map(allmap); map.centerAndZoom(new BMapGL.Point(114.305, 30.593), 12); map.enableScrollWheelZoom(true); map.setMapType(BMAP_EARTH_MAP); // 卫星图 // 经纬度标点数据实际项目可从后端接口拉 var points [ { lng: 114.305, lat: 30.593, data: 1 }, { lng: 114.320, lat: 30.580, data: 2 }, { lng: 114.290, lat: 30.610, data: 3 } ]; for (var i 0; i points.length; i) { var marker new BMapGL.Marker(new BMapGL.Point(points[i].lng, points[i].lat)); map.addOverlay(marker); var label new BMapGL.Label(String(points[i].data), { offset: new BMapGL.Size(-8, -28) }); label.setStyle({ background: none, color: #fff, border: none, fontSize: 14px }); marker.setLabel(label); } /script /body /html这段代码里centerAndZoom的第一个参数是中心点第二个是缩放级别offset控制编号相对图钉的偏移负值往上往左避免盖住图钉尖。数据换成你的经纬度数组即可。3.2 nginx.conf 骨架把demo.html放到/root/workspacenginx 配置如下。这里同时演示了静态托管和一条/api/反向代理方便你后续把 TaoToken 的 API 调用也走同域避免跨域。user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; server { listen 8090 default_server; listen [::]:8090 default_server; server_name _; root /root/workspace; index demo.html; location / { try_files $uri $uri/ /demo.html; } # 统一 API 通道反向代理前端同域调用 location /api/ { proxy_pass https://taotoken.net/api/; proxy_set_header Host taotoken.net; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_ssl_server_name on; } } }try_files保证刷新不 404proxy_pass末尾的斜杠要和location匹配否则路径会拼错。proxy_ssl_server_name on在代理 HTTPS 上游时建议加上。3.3 settings.json 骨架如果你用 VS Code 或类似编辑器做本地调试可以放一个settings.json管理端口和 Key 占位避免硬编码。{ map: { ak: 你的百度AK, center: { lng: 114.305, lat: 30.593 }, zoom: 12, mapType: BMAP_EARTH_MAP }, api: { baseUrl: /api, key: 你的TaoTokenKey }, server: { port: 8090, root: /root/workspace } }这个文件本身不参与运行是给你自己对照参数用的。真正上线时Key 建议放环境变量或后端下发别写进前端。4. 验证请求从本地到远端确认标点和 Key 链路都通4.1 本地先跑通标点把demo.html用浏览器直接打开或者用 Live Server 起一个本地服务。如果弹出「百度未授权使用地图API」说明 AK 没填对或白名单没放行。填对 AK 后你应该看到卫星图上出现三个带编号的图钉。4.2 nginx 启动与远端访问nginx -t # 测试配置语法 nginx -s reload # 重载配置然后在浏览器访问http://你的服务器IP:8090。如果页面出来但地图空白按 F12 看 Network重点看 BMapGL 的 JS 是否 200、AK 校验接口是否报错。4.3 验证 API 通道在页面控制台或后端发一个请求确认/api/反代通curl -i http://你的服务器IP:8090/api/你的接口路径返回非 502/504且响应头正常说明 nginx 到 TaoToken 的通道打通了。Key 的具体用法和接入细节看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。5. 本篇常见错排查标点、AK、nginx 三类问题标点不显示先看points数组有没有数据再看lng/lat是不是数字类型。字符串坐标 BMapGL 有时不报错但也不画。另外map.addOverlay(marker)别漏。编号盖住图钉或偏移不对调BMapGL.Size(-8, -28)里的两个值第一个是水平偏移第二个是垂直偏移。图钉默认锚点在底部编号往上挪才好看。AK 报错「APP 服务被禁用」去百度地图控制台检查 AK 类型是不是「浏览器端」白名单有没有包含你的访问域名或 IP。本地调试可以临时填*上线务必收紧。nginx 403/404确认root路径下真有demo.html权限别是 700。index指令和try_files要一致。反代 502多半是proxy_pass地址写错或上游不可达。先用curl在服务器上直接访问上游确认网络通再查 nginx error.log。跨域如果前端直接请求 TaoToken 而不是走/api/反代浏览器会拦。用本文的 nginx 同域方案最省事。6. 把 Key 和标点链路固定下来到这里标点展示和 Key 调用链路应该都跑通了。我的建议是把百度 AK 和 TaoToken Key 都从代码里抽出来前端只拿后端下发的临时凭证nginx 层统一做反代和限流。这样以后换 Key、加模型、扩标点数据量都不用动前端。需要继续接入或排障的从 API Keys 和接入文档入手https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 、https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先验证模型输出再决定怎么用去模型对话页试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。长期做编码或 Agent 的直接看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。