不败君

前端萌新&初级后端攻城狮

PHP使用地址获取附近小区信息

PHP使用地址获取附近小区信息

2020-02-07 19:08:20

围观(3333)

最近的疫情对各方面都有影响,博主已经在家远程工作好几天了.

昨晚看到一个小程序可以定位然后获取距离最近的小区疫情.

1.jpg

今天刚好项目需要写一个根据地址获取附近信息的接口.所以顺便也有了这篇文章.

本文使用的是腾讯地图提供的服务,也可以使用其他地图服务,比如百度.


需要用到两个接口:

一、地址解析(地址转坐标)

作用:由地址描述到所述位置坐标的转换,文档地址: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

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语