使用百度地图SDK计算距离

news2024/11/24 20:27:49

说明:通过百度地图提供的SDK,可以计算出两个地点之间的距离,另外还有行驶路线等等。本文介绍如果使用百度地图SDK,并用java代码实现。

申请

首先需要登录百度地图的官网,申请开发者认证,个人认证一般都很快

获取AK

第一步:选择地理编码

在这里插入图片描述

第二步:获取AK

在这里插入图片描述

在这里插入图片描述

第三步:设置应用名

在这里插入图片描述

在这里插入图片描述

第四步:复制AK

应用创建完成后,就可以达到一个AK,后面会用到;

在这里插入图片描述

接口一:地理编码

计算距离前,先要获取点地点的经纬度,找到刚刚地理编码里面的接口文档,查看这个接口文档的描述;

在这里插入图片描述

不难理解,只要把这个链接中的这两个地方替换成我们需要计算的地点信息,加上AK就可以了。

在这里插入图片描述

用postman测试一下,果然可以得到经纬度坐标;

在这里插入图片描述

接口二:计算距离

找到驾车路线规划的接口文档,查看接口文档说明,也不难理解,这个接口也是访问一个链接,把链接中的信息,换成需要计算距离的两个地点的经纬度,加上自己的AK;

在这里插入图片描述

按照接口文档中提供的地址,用postman测试一下,可以看到返回的结果信息很多,有距离和驾驶时长,待会儿我们就用代码取出距离这个信息;

在这里插入图片描述

代码实现

以下是我编写的代码,亲测有效,可供参考,使用需要导入hutool工具类的依赖

	<dependency>
	    <groupId>cn.hutool</groupId>
	    <artifactId>hutool-all</artifactId>
	    <version>5.8.6</version>
	</dependency>
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

import java.util.HashMap;
import java.util.List;

/**
 * 百度地图工具类
 */
public class BaiduUtils {

    /**
     * 计算两点之间的距离
     *
     * @param address1 地点1
     * @param address2 地点2
     * @param AK
     * @return
     */
    public static Long computerDistance(String address1, String address2, String AK) {
        
        // 获取两点坐标
        Double[] location1 = getPosition(address1, AK);
        Double[] location2 = getPosition(address2, AK);

        // 计算记录
        String bdResponse = HttpUtil.get("https://api.map.baidu.com/directionlite/v1/driving?origin="
                + location1[0] + "," + location1[1] + "&destination=" + location2[0] + "," + location2[1] + "&ak=" + AK + "&riding_type=1");

        // 空值判断
        if (StrUtil.isBlank(bdResponse)) {
            System.out.println("返回信息为空");
        }

        // 解析bdResponse
        JSONObject result = null;
        try {
            result = JSONUtil.parseObj(bdResponse);
        } catch (Exception e) {
            e.getMessage();
        }

        // 获取距离并返回
        Long distance = Convert.toLong(JSONUtil.parseObj(result.getJSONObject("result").get("routes", List.class).get(0)).get("distance"));

        return distance;
    }

    /**
     * 获取地址的坐标
     *
     * @param address
     * @param AK
     * @return
     */
    private static Double[] getPosition(String address, String AK) {

        // 封装参数
        HashMap<String, Object> mm = new HashMap<>();
        mm.put("address", address);
        mm.put("ak", AK);
        mm.put("output", "json");

        // 发送请求
        String bdResponse = HttpUtil.get("https://api.map.baidu.com/geocoding/v3", mm);

        // 空值判断
        if (StrUtil.isBlank(bdResponse)) {
            System.out.println("返回信息为空");
        }

        JSONObject shopJsonObject = null;

        // 解析bdResponse
        try {
            shopJsonObject = JSONUtil.parseObj(bdResponse);
        }catch (Exception e) {
            e.getMessage();
        }

        // 获取坐标并返回
        Double lat = shopJsonObject.getJSONObject("result").getJSONObject("location").get("lat", Double.class);
        Double lng = shopJsonObject.getJSONObject("result").getJSONObject("location").get("lng", Double.class);

        return new Double[]{lat,lng};
    }

