2018的第一个新知识~(2018新气象,还是得好好学习啦
想要调用第三方API,首先需要到其官网申请获得调用的资格,这里地址为:
百度地图API
先在控制台申请资格,然后查看其关于百度地图web这块的api开发文档。
这里以使用正/逆地理编码服务 和 静态地图API 为例子
正/逆地理编码服务是通过传入地址名而百度地图API给出经纬度或者通过经纬度由百度地图给出相关位置以及周边信息。
这里通过一个站点获得信息,一般最容易想到就是fopen,但是这个函数并没有足够的参数来供我们使用(当想用POST,GET的时候
这里用php的扩展类库curl,使用前记得打开php扩展类库功能
这个函数可以自己写成一个公共函数
function doCurl($url, $type=0, $data=[]) { //这里return的结果就是查询的结果,默认GET
$ch = curl_init(); // 初始化,创建一个新curl会话资源
// 设置选项
curl_setopt($ch, CURLOPT_URL, $url); //这里是url地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1表示以字符串形式返回,而不是直接输出,0则为输出
curl_setopt($ch, CURLOPT_HEADER,0); //这个header头是否需要输出
if($type == 1) {
// post方式
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //内容
}
//执行并获取内容
$output = curl_exec($ch);
// 释放curl句柄
curl_close($ch);
return $output;
}
对于正/逆地理编码服务,根据其开发文档的传入参数来传入。
public function getLocation($address) //getcoder 地理编码
{
$data=[
'address'=> $address,
'ak' => config('map.ak'), // 这里是因为数据已经写在了app\extra\map.php下的ak变量,所以可以直接调用 1、config调用里面要有''引起来。
'output' => 'json',
];
//$url = 'http://api.map.baidu.com/geocoder/v2/?address=陕西省西安市长安区西安电子科技大学&output=json&ak=你猜&callback=showLocation';
//上面data在转换过后和这个url是一样的(不过上面是url编码过后的)
/*$data=[
'location'=> '34.128,108.847', //逗号隔开经纬度
'ak' => config('map.ak'), //1、config调用里面要有''引起来。
'output' => 'json',
'pois' => 0,
'callback' => 'showLocation',
];*/
//$url = 'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location=34.128,108.847&output=json&pois=1&ak=你猜';
//http_build_query是把要输入的数据拼接起来成address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation这样
//但是其是urlencode编码后的,urlencode是url编码
$url = config('map.baidu_map_url').config('map.geocoder').'?'.http_build_query($data);
//这么拼接起来后执行获取信息
$res = $this -> doCurl($url);
return $res;
}
那么此时这个函数就是通过地址名来得到经纬度了,注释中另外的data边是经纬度获取地址,具体每个参数的功能需要查看开发者文档。
然后另一个例子是调取静态图的API(被url给坑了,注意看给出的样例中每个字符,这里我多了个/导致找bug好久)
代码样例:
public function staticimage($center){
$data=[
'ak' => config('map.ak'), //1、config调用里面要有''引起来。
'center' => $center,
'height' => config('map.height'),
'weight' => config('map.weight'),
'markers' => $center,
];
$url = config('map.baidu_map_url').config('map.staticimage').'?'.http_build_query($data);
$res = $this -> doCurl($url);
return $res;
}
public function map()
{
$location='陕西省西安市长安区西安电子科技大学';
$map1=$this -> staticimage($location);
return $map1;
}
在图片的src={"url:('index/map')"} 即可输出了