php调用第三方API(百度地图)

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')"} 即可输出了









你可能感兴趣的:(PHP)