地理编码服务

地理编码服务(又名Geocoder)是一类Web API接口服务;
正地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;
地理编码服务当前未推出国际化服务,解析地址仅限国内;

功能介绍

地理编码服务

用户可通过该功能,将结构化地址(省/市/区/街道/门牌号)解析为对应的位置坐标。地址结构越完整,地址内容越准确,解析的坐标精度越高。

URL:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

以下是开发的代码,主要调取 getMap(); 方法:

<?php/*** 百度地图-根据详细地址获取经纬度* 文档URL:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding** @since 20190117*/
class Baidu_geocoderLib
{/*** 访问应用(AK)* API控制台申请得到的ak*/const REQ_AK = '写你的AK'; /*** 请求校验方式为sn校验方式时,系统会自动生成sk* 可以在应用配置-设置中选择Security Key显示进行查看* 文档URL:http://lbsyun.baidu.com/index.php?title=webapi/appendix*/const SECURITY_KEY = '写你的SK';/*** 请求地址,GET* @var string* ?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求*/const REQ_URL = 'http://api.map.baidu.com/geocoder/v2/';const REQ_URI = '/geocoder/v2/';/*** 错误信息* @var string|array*/private $errMsg = null;/*** 是否使用sn签名的验证方式* @var bool*/private $isSn = false;/*** sk码* @var null|string*/private $sk = self::SECURITY_KEY;/*** 请求参数,默认值* @var array*/private $reqParam = array('address' => '', // 待解析的地址,最多支持84个字节,(必须)'output' => 'json', // 输出格式为json或者xml'ak' => self::REQ_AK, // 用户申请注册的key,(必须)'callback' => '', // 将json格式的返回值通过callback函数返回以实现jsonp功能,(我们不需要)'city' => '', // 地址所在的城市名'ret_coordtype' => 'gcj02ll', // 添加后返回国测局经纬度坐标或百度米制坐标,(gcj02ll:国测局坐标、bd09mc:百度墨卡托坐标)'sn' => '', // 若用户所用ak的校验方式为sn校验时该参数必须);public function __construct(){}/*** 重置所有请求参数* @param array $config 请求参数* @param bool $isSn 是否使用sn校验* @param string $sk*/public function setReqParam($config, $isSn = false, $sk = null){if (is_array($config) && !empty($config)) {foreach ($config as $key => $val) {!empty($val) && $this->reqParam[$key] = $val;}}if ($isSn) {$this->isSn = true;!empty($sk) && $this->sk = $sk;}}/*** 获取经纬度信息* @param null|string $address 详细地址* @param null|string $city 详细地址所属城市名,有利于精确返回信息* @return bool|mixed 经纬度坐标:[... "location":{"lat":"纬度值","lng":"经度值"} ...]*/public function getMap($address = null, $city = null){// 设置地址信息!empty($address) && $this->reqParam['address'] = $address;!empty($city) && $this->reqParam['city'] = $city;if ($this->isSn) {// 调用sn计算函数,默认get请求$queryStringArrays = $this->reqParam;unset($queryStringArrays['sn']);$this->reqParam['sn'] = self::caculateAKSN($this->reqParam['ak'], $this->sk, self::REQ_URI, $queryStringArrays);}// 请求数据$data = $this->send(self::REQ_URL, $this->reqParam);// 处理请求数据$data = str_replace('renderOption&&renderOption(', '', $data);$data = str_replace(')', '', $data);$data = json_decode($data, true);// 返回数据if (!empty($data)) {if ($data['status'] == 0) {return $data;} else {$this->errMsg = $data;}} else {$this->errMsg = '请求出错了';}return false;}/*** 返回错误信息* @return array|string*/public function errMsg(){return $this->errMsg;}/*** 发送请求* @param $url* @param $params* @return mixed*/private function send($url, $params = null){if (!empty($params)) {if (is_array($params)) {$paramStr = '';foreach ($params as $k => $val) {// 请求参数中有中文、特殊字符等需要进行urlencode,确保请求串与sn对应if ($this->isSn && $k != 'sn') {if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $val) > 0) {$val = urlencode($val);}}$paramStr .= "{$k}={$val}&";}$paramStr = rtrim($paramStr,'&');} else {$paramStr = $params;}$url .= (strpos($url, "?") === false ? '?' : '&');$url .= $paramStr;}// 记录一下url$this->errMsg = $url;$ch = curl_init();curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 执行并获取HTML文档内容$result = curl_exec($ch);// 释放curl句柄curl_close($ch);return $result;}/*** sn计算函数,默认get请求* 百度地图提供* 文档URL:http://lbsyun.baidu.com/index.php?title=webapi/appendix* @param $ak* @param $sk* @param $url* @param $querystring_arrays* @param string $method* @return string*/private static function caculateAKSN($ak, $sk, $url, $querystring_arrays, $method = 'GET'){if ($method === 'POST') {ksort($querystring_arrays);}$querystring = http_build_query($querystring_arrays);return md5(urlencode($url . '?' . $querystring . $sk));}
}

相关参数说明看文档:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

百度开放平台-地理编码服务相关推荐

  1. 百度地图Web服务API——正/逆地理编码服务

    正/逆地理编码服务(又名Geocoding API)是一类Web API接口服务: 正向地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能: 逆向地理编码服 ...

  2. 微信小程序-如何申请百度开放平台的密钥

    1.打开百度开放平台官网    官网链接:点击此处跳转 2.点击控制台 3.创建应用 完成基本信息的填写后,在应用管理→我的应用中创建应用 应用类型选择微信小程序,填入自己的微信小程序APP ID,然 ...

  3. 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  4. 百度站长平台VIP俱乐部服务全面升级

    百度站长平台VIP俱乐部服务全面升级,问题反馈优先处理,网站异常及时通知,判罚前限时整改,并且中小型的优质且原创的时效性资讯类站点,也可以申请加入了!这无疑对广大的中小站长是一个好消息. VIP俱乐部 ...

  5. 基于Leaflet和高德Web API扩展地理编码服务

    需求背景: 需求很简单就是想调用高德地图的地理编码服务,单独扩展一个类出来. 参考地址: Leaflet类扩展:https://leafletjs.com/examples/extending/ext ...

  6. Arcgis javascript那些事儿(十七)——地理编码服务的发布与使用

    一.引言 地理编码是按照主要是地理位置描述与地理坐标的相互转换,主要包括地理编码与反地理编码. 地理编码指的是根据地名获取位置信息: 反地理编码指的是根据位置信息获取地名: 这个的使用我们要根据需求来 ...

  7. 谷歌地图JavaScript API第3版 地理编码服务

    地理编码服务 概观 地理编码请求 地理编码响应 地理编码结果 地址组件类型 状态代码 反向地理编码 视口偏置 区码偏置 概观 地理编码地址(如"1600剧场百汇,山景,CA")转换 ...

  8. 百度开放平台(文本转化音频)

    简介 1.百度开放平台对文本转换支持(度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5度小宇=1,#度小美=0,度逍遥=3,度丫丫=4)等虚拟人物的声音 2.支持音量(0-1 ...

  9. 获取百度开放平台Access Token,调用百度统计接口

    官方文档:http://developer.baidu.com/wiki/index.php?title=docs/oauth 获取 Access Token有几种方式 由于项目需求比较简单,这里选择 ...

最新文章

  1. RDD(Resilient Distributed Datasets 弹性分布式数据集)
  2. Pycharm常用的使用方法
  3. LeetCode Reorder List
  4. 同一套C#.NET程序,给同一个人卖了3次的反思
  5. CUDA 纹理的使用
  6. ubuntu21.04下终端路径显示优化
  7. java接口等待几秒再返回_怎样才能在UI线程中等待okhttp返回结果才进行下一步
  8. 操作系统(1) -- 计算机系统概述
  9. Linux命令执行顺序— ||和和; 比较
  10. 阿里云发布多款云管工具,任何角色都可以轻松完成云上运维
  11. ASP.NET Form Authentication安全漏洞及对策
  12. LFM算法——推荐系统
  13. YouTube上最火的OpenCV-Python入门视频教程
  14. SPFA+Dinic HDOJ 3416 Marriage Match IV
  15. ruby中数组的常用函数
  16. 【erlang ~ 4 days】 Day # 1.1 History
  17. 解决LDAP客户端统一认证DirectoryEntry出现 Ox80005000的问题
  18. R语言 常用的数据分析工具包
  19. PS去掉图片上的文字的6种基本方法
  20. centos系统 -官网下载mysql

热门文章

  1. 关于iPhone456字体尺寸适配问题
  2. 成为聪明程序员必知的5个技能
  3. Tasker控制米家App
  4. Tomcat卸载重装及为eclipse配置tomcat,一文搞定。
  5. python英文字符表示_python利用utf-8编码判断中文英文字符(转)
  6. 秋天:又一个乱战的时期
  7. c++复习笔记(多代码版)
  8. Spring Boot——静态资源
  9. C语言while结构经典练习
  10. 2020/4/11 斗图啦多线程爬取表情包