当前位置:   article > 正文

如何调用百度地图API

百度地图api

 

前言

要调用百度地图API,步骤操作如下

  1. 注册并创建一个API密钥。您可以在百度地图API控制台上创建您的密钥。
  2. 选择要使用的API服务。百度地图API提供了多种服务,包括地图展示、路线规划、地点搜索、实时交通等。您可以在百度地图API控制台上查看所有可用的服务。
  3. 在调用API时,将API密钥添加到请求中。

官网:百度地图开放平台 | 百度地图API SDK

1、了解地图开放平台

 可以看到开发文档支持多种类型,前端到后台等等。百度地图API提供了多种服务,包括地图展示、路线规划、地点搜索、鹰眼轨迹,定位,实时交通等。

 2、创建百度地图AK

2.1、控制台→应用管理→我的应用→创建应用

2.2、创建应用名字

 为什么高级是灰色选不了,是因为高级服务是需要付费的。

2.4、IP白名单设置

 2.5、查看AK

3、JAVA调用百度地图

3.1、地点检索

3.1.1、调用百度Api 

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.net.URLConnection;
  10. import java.text.DecimalFormat;
  11. import java.util.Map;
  12. public class BaiduApiController {
  13. public static void main(String[] args) {
  14. String ak = "自己AK";
  15. String address = "天津之眼摩天轮";
  16. // String httpUrl = "http://api.map.baidu.com/geocoding/v3/?address="+address+ ak;
  17. String httpUrl = "http://api.map.baidu.com/geocoding/v3/?address="+address+"&output=json&ak=" + ak;
  18. StringBuilder json = new StringBuilder();
  19. try {
  20. URL url = new URL(httpUrl);
  21. URLConnection urlConnection = url.openConnection();
  22. BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
  23. String inputLine = null;
  24. while ((inputLine = in.readLine()) != null) {
  25. json.append(inputLine);
  26. }
  27. in.close();
  28. } catch (MalformedURLException e) {
  29. } catch (IOException e) {
  30. }
  31. System.out.println(json.toString());
  32. String data = json.toString();
  33. if (data != null && !"".equals(data)) {
  34. Map map = JSON.parseObject(data, Map.class);
  35. if ("0".equals(map.getOrDefault("status", "500").toString())) {
  36. Map childMap = (Map) map.get("result");
  37. Map posMap = (Map) childMap.get("location");
  38. double lng = Double.parseDouble(posMap.getOrDefault("lng", "0").toString()); // 经度
  39. double lat = Double.parseDouble(posMap.getOrDefault("lat", "0").toString()); // 纬度
  40. DecimalFormat df = new DecimalFormat("#.######");
  41. String lngStr = df.format(lng);
  42. String latStr = df.format(lat);
  43. String result = lngStr + "," + latStr;
  44. System.out.println("坐标"+result);
  45. }
  46. }
  47. }
  48. }

3.1.2、查看结果

3.1.3、验证

3.2、计算两点之间距离

