【技术】百度 LBS 地址转换

news2024/10/6 0:27:01

百度 LBS 地址转换

  • LBS 简介
  • LBS 案例
    • 注册百度账号
    • 开发文档
    • 创建应用
    • Java 代码
    • 请求参数
    • 返回参数

LBS 简介

在移动互联网时代,地理定位服务(Location-Based Service, LBS)成为了许多应用程序的重要功能之一。百度作为中国最大的互联网公司之一,推出了强大的LBS解决方案,其中之一就是百度LBS地址转换。本文将深入探讨百度LBS地址转换的原理和使用方法,帮助开发者们更好地理解和应用这项功能。

一、什么是百度LBS地址转换?
百度LBS地址转换是一项提供地理位置信息转换为具体地址的服务。它可以将经纬度坐标转化为实际的地址,从而方便开发者在地图应用、导航应用和其他位置相关的应用中使用。

二、百度LBS地址转换的原理
百度LBS地址转换基于百度的地图数据和算法,通过将经纬度坐标与百度地图中的位置信息进行匹配,从而确定具体的地址。该服务支持将单个经纬度坐标转换为地址,也支持批量转换多个坐标。

三、如何使用百度LBS地址转换

  1. 获取百度开放平台的密钥:在使用百度LBS地址转换之前,开发者需要在百度开放平台注册并获取相应的密钥。这个密钥将用于调用百度地图API接口。

  2. 调用地址转换API:开发者可以使用百度提供的地址转换API,向API接口发送请求并传入经纬度坐标。API将返回相应的地址信息,包括国家、省份、城市、街道等详细信息。

  3. 解析返回结果:开发者需要解析API返回的结果,获取需要的地址信息。可以根据自己的需求,选择提取特定的地址信息,如城市、街道等。

四、百度LBS地址转换的应用场景

  1. 地图应用:百度LBS地址转换为地图应用提供了精准的地址解析功能,使得用户能够通过输入具体的地址快速定位到目标位置。

  2. 导航应用:百度LBS地址转换可将经纬度坐标转化为具体地址,提供给导航应用使用。这样用户就可以通过输入目的地的经纬度坐标,快速获取导航路线。

  3. 配送服务:在物流配送等领域,百度LBS地址转换可以将经纬度坐标转化为实际地址,从而提供准确的配送目的地信息。

LBS 案例

注册百度账号

进入百度地图开放平台,注册账号,如果之前有百度账号,可以直接使用。

开发文档

登录之后在头部导航中依次点开【开发文档】----【服务接口】----【地理编码】
在这里插入图片描述
开发文档内容如下,可以挨个查看了解。
在这里插入图片描述
在使用准备中可以看到基础步骤,参照上下文介绍和步骤依次处理。
在这里插入图片描述

创建应用

应用名称可以自定义,应用类型填写服务端即可。应用服务可以根据需求自行勾选。
创建应用后可以在控制台我的应用中查看,AK 也是在我的应用中查看的。
在这里插入图片描述
在这里插入图片描述

Java 代码

官网提供了多种语言案例,这里以Java为例。核心调用 requestGetAK 方法,传递百度的服务地址和请求参数即可。参数部分最为核心的是 AK,AK 是创建应用后提供的。

/**
  * 默认:
  */

package com.android.javaproject;

import org.springframework.web.util.UriUtils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;

public class SearchHttpAK {

    public static String URL = "https://api.map.baidu.com/geocoding/v3?";

    public static String AK = "您的AK";

    public static void main(String[] args) throws Exception {

        SearchHttpAK snCal = new SearchHttpAK();

        Map params = new LinkedHashMap<String, String>();
        params.put("address", "北京市海淀区上地十街10号");
        params.put("output", "json");
        params.put("ak", AK);
        params.put("callback", "showLocation");


        snCal.requestGetAK(URL, params);
    }

    /**
     * 默认ak
     * 选择了ak,使用IP白名单校验:
     * 根据您选择的AK已为您生成调用代码
     * 检测到您当前的ak设置了IP白名单校验
     * 您的IP白名单中的IP非公网IP,请设置为公网IP,否则将请求失败
     * 请在IP地址为xxxxxxx的计算发起请求,否则将请求失败
     */
    public void requestGetAK(String strUrl, Map<String, String> param) throws Exception {
        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
            return;
        }

        StringBuffer queryString = new StringBuffer();
        queryString.append(strUrl);
        for (Map.Entry<?, ?> pair : param.entrySet()) {
            queryString.append(pair.getKey() + "=");
            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
            //    queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
        }

        if (queryString.length() > 0) {
            queryString.deleteCharAt(queryString.length() - 1);
        }

        java.net.URL url = new URL(queryString.toString());
        System.out.println(queryString.toString());
        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
        httpConnection.connect();

        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
        BufferedReader reader = new BufferedReader(isr);
        StringBuffer buffer = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();
        isr.close();
        System.out.println("AK: " + buffer.toString());
        //  获取原字符串
		String string = buffer.toString();
		// 去掉多余的信息
		string = string.substring(string.indexOf("(") + 1, string.lastIndexOf(")"));
		// JSON 转换
		JSONObject jsonObject = JSONObject.parseObject(string);
		Object obj = jsonObject.get("result");
		JSONObject result = (JSONObject) obj;
		Object o = result.get("location");
		JSONObject location = (JSONObject) o;
		Object lng = location.get("lng");
		Object lat = location.get("lat");
    }
}

注意:buffer.toString() 输出的内容和官网的测试结果会有些出入,需要对字符串进行处理,然后转换为 JSON 对象在从中获取想要的信息。

请求参数

参数名称参数含义示例类型默认值必选
address待解析的地址。最多支持84个字节。 可以输入两种样式的值,分别是: 1、标准的结构化地址信息,如北京市海淀区上地十街十号【推荐,地址结构越完整,解析精度越高】 2、支持“路与路交叉口”描述方式,如北一环路和阜阳路的交叉路口 第二种方式并不总是有返回结果,只有当地址库中存在该地址描述时才有返回。北京市海淀区上地十街10号string
city地址所在的城市名。用于指定上述地址所在的城市,当多个城市都有上述地址时,该参数起到过滤作用,但不限制坐标召回城市。北京市string
ret_coordtype可选参数,添加后返回国测局经纬度坐标或百度米制坐标 坐标系说明gcj02ll(国测局坐标)、bd09mc(百度墨卡托坐标)stringbd09ll(百度经纬度坐标)
ak用户申请注册的key,自v2开始参数修改为“ak”,之前版本参数为“key”申请akstring
sn若用户所用ak的校验方式为sn校验时该参数必须sn生成string
output输出格式为json或者xmljson或xmlstringxml
callback将json格式的返回值通过callback函数返回以实现jsonp功能callback=showLocation(JavaScript函数名)string
extension_analys_level是否触发解析到最小地址结构功能extension_analys_level=1或true时,触发analys_level;字段返回参数; extension_analys_level=0或false时; analys_level字段不返回参数;string0

返回参数

返回参数类型备注
statusint本次API访问状态,如果成功返回0,如果失败返回其他数字。(见服务状态码)
resultobject返回的结果
locationobject经纬度坐标
lngfloat经度值
latfloat纬度值
preciseint位置的附加信息,是否精确查找。1为精确查找,即准确打点;0为不精确,即模糊打点。
confidenceint描述打点绝对精度(即坐标点的误差范围)。 confidence=100,解析误差绝对精度小于20m; confidence≥90,解析误差绝对精度小于50m; confidence≥80,解析误差绝对精度小于100m; confidence≥75,解析误差绝对精度小于200m; confidence≥70,解析误差绝对精度小于300m; confidence≥60,解析误差绝对精度小于500m; confidence≥50,解析误差绝对精度小于1000m; confidence≥40,解析误差绝对精度小于2000m; confidence≥30,解析误差绝对精度小于5000m; confidence≥25,解析误差绝对精度小于8000m; confidence≥20,解析误差绝对精度小于10000m;
comprehensionint描述地址理解程度。分值范围0-100,分值越大,服务对地址理解程度越高(建议以该字段作为解析结果判断标准); 当comprehension值为以下值时,对应的准确率如下: comprehension=100,解析误差100m内概率为91%,误差500m内概率为96%; comprehension≥90,解析误差100m内概率为89%,误差500m内概率为96%; comprehension≥80,解析误差100m内概率为88%,误差500m内概率为95%; comprehension≥70,解析误差100m内概率为84%,误差500m内概率为93%; comprehension≥60,解析误差100m内概率为81%,误差500m内概率为91%; comprehension≥50,解析误差100m内概率为79%,误差500m内概率为90%; //解析误差:地理编码服务解析地址得到的坐标位置,与地址对应的真实位置间的距离。
levelstring可以打点到地址文本中的真实地址结构, 例如问题地址:北京市海淀区北京路百度大厦,level:“道路” 能精确理解的地址类型,包含:UNKNOWN、国家、省、城市、区县、乡镇、村庄、道路、地产小区、商务大厦、政府机构、交叉路口、商圈、生活服务、休闲娱乐、餐饮、宾馆、购物、金融、教育、医疗 、工业园区 、旅游景点 、汽车服务、火车站、长途汽车站、桥 、停车场/停车区、港口/码头、收费区/收费站、飞机场 、机场 、收费处/收费站 、加油站、绿地、门址
analys_levelstring可以解析地址文本中的最小地址结构, 例如问题地址:北京市海淀区北京路百度大厦,analys_level:“POI”, 能精确理解的地址类型包含: 省 市 区县 乡镇 道路 门址 POI 。

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

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

相关文章

c语言(11)

第一题 第二题 第三题 第四题 第五题 第六题 第七题

【C++】基础:常见错误与异常处理

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍常见错误与异常处理。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&a…

IT运维:使用数据分析平台监控 Linux 节点

监控目标 监控 Linux 服务器的基本信息以及各项性能指标&#xff0c;包括&#xff1a; CPU 内存、Swap 网络 文件系统、磁盘 IO 解决方案 使用 Node exporter 收集硬件以及操作系统内核的指标数据&#xff0c;并通过 HTTP API 提供数据 使用 Vector agent 通过 Node export…

家庭装修设计施工团队进度小程序开发演示

传统装修企业获客难、获客成本高、竞争激烈&#xff0c;我们也是基于整个装修市场整体的需求&#xff0c;从用户角度出发帮助装修设计企业设计制作这款小程序。可以让传统装修企业搭上互联网的快车&#xff0c;形成线上获客裂变&#xff0c;降低获客成本提高客户信任度和签单率…

微信小程序 echarts 画多个横向柱状图

然后是json {"usingComponents": {"ec-canvas": "../../common/ec-canvas/ec-canvas"},"navigationBarTitleText": "主题活动" } ec-canvas获取方式 在链接里下载代码 然后copy ec-canvas文件夹到自己的项目 https://gi…

面试官问:说一说 Redis 的过期淘汰策略和内存淘汰策略 ?

目录 1. Redis 的过期淘汰策略 1.1 说一下定期删除的执行流程 2. Redis 的内存淘汰策略 2.1 LRU 和 LFU 有什么区别 3. Redis 中的过期淘汰策略和内存淘汰策略有什么区别 1. Redis 的过期淘汰策略 在了解过期淘汰策略之前&#xff0c;我们首先要知道 Redis 中的键值过期之后…

FreeRTOS软件定时器的原理以及使用实例

FreeRTOS软件定时器的使用 一.软件定时器介绍二.软件定时器工作原理三.创建软件定时器四.总结 一.软件定时器介绍 我们知道&#xff0c;如果是裸机系统的话&#xff0c;定时器都是由硬件中断完成的。还有一个中断服务函数。而FreeRTOS是一个操作系统&#xff0c;它提供了软件定…

MacBook上godep安装和使用

MacBook上godep安装和使用 #会在bin目录生成godep可执行文件 go get github.com/tools/godep#把godep可执行文件放到go的bin目录 cp bin/godep /Users/liang/software/go1.10.3/bin/godep helpgodep version#编译成二进制文件&#xff0c;执行二进制文件启动项目 如&#xff1…

【C++】使用Windows操作系统的API在控制台输出绿色的文本

