需求:需实现地址转换经纬度功能
流程:注册->认证->申请AK码->使用AK码->问题解决方案
【前提准备】
1、登录/注册账号
https://lbsyun.baidu.com/apiconsole/center
2、身份认证
必须身份认证才能使用百度地图API,身份认证包含企业、个人、学生三个类别,如果日常使用不频繁可以点击“我不是企业员工”。
个人身份认证:
学生身份认证:
3、进入控制台
提交身份认证信息后进入控制台页面,但出于申请中状态,需要稍等一会等待认证通过。
【如何使用】
1、进入应用管理
使用百度地图API需要AK码,而AK码需要创建应用获取。在应用管理页面可以浏览、创建、修改、删除应用。
2、创建应用
应用类型包含服务端、浏览器端、微信小程序、Android应用、iOS应用、鸿蒙应用。根据个人需求选择类型,在此以服务端举例。
启用服务根据个人需求勾选。
高级服务后期付费使用。
IP白名单的意思是只有写在输入框内的ip地址或IP前缀网段才可以发送请求。填写0.0.0.0/0
指的是所有IP都可以发送请求。此项后期是可以修改的。
提交后获得AK码,接下来去服务端发送请求。
3、使用AK码发送请求
这里用nodejs作为服务端,以使用百度地图编码API为例。
(1)服务器下载axios依赖:
npm install axios
(2)编写请求地理编码函数
response.data.status==0
,表示请求成功
//使用 axios发送请求
const axios = require('axios');
// 百度地图API Key
const API_KEY = '你自己的AK';
// 百度地图地理编码函数
async function geocode(address) {
try {
const response = await axios.get('https://api.map.baidu.com/geocoding/v3/', {
params: {
address: address,
output: 'json',
ak: API_KEY
}
});
if (response.data.status === 0) {
// 地理编码成功
const location = response.data.result.location;
return {
latitude: location.lat,
longitude: location.lng
};
} else {
// 地理编码失败
throw new Error(response.data);
}
} catch (error) {
return;
}
}
API请求返回的格式:
{
data:{
{
status: 0,
result: {
location: { lng: 116.30787799999993, lat: 40.05702706489032 },
precise: 1,
confidence: 100,
comprehension: 100,
level: ''
}
}
},
...
}
(3)接口调用地理编码函数
router.post('/XXX/XXX', async (ctx, next) => {
/**ctx.request.body为解析的post数据对象 */
let {
address
} = ctx.allQuery;
if (address) {
// 调用
let data = await geocode(address).catch(error => {
ctx.body = {
success: false,
message: "查询错误"
};
});
if (data) {
ctx.body = {
success: true,
message: "查询成功",
data
};
} else {
ctx.body = {
success: false,
message: "查询错误"
};
}
} else {
ctx.body = {
success: false,
message: "参数错误!"
};
}
})
成功请求返回的响应内容:
在此是以地理编码为例,附上官方API文档:https://lbsyun.baidu.com/faq/api?title=webapi
【问题解决】
如果请求百度地图API提示:{"status":240,"message":"APP 服务被禁用"}
以下方式可以解决:
1、你现在使用的AK码应用,在“启动服务”中勾选对应的服务。
2、使用最新的AK码
3、删除其他同“应用类型”的应用。(亲测有效)