3.2.1、调用百度Api 

  1. mport com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.net.URLConnection;
  10. import java.text.DecimalFormat;
  11. import java.util.Map;
  12. /**
  13. * 百度地图操作工具类
  14. */
  15. public class BaiduApiUtils {
  16. public static void main(String[] args) {
  17. String origin = getCoordinate("天津之眼摩天轮");
  18. String destination = getCoordinate("北京市百度大厦");
  19. Double distance = getDistance(origin, destination);
  20. System.out.println("订单距离:" + distance + "米");
  21. Integer time = getTime(origin, destination);
  22. System.out.println("线路耗时" + time + "秒");
  23. }
  24. private static String AK = "自己AK";
  25. /**
  26. * 调用百度地图地理编码服务接口,根据地址获取坐标(经度、纬度)
  27. *
  28. * @param address
  29. * @return
  30. */
  31. public static String getCoordinate(String address) {
  32. String httpUrl = "http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + AK;
  33. String json = loadJSON(httpUrl);
  34. Map map = JSON.parseObject(json, Map.class);
  35. String status = map.get("status").toString();
  36. if (status.equals("0")) {
  37. //返回结果成功,能够正常解析地址信息
  38. Map result = (Map) map.get("result");
  39. Map location = (Map) result.get("location");
  40. String lng = location.get("lng").toString();
  41. String lat = location.get("lat").toString();
  42. DecimalFormat df = new DecimalFormat("#.######");
  43. String lngStr = df.format(Double.parseDouble(lng));
  44. String latStr = df.format(Double.parseDouble(lat));
  45. String r = latStr + "," + lngStr;
  46. return r;
  47. }
  48. return null;
  49. }
  50. /**
  51. * 调用百度地图驾车路线规划服务接口,根据寄件人地址和收件人地址坐标计算订单距离
  52. *
  53. * @param origin
  54. * @param destination
  55. * @return
  56. */
  57. public static Double getDistance(String origin, String destination) {
  58. String httpUrl = "http://api.map.baidu.com/directionlite/v1/driving?origin="
  59. + origin + "&destination="
  60. + destination + "&ak=" + AK;
  61. String json = loadJSON(httpUrl);
  62. Map map = JSON.parseObject(json, Map.class);
  63. if ("0".equals(map.getOrDefault("status", "500").toString())) {
  64. Map childMap = (Map) map.get("result");
  65. JSONArray jsonArray = (JSONArray) childMap.get("routes");
  66. JSONObject jsonObject = (JSONObject) jsonArray.get(0);
  67. double distance = Double.parseDouble(jsonObject.get("distance") == null ? "0" : jsonObject.get("distance").toString());
  68. return distance;
  69. }
  70. return null;
  71. }
  72. /**
  73. * 调用百度地图驾车路线规划服务接口,根据寄件人地址和收件人地址坐标计算订单距离
  74. *
  75. * @param origin
  76. * @param destination
  77. * @return
  78. */
  79. public static Integer getTime(String origin, String destination) {
  80. String httpUrl = "http://api.map.baidu.com/directionlite/v1/driving?origin="
  81. + origin + "&destination="
  82. + destination + "&ak=" + AK;
  83. String json = loadJSON(httpUrl);
  84. Map map = JSON.parseObject(json, Map.class);
  85. if ("0".equals(map.getOrDefault("status", "500").toString())) {
  86. Map childMap = (Map) map.get("result");
  87. JSONArray jsonArray = (JSONArray) childMap.get("routes");
  88. JSONObject jsonObject = (JSONObject) jsonArray.get(0);
  89. int time = Integer.parseInt(jsonObject.get("duration") == null ? "0" : jsonObject.get("duration").toString());
  90. return time;
  91. }
  92. return null;
  93. }
  94. /**
  95. * 调用服务接口,返回百度地图服务端的结果
  96. *
  97. * @param httpUrl
  98. * @return
  99. */
  100. public static String loadJSON(String httpUrl) {
  101. StringBuilder json = new StringBuilder();
  102. try {
  103. URL url = new URL(httpUrl);
  104. URLConnection urlConnection = url.openConnection();
  105. BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
  106. String inputLine = null;
  107. while ((inputLine = in.readLine()) != null) {
  108. json.append(inputLine);
  109. }
  110. in.close();
  111. } catch (MalformedURLException e) {
  112. } catch (IOException e) {
  113. }
  114. System.out.println(json.toString());
  115. return json.toString();
  116. }
  117. }

3.2.2、查看结果

3.3、地点输入提示

3.3.1、调用百度Api 

  1. /**
  2. * 选择了ak或使用IP白名单校验:
  3. */
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.net.URLConnection;
  9. import java.net.URLEncoder;
  10. import java.util.LinkedHashMap;
  11. import java.util.Map;
  12. public class SearchHttpAK {
  13. public static String URL = "https://api.map.baidu.com/place/v2/suggestion?";
  14. public static String AK = "自己AK";
  15. public static void main(String[] args) throws Exception {
  16. SearchHttpAK snCal = new SearchHttpAK();
  17. Map params = new LinkedHashMap<String, String>();
  18. params.put("query", "天安门");
  19. params.put("region", "北京");
  20. params.put("city_limit", "true");
  21. params.put("output", "json");
  22. params.put("ak", AK);
  23. snCal.requestGetAK(URL, params);
  24. }
  25. /**
  26. * 默认ak
  27. * 选择了ak,使用IP白名单校验:
  28. * 根据您选择的AK以为您生成调用代码
  29. * 检测到您当前的ak设置了IP白名单校验
  30. * 您的IP白名单中的IP非公网IP,请设置为公网IP,否则将请求失败
  31. * 请在IP地址为0.0.0.0/0 外网IP的计算发起请求,否则将请求失败
  32. */
  33. public void requestGetAK(String strUrl, Map<String, String> param) throws Exception {
  34. if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
  35. return;
  36. }
  37. StringBuffer queryString = new StringBuffer();
  38. queryString.append(strUrl);
  39. for (Map.Entry<?, ?> pair : param.entrySet()) {
  40. queryString.append(pair.getKey() + "=");
  41. queryString.append(URLEncoder.encode((String) pair.getValue(),
  42. "UTF-8") + "&");
  43. }
  44. if (queryString.length() > 0) {
  45. queryString.deleteCharAt(queryString.length() - 1);
  46. }
  47. java.net.URL url = new URL(queryString.toString());
  48. System.out.println(queryString.toString());
  49. URLConnection httpConnection = (HttpURLConnection) url.openConnection();
  50. httpConnection.connect();
  51. InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
  52. BufferedReader reader = new BufferedReader(isr);
  53. StringBuffer buffer = new StringBuffer();
  54. String line;
  55. while ((line = reader.readLine()) != null) {
  56. buffer.append(line);
  57. }
  58. reader.close();
  59. isr.close();
  60. System.out.println("AK: " + buffer.toString());
  61. }
  62. }

 3.3.2、查看结果

