返回
美国街道、社区、地区信息获取难点解决指南
Android
2024-03-15 02:34:16
在美国获取街道、社区或地区信息
作为一名程序员,我经常需要处理地址信息。其中一个关键的信息是获取街道、社区或地区,在大多数国家/地区这称为 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。这将使你能够处理更详细和准确的地址信息。
常见问题解答
-
为什么使用默认设置的 Geocoder 无法获取美国地区的 sublocality?
- 因为默认区域设置为 Locale.US,这会导致 Geocoder 忽略 sublocality。
-
如何显式设置区域设置以获取 sublocality?
- 在 Java 中:
Locale.getDefault()
- 在 Kotlin 中:
Locale.getDefault()
- 在 Java 中:
-
是否可以在其他国家/地区使用此方法获取 sublocality?
- 是的,只需相应地设置区域设置即可。
-
在某些情况下,即使设置了区域设置,也无法获取 sublocality。原因是什么?
- 因为某些地址可能没有 sublocality 信息。
-
为什么建议使用 Google Play 服务中的 Geocoding API?
- 因为它通常可以提供更准确的结果。