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

地址:https://blog.csdn.net/self_realian/article/details/77982798

我们常常需要根据地址来获取经纬度,根据经纬度来调取百度地图等。 
一、 根据地址获取经纬度类的封装 
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代码

<?php
namespace 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',
  • 1
  • 2
  • 3

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_38615720/article/details/81462169