首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从谷歌地图API中的"address_components“构建地址字段?

从谷歌地图API中的"address_components“构建地址字段?
EN

Stack Overflow用户
提问于 2017-03-20 08:09:05
回答 4查看 2.1K关注 0票数 4

当我的系统正在处理的地址只有一个匹配时,Google API地理编码服务对我来说工作得很好。当有两个或更多匹配时,我想向用户显示找到的地址(可能是"formatted_address"),让他们选择他们想要的地址。

然而,Google返回了许多字段“类型”。所以我想知道如何通过连接适当的"address_components“,从不同类型的数据中构建一个地址(字段)。我感兴趣的是将地址划分为单独的字段(街道地址、城镇/城市、国家和邮政编码),以便将其存储在数据库中。有没有一个页面来解释使用哪种类型以及按什么顺序?

例如,我正在考虑使用"street_number","route“和"locality”作为街道地址部分,这对于一个典型的地址是有效的,但我知道它并不总是有效的。因此,我正在寻找一个健壮的,但不一定是一个详尽的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2019-02-26 09:32:35

来自api文档:在formatted_address

不会以编程方式解析格式化的地址。相反,您应该使用单独的地址组件,除了格式化地址字段之外,API响应还包括这些组件。

链接到引用的文档。1:https://developers.google.com/places/web-service/details

请从getDetails响应的address\_components部分解析您的地址元素。在相同的位置找到相应的文档。

票数 1
EN

Stack Overflow用户

发布于 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

单独的解决方案将如下所示:

代码语言:javascript
运行
复制
    // 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;
    }
票数 1
EN

Stack Overflow用户

发布于 2019-05-21 02:19:05

下面是php函数内部的代码片段,该函数使用for/next循环来提取地址组件。它可以为您感兴趣的内容进行扩展。

代码语言:javascript
运行
复制
$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'];   
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42893953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档