百度地图api需正确申请ak并配置referer白名单,引入v3.0 sdk时必须带ak参数且url中用&;定位应使用bmapgl.geolocation并先初始化地图实例;容器css须显式设置宽高,否则白屏无提示。

百度地图API key 申请和基础引入必须做对
不填对 ak(Access Key),地图压根不会加载,控制台会报 INVALID_REQUEST 或直接白屏。申请地址是 http://lbsyun.baidu.com/apiconsole/key,注意选择「Web端」类型,并把你的开发域名(比如 localhost、127.0.0.1、或正式域名)加进「Referer 白名单」——漏掉这步,本地调试都失败。
在 index.html 的 里用 script 引入,必须带 ak 参数:
<script src="https://api.map.baidu.com/api?v=3.0&ak=%E4%BD%A0%E7%9A%84ak%E5%80%BC"></script>
别用 v=2.0,v=3.0 才支持现代浏览器的地理位置定位;也别漏掉 &(不是 &),否则 URL 解析失败。
用 BMapGL.Geolocation 获取用户位置而不是 navigator.geolocation
百度地图 SDK 封装了更稳定的定位逻辑,自动 fallback 到 IP 定位、Wi-Fi 定位等,比原生 navigator.geolocation.getCurrentPosition 兼容性好、成功率高,尤其在 iOS Safari 和部分安卓 WebView 中。
实操要点:
-
BMapGL.Geolocation是 v3.0 新增类,别写成旧版的BMap.Geolocation(会报 undefined) - 必须先初始化地图实例(
new BMapGL.Map(...)),再调用定位,否则可能触发Cannot read property 'centerAndZoom' of undefined - 定位成功后,地图默认不会自动居中,得手动调用
map.centerAndZoom(position, 15)
定位失败时的常见错误和 fallback 处理
用户拒绝授权、HTTPS 缺失、浏览器禁用定位、或百度服务临时不可用,都会导致定位失败。错误码在回调的 status 字段里,典型值有:
-
status === 0:成功 -
status === 1:网络连接失败(检查是否 HTTPS 或跨域) -
status === 2:定位超时(建议设timeout: 6000) -
status === 3:用户拒绝授权(提示“请开启位置权限”比报错更友好)
不要只依赖百度定位。可加一层降级:if (status !== 0 && navigator.geolocation) { ... },用原生 API 尝试兜底。
地图容器尺寸为 0 导致白屏是最常被忽略的问题
百度地图要求容器(比如 <div id="map"></div>)有明确宽高,否则渲染失败且无任何提示。CSS 必须显式设置:
#map { width: 100%; height: 400px; }
如果父容器是 flex 布局,记得给 #map 加 flex: 1 或固定高度;用 % 单位时,确保所有祖先元素都有高度定义。否则控制台没报错,但地图就是不显示——这种问题查半天才发现是 CSS 没生效。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











