Android高德获取逆地址编码(经纬度坐标-地址描述如省市区街道)
16lz
2021-01-25
Android高德获取逆地址编码(经纬度坐标-地址描述如省市区街道)
可以在非地图视图下直接获取,只要传入当前位置的经纬度 当然也可以在地图模式下获取详细信息
在非第三方地图集成下(系统自带功能)获取当前位置的经纬度,参考:
http://blog.csdn.net/weixin_37577039/article/details/79178018
但是经过测试,发现这种方式获取的地理位置描述不够准确 因此还是建议通过高德地图方式进行位置获取
在高德地图集成下获取当前位置,参考:http://blog.csdn.net/weixin_37577039/article/details/79381762
获取逆地址编码
// 声明GeocodeSearch geocoderSearch;
private void setCurrentLocationDetails(){// 地址逆解析 geocoderSearch = new GeocodeSearch(getApplicationContext()); geocoderSearch.setOnGeocodeSearchListener(this); // 第一个参数表示一个Latlng(经纬度),第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 25, GeocodeSearch.AMAP); geocoderSearch.getFromLocationAsyn(query);}
注意这里的latLonPoint不能是LatLng类型的
要为LatLonPoint类型的
定位回调监听器中调用setCurrentLocationDetails:
/** * 定位回调监听器 */public AMapLocationListener mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation amapLocation) { if (!IsGpsWork.isGpsEnabled(getApplicationContext())) { Toast toast = Toast.makeText(getApplicationContext(), getString(R.string.hasNotOpenGps), Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } else { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { //定位成功回调信息,设置相关消息 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 double currentLat = amapLocation.getLatitude();//获取纬度 double currentLon = amapLocation.getLongitude();//获取经度 latLonPoint = new LatLonPoint(currentLat, currentLon); // latlng形式的 /*currentLatLng = new LatLng(currentLat, currentLon);*/ //latlng形式的 Log.i("currentLocation", "currentLat : " + currentLat + " currentLon : " + currentLon); amapLocation.getAccuracy();//获取精度信息 setCurrentLocationDetails(); // 设置当前位置具体描述 } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } } } }};
3 获取回传数据
当然前提是 类要
implements GeocodeSearch.OnGeocodeSearchListener
/** * 获取回调的逆地址内容 */ @Override public void onRegeocodeSearched(RegeocodeResult result, int rCode) { String formatAddress = result.getRegeocodeAddress().getFormatAddress(); Log.e("formatAddress", "formatAddress:"+formatAddress); Log.e("formatAddress", "rCode:"+rCode); } @Override public void onGeocodeSearched(GeocodeResult result, int rCode) { }
输出结果
返回结果成功或者失败的响应码。1000为成功,其他为失败
IsGpsWork类如下,用于检查GPS是否开启
public class IsGpsWork { //判断GPS是否开启 public static boolean isGpsEnabled(Context context) { LocationManager locationManager = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE); // 判断GPS模块是否开启 return locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); }}
更多相关文章
- 万字长文带你了解最常用的开源 Squid 代理服务器
- Android(安卓)M预览版SDK发布 Android(安卓)M开发者预览版SDK下
- Android(安卓)模拟器解决公司网络内无法上网的另类解决方法
- [转]近百个Android优秀开源项目,覆盖Android开发的每个领域
- 实现Android(安卓)ARM64平台下Inline Hook框架
- Android分享到微信等社交平台教程
- Android4.0.1 模拟器内核 最新下载地址及编译步骤
- Android实践系列之项目基础配置
- Android(安卓)获取经纬度的服务