从给定的城市谷歌地方 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 用于获取所有国家并通过国家/地区获取所有州/地区并再次通过州/地区获取其中的所有城市