上一篇讲述了地理编码的使用,没看的朋友可以看看http://blog.csdn.net/hedong_77/article/details/54287292,Ok,我们继续来看你地理编码,首先要理解它的概念,逆地理编码,又称地址解析服务,是指从已知的经纬度坐标到对应的地址描述(如行政区划、街区、楼层、房间等)的转换。常用于根据定位的坐标来获取该地点的位置详细信息,与定位功能是黄金搭档。也就是坐标转地址。
逆地理编码就很实用了,很多时候后台都会返回经纬度,然后APP端根据经纬度来定位,最常见的,好的,不说废话,来看看:

跟地理编码类似,只是在不同的方法里面做请求返回操作而已:
1、继承 OnGeocodeSearchListener 监听。
2、构造 GeocodeSearch 对象,并设置监听。

geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(this);

3、通过 RegeocodeQuery(LatLonPoint point, float radius, java.lang.String latLonType) 设置查询参数,调用 GeocodeSearch 的 getFromLocationAsyn(RegeocodeQuery regeocodeQuery) 方法发起请求。

// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200,GeocodeSearch.AMAP);geocoderSearch.getFromLocationAsyn(query);

4、通过回调接口 onRegeocodeSearched 解析返回的结果。
这里跟地理编码不一样的地方,就是返回方法不同,地理编码是在onGeocodeSearched里面做相应操作。

@Override
public void onRegeocodeSearched(RegeocodeResult result, int rCode) {dismissDialog();if (rCode == 1000) {if (result != null && result.getRegeocodeAddress() != null&& result.getRegeocodeAddress().getFormatAddress() != null) {addressName = result.getRegeocodeAddress().getFormatAddress()+ "附近";aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(AMapUtil.convertToLatLng(latLonPoint), 15));regeoMarker.setPosition(AMapUtil.convertToLatLng(latLonPoint));ToastUtil.show(ReGeocoderActivity.this, addressName);} else {ToastUtil.show(ReGeocoderActivity.this, R.string.no_result);}} else {ToastUtil.showerror(this, rCode);}
}

来看全部代码:


