从给定的城市谷歌地方 API 检索所有地区和子地区

Posted

技术标签:

【中文标题】从给定的城市谷歌地方 API 检索所有地区和子地区【英文标题】:Retrieve all localities and sub localities from given city google places API 【发布时间】:2015-11-26 14:26:45 【问题描述】:

我正在寻找一种网络服务或谷歌地方 API 类型的插件来检索给定城市名称的地区、子地区和区域。

一直在尝试使用 google 和 geonames,但无法通过它。

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=hyderabad&types=(locality)&language=en_US&key=My_KEY


https://maps.googleapis.com/maps/api/geocode/json?/?address=hyderabad&key=My_KEY

这两种方法都试过了。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

一个城市被定义为

地方表示一个合并的城市或城镇政治实体。

和一个子区域为:

sublocality 表示一个地方以下的一级民事实体。对于某些位置,可能会收到其他类型之一:sublocality_level_1 到 sublocality_level_5。

在address component types in geocoding。还应该参考 supported types to use 的列表以及类型请求参数和谷歌API 返回的那些。

这个想法是从您所在城市的指定 sublocality_level_1 开始,检索 sublocality_level_2s,将它们存储到 DB。重复,但这次只使用 sublocality_level_2 来获得 sublocality_level_3。关键是将几何和地址名称(长名称、短名称等)存储在数据库中,以便您可以再次运行它们以获得足够的信息(如果不是全部信息),从而模拟缩放行为。最后使用自动完成 API 来检索未进入您的商店但您知道应该已检索到的(子)位置。

替换geocoding requestjson中的level_1 sublocality、locality和level_1管理区域:

https://maps.googleapis.com/maps/api/geocode/xml?address=[sublocality.1],+[locality],+[admin_area_level.1]&key=API_KEY

验证 sublocality.1 是否位于正确的位置。

<address_component>
  <long_name>sublocality.1</long_name>
  <short_name>sublocality.1</short_name>
  <type>sublocality_level_1</type>
  <type>sublocality</type>
  <type>political</type>
</address_component>
<..></..>
<..></..>
<geometry>
  <location>
    <lat>nn.nnnnnnnnn</lat>
    <lng>nn.nnnnnnnnn</lng>
  </location>

使用 Radar search 和查询参数 location=&radius=10000&types=(regions)

参考supported types

(regions) 类型集合指示 Places 服务返回与以下类型匹配的任何结果:

接下来是提取所有place_id,使用将place_id作为查询参数的place details API并需要api_key。

place details 响应应该包含所选 sublocality_level_1 的所有 sublocality_level_2。将它们存储到数据库中,按名称省略重复项。最后,您有一个位置(城市),选择了 sublocality_level_1 和 sublocality_level_2 位置实体的数量。

这应该适用于 sublocality_level_2。由于它们占据相当大的面积,我相信理想情况下可能不会错过它们。如果您错过了,如果您知道起始字符,请使用 Autocomplete APIs,如果您知道丢失的 level_2 的确切几何形状,请使用 Reverse Geocoding。

在已知名称的给定 level_2 下,对 sublocality_level_3 重复上述步骤。

对于每个geometry,使用Reverse Geocoding 获取level_3,如果存储中不存在该级别,则针对Place details 运行,再次检索sublocality_level_2 并存储。这是需要的,因为某些 level_3 直接与 level_1s 相关联。此步骤类似于在地图上仔细缩放以查找位置。

使用 JSON

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=&types=(regions)&location=latitude,longitude&radius=1000&key=YOUR_API_KEY

注意区域周围的 ()。这给了你地方和其他人。 Refer to https://developers.google.com/places/web-service/autocomplete

可以重复整个过程,其中 sub_locality_type_1 与先前使用的相邻地位于同一位置。为此使用nearby search (place search)。位置的查询参数应该是上述level_1(子)位置的西南和东北边界的几何图形。注意使用半径=1。使用的 JSON URI 是:

https://maps.googleapis.com/maps/api/place/nearbysearch/output?parameters

【讨论】:

以上是关于从给定的城市谷歌地方 API 检索所有地区和子地区的主要内容,如果未能解决你的问题,请参考以下文章

检索一个国家的城市列表

是否有任何 API 用于获取所有国家并通过国家/地区获取所有州/地区并再次通过州/地区获取其中的所有城市

Google Maps API - 缩小时显示所有当地道路

给定城市时查询国家/地区的 maxmind mmdb

地理编码地址 - 获取某个地址的地区(Google API)

用于加载国家、州/省/地区和城市选择菜单数据的 API 或数据库 [关闭]