VSB*_*VSB 1 android google-maps google-geocoding-api
考虑下面的谷歌地图地理编码响应的 JSON 响应。\n它由一个address_components
包含五个元素的数组组成。\n通常开发人员使用其第一项(索引为 0 的项)来查找地址元素,例如 acroute
和locality
和formatted address
。但这不是最好的选择。例如,在本例中,第二项比其他项更具描述性地址。有时,同一响应中会有不同地点的相同地址。
我怎样才能选择更好的一个(例如,android中的Google Map API在可用项目中选择一个,但它并不总是索引为0的项目,但它在备选方案中进行选择,我想知道它将如何做到这一点并选择最佳匹配) ?
\n\n此外,我想迭代不同的所有元素address_components
以提取和汇集更精细的信息,但问题是同一类型元素的信息,例如不同的信息locality
具有不同的信息address_components
,当从不同的信息元素收集的信息元素时,会导致地址不一致。address_component
项目。\n举个例子,在下面的示例中,我们有两个值\xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87
,Karaj
在不同的locality
元素中,它们是两个不同的城市标签(在同一社区)。
{\n "results" : [\n {\n "address_components" : [\n {\n "long_name" : "Unnamed Road",\n "short_name" : "Unnamed Road",\n "types" : [ "route" ]\n },\n {\n "long_name" : "Karaj",\n "short_name" : "Karaj",\n "types" : [ "locality", "political" ]\n },\n {\n "long_name" : "Shahriar County",\n "short_name" : "Shahriar County",\n "types" : [ "administrative_area_level_2", "political" ]\n },\n {\n "long_name" : "Tehran Province",\n "short_name" : "Tehran Province",\n "types" : [ "administrative_area_level_1", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "IR",\n "types" : [ "country", "political" ]\n }\n ],\n "formatted_address" : "Tehran Province, Karaj, Unnamed Road, \xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "geometry" : {\n "bounds" : {\n "northeast" : {\n "lat" : 35.7221382,\n "lng" : 51.0148178\n },\n "southwest" : {\n "lat" : 35.716435,\n "lng" : 51.0095103\n }\n },\n "location" : {\n "lat" : 35.719286,\n "lng" : 51.012165\n },\n "location_type" : "GEOMETRIC_CENTER",\n "viewport" : {\n "northeast" : {\n "lat" : 35.7221382,\n "lng" : 51.0148178\n },\n "southwest" : {\n "lat" : 35.716435,\n "lng" : 51.0095103\n }\n }\n },\n "place_id" : "ChIJmf7_zEyTjT8RkM8-nK6dTm0",\n "types" : [ "route" ]\n },\n {\n "address_components" : [\n {\n "long_name" : "\xd9\x81\xd8\xa7\xd8\xb2 \xdb\xb6 \xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87",\n "short_name" : "\xd9\x81\xd8\xa7\xd8\xb2 \xdb\xb6 \xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87",\n "types" : [ "political", "sublocality", "sublocality_level_1" ]\n },\n {\n "long_name" : "\xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87",\n "short_name" : "\xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87",\n "types" : [ "locality", "political" ]\n },\n {\n "long_name" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1",\n "short_name" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1",\n "types" : [ "administrative_area_level_2", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "types" : [ "administrative_area_level_1", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "IR",\n "types" : [ "country", "political" ]\n }\n ],\n "formatted_address" : "\xd9\x81\xd8\xa7\xd8\xb2 \xdb\xb6 \xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87\xd8\x8c \xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87\xd8\x8c \xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86\xd8\x8c \xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "geometry" : {\n "bounds" : {\n "northeast" : {\n "lat" : 35.7389537,\n "lng" : 51.0349971\n },\n "southwest" : {\n "lat" : 35.7039031,\n "lng" : 51.0044146\n }\n },\n "location" : {\n "lat" : 35.7210753,\n "lng" : 51.014934\n },\n "location_type" : "APPROXIMATE",\n "viewport" : {\n "northeast" : {\n "lat" : 35.7389537,\n "lng" : 51.0349971\n },\n "southwest" : {\n "lat" : 35.7039031,\n "lng" : 51.0044146\n }\n }\n },\n "place_id" : "ChIJiYlwJLHsjT8RruE39U9NMoQ",\n "types" : [ "political", "sublocality", "sublocality_level_1" ]\n },\n {\n "address_components" : [\n {\n "long_name" : "\xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87",\n "short_name" : "\xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87",\n "types" : [ "locality", "political" ]\n },\n {\n "long_name" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1",\n "short_name" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1",\n "types" : [ "administrative_area_level_2", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "types" : [ "administrative_area_level_1", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "IR",\n "types" : [ "country", "political" ]\n }\n ],\n "formatted_address" : "\xd8\xb4\xd9\x87\xd8\xb1 \xd8\xac\xd8\xaf\xdb\x8c\xd8\xaf \xd8\xa7\xd9\x86\xd8\xaf\xdb\x8c\xd8\xb4\xd9\x87\xd8\x8c \xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86\xd8\x8c \xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "geometry" : {\n "bounds" : {\n "northeast" : {\n "lat" : 35.7388144,\n "lng" : 51.04460479999999\n },\n "southwest" : {\n "lat" : 35.6838973,\n "lng" : 50.9894371\n }\n },\n "location" : {\n "lat" : 35.7078282,\n "lng" : 51.0227587\n },\n "location_type" : "APPROXIMATE",\n "viewport" : {\n "northeast" : {\n "lat" : 35.7388144,\n "lng" : 51.04460479999999\n },\n "southwest" : {\n "lat" : 35.6838973,\n "lng" : 50.9894371\n }\n }\n },\n "place_id" : "ChIJIQwwRcnsjT8RnTJfLJ3QUAg",\n "types" : [ "locality", "political" ]\n },\n {\n "address_components" : [\n {\n "long_name" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1",\n "short_name" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1",\n "types" : [ "administrative_area_level_2", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "types" : [ "administrative_area_level_1", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "IR",\n "types" : [ "country", "political" ]\n }\n ],\n "formatted_address" : "\xd8\xb4\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xb4\xd9\x87\xd8\xb1\xdb\x8c\xd8\xa7\xd8\xb1\xd8\x8c \xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86\xd8\x8c \xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "geometry" : {\n "bounds" : {\n "northeast" : {\n "lat" : 35.7389885,\n "lng" : 51.23044970000001\n },\n "southwest" : {\n "lat" : 35.5333437,\n "lng" : 50.8859253\n }\n },\n "location" : {\n "lat" : 35.6096201,\n "lng" : 51.03319330000001\n },\n "location_type" : "APPROXIMATE",\n "viewport" : {\n "northeast" : {\n "lat" : 35.7389885,\n "lng" : 51.23044970000001\n },\n "southwest" : {\n "lat" : 35.5333437,\n "lng" : 50.8859253\n }\n }\n },\n "place_id" : "ChIJQ6KQjY7xjT8RoYD9gJh8_CY",\n "types" : [ "administrative_area_level_2", "political" ]\n },\n {\n "address_components" : [\n {\n "long_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86",\n "types" : [ "administrative_area_level_1", "political" ]\n },\n {\n "long_name" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "IR",\n "types" : [ "country", "political" ]\n }\n ],\n "formatted_address" : "\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xaa\xd9\x87\xd8\xb1\xd8\xa7\xd9\x86\xd8\x8c \xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "geometry" : {\n "bounds" : {\n "northeast" : {\n "lat" : 36.07789210000001,\n "lng" : 53.216228\n },\n "southwest" : {\n "lat" : 34.909543,\n "lng" : 50.3186971\n }\n },\n "location" : {\n "lat" : 35.7248416,\n "lng" : 51.381653\n },\n "location_type" : "APPROXIMATE",\n "viewport" : {\n "northeast" : {\n "lat" : 36.07789210000001,\n "lng" : 53.216228\n },\n "southwest" : {\n "lat" : 34.909543,\n "lng" : 50.3186971\n }\n }\n },\n "place_id" : "ChIJf5Us9YQBjj8R0OohvHQms1U",\n "types" : [ "administrative_area_level_1", "political" ]\n },\n {\n "address_components" : [\n {\n "long_name" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "short_name" : "IR",\n "types" : [ "country", "political" ]\n }\n ],\n "formatted_address" : "\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86",\n "geometry" : {\n "bounds" : {\n "northeast" : {\n "lat" : 39.782056,\n "lng" : 63.3333366\n },\n "southwest" : {\n "lat" : 24.8066999,\n "lng" : 44.0326949\n }\n },\n "location" : {\n "lat" : 32.427908,\n "lng" : 53.688046\n },\n "location_type" : "APPROXIMATE",\n "viewport" : {\n "northeast" : {\n "lat" : 39.782056,\n "lng" : 63.3333366\n },\n "southwest" : {\n "lat" : 24.8066999,\n "lng" : 44.0326949\n }\n }\n },\n "place_id" : "ChIJ8R1rwS7s9z4RzvpRntOVsEA",\n "types" : [ "country", "political" ]\n }\n ],\n "status" : "OK"\n}\n
Run Code Online (Sandbox Code Playgroud)\n
看起来像是两个不同的问题合而为一,所以范围有点宽。我会尽力解答你的疑虑。
首先,您使用反向地理编码请求将坐标 35.7163931455472,51.01335000246763 解析为街道地址。请注意,反向地理编码旨在将给定坐标解析为最近的可用地址。此外,除了街道地址之外,该服务还将建议不同类型的结果:路线、次区域、地点、行政区域、国家/地区。有时,如果给定点附近没有街道地址(距该点大约 50 米内),则响应中不会出现街道地址类型的结果。在您的示例中,街道地址类型的结果不可用,因此响应包含从路线级别开始的不同类型的结果。看一下我的屏幕截图,它代表了您回复中的前三项。
正如您所看到的,第一项具有类型路由,第二项具有类型局部性,第三项具有类型局部性。
很难说选择地址的“最佳”标准是什么。您可以看到该路线项目是最近的一条,但不幸的是这条路未命名,因此您将其限定为不够好。从技术上讲,这是最接近的项目,因此服务认为这是最佳匹配。我建议检查结果的类型,如果项目 0 有类型 street_address 应该足够好,如果项目 0 有类型路线,检查道路是否有名称,如果这是未命名的道路检查项目1 可能更详细。
无论如何,无名道路是数据问题,您可以按照帮助中心向 Google 数据团队报告:
https://support.google.com/maps/answer/3094088
其次,如果我理解正确的话,您会注意到第 0 项和第 1 项具有不同的位置地址组件值,尽管它们(屏幕截图中的标记 1 和标记 2)似乎都属于 Andisheh 新城。路线(地点 ID ChIJmf7_zEyTjT8RkM8-nK6dTm0)被报告为 Karaj 地区的一部分。我可以在谷歌地图上看到卡拉季的边界,如下图所示
我可以看到 Andisheh 新城的边界,如下图所示
请注意,您回复的路线显然位于 Andisheh 新城多边形内,因此目前看来我们也面临着数据问题。地点 ID ChIJmf7_zEyTjT8RkM8-nK6dTm0 应该具有 Andisheh 新城的位置组件,而不是 Karaj。
请随时使用此页面向 Google 发送反馈:
如果您想使用反向地理编码,请使用 Geocoder 工具:
https://google-developers.appspot.com/maps/documentation/utils/geocoder/#q%3D35.716393%252C51.01335
希望我的回答能够解答您的疑惑!
归档时间: |
|
查看次数: |
2056 次 |
最近记录: |