我想从纬度和经度在安卓得到以下值
街道地址 城市/州 邮政编码 完整的地址
如何做到这一点?
我想从纬度和经度在安卓得到以下值
街道地址 城市/州 邮政编码 完整的地址
如何做到这一点?
当前回答
接受的答案在kotlin格式
private fun getAddressInfo(latitude:Double, longitude:Double){
val geocoder = Geocoder(this, Locale.getDefault())
val addresses: List<Address> = geocoder.getFromLocation(latitude, longitude, 1)
val address: String = addresses[0].getAddressLine(0)
val city: String = addresses[0].locality
val state: String = addresses[0].adminArea
val country: String = addresses[0].countryName
val postalCode: String = addresses[0].postalCode
val knownName: String = addresses[0].featureName
}
其他回答
public static String getAddressFromLatLng(Context context, LatLng latLng) {
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(context, Locale.getDefault());
try {
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
return addresses.get(0).getAddressLine(0);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
使用Geocoder类从纬度和经度中获得完整地址非常容易。下面是代码示例。希望这能有所帮助!
if (l != null) {
val lat = l.latitude
val lon = l.longitude
val geocoder = Geocoder(this, Locale.getDefault())
val addresses: List<Address>
addresses = geocoder.getFromLocation(lat, lon, 1)
val address = addresses[0].getAddressLine(0)
val address2 = addresses[0].getAddressLine(1)
val city = addresses[0].locality
val state = addresses[0].adminArea
val country = addresses[0].countryName
val postalCode = addresses[0].postalCode
val knownName = addresses[0].featureName
val message =
"Emergency situation. Call for help. My location is: " + address + "." + "http://maps.google.com/maps?saddr=" + lat + "," + lon
}
您可以只使用地址值,因为它提供了所有完整的地址。如果需要单独的组件,也可以使用其他组件。
从latlong (Geo-coordinates)获取Address还有最后一个技巧。你可以简单地通过经度和纬度点击谷歌地图web服务。它只是一个GET-Method web服务。
它将返回JSON响应,可以很容易地解析以获得地址。它的URL是:
http://maps.googleapis.com/maps/api/geocode/json?latlng=32,75&sensor=true
你可以用lat,long代替32,75。
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(latitude, longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
String city = addresses.get(0).getLocality();
String state = addresses.get(0).getAdminArea();
String country = addresses.get(0).getCountryName();
String postalCode = addresses.get(0).getPostalCode();
String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL
要了解更多可用细节,请查看Android-Location-Address
如果您使用Kotlin语言,我创建这个方法来直接获取地址位置
private fun getAddress(latLng: LatLng): String {
val geocoder = Geocoder(this, Locale.getDefault())
val addresses: List<Address>?
val address: Address?
var addressText = ""
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1)
if (addresses.isNotEmpty()) {
address = addresses[0]
addressText = address.getAddressLine(0)
} else{
addressText = "its not appear"
}
return addressText
}
但是当你调用这个方法时,这个方法只返回String值
如果你想获取所有地址,你只需使用这个方法/函数
fun getAddress(latLng: LatLng){
val geocoder = Geocoder(this, Locale.getDefault())
val addresses: List<Address>?
val address: Address?
var fulladdress = ""
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1)
if (addresses.isNotEmpty()) {
address = addresses[0]
fulladdress = address.getAddressLine(0) // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex
var city = address.getLocality();
var state = address.getAdminArea();
var country = address.getCountryName();
var postalCode = address.getPostalCode();
var knownName = address.getFeatureName(); // Only if available else return NULL
} else{
fulladdress = "Location not found"
}
}