/*** 逆地理编码功能介绍*/
public class ReGeocoderActivity extends Activity implementsOnGeocodeSearchListener, OnClickListener, OnMarkerClickListener {private ProgressDialog progDialog = null;private GeocodeSearch geocoderSearch;private String addressName;private AMap aMap;private MapView mapView;private LatLonPoint latLonPoint = new LatLonPoint(39.90865, 116.39751);private Marker regeoMarker;private ExecutorService mExecutorService;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.geocoder_activity);/** 设置离线地图存储目录,在下载离线地图或初始化地图设置;* 使用过程中可自行设置, 若自行设置了离线地图存储的路径,* 则需要在离线地图下载和使用地图页面都进行路径设置* *///Demo中为了其他界面可以使用下载的离线地图,使用默认位置存储,屏蔽了自定义设置
//        MapsInitializer.sdcardDir =OffLineMapUtils.getSdCacheDir(this);mapView = (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);// 此方法必须重写init();}/*** 初始化AMap对象*/private void init() {if (aMap == null) {aMap = mapView.getMap();regeoMarker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));aMap.setOnMarkerClickListener(this);}geocoderSearch = new GeocodeSearch(this);geocoderSearch.setOnGeocodeSearchListener(this);progDialog = new ProgressDialog(this);getAddresses();}/*** 方法必须重写*/@Overrideprotected void onResume() {super.onResume();mapView.onResume();}/*** 方法必须重写*/@Overrideprotected void onPause() {super.onPause();mapView.onPause();}/*** 方法必须重写*/@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}/*** 方法必须重写*/@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();if (mExecutorService != null) {mExecutorService.shutdownNow();}}/*** 显示进度条对话框*/public void showDialog() {progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);progDialog.setIndeterminate(false);progDialog.setCancelable(true);progDialog.setMessage("正在获取地址");progDialog.show();}/*** 隐藏进度条对话框*/public void dismissDialog() {if (progDialog != null) {progDialog.dismiss();}}/*** 响应逆地理编码*/public void getAddress(final LatLonPoint latLonPoint) {showDialog();RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200,GeocodeSearch.AMAP);// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系geocoderSearch.getFromLocationAsyn(query);// 设置异步逆地理编码请求}/*** 地理编码查询回调*/@Overridepublic void onGeocodeSearched(GeocodeResult result, int rCode) {}/*** 逆地理编码回调*/@Overridepublic void onRegeocodeSearched(RegeocodeResult result, int rCode) {dismissDialog();if (rCode == AMapException.CODE_AMAP_SUCCESS) {if (result != null && result.getRegeocodeAddress() != null&& result.getRegeocodeAddress().getFormatAddress() != null) {addressName = result.getRegeocodeAddress().getFormatAddress()+ "附近";aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(AMapUtil.convertToLatLng(latLonPoint), 15));regeoMarker.setPosition(AMapUtil.convertToLatLng(latLonPoint));ToastUtil.show(ReGeocoderActivity.this, addressName);} else {ToastUtil.show(ReGeocoderActivity.this, R.string.no_result);}} else {ToastUtil.showerror(this, rCode);}}@Overridepublic void onClick(View v) {}/*** 响应逆地理编码的批量请求*/private void getAddresses() {if (mExecutorService == null) {mExecutorService = Executors.newSingleThreadExecutor();}List<LatLonPoint> geopointlist = readLatLonPoints();for (final LatLonPoint point : geopointlist) {mExecutorService.submit(new Runnable() {@Overridepublic void run() {try {RegeocodeQuery query = new RegeocodeQuery(point, 200,GeocodeSearch.AMAP);// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系RegeocodeAddress result = geocoderSearch.getFromLocation(query);// 设置同步逆地理编码请求if (result != null && result.getFormatAddress() != null) {aMap.addMarker(new MarkerOptions().position(new LatLng(point.getLatitude(), point.getLongitude())).title(result.getFormatAddress()));}} catch (AMapException e) {Message msg = msgHandler.obtainMessage();msg.arg1 = e.getErrorCode();msgHandler.sendMessage(msg);}}});}}private Handler msgHandler = new Handler() {public void handleMessage(Message msg) {ToastUtil.showerror(ReGeocoderActivity.this, msg.arg1);}};private List<LatLonPoint> readLatLonPoints() {List<LatLonPoint> points = new ArrayList<LatLonPoint>();for (int i = 0; i < coords.length; i += 2) {points.add(new LatLonPoint(coords[i + 1], coords[i]));}return points;}//测试的经纬度private double[] coords = {116.339925, 39.976587,116.328467, 39.976357,116.345289, 39.966556,116.321428, 39.967477,116.358421, 39.961556,116.366146, 39.961293,116.359666, 39.953234,116.373013, 39.948628,116.355374, 39.94037,116.41713, 39.940666,116.433309, 39.940929,116.461933, 39.949319,116.473907, 39.938461,116.478971, 39.933854,116.491631, 39.96603,116.489399, 39.971029,116.495364, 39.98517,116.530812, 39.99556,116.5607, 39.996023,116.525982, 40.022825,116.568511, 40.016843,116.584046, 40.014608,116.422599, 40.012439,116.44131, 40.00616,116.39303, 40.026998,116.384147, 40.039222,116.388352, 39.928242};@Overridepublic boolean onMarkerClick(Marker marker) {marker.showInfoWindow();return false;}
}

getAddresses() 方法里面用到线程同步去做请求,因为我们这里是批量加载的。你编码就这么多了。