4、接口说明

4.1、接口文档说明

  • 开发文档有很多案例类型,可根据项目业务需求进行选择性调用。

4.2、请求参数 

  • 有些参数是必填就比如开发者密钥AK ,这个参数没有都请求不到数据。
字段名称字段含义字段类型必填备注
ak

开发者密钥,AK申请

string
origin起点double,double起点经纬度,格式为:纬度,经度;小数点后不超过6位,40.056878,116.30815
destination终点double,double终点经纬度,格式为:纬度,经度;小数点后不超过6位,40.056878,116.30815
origin_uid起点uid,POI 的 uid(在已知起点POI 的 uid 情况下,请尽量填写uid,将提升路线规划的准确性)string
destination_uid终点uid,POI 的 uid(在已知终点POI 的 uid 情况下,请尽量填写uid,将提升路线规划的准确性)string
riding_type骑行类型string

默认0
0:普通自行车
1:电动自行车

coord_type输入坐标类型string

默认bd09ll
允许的值为:
bd09ll:百度经纬度坐标
bd09mc:百度墨卡托坐标
gcj02:国测局加密坐标
wgs84:gps设备获取的坐标

ret_coordtype输出坐标类型string

返回值的坐标类型,默认为百度经纬度坐标:bd09ll
可选值:
bd09ll:百度经纬度坐标
gcj02:国测局加密坐标

sn

用户的权限签名,当AK设置为SN校验时,该参数必填SN计算方法

string
timestamp时间戳,与SN配合使用stringSN存在时必填
steps_info

是否下发step详情
1:下发step详情
2:不下发step详情

int

 4.3、返回参数 

  • 返回的状态 ,错误码等等都写的非常详细。
字段名称字段含义备注
status状态码0:成功
1:服务内部错误
2:参数无效
7:无返回结果
message状态码对应的信息
result返回的结果
origin
lng起点经度
lat起点纬度
destination
lng终点经度
lat终点纬度
routes返回的方案集
distance方案距离,单位:米
duration线路耗时,单位:秒
steps路线分段
direction进入道路的角度枚举值,返回值在0-11之间的一个值,共12个枚举值,以30度递进,即每个值代表角度范围为30度;其中返回"0"代表345度到15度,以此类推,返回"11"代表315度到345度";分别代表的含义是:0-[345°-15°];1-[15°-45°];2-[45°-75°];3-[75°-105°];4-[105°-135°];5-[135°-165°];6-[165°-195°];7-[195°-225°];8-[225°-255°];9-[255°-285°];10-[285°-315°];11-[315°-345°]
turn_type行驶转向方向如“直行”、“左前方转弯”
distance路段距离单位:米
duration路段耗时单位:秒
name道路名称如:“信息路”
若道路未明或百度地图未采集到该道路名称,则返回“无名路“
instruction路段描述
start_location
lng分段起点经度
lat分段起点纬度
end_location
lng分段终点经度
lat分段终点纬度
path分段坐标

4.4、示例代码(支持多种语言)

总之,根据自己的业务需求去选择地图的种类,以上只是介绍服务端, 感兴趣的可以去试一下。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/743092
推荐阅读
相关标签
  

闽ICP备14008679号