我想从纬度和经度在安卓得到以下值
街道地址 城市/州 邮政编码 完整的地址
如何做到这一点?
我想从纬度和经度在安卓得到以下值
街道地址 城市/州 邮政编码 完整的地址
如何做到这一点?
当前回答
尝试使用geocoder使用下面的代码:
Geocoder gcd = new Geocoder(MainActivity.this, Locale.getDefault());
List<Address> geoAddresses = geoAddresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
if (geoAddresses.size() > 0) {
String mUserLocation = "";
for (int i = 0; i < 4; i++) { //Since it return only four value we declare this as static.
mUserLocation = mUserLocation + geoAddresses.get(0).getAddressLine(i).replace(",", "") + ", ";
}
}
其他回答
如果您使用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"
}
}
用这个对我有用:D
检索纬度和经度的json数据。
https://maps.googleapis.com/maps/api/geocode/json?key=AIzaSyAr29XeWWAeWZcrOgjjfs3iSnqkWtAz4No&latlng=2.1812,102.4266&sensor=true
用你自己的地方改变纬度、经度。
https://maps.googleapis.com/maps/api/geocode/json?key= < \ API_KEY_HERE > &latlng =“纬度,经度”&sensor = true
您可以使用自己的密钥更改<\API_KEY_HERE>。
需要在谷歌控制台为新的api密钥启用api服务。
D选项是正确答案
从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。
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 "";
}
}
在onCreate () . .
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(bestProvider);
if (location == null) {
Toast.makeText(getApplicationContext(), "GPS signal not found",
3000).show();
}
if (location != null) {
Log.e("location", "location--" + location);
Log.e("latitude at beginning",
"@@@@@@@@@@@@@@@" + location.getLatitude());
onLocationChanged(location);
}
在onLocationChanged()中编写代码
@Override
public void onLocationChanged(Location location) {
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.e("latitude", "latitude--" + latitude);
try {
Log.e("latitude", "inside latitude--" + latitude);
addresses = geocoder.getFromLocation(latitude, longitude, 1);
if (addresses != null && addresses.size() > 0) {
String address = addresses.get(0).getAddressLine(0);
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();
locationTxt.setText(address + " " + city + " " + country);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}