高德地图之逆地理编码相关推荐

  1. 高德地图的逆地理编码 | 将经纬度坐标转化为对应的地理位置

    官网 地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API 官方解释:地理编码/逆地理编码 API 是通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地址与经纬 ...

  2. Android高德地图的使用,狠详细!手把手!(地图+定位+逆地理编码+输入提示+Poi搜索)

    最近项目用到高德地图,因此来写一篇文章理一下高德的使用步骤方法,希望对大家有用! ##1.注册+配置 废话不多说,要使用高德地图首先要去高德开放平台注册成为开发者(http://lbs.amap.co ...

  3. 高德地图api接口文档_在 R 语言里面调用高德地图接口:地理编码与路径规划

    你知道从广州南站去珠江新城怎么走么?今天就让我们一起使用 R 语言调用高德地图的地理编码(地址转经纬度)接口和路径规划接口来回答这个问题. 准备工作 注册高德地图,创建应用添加 Key(注意申请 Ke ...

  4. python百度地图api经纬度_详解用Python调用百度地图正/逆地理编码API

    一.背景 (正)地理编码指的是:将地理位置名称转换成经纬度: 逆地理编码指的是:将经纬度转换成地理位置信息,如地名.所在的省份或城市等 百度地图提供了相应的API,可以方便调用.相应的说明文档如下: ...

  5. 高德地图之反地理编码、线路规划、天气查询

    地理编码和反地理编码 /*** 地理编码和反地理编码*/private void geoSearch() {//地理编码GeocodeSearch geocoderSearch = new Geoco ...

  6. 技巧 | 在R语言中使用高德地图的API进行地理/逆地理编码(地址与经纬度的相互转换)...

    高德地图和百度地图都提供了坐标拾取系统,通过坐标查询或坐标反查操作可以查询一个地址对应的经纬度或经纬度对应的地址名称.但是,手动查询的方式效率很低,也不能进行批量查询. 本篇就来介绍在R语言中调用高德 ...

  7. 高德地图地理编码和逆地理编码,以及逆地理编码的时候如何去掉省、市、镇

    地理编码和逆地理编码 首先说说,何为地理编码, 地理编码就是 给你一个地名,得到对应的经纬度(纬经度,高德地图实际是纬经度) 知道地理编码,那么逆地理编码就不难理解了. 逆地理编码就是给出经纬度,得到 ...

  8. android studio高德地图的显示于定位(附带逆地理编码围栏)

    首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息 网站:http://lbs.amap.com/api/android-sdk/guide/create-p ...

  9. 高德地图-根据经纬度获取地址(逆地理编码)

    1.需要资源: 高德地图搜索SDK以及相关SDk下载地址 2.根据经纬度得到具体地址: 1.这里需要用到地图搜索SDK: 2.通过逆地理编码来实现. 3.示例代码: @Overrideprotecte ...

  10. Flutter 调用高德地图APP实现位置搜索、路线规划、逆地理编码

    1 开发准备 pubspec.yaml 配置文件中添加插件 dependencies:flutter:sdk: flutterurl_launcher: ^6.1.2 iOS 配置 info.plis ...

最新文章

  1. php多线程多核,Linux查看CPU个数/多核/多线程的查看
  2. 很遗憾,我们正在逐渐丧失专注阅读的能力
  3. java.getRunTime.exe
  4. MVC中返回Json的几种声明方式
  5. Redis数据分布一致性哈希
  6. html导航栏代码跳转,微信小程序自定义底部导航栏tabBar(含跳转页面wx.navigateTo)...
  7. BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
  8. Qt学习笔记-简单的UDP广播包聊天室
  9. 诞生至今,大数据的真正含义到底是什么?
  10. python遍历树结构_python 数据结构与算法——树的遍历
  11. ZABBIX自动发现Redis端口并监控
  12. SQL SERVER中的二种获得自增长ID的方法
  13. SpringBoot轻量级博客/论坛(包含 SpringBoot、SSM、Dubbo多个版本实现代码) 初云博客
  14. srs源码分析3-srs的启动
  15. 2022.11.14每日刷题打卡
  16. MusicPlayerByService
  17. 如何快速搭建在家里(外网)也能访问的云办公云桌面系统
  18. 安卓Apk安装出错:更新包与已安装应用的签名不一致,但在应用管理中却找不到这个已经卸载的应用
  19. 2016 NIPS众神降临,苹果破天荒要对外发布AI论文丨AI科技评论周刊
  20. FX5U远程调试PLC远程监控方案

热门文章

  1. gtest学习笔记--5 死亡测试
  2. 前端js正则表达式2
  3. python影评_用Python分析18万条《八佰》影评,看看观众怎么说?
  4. python 类调用不存在的方法_找不到Python方法,但在类中定义
  5. 好斌c语言教程,C语言学习大纲__斌(讲解).doc.doc
  6. 相机模型--针孔相机投影(pinhole camera model)
  7. xilinx zynq zynqmp nvme SSD使用
  8. flashgot免费下载音乐
  9. Kafka高频面试题:夺命10连问
  10. Mybatis 从入门到入魔