利用php cURL来获取腾讯地图的相关数据
在开发过程中,经常会用到地图、定位、城市列表等相关的数据,这时候我们就需要调用腾讯地图相应的接口来获取这些数据。今天就说一下如何利用php的cURL函数来获取这些数据。采用三个简单的例子来说明:
1、获取中国省市、城市列表
2、根据经纬度获取该地点的相关信息
3、根据详细位置获取该地点的经纬度
【php cURL】
cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多工具和协议。PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
使用php cURL函数的基本思想:
1、先使用curl_init()初始化cURL会话,
2、接着通过curl_setopt()设置需要的全部选项
3、使用curl_exec()来执行会话
4、当执行完会话后使用curl_close()关闭会话。
<?php
$ch = curl_init("http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
[腾讯地图APi]
腾讯地图Webservice API是基于HTTP协议的数据接口,开发者可以使用任何客户端、服务器和开发语言,按照腾讯地图Webservice API规范,按需构建HTTP请求,并获取结果数据。
前提:获取腾讯地图的相应数据之前,需要先去腾讯地图API申请一个开发者密钥。
(1)逆地址解析(坐标位置描述)请求URL:
http://apis.map.qq.com/ws/geocoder/v1/?location=经度,纬度&key=开发者密钥
(2)地址解析(地址转坐标)请求URL:
http://apis.map.qq.com/ws/geocoder/v1/?address=地点&key=开发者密钥
(3)行政区划(获取全部行政区划数据)请求URL:
http://apis.map.qq.com/ws/district/v1/list?key=开发者密钥
具体信息可以参考腾讯地图API:腾讯地图API
【代码实现(例子)】
1、获取中国省市、城市列表:
*注:以下代码中出现的一些参数(例如result、name),需要参考腾讯地图API调用相应接口之后的响应结果。
<?php
//初始化cURL会话
$ch = curl_init();
//设置需要的选项
curl_setopt($ch, CURLOPT_URL, "http://apis.map.qq.com/ws/district/v1/list?key=密钥");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以字符串返回,而不是直接输出
$data = curl_exec($ch);
$map = json_decode($data);
$arr = $map->result;
//输出中国省市列表
for ($i = 0; $i < 34; $i++) {
echo $arr[0][$i]->name." ";
}
echo "<br/><br/>";
//输出中国城市列表
for ($i = 0; $i < 493; $i++) {
echo $arr[1][$i]->name." ";
}
//echo json_encode($res, JSON_UNESCAPED_UNICODE);
curl_close($ch);
?>
2、根据经纬度获取该地点的相关信息:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://apis.map.qq.com/ws/geocoder/v1/?location=39.984154,116.307490&key=密钥");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$map = json_decode($data);
$res = $map->result;
echo $res->address."<br/>";
$ad_info = $res->ad_info;
echo $ad_info->nation."<br/>";
echo $ad_info->province."<br/>";
echo $ad_info->district."<br/>";
?>
3、根据详细位置获取该地点的经纬度:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://apis.map.qq.com/ws/geocoder/v1/?address=湖南省张家界市永定区天门山镇&key=密钥");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$map = json_decode($data);
$location = $map->result->location;
echo "经度:".$location->lng."<br/>";
echo "纬度:".$location->lat."<br/>";
?>