其他分享
首页 > 其他分享> > Android版Places API:从Place.getAddress()获取地址行

Android版Places API:从Place.getAddress()获取地址行

作者:互联网

在我的Android应用中,我使用Geocoder.getFromLocation()找到位置的地址.我可以使用Address.getAddressLine()获取一个Address对象并获取地址的地址线.

我只对第一个地址行感兴趣,可以通过Address.getAddressLine(0)轻松获得它.

此外,应用程序允许用户使用PlaceAutocomplete选择位置.当用户选择位置时,我会收到一个Place对象,并且可以通过Place.getAddress()获取地址.

问题是,Place.getAddress()返回的是字符串而不是Address对象.该字符串包含完整的地址,因此我无法像使用Address对象那样轻易获得第一行地址.

如何从Place.getAddress()返回的字符串中找到第一个地址行?

解决方法:

简短的答案是您无法从该API获取结构化数据.出于某种原因,谷歌已决定这不是人们在Android上想要的东西.

我的一位同事已将此问题记录在Google上,以请求向iOS和JavaScript用户提供相同级别的信息:

> Issue 10019: Expose address components in Place object

更长的答案是您的选择是:

>您找到了解析该字符串的巧妙方法.不幸的是,不同区域之间实际的街道/郊区/城镇/省的结构不一致(例如,南非的开普敦与南非的约翰内斯堡的句子结构不同).因此,您的解析规则必须非常聪明.
>您使用其他Google API. JavaScript API为相关调用提供结构化数据. This related question shows more details on that API.很遗憾,Google建议您不要使用此技术.

我相信Google只是为了给我们提供这句话是为了挑选一个地址,而不是让我们获取有关该地址的结构化信息.为了获得更好的信息,您需要通过查询地点ID来获取经度/经度值.

然后,您可以根据这些经度/纬度值反向地理定位以获取正确的地址.

不幸的是,使用这种技术,Google的API再次使我们失败.

>通常,您可以获取地址A,将其解析为给定的经度/纬度,然后将其解析为另一个地址B,该地址可能与A接近,但实际上并非如此. API调用不像人们期望的那样可交换

我在打这些电话方面有很多经验,希望我能提供另一个答案.如果您希望使用Google的位置API,那么您将无法获得所需的信息.

标签:android,google-places-api
来源: https://codeday.me/bug/20191010/1887006.html