当我的系统正在处理的地址只有一个匹配时,Google API地理编码服务对我来说工作得很好。当有两个或更多匹配时,我想向用户显示找到的地址(可能是"formatted_address"),让他们选择他们想要的地址。
然而,Google返回了许多字段“类型”。所以我想知道如何通过连接适当的"address_components“,从不同类型的数据中构建一个地址(字段)。我感兴趣的是将地址划分为单独的字段(街道地址、城镇/城市、国家和邮政编码),以便将其存储在数据库中。有没有一个页面来解释使用哪种类型以及按什么顺序?
例如,我正在考虑使用"street_number","route“和"locality”作为街道地址部分,这对于一个典型的地址是有效的,但我知道它并不总是有效的。因此,我正在寻找一个健壮的,但不一定是一个详尽的解决方案。
发布于 2019-02-26 09:32:35
来自api文档:在formatted_address
下
不会以编程方式解析格式化的地址。相反,您应该使用单独的地址组件,除了格式化地址字段之外,API响应还包括这些组件。
链接到引用的文档。1:https://developers.google.com/places/web-service/details
请从getDetails响应的address\_components
部分解析您的地址元素。在相同的位置找到相应的文档。
发布于 2020-08-11 20:25:48
我遇到过Google Geocoding Response对象,没有简单的方法来处理它。但是关于PHP解决方案,我已经创建了一个自定义控制器,它适用于Laravel,但也可以适用于任何其他PHP应用程序,而不需要hussle。
你可以在这里找到完整的要点:https://gist.github.com/Gkiokan/510a04aadaeed911958cb17b6e62a38f
现在是关于如何从Google Geocoding响应对象中获取数据的答案。您需要遍历address_components
数组,并将needed值保存到新的对象或数组中。您可以在第43行@ Method getAddress
上找到相应的数据过滤方法。here
单独的解决方案将如下所示:
// some php file
public function getAddress($response=[]){
// get the address_components Array here
$ac = $response['results'][0]['address_components'];
// predefine the final $address Array
$address = [
'address' => '',
'city' => '',
'postal_code' => '',
'country' => '',
'formatted' => $response['results'][0]['formatted_address'],
];
// Loop though the address_components and set matching values
foreach($ac as $item):
$name = $item['long_name'];
$type = $item['types'][0];
switch ($type):
case 'route':
$address['address'] = $name;
break;
case 'locality':
$address['city'] = $name;
break;
case 'postal_code':
$address['postal_code'] = $name;
break;
case 'country':
$address['country'] = $name;
break;
endswitch;
endforeach;
return $address;
}
发布于 2019-05-21 02:19:05
下面是php函数内部的代码片段,该函数使用for/next循环来提取地址组件。它可以为您感兴趣的内容进行扩展。
$parsed_json = json_decode($json_string, true);
//
foreach($parsed_json['results'] [0] ['address_components'] as $a){
if($a ['types'] [0] == 'postal_code') $zipcode = $a ['long_name'];
if($a ['types'] [0] == 'locality') $city = $a ['long_name'];
if($a ['types'] [0] == 'administrative_area_level_1') $state = $a ['short_name'];
}
https://stackoverflow.com/questions/42893953
复制相似问题