返回

美国街道、社区、地区信息获取难点解决指南

Android

在美国获取街道、社区或地区信息

作为一名程序员,我经常需要处理地址信息。其中一个关键的信息是获取街道、社区或地区,在大多数国家/地区这称为 sublocality。然而,对于某些国家/地区,如美国,使用默认设置的 Geocoder 可能返回 null。

问题所在

Geocoder 使用默认区域设置,该区域设置会影响返回的地址信息。对于美国,默认区域设置将 Locale.getDefault() 设置为 Locale.US,这会导致 Geocoder 忽略 sublocality。

解决方案

为了获得美国地区的 sublocality,我们需要显式地将 Locale 设置为 Locale.getDefault(),以便 Geocoder 返回更详细的地址信息。

Java

import java.util.Locale;
import android.location.Geocoder;
import android.location.Address;

...

Geocoder geocoder = new Geocoder(context, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);

if (addresses.size() > 0) {
    Address address = addresses.get(0);
    Log.d("TAG", address.getSubLocality());
}

Kotlin

import java.util.Locale
import android.location.Geocoder
import android.location.Address

...

val geocoder = Geocoder(context, Locale.getDefault())
val addresses = geocoder.getFromLocation(latitude, longitude, 1)

if (addresses.isNotEmpty()) {
    val address = addresses[0]
    Log.d("TAG", address.subLocality)
}

其他注意事项

  • 如果要获取其他国家/地区的 sublocality,请相应地设置区域设置。
  • 在某些情况下,即使设置了区域设置,也可能无法获取 sublocality。这是因为某些地址可能没有该信息。
  • 建议使用 Google Play 服务中的 Geocoding API,该 API 通常可以提供更准确的结果。

代码示例

// Java

Geocoder geocoder = new Geocoder(context, Locale.US);
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);

if (addresses.size() > 0) {
    Address address = addresses.get(0);
    Log.d("TAG", address.getSubLocality());
}

// Kotlin

val geocoder = Geocoder(context, Locale.US)
val addresses = geocoder.getFromLocation(latitude, longitude, 1)

if (addresses.isNotEmpty()) {
    val address = addresses[0]
    Log.d("TAG", address.subLocality)
}

通过这些步骤,你可以成功获取美国和其他国家/地区的 sublocality。这将使你能够处理更详细和准确的地址信息。

常见问题解答

  1. 为什么使用默认设置的 Geocoder 无法获取美国地区的 sublocality?

    • 因为默认区域设置为 Locale.US,这会导致 Geocoder 忽略 sublocality。
  2. 如何显式设置区域设置以获取 sublocality?

    • 在 Java 中:Locale.getDefault()
    • 在 Kotlin 中:Locale.getDefault()
  3. 是否可以在其他国家/地区使用此方法获取 sublocality?

    • 是的,只需相应地设置区域设置即可。
  4. 在某些情况下,即使设置了区域设置,也无法获取 sublocality。原因是什么?

    • 因为某些地址可能没有 sublocality 信息。
  5. 为什么建议使用 Google Play 服务中的 Geocoding API?

    • 因为它通常可以提供更准确的结果。