【技术】百度 LBS 地址转换

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 。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值