亿企查
亿企查
  • 发布:2026-01-28 09:42
  • 更新:2026-01-28 21:00
  • 阅读:235

【报Bug】map组件使用百度地图云打包自定义基座运行位置显示偏差

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11专业版 24H2

HBuilderX类型: 正式

HBuilderX版本号: 4.85

手机系统: 全部

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

OnePlus Ace2 android16 ios iphoneX ios16

示例代码:
<map style="width: 100%;" :style="{height: ($u.sys().windowHeight - $u.sys().statusBarHeight - 124) + 'px' }"  
        :longitude="mapLong" :latitude="mapLat" :markers="markers">

操作步骤:

真机运行和云打包

预期结果:

位置显示一致

实际结果:

位置显示偏差

bug描述:

map组件使用百度地图显示坐标位置
在云打包生成的自定义基座中真机运行时显示有偏差,传入时为bd09坐标系,显示时为gcj02坐标系;
正式云打包后可正常显示

一开始我的问题是真机运行和打包出来的显示位置不一致,我们后端给的坐标系为gcj02坐标系,但是APP使用的是百度地图,在真机此时正常,打包出来不正常,排查后发现未转换坐标系,转换后发现真机运行的不正常显示了,为此我做了证书指纹比对,两边的证书指纹及其他证书一模一样,排除配置问题,那么只能是官方的真机运行机制有问题了,使用的是百度地图实际map组件在解析地址是用的是gcj02

2026-01-28 09:42 负责人:DCloud_Android_THB 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

✅ 问题结论

您遇到的“云打包后百度地图位置偏差”基本可以确定是 manifest.json 未正确配置百度地图 SDK 所致。
真机运行使用的是 DCloud 内置的测试配置,而云打包后如果未勾选百度地图模块或未填写正确的 AppKey,App 会 自动回退到高德地图,高德与百度坐标系不同,于是出现“位置偏差”。


✅ 请按以下步骤自查并修复

  1. 确认 manifest.json 已勾选百度地图模块
    路径:

    manifest.json → App模块配置 → 地图 → 勾选“百度地图”  
  2. 填写百度 AppKey

    • 登录 百度地图开放平台 创建 Android / iOS 应用,获取 AppKey。
    • 在 manifest.json → SDK 配置 → 百度地图 → 填入对应 AppKey。
    • 包名、签名 SHA1、BundleID 必须与百度后台完全一致,否则 SDK 初始化会失败。
  3. 统一坐标系

    • 获取定位时指定 type: 'bd09'
      uni.getLocation({  
      type: 'bd09',  
      success(res) {  
       this.mapLat  = res.latitude;  
       this.mapLong = res.longitude;  
      }  
      });  
    • 如果已有 gcj02 坐标,可使用官方提供的 坐标转换工具 转成 bd09。
  4. 验证地图服务商
    在 App 启动后执行:

    console.log('当前地图类型:', plus.maps.Map.getMapType());  

    若输出不是 Baidu,说明仍被回退到高德,需回到第 1、2 步检查配置。

  5. 重新云打包并安装测试
    清理旧包 → 重新云打包 → 安装到新手机 → 对比真机运行与云打包效果。


✅ 仍有问题?请补充以下信息

  • manifest.json 截图(含百度地图模块 & AppKey 部分,可打码关键信息)。
  • 真机运行 vs 云打包的对比截图(同一地点的地图中心点 & marker 位置)。
  • 控制台日志(过滤 Mapbaidu 关键字)。

收到这些信息后,我们可以进一步帮您定位。

内容为 AI 生成,仅供参考
DCloud_App_Array

DCloud_App_Array

写一个固定数据的坐标在自定义基座和正式打包时也会有差异吗?

  • 亿企查 (作者)

    是的

    2026-01-29 08:44

  • 亿企查 (作者)

    云打包后在map组件传入gcj02显示有偏差,传入bd09才正常显示,真机运行可以直接传gcj02

    2026-01-29 09:07

  • DCloud_App_Array

    回复 亿企查: 请提供一简单的复现问题的示例项目

    2026-01-29 12:16

  • 亿企查 (作者)

    回复 DCloud_App_Array: <template>

    <view class="content">

    <map style="width: 100%; height: 90vh;" :longitude="mapLong" :latitude="mapLat" :markers="markers">

    </map>

    </view>

    </template>


    <script>

    export default {

    data() {

    return {

    mapLat: '31.782767',

    mapLong: '117.245965',

    markers: [{

    id: 1,

    latitude: 31.782767,

    longitude: 117.245965,

    iconPath: '/static/logo.png',

    width: 38,

    height: 38

    }]

    }

    }

    }

    </script>


    <style>

    .content {

    display: flex;

    flex-direction: column;

    align-items: center;

    justify-content: center;

    }

    </style>

    2026-01-29 15:12

  • 亿企查 (作者)

    就很简单,在manifest.json里模块配置好百度地图,云打包就行了

    2026-01-29 15:14

  • DCloud_Android_THB

    回复 亿企查: 你是 nvue 还是 vue,配置有什么,上传个最简 demo工程吧

    2026-01-30 16:35

  • 亿企查 (作者)

    回复 DCloud_Android_THB: 我司的电脑有加密无法上传代码项目,vue项目,就最简单的map组件显示一个坐标就行

    2026-01-31 10:56

  • DCloud_Android_THB

    回复 亿企查: 后续会修复

    2026-01-31 17:19

要回复问题请先登录注册