    public static void main(String[] args) {
        String address1 = "杭州东站";
        String address2 = "杭州西站";

        String AK = "您的AK";

        System.out.println(computerDistance(address1, address2, AK) + "米");
    }
}

计算杭州东站到杭州西站的距离;

在这里插入图片描述

需要注意,计算距离这里提供了四种交通方式,如果选择的是骑行,并且距离又选择的很远的话,程序会报空指针异常,这点在项目中使用时需要考虑到。可能距离如果太远,不管选择是哪种交通方式,都会报空指针异常,可以试一试。

在这里插入图片描述

总结

使用百度地图SDK计算距离,需要发两次请求,一次返回地点的经纬度,第二次使用地点的经纬度计算记录,使用起来非常遍历,不需要导入额外的依赖。

另外,如果你需要路线规划、驾车时长等信息,可以根据返回结果解析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

装饰模式-扩展系统功能

买了新车后&#xff0c;不少人会对车进行装饰&#xff0c;比如给车贴膜&#xff0c;喷上骚粉的漆等。某天&#xff0c;小李和小张都买了辆车&#xff0c;小李想给车贴膜&#xff0c;小张想给车先喷漆然后再贴膜。现在中的做法是&#xff0c;把车开到改装店&#xff0c;如果要喷…

统一观测丨使用 Prometheus 监控 Cassandra 数据库最佳实践

作者&#xff1a;元格 本篇内容主要包括四部分&#xff1a;Cassandra 概览介绍、常见关键指标解读、常见告警规则解读、如何通过 Prometheus 建立相应监控体系。 Cassandra 简介 Cassandra 是什么&#xff1f; Apache Cassandra 是一个开源、分布式、去中心化、弹性可伸缩、…

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类&#xff1a; Mapper接口&#xff1a; Service和实现类&#xff1a; 测试1&#xff1a; 运行后&#xff1a; 测试2&#xff1a;无此型号时 测试3&#xff1a;库存不足时 解决方案1&#xff1a;事务声明管理器 测试&#xff1a…

【从零开始学习JAVA | 第三十篇】方法引用

前言&#xff1a; 方法引用作为一个重要的知识点&#xff0c;虽然他使用起来很复杂&#xff0c;而且会降低代码的可读性&#xff0c;但是如果用好了方法引用&#xff0c;我们也会获得不错的效率&#xff0c;因此我们在今天将为大家讲解什么是方法引用。 方法引用&#xff1a;…

J-Flash合并多个bin文件

文章目录 1. 前言2. 下载 J-Flash 工具3. 合并3个bin文件3.1 Booloader.bin3.2 APP1.bin3.3 APP2.bin3.4 保存 → 导出合并bin文件3.5 未用到的区域会被填充为 FF 4. 欢迎纠正~ 1. 前言 下面介绍用J-Flash工具合并多个bin文件的方法 2. 下载 J-Flash 工具 在下载Jink驱动的…

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

最小栈,设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

题记&#xff1a; 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶…

交换机和终端设备的基本配置

1 IOS访问 1.1 操作系统 所有终端设备和网络设备都需要有操作系统 (OS)。如图所示&#xff0c;操作系统中直接与计算机硬件交互的部分称为内核。与应用程序和用户连接的部分则称为外壳。用户可以使用命令行界面 (CLI) 或图形用户界面 (GUI) 与外壳交互。 使用 CLI 时&#xf…

欧姆龙以太网模块连接MCGS步骤

你是否曾经遇到过这样的问题&#xff1a;在监控PLC数据时&#xff0c;触摸屏无法与PLC通讯&#xff0c;或者PLC的通讯口被占用了&#xff1f;今天&#xff0c;我要向大家介绍一款神奇的设备——捷米特JM-ETH-CP转以太网模块&#xff0c;它能够即插即用&#xff0c;不占用PLC通讯…

被吹爆的Wi-Fi 6,究竟强在哪?

被吹爆的Wi-Fi 6&#xff0c;究竟强在哪&#xff1f; 伴随IoT技术的成熟及发展&#xff0c;Wi-Fi标准也在不断迭代升级&#xff0c;然而就实际情况来说&#xff0c;依旧有不少人仍在使用旧标准&#xff0c;比如Wi-Fi 4、Wi-Fi 5。其实WiFi的每一次升级除了速率更高&#xff0c;…

SpringCloud+Nacos集成Seata-1.7.0分布式事务

Seata是一个比较成熟的分布式事务工具&#xff0c;非常好用&#xff0c;主流的的一套&#xff0c;网上大多都是1.4版本&#xff0c;以及不完整了&#xff0c;鄙人也是找了好久才找到有个1.7版本的详细教程&#xff08;放在最后面了&#xff0c;毕竟是别人的技术&#xff0c;这里…

打造高效便捷的采购管理平台,提升企业采购效率

随着企业规模的扩大和供应链的日益复杂&#xff0c;传统的手工采购管理方式已经不能满足企业的需求。采购管理平台的出现为企业提供了一个集中、高效、便捷的采购管理工具。本文将重点探讨采购管理平台的意义与作用&#xff0c;并介绍如何打造一个高效便捷的采购管理平台。 一、…

【干货分享】如何恢复SOLIDWORKS 零件、装配体和工程图模板?

当我们卸载了SOLIDWORKS或者是购买了一台新笔记本电脑或是丢失了一直在使用的模板时&#xff0c;我们可以通过打开过去的零件、装配体和工程图文件来恢复 SOLIDWORKS 模板。 ▷ 零件模板 打开包含所需自定义属性的上一个部件。 保存零件的副本以避免对原始文件进行意外更改。…

机器学习深度学习——线性回归的从零开始实现

虽然现在的深度学习框架几乎可以自动化实现下面的工作&#xff0c;但从零开始实现可以更了解工作原理&#xff0c;方便我们自定义模型、自定义层或自定义损失函数。 import random import torch from d2l import torch as d2l线性回归的从零开始实现 生成数据集读取数据集初始…

【技术】国标GB28181视频监控平台EasyGBS视无法播放,抓包返回ICMP

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富&#xff0c;部署灵活&#xff0c;既能作为业务平台使用&#xff0c;也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视…

Ansys Speos | Presets 适合用户的预定义参数集

概述 Speos Presets 参数预置功能允许创建预定义的参数集&#xff0c;并将它们应用于新的或现有的 Speos&#xff0c;从任何 Speos 对象创建预设&#xff0c;例如光源&#xff0c;传感器&#xff0c;材料&#xff0c;仿真等&#xff0c;通过一个*.Preset 的文件定对仿真类型的配…

C++之文件操作

1.C文件操作 C中文件操作头文件:fstream。   文件类型&#xff1a;文件文件和二进制文件。 文件操作三大类&#xff1a;     ofstream 写操作     ifstream 读操作     fstream:读写操作 文件打开方式&#xff1a; 标志说明ios::in只读ios::out只写,文件不存在则…

Spring系列一:spring的安装与使用

文章目录 &#x1f49e; 官方资料&#x1f34a;Spring5下载&#x1f34a;文档介绍 &#x1f49e;Spring5&#x1f34a;内容介绍&#x1f34a;重要概念 &#x1f49e;快速入门&#x1f34a;Spring操作演示&#x1f34a;类加载路径&#x1f34a;Debug配置&#x1f34a;Spring容器…

基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)

目录 一、添加硬盘 二、查看新磁盘 三、磁盘分区 3.1新建分区 3.2 格式分区 3.3 挂载分区 3.4 永久挂载新分区 3.5 取消挂载分区 一、添加硬盘 1.在虚拟机处选择编辑虚拟机设置&#xff0c;然后选择添加 2.选择硬盘&#xff0c;然后选择下一步 3.默认即可&#xff0c;下一步…

啤酒节,燃起青岛啤酒们的“热血”

【潮汐商业评论/ 原创】 “这周五晚上我们就出发&#xff01;三年了&#xff0c;终于可以再去啤酒节畅快淋漓了&#xff01;”作为啤酒爱好者Joe兴奋道。 随着线下经济的复苏&#xff0c;疫情后的第一个盛夏正在被全国各地的“啤酒狂欢”所点燃。 7月14日晚&#xff0c;随着…