适用于Android的Places API:从Place.getAddress()获取地址行

Lah*_*ima 11 android google-places-api

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

我只对第一个地址行感兴趣,我可以轻松搞定Address.getAddressLine(0).

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

问题是,Place.getAddress()返回一个字符串而不是一个Address对象.这个字符串包含完整的地址,所以我不能轻易获得第一个地址行,就像我使用Addressobject一样.

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

Ric*_*ier 10

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

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


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

  1. 你想出了一种解析该字符串的聪明方法.不幸的是,实际的街道/郊区/城镇/省级结构在不同地区并不一致(例如,南非的开普敦与南非的约翰内斯堡有不同的句子结构).所以你的解析规则需要非常聪明.
  2. 您使用其他Google API.JavaScript API为相关调用提供结构化数据.此相关问题显示有关该API的更多详细信息.不幸的是,Google建议不要使用此技术.

我相信Google只是打算为了选择地址而给我们这句话,而不是让我们获得有关地址的结构化信息.为了获得更好的信息,您需要通过查询地点ID来获取lat/lng值.

从那些lat/lng值,您可以反向地理定位以获取正确的地址.

不幸的是,在这种技术中,谷歌的API再一次让我们失望.

  • 通常你可以获取地址A,将其解析为给定的纬度/经度,并将其解析为另一个地址B,该地址可能接近A,但不是.API调用不像人们期望的那样是可交换的

我对这些电话有相当多的经验,我希望我能提供另一个答案.如果您希望坚持使用Google的位置API,那么您将无法获得所要求的内容.

  • @LahiruChandima很高兴听到你有一个解决方案.不幸的是,对于我们中的许多人来说,谷歌的Android API并没有那么有用. (2认同)