一、代码部分
1.1. 获取当前位置和经纬度信息(需要配置高的SDK)
调用uni-app
官方API中的uni.chooseLocation()
,即打开地图选择位置。
<button @click="getAddress">获取定位</button>
const getAddress = () => {
uni.chooseLocation({
success: res => {
console.log(res);
console.log('位置名称:' + res.name);
console.log('详细地址:' + res.address);
console.log('纬度:' + res.latitude);
console.log('经度:' + res.longitude);
}
});
}
- res打印结果如下
{
"name": "雨花街道民智路12-5号南京证大喜玛拉雅中心",
"latitude": 31.964383,
"longitude": 118.804811,
"address": "江苏省南京市雨花台区雨花街道民智路12-5号南京证大喜玛拉雅中心",
"errMsg": "chooseLocation:ok"
}
1.2. 如果只是简单获取经纬度信息uni.getLocation即可满足条件
const getAddress = () => {
uni.getLocation({
type: 'wgs84',
success: function(res) {
console.log(res);
},
fail: function(error) {
console.error('获取位置失败:', error);
}
});
}
- res打印结果如下
{
"type": "wgs84",
"altitude": 0,
"latitude": 31.966442,
"longitude": 118.799641,
"speed": 0.036327,
"accuracy": 32,
"errMsg": "getLocation:ok"
}
1.3. 如果需要获取省市区以及区域编码(需要配置高的SDK)
// 获取经纬度 省市区 详细地址
const chooseLocation = () => {
uni.getLocation({
// gcj02 返回国测局坐标(App 和 H5 需配置定位 SDK 信息才可支持 gcj02。)
type: 'gcj02',
// 是否解析地址信息(仅App平台支持(安卓需指定 type 为 gcj02 并配置三方定位SDK))
geocode: true,
success: function(res) {
console.log(res);
}
});
}
- res打印结果如下
{
"type": "gcj02",
"altitude": 0,
"latitude": 31.96437,
"longitude": 118.804836,
"speed": 0,
"accuracy": 34,
"address": {
"country": "中国",
"province": "江苏省",
"city": "南京市",
"district": "雨花台区",
"street": "民智路",
"streetNum": "12-2号",
"poiName": "喜玛拉雅中心C座",
"cityCode": "025"
},
"errMsg": "getLocation:ok"
}
二、生成高德地图的key
-
登录高德开放平台 ,https://console.amap.com/dev/key/app
-
找到“我的应用”
- 创建新应用,添加
key
。 - 选择
Android
平台的话需要多填写一个SHA1
安全码的信息,iOS
不需要填写。
2.1. 发布版安全码SHA1如何获取
- 参考如下地址:
https://blog.csdn.net/qq_44741577/article/details/139090838?spm=1001.2014.3001.5501
2.2. 包名如何获取
- uniapp->发行->原生App云打包
- 这里就看到了
2.3. 信息填好,提交就获取到了key。
三、模块配置
3.1. 配置Geolocation(定位)
- 我这里不需要ios的定位
3.1.1. 如何获取高德用户名
-
找到个人中心
-
用户名如下
3.2. Maps(地图)配置
这里的ios的key我没生成(需要苹果系统),但是配置文件又是必填,我瞎写了一个,不影响Android端使用
四、解决uniapp打包后uni.chooseLocation调用地址列表空白并转圈,搜索框无反应
4.1. 如果是使用云端证书
注意:
- 必须保证在生成高德
key
的时候,发布版的SHA1
的值和Dcloud
项目云端证书的的SHA1
的值相同,否则打包好的app
,打开地图会一直处在加载中的状态- 必须保证高德地图申请
key
的包名和uniapp
打包时的包名一致。
-
如何查看云端证书的SHA1,详解查看如下链接:
https://blog.csdn.net/qq_44741577/article/details/139155101?spm=1001.2014.3001.5501 -
如何查看包名
4.2. 如果是使用自有证书
- 要获取如下三个信息
4.2.1. 证书别名、证书私钥密码、证书文件地址 分别如何获取?
-
下面以为自己为例
-
我的证书的生成命令是:
keytool -genkeypair -alias android -keysize 2048 -validity 36500 -keyalg RSA -keystore D:\keystore\apk.keystore
这个命令中的参数的意思为:
- -genkeypair:生成一对非对称密钥(可选
-genkey
)。- -alias:指定条目以及密钥对的别名,该别名是公开的。
- -keysize 2048指定证书大小
- -validity 36500指定证书有效期
- -keyalg:指定加密算法,本例中采用通用的RSA算法。
- -keystore:设定密钥库文件的存放路径以及文件名字。(存放路径
D:\keystore\
不写,默认存储到你当前cmd
执行的目录)
- 那么查询证书信息的命令就是:
keytool -list -v -keystore D:\keystore\apk.keystore
根据以上信息可得出
- 证书别名:
android
- 证书私钥密码: 就是你生生成证书的时候填写密码
- 证书文件地址:
D:\keystore