uniapp项目中如何完整使用高德地图组件(附完整代码)
在uniapp项目中集成高德地图组件时遇到了问题,按照官方文档配置后地图无法正常显示。求教完整的实现步骤,包括:
- 如何正确申请和配置高德地图Key?
- uniapp中需要安装哪些依赖?
- 能否提供地图显示、标记点、路线规划等功能的完整示例代码?
- 是否需要特殊处理跨平台(iOS/Android/H5)的兼容性问题?
遇到控制台报错"INVALID_USER_SCODE"该如何解决?希望附上可运行的demo代码片段。
2 回复
在uniapp中使用高德地图组件步骤:
- 安装高德地图插件
npm install @dcloudio/uni-mp-amap
- 在pages.json中配置
{
"pages": [
{
"path": "pages/map/map",
"style": {
"navigationBarTitleText": "地图",
"mp-amap": {
"sdkKey": "你的高德地图key"
}
}
}
]
}
- 页面中使用
<template>
<view>
<map
id="myMap"
style="width:100%;height:300px;"
:latitude="latitude"
:longitude="longitude"
:markers="markers"
></map>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 39.909,
longitude: 116.39742,
markers: [{
id: 1,
latitude: 39.909,
longitude: 116.39742,
title: '北京'
}]
}
}
}
</script>
记得在高德地图官网申请key并配置安全域名。
在 UniApp 中完整使用高德地图组件,可以通过以下步骤实现。这里以 Vue 3 语法为例,提供完整代码和说明。
步骤 1:注册高德地图并获取 Key
- 访问高德开放平台(https://lbs.amap.com/),注册账号并创建应用。
- 获取 Web 端 Key(选择“Web 服务”类型),记下该 Key。
步骤 2:在 UniApp 项目中安装和配置
- 如果使用 HBuilder X 创建项目,确保项目支持 Vue 3。
- 在
manifest.json中配置高德地图:
注意:高德地图主要支持 H5 和 App 平台,小程序端需使用其他方案(如微信小程序地图)。{ "h5": { "sdkConfigs": { "maps": { "amap": { "key": "你的高德地图 Key" } } } } }
步骤 3:创建地图组件页面
在页面文件中(如 map.vue),添加以下完整代码:
<template>
<view class="map-container">
<!-- 高德地图组件 -->
<map
id="myMap"
:latitude="latitude"
:longitude="longitude"
:scale="scale"
:markers="markers"
@markertap="onMarkerTap"
class="map"
></map>
<!-- 控制按钮 -->
<view class="controls">
<button @click="moveToLocation">移动到当前位置</button>
<button @click="addMarker">添加标记</button>
</view>
</view>
</template>
<script setup>
import { ref, onMounted } from 'vue';
// 地图中心坐标(示例:北京)
const latitude = ref(39.90923);
const longitude = ref(116.397428);
const scale = ref(14); // 缩放级别
// 标记点数组
const markers = ref([
{
id: 1,
latitude: 39.90923,
longitude: 116.397428,
title: '天安门',
iconPath: '/static/marker.png' // 可选自定义图标
}
]);
// 标记点击事件
const onMarkerTap = (e) => {
console.log('标记被点击:', e.markerId);
uni.showToast({
title: `点击标记: ${markers.value.find(m => m.id === e.markerId)?.title}`,
icon: 'none'
});
};
// 移动到当前位置(需获取用户位置权限)
const moveToLocation = () => {
uni.getLocation({
type: 'gcj02', // 高德坐标系
success: (res) => {
latitude.value = res.latitude;
longitude.value = res.longitude;
markers.value.push({
id: Date.now(),
latitude: res.latitude,
longitude: res.longitude,
title: '我的位置'
});
},
fail: (err) => {
console.error('获取位置失败:', err);
uni.showToast({ title: '定位失败', icon: 'none' });
}
});
};
// 添加新标记
const addMarker = () => {
const newMarker = {
id: Date.now(),
latitude: latitude.value + 0.005, // 偏移一点
longitude: longitude.value + 0.005,
title: '新标记'
};
markers.value.push(newMarker);
};
// 页面加载后初始化
onMounted(() => {
// 可添加地图加载后的自定义逻辑
console.log('地图页面加载完成');
});
</script>
<style scoped>
.map-container {
display: flex;
flex-direction: column;
height: 100vh;
}
.map {
width: 100%;
flex: 1;
}
.controls {
padding: 20rpx;
display: flex;
justify-content: space-around;
}
button {
padding: 10rpx 20rpx;
font-size: 28rpx;
}
</style>
步骤 4:运行和测试
- H5 平台:在浏览器中运行,确保
manifest.json中的 Key 正确。 - App 平台:需在
manifest.json的 App 模块配置中勾选“Maps”并设置高德 Key(具体参考 UniApp 文档)。 - 获取用户位置时,在真机上测试需处理权限问题。
注意事项
- 坐标系:高德使用 GCJ-02 坐标系,确保
uni.getLocation的type设置为'gcj02'。 - 平台差异:小程序端不支持高德地图,需用
<map>组件(腾讯系坐标系)。 - 性能:标记点过多时可能影响性能,建议使用聚类或分页。
以上代码提供了基础地图显示、标记、交互和定位功能。根据实际需求扩展,如添加多边形、路线规划等。