2023年8月21日&#xff0c;周一下午 #include <Windows.h> #include <iostream>int main() {HANDLE hConsole GetStdHandle(STD_OUTPUT_HANDLE);// 设置文本颜色为绿色SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN); std::cout<<"This text i…

树莓派4B raspiberry设置vnc远程登录

树莓派开启远程登录&#xff0c;本来通过raspi-config就可以设置的&#xff0c;但是这里安装的镜像可能不是官方镜像&#xff0c;导致raspi-config设置不生效。早先的版本可能通过raspi-config选择 Interfacing Options ,选择 Enable VNC就可以安装realvnc-vnc-server&#xff…

企业移动电子邮件管理(MEM)加强数据安全保护

什么是移动电子邮件管理 电子邮件是组织内部官方通信的主要方法&#xff0c;为了保持移动工作人员的连接和工作效率&#xff0c;必须在移动设备上访问其公司邮箱。通过移动电子邮件管理&#xff0c;IT 管理员可以促进在员工的智能手机、平板电脑和笔记本电脑上安全访问企业电子…

主机SSH连接VirtualBox NAT网络模式

遇到的问题 虚拟机使用桥接模式配置网络&#xff0c;主机可以ssh连接&#xff0c;但是虚拟机无法访问网络 使用NAT模式配置网络&#xff0c;虚拟机可以访问网络&#xff0c;但是主机无法通过ssh连接 解决方法 配置虚拟机端口转发 1 首先查看虚拟机ip 2 关闭虚拟机 配置端口…

python3.7 安装pywin32报错,完美解决方法

本机环境 python&#xff1a;3.7 遇到2种报错 第一种 ImportError: DLL load failed: The specified module could not be found.第二种&#xff1a; import win32gui ModuleNotFoundError: No module named ‘win32gui‘解决方法 我安装pywin32时候&#xff0c;是直接pi…

Docker 安装 Redis集群

1. 面试题 1.1 1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 单机单台不可能实现&#xff0c;肯定是用分布式存储&#xff0c;用redis如何落地&#xff1f; 1.2 上述问题工程案例场景设计类题目&#xff0c;解决方案 1.2.1 哈希取余分区 2亿条记录就是2亿个k,v&…

Spring复习:(56)PropertySourcePlaceholderConfigurer的工作原理

PropertySourcePlaceholderConfigurer的用途&#xff1a;通过配置文件&#xff08;比如.properties文件&#xff09;给bean设置属性&#xff0c;替代属性占位符 示例&#xff1a; 属性配置文件 spring.datasource.urljdbc:mysql://xxx.xxx.xxx.xxx/test spring.datasource.us…

C++信息学奥赛1122:计算鞍点

解题思路&#xff1a;这段代码的解题思路如下&#xff1a; 首先定义一个大小为5x5的二维数组arr来存储用户输入的矩阵元素。 使用两层嵌套循环&#xff0c;依次输入矩阵的每个元素。 接下来使用另外一个循环&#xff0c;遍历每一行。在每一行中&#xff0c;通过比较找到该行的…

编码器测速,获取实际速度

本例程中使用的电机为带霍尔编码器的减速电机&#xff0c;电机由三部分组成&#xff1a;减速器&#xff0c;电机以及霍尔编码器。 霍尔编码器工作原理&#xff1a;霍尔编码器通过电磁转换&#xff0c;将机械的位移转化为脉冲信号&#xff0c;并且输出A、B两相的方波信号&#x…

uniapp,使用canvas制作一个签名版

先看效果图 我把这个做成了页面&#xff0c;没有做成组件&#xff0c;因为之前我是配合uview-plus的popup弹出层使用的&#xff0c;这种组件好像是没有生命周期的&#xff0c;第一次打开弹出层可以正常写字&#xff0c;但是关闭之后再打开就不会显示绘制的线条了&#xff0c;还…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

【方法】分卷压缩文件的密码忘记了怎么办?

压缩分卷压缩文件&#xff0c;和压缩成单个压缩文件一样&#xff0c;都是可以设置密码&#xff0c;保护文件不能被随意打开。 解压带有密码的分卷压缩文件&#xff0c;只需要解压第一个分卷文件&#xff0c;并输入原本设置的密码就可以解压全部分卷。但要是密码忘记了&#xf…