《TP5.0学习笔记---百度地图封装》

来源:互联网 发布:手机淘宝1元夺宝在哪 编辑:程序博客网 时间:2024/05/29 04:24

我们常常需要根据地址来获取经纬度,根据经纬度来调取百度地图等。
一、 根据地址获取经纬度类的封装
1, 获取第三方接口
2, 编写map类
3, 测试
1, 获取第三方接口
(1)进入http://lbsyun.baidu.com -> api控制台 ->设置AK
(2)找到geocoding api
进入之后需要注册用户,首先注册,然后找到api控制台
这里写图片描述
进api控制台之后,点击“创建应用” 会看家下边这个页面
这里写图片描述
然后填写“应用名称” 启用的服务,全部启用 ip白名单填写你本机的ip,然后点击“提交”就OK了,它会跳转到你的应用列表
下边就是找根据地址获取经纬度的接口,在“开发”=>”Web服务API”
这里写图片描述
点击进去之后,在左边有一个“geocoding API,点击一下
这里写图片描述
2, 封装map类库”
那么下边我们就开始封装我们的根据地址获取经纬度的类库
建议将这个类库文件放在你的TP5框架的extend目录下,因为它是一个扩展目录。我这里就叫Map.php

Map.php代码

/***百度地图相关业务封装*/class Map{ /* * 根据地址获取经纬度 */    public static function getLngLat($address){        //去刚才那个geocoding API页面将第三方接口的链接复制过来//http://api.map.baidu.com/geocoder/v2/?//callback=renderOption&output=json&address=北京市海淀区上地10街10号&city=北京市&ak=您的ak        //下边我们就开始拼装接口后边的那些参数        /*            这里可以做一个优化,我们可以把这些配置,直接放到配置文件当中去,而TP5给我们提供的方式是,在application            下边有一个config.php,可以在这里写我们的相关配置,但是在这里写会比较繁琐,它不利于我们去做扩展以及维护            ,所以就像将其抽离出来,比如说,跟地图相关的配置,我就放在地图相关的配置文件当中去。TP5中又为我们提供            了一个小技巧,就是可以在application目录下创建一个extra目录,然后在里边创建一个map.php(存地图相关配置)            那么下面我们获取AK的方式就变成config('map.ak')(config是获取配置的函数,map是文件名,ak是数组索引名)        */if(!$address){            return '';//如果没有传递参数,返回为空        }        $data = [            'address' => $address,            'ak'      => config('map.ak'),//这就是刚刚申请的AK            'output'  => 'json',        ];        //上边我们是将参数先都转换成了数组的形式,下边就是将其转换成上边链接的那种形式        $s = http_build_query($data);//这就可以将其转换成:callback=renderOption&output=json&address=北京市海淀区上地10街10号&city=北京市&ak=您的ak这种形式        //然后就是拼装完整的url        $url = config('map.baidu_map_url').config('map.geocoder').'?'.$s;        //那么现在我们就是获取这个url中的内容(php中有以下几种形式获取)        //1,file_get_contents($url);        //2,curl方式来获取(我们php中的curl方式需要封装一个方法,那么我将这个方法放在common.php中)        $result = doCurl($url);        //print_r($result);exit();//这个是测试一下(我们需要在controller/index.php中来调用它)        return $result;//注意:如果你要测试一下,将“return  $result”这行注释掉,将它的上一行注释去掉即可    }}

map.php代码

<?php/*地图相关配置文件*/return [    'ak'             => 'LAynLOG9Aozh5iiNzeFbhjkgaxudGmri',    'baidu_map_url'  => 'http://api.map.baidu.com/',    'geocoder'       => 'geocoder/v2/',];

common.php代码

function doCurl($url, $type=0, $data=[]){    //初始化curl    $ch = curl_init(); //初始化    //设置选项    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//这个代表如果成功,只返回结果,不把内容输出来    curl_setopt($ch, CURLOPT_HEADER, 0);    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;}

controller/index.php代码

<?phpnamespace app\admin\controller;use think\Controller;class Index extends Controller{    public function map(){        \Map::getLngLat('北京昌平沙河地铁');exit;//用来测试的,测试结果是一串Json数据,        //返回的Json数据中的每个参数的含义都可以在geocoding API里边查找    }}

3,测试结果截图如下:
这里写图片描述
二、 根据经纬度/地址调取百度地图
1, 获取第三方接口
2, 编写staticimage方法
3, 测试

首先我们要还是进入WebAPI页面,然后点开“静态图API”
这里写图片描述
小伙伴们可以将这个页面仔细阅读一下,先有一定的了解,调用起来会比较清晰熟练
1, 获取第三方接口
在该页面中找到“服务地址”并将其复制
2, 编写staticimage方法
该方法是写在Map.php中的(也就是说,将下边这个staticimage函数,放在Map.php中)

在extend/Map.php中添加西边这个函数

/*    *根据经纬度/地址调取百度地图    */    //http://api.map.baidu.com/staticimage/v2    public static function staticimage($center){        if(!$center){            return '';//没有传递参数的时候,返回空        }        $data = [            'ak'      => config('map.ak'),            'width'   => config('map.width'),            'height'  => config('map.height'),            'center'  => $center,            'markers' => $center,//这个参数的含义在  静态图API的页面中找        ];        $s = http_build_query($data);        $url = config('map.baidu_map_url').config('map.staticimage').'?'.$s;        $result = doCurl($url);        return $result;    /*    注意:在静态图API那个页面中有如何在模板中展示地图的代码    <img style="margin:20px" width="280" height="140" src="" />只需要将这个src的地址修改一下    那么现在我们在controller/index.php中测试一下    */    }

在extra/map.php中再添加下边三个参数

'width'          => 400,'height'         => 300,'staticimage' => 'staticimage/v2',

在controller/index.php中添加一个test()函数

public function test(){        return \Map::staticimage('北京昌平沙河地铁');        //那么现在我们在任意一个模板中调用一下}

然后就是在你需要用到百度地图的模板中加入下边这行代码

<img style="margin:20px" width="280" height="140" src="填写你的url地址" />

我这里是<img style="margin:20px" width="280" height="140" src="{:url('index/test')}" />
3, 测试结果
这里写图片描述
到这里我们TP5.0封装百度地图就完成了
**大家如果想扩展功能,都可以在“静态图API”页面中调用不同的参数来实现更多的功能
希望这篇博客对大家有所帮助!!!**