需求:
从手工填写的地址中,解析出省市区信息
方法
使用百度地图api
正/逆地理编码
PS: 虽然百度地图提供地点检索,但是是需要传入行政区信息的
根据 正地理编码服务 接口 将地址转换为经纬度,然后根据经纬度调用 逆地理编码服务 接口,得到结构化的行政区信息
代码
define("BAIDU_MAP_AK", "你的百度地图AK");
function parse_address($string){
try{
$url = "http://api.map.baidu.com/geocoder/v2/";
$params = [
'address' => $string,
'output' => "json",
'ak' => BAIDU_MAP_AK,
];
$url .= "?" . http_build_query($params);
$json = json_decode(file_get_contents($url), true);
if($loc = @$json['result']['location']){
if(!is_null($loc)){
$url = "http://api.map.baidu.com/geocoder/v2/";
$params = [
'location' => "{$loc['lat']},{$loc['lng']}",
'output' => "json",
'ak' => BAIDU_MAP_AK,
];
$url .= "?" . http_build_query($params);
$json = json_decode(file_get_contents($url), true);
return @$json['result']['addressComponent'];
}
}
return null;
}catch(\Exception $e){
return null;
}
}
//返回结果
array (
'country' => '中国',
'country_code' => 0,
'country_code_iso' => 'CHN',
'country_code_iso2' => 'CN',
'province' => '福建省',
'city' => '厦门市',
'city_level' => 2,
'district' => 'XX区',
'town' => '',
'adcode' => '350206',
'street' => 'XX路',
'street_number' => '26',
'direction' => '附近',
'distance' => '33',
);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。