2020-02-07 19:08:20
围观(4612)
最近的疫情对各方面都有影响,博主已经在家远程工作好几天了.
昨晚看到一个小程序可以定位然后获取距离最近的小区疫情.
今天刚好项目需要写一个根据地址获取附近信息的接口.所以顺便也有了这篇文章.
本文使用的是腾讯地图提供的服务,也可以使用其他地图服务,比如百度.
需要用到两个接口:
一、地址解析(地址转坐标)
作用:由地址描述到所述位置坐标的转换,文档地址:https://lbs.qq.com/webservice_v1/guide-geocoder.html
二、地点搜索
作用:圆形区域的地点搜索,一般用于指定位置的周边(附近)地点搜索,文档地址:https://lbs.qq.com/webservice_v1/guide-search.html#boundary_detail
如果是开发 H5 网页或者 微信小程序 可以直接拿到经纬度坐标的,就直接用第二个接口就好了.
第一个接口的使用方法(Laravel):
public function get_coord_by_address(Request $request) { $address = $request->address; // 这里需要自行判断下前端提交的地址是否传过来 // 这里需要获取一下腾讯地图的 KEY, 这个 KEY 需要注册腾讯地图开发者后获取 $key = '腾讯地图KEY'; // 这里替换为你的 KEY // 拼接腾讯地图给的接口 URL $url = "https://apis.map.qq.com/ws/geocoder/v1/?address={$address}&key={$key}"; $coord_res = json_decode(file_get_contents($url), true); dd($coord_res); }
上面这段代码使用的是 file_get_contents 函数进行 GET 请求,可以使用更加强大的:GuzzleHttp
执行上面的方法可以获取到某个地址的经纬度坐标,接下来就可以用经纬度坐标获取附近的信息.
第二个接口的使用方法(Laravel):
public function get_nearby_info(Request $request) { $lat = $request->lat; $lng = $request->lng; // 可以自行判断下经纬度是否传过来 // 这个是关键词,可以是其他 比如 公园 因为本文主题是获取附近小区 所以关键词是小区 // 关键词照样可以让前端传过来 或者像这样写死 $keyword = urlencode('小区'); // 经纬度坐标也可以 编码一下 $coords = urlencode($lat . ',' . $lng); // 页码 $page = $request->page ?? 1; // 这里需要获取一下腾讯地图的 KEY, 这个 KEY 需要注册腾讯地图开发者后获取 $key = '腾讯地图KEY'; // 这里替换为你的 KEY $url = "https://apis.map.qq.com/ws/place/v1/search?keyword={$keyword}&boundary=nearby($coords,2000)&page_index={$page}&key={$key}"; $nearby_info_res = json_decode(file_get_contents($url), true); dd($nearby_info_res); }
上面两个方法是分开分别获取经纬度和附近小区信息,可以将两个方法合并起来,分开写的好处就是可以复用减少代码冗余.
比如后面如果还有其他接口要获取地址的经纬度坐标,就可以直接调用了.
如果想要合并,可以这样:
public function get_nearby_info_by_address(Request $request) { $address = $request->address; // 这里需要自行判断下前端提交的地址是否传过来 // 这里需要获取一下腾讯地图的 KEY, 这个 KEY 需要注册腾讯地图开发者后获取 $key = '腾讯地图KEY'; // 这里替换为你的 KEY // 拼接腾讯地图给的接口 URL $url = "https://apis.map.qq.com/ws/geocoder/v1/?address={$address}&key={$key}"; $coord_res = json_decode(file_get_contents($url), true); // 这个是关键词,可以是其他 比如 公园 因为本文主题是获取附近小区 所以关键词是小区 // 关键词照样可以让前端传过来 或者像这样写死 $keyword = urlencode('小区'); // 经纬度坐标也可以 编码一下 $coords = urlencode($coord_res['result']['location']['lat'] . ',' . $coord_res['result']['location']['lng']); // 页码 $page = $request->page ?? 1; $url = "https://apis.map.qq.com/ws/place/v1/search?keyword={$keyword}&boundary=nearby($coords,2000)&page_index={$page}&key={$key}"; $nearby_info_res = json_decode(file_get_contents($url), true); dd($nearby_info_res); }
这样就可以一个方法获取到附近的小区信息.
BTW
最近疫情还是威胁着我们的生活,大家都在等着"拐点",博主已经在家呆了十四天了.
大家没什么事,还是不要出门为好,博主坐标广州,距离最近已经发生疫情的小区只有两公里.
本文地址 : bubaijun.com/page.php?id=163
版权声明 : 未经允许禁止转载!
上一篇文章: ThinkPHP框架使用支付宝SDK并发起支付
下一篇文章: Laravel开发微信小程序支付