谷歌地理编码 API 没有返回社区作为响应

Posted

技术标签:

【中文标题】谷歌地理编码 API 没有返回社区作为响应【英文标题】:Google geocode api not returning neighborhood in response 【发布时间】:2018-07-12 23:47:43 【问题描述】:

我正在使用 Google Geocode API 从纬度和经度获取邻域。

以下是请求网址 -

https://maps.googleapis.com/maps/api/geocode/json?latlng=-15.535573,-47.336828&sensor=true

下面是回复-


    "results": [
        
            "address_components": [
                
                    "long_name": "1224-1282",
                    "short_name": "1224-1282",
                    "types": [
                        "street_number"
                    ]
                ,
                
                    "long_name": "Rua Visconde de Porto Seguro",
                    "short_name": "R. Visc. de Porto Seguro",
                    "types": [
                        "route"
                    ]
                ,
                
                    "long_name": "Centro",
                    "short_name": "Centro",
                    "types": [
                        "political",
                        "sublocality",
                        "sublocality_level_1"
                    ]
                ,
                
                    "long_name": "Formosa, Goiás",
                    "short_name": "Formosa, Goiás",
                    "types": [
                        "locality",
                        "political"
                    ]
                ,
                
                    "long_name": "Formosa",
                    "short_name": "Formosa",
                    "types": [
                        "administrative_area_level_2",
                        "political"
                    ]
                ,
                
                    "long_name": "Goiás",
                    "short_name": "GO",
                    "types": [
                        "administrative_area_level_1",
                        "political"
                    ]
                ,
                
                    "long_name": "Brazil",
                    "short_name": "BR",
                    "types": [
                        "country",
                        "political"
                    ]
                ,
                
                    "long_name": "73801-670",
                    "short_name": "73801-670",
                    "types": [
                        "postal_code"
                    ]
                
            ]

我的问题:我需要我在 API 请求中传递的经纬度的邻居名称。

我在这里检查了地理编码谷歌 API 文档,他们正在显示社区作为响应,请检查下面的链接和响应。

https://developers.google.com/maps/documentation/geocoding/start

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true


   "results" : [
      
         "address_components" : [
            
               "long_name" : "277",
               "short_name" : "277",
               "types" : [ "street_number" ]
            ,
            
               "long_name" : "Bedford Avenue",
               "short_name" : "Bedford Ave",
               "types" : [ "route" ]
            ,
            
               "long_name" : "Williamsburg",
               "short_name" : "Williamsburg",
               "types" : [ "neighborhood", "political" ]
            ,
            
               "long_name" : "***lyn",
               "short_name" : "***lyn",
               "types" : [ "sublocality", "political" ]
            ,
            
               "long_name" : "Kings",
               "short_name" : "Kings",
               "types" : [ "administrative_area_level_2", "political" ]
            ,
            
               "long_name" : "New York",
               "short_name" : "NY",
               "types" : [ "administrative_area_level_1", "political" ]
            ,
            
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            ,
            
               "long_name" : "11211",
               "short_name" : "11211",
               "types" : [ "postal_code" ]
            
         ],
         "formatted_address" : "277 Bedford Avenue, ***lyn, NY 11211, USA",
         "geometry" : 
            "location" : 
               "lat" : 40.714232,
               "lng" : -73.9612889
            ,
            "location_type" : "ROOFTOP",
            "viewport" : 
               "northeast" : 
                  "lat" : 40.7155809802915,
                  "lng" : -73.9599399197085
               ,
               "southwest" : 
                  "lat" : 40.7128830197085,
                  "lng" : -73.96263788029151
               
            
         ,
         "place_id" : "ChIJd8BlQ2BZwokRAFUEcm_qrcA",
         "types" : [ "street_address" ]
      ,

   ... Additional results truncated in this example[] ...

   ],
   "status" : "OK"

如果有人做过这件事,请分享建议。

提前谢谢你。

【问题讨论】:

所有这些组件类型都严格基于每个国家系统,您是否尝试过比利时的其他地址?你能找到任何类型的“邻居”吗?你能告诉我你的目标社区的名称吗 我需要巴西地址的邻域名称(纬度和经度),我已经检查了美国地址(纬度和经度),因为 API 在结果中给出了邻域名称,但不适用于巴西。那么是否有文档和文档可以在哪里找到这个 API 的这个国家/地区明智的响应? omt,你能告诉我你的目标社区的名称吗?给我一个真实的地址或附近的坐标 我不是针对任何一个社区。我的要求非常简单,我需要来自用户当前位置(lat long)的社区名称,这意味着我想在请求中传递 lat long,作为响应,我需要该地理位置的社区名称。这里是邻域名称“Centro”的示例,我在请求中通过了它的纬度。 maps.googleapis.com/maps/api/geocode/… 这是针对巴西社区的。 终于!好的现在... centro 是一个社区,它位于 address_components 类型下: sublocality 和 sublocality_level_1 ,现在我希望您在您知道的社区(在巴西)中执行几个请求,并检查它们是否都具有这两种类型中的一种(sublocality 和 sublocality_level_1)在其组件地址(显示邻域名称的位置)下。我会这样做,但不太了解巴西 【参考方案1】:

所以要回答您的问题,如果您想在响应中获取邻居,您可以遍历 component_address 并使用 If 语句检查类型。

var ac = results.address_components;
 // FOR loop to iterate 
if( types == "sublocality_level_1")  // for brasil (and remember that types is also and array)
var neighborhood = ac[i].long_name;

希望你能理解

【讨论】:

是的,我完全理解您的回答并感谢您,我已经检查了巴西的多个地址,并且邻居正在 sublocality_level_1 作为回应,但我的问题是,谷歌 API 文档中是否有书面声明,我们可以将 sublocality_level_1 视为巴西的社区吗? 恐怕他们不会,而且在不久的将来也不会,因为 API 会不断变化,试着想象一下保持更新所有国家/地区的文档。我的建议是尝试在 component_address 中找到一个模式,或者如果您觉得幸运,可以请求他们将此信息添加到 issuetracker issuetracker.google.com 中的文档中

以上是关于谷歌地理编码 API 没有返回社区作为响应的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地理编码 API 不如使用地址的谷歌地图准确

谷歌地理编码 API 为网络标准化地址返回 ZERO_RESULTS

反向地理编码不返回邮政编码

谷歌地图地理编码器 API 的承诺

这里API:对自由文本查询进行地理编码可返回正确的结果,但没有合格的查询

如何在信息窗口中显示我的地理编码地址?谷歌地图 API