分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04

一、简介

地理编码指的是将地址信息建立空间坐标关系的过程,提供了地理坐标和地址之间相互转换的能力。

地理编码分为正向地图编码和反向地图编码。

l 正向地理编码:将中文地址或地名描述转换为地球表面上相应位置;

l 反向地理编码:将地球表面的地址坐标转换为标准地址的过程。

1、正向地理编码

正向地理编码指的是由地址信息转换为坐标点的过程。

2、反向地理编码

反向地理编码服务实现了将地球表面的地址坐标转换为标准地址的过程。

反向地理编码提供了坐标定位引擎,帮助用户通过地面某个地物的坐标值来反向查询得到该地物所在的行政区划、所处街道、以及最匹配的标准地址信息。通过丰富的标准地址库中的数据,可帮助用户在进行移动端查询、商业分析、规划分析等领域创造无限价值。

反向地理编码的实现形式与正向地理编码的方式相同,此处不再赘述。(更多详细信息请参考Demo中的代码)

二、运行截图

简介:介绍地址信息与坐标之间的相互转换

详述:

(1)正向地理编码:将地址信息转换为经纬度坐标;

(2)反向地理编码:将经纬度坐标转换为地址信息;

本示例运行截图如下:

三、设计步骤

1、添加demo11_geocoder.xml文件

在layout文件夹下添加该文件,然后将代码改为下面的内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <LinearLayout
  8. xmlns:android="http://schemas.android.com/apk/res/android"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:orientation="horizontal" >
  12.  
  13. <EditText
  14. android:id="@+id/city"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="北京" />
  18.  
  19. <EditText
  20. android:id="@+id/geocodekey"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:text="海淀区上地十街10号" />
  24.  
  25. <Button
  26. android:id="@+id/geocode"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:background="@drawable/button_style"
  30. android:text="Geo" />
  31. </LinearLayout>
  32.  
  33. <LinearLayout
  34. xmlns:android="http://schemas.android.com/apk/res/android"
  35. android:layout_width="fill_parent"
  36. android:layout_height="wrap_content"
  37. android:orientation="horizontal" >
  38.  
  39. <EditText
  40. android:id="@+id/lat"
  41. android:layout_width="wrap_content"
  42. android:layout_height="wrap_content"
  43. android:text="39.904965" />
  44.  
  45. <EditText
  46. android:id="@+id/lon"
  47. android:layout_width="wrap_content"
  48. android:layout_height="wrap_content"
  49. android:text="116.327764" />
  50.  
  51. <Button
  52. android:id="@+id/reversegeocode"
  53. android:layout_width="wrap_content"
  54. android:layout_height="wrap_content"
  55. android:background="@drawable/button_style"
  56. android:text="ReverseGeo" />
  57. </LinearLayout>
  58.  
  59. <com.baidu.mapapi.map.TextureMapView
  60. android:id="@+id/bmapView"
  61. android:layout_width="fill_parent"
  62. android:layout_height="fill_parent"
  63. android:clickable="true" />
  64.  
  65. </LinearLayout>

2、添加Demo11GeoCoder.cs文件

在SrcSdkDemos文件夹下添加该文件,然后将代码改为下面的内容:

  1. using Android.App;
  2. using Android.Content.PM;
  3. using Android.OS;
  4. using Android.Widget;
  5. using Com.Baidu.Mapapi.Map;
  6. using Com.Baidu.Mapapi.Model;
  7. using Com.Baidu.Mapapi.Search.Core;
  8. using Com.Baidu.Mapapi.Search.Geocode;
  9.  
  10. namespace BdMapV371Demos.SrcSdkDemos
  11. {
  12. /// <summary>
  13. /// 此demo用来展示如何进行地理编码搜索(用地址检索坐标)、反地理编码搜索(用坐标检索地址)
  14. /// </summary>
  15. [Activity(Label = "@string/demo_name_geocode",
  16. ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
  17. ScreenOrientation = ScreenOrientation.Sensor)]
  18. public class Demo11GeoCoder : Activity
  19. {
  20. GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
  21. BaiduMap mBaiduMap = null;
  22. TextureMapView mMapView = null;
  23.  
  24. protected override void OnCreate(Bundle savedInstanceState)
  25. {
  26.  
  27. base.OnCreate(savedInstanceState);
  28. SetContentView(Resource.Layout.demo11_geocoder);
  29.  
  30. // 地图初始化
  31. mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView);
  32. mBaiduMap = mMapView.Map;
  33.  
  34. var btnGeocode = FindViewById<Button>(Resource.Id.geocode);
  35. btnGeocode.Click += (s, e) =>
  36. {
  37. EditText editCity = FindViewById<EditText>(Resource.Id.city);
  38. EditText editGeoCodeKey = FindViewById<EditText>(Resource.Id.geocodekey);
  39. // Geo搜索
  40. mSearch.Geocode(new GeoCodeOption()
  41. .City(editCity.Text)
  42. .Address(editGeoCodeKey.Text));
  43. };
  44.  
  45. var btnReverseGeocode = FindViewById<Button>(Resource.Id.reversegeocode);
  46. btnReverseGeocode.Click += (s, e) =>
  47. {
  48. EditText lat = FindViewById<EditText>(Resource.Id.lat);
  49. EditText lon = FindViewById<EditText>(Resource.Id.lon);
  50. LatLng ptCenter = new LatLng(float.Parse(lat.Text), float.Parse(lon.Text));
  51. // 反Geo搜索
  52. mSearch.ReverseGeoCode(new ReverseGeoCodeOption()
  53. .Location(ptCenter));
  54. };
  55.  
  56. // 初始化搜索模块,注册搜索结果事件
  57. mSearch = GeoCoder.NewInstance();
  58. mSearch.GetGeoCodeResult += (s, e) =>
  59. {
  60. var result = e.P0;
  61. if (result == null || result.Error != SearchResult.ERRORNO.NoError)
  62. {
  63. Toast.MakeText(this, "抱歉,未能找到结果", ToastLength.Long).Show();
  64. }
  65. mBaiduMap.Clear();
  66. mBaiduMap.AddOverlay(new MarkerOptions()
  67. .InvokePosition(result.Location)
  68. .InvokeIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_marka)));
  69. mBaiduMap.SetMapStatus(MapStatusUpdateFactory.NewLatLng(result.Location));
  70. string info = string.Format("纬度:{0:f6},经度:{1:f6}",
  71. result.Location.Latitude, result.Location.Longitude);
  72. Toast.MakeText(this, info, ToastLength.Long).Show();
  73. };
  74. mSearch.GetReverseGeoCodeResult += (s, e) =>
  75. {
  76. var result = e.P0;
  77. if (result == null || result.Error != SearchResult.ERRORNO.NoError)
  78. {
  79. Toast.MakeText(this, "抱歉,未能找到结果", ToastLength.Long).Show();
  80. }
  81. mBaiduMap.Clear();
  82. mBaiduMap.AddOverlay(new MarkerOptions()
  83. .InvokePosition(result.Location)
  84. .InvokeIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_markb)));
  85. mBaiduMap.SetMapStatus(MapStatusUpdateFactory.NewLatLng(result.Location));
  86. Toast.MakeText(this, result.Address, ToastLength.Long).Show();
  87. };
  88. }
  89.  
  90. protected override void OnPause()
  91. {
  92. mMapView.OnPause();
  93. base.OnPause();
  94. }
  95.  
  96. protected override void OnResume()
  97. {
  98. mMapView.OnResume();
  99. base.OnResume();
  100. }
  101.  
  102. protected override void OnDestroy()
  103. {
  104. mMapView.OnDestroy();
  105. mSearch.Destroy();
  106. base.OnDestroy();
  107. }
  108. }
  109. }

3、修改MainActivity.cs

在MainActivity.cs文件的demos字段定义中,去掉【示例11】下面的注释。

运行观察结果。

【Android】3.11 地理编码功能的更多相关文章

  1. 我的Android进阶之旅------>Android百度地图定位SDK功能学习

    因为项目需求,需要使用百度地图的定位功能,因此去百度地图开发平台下载了百度地图的Android定位SDK最新版本的开发包和示例代码学习. Android 定位SDK地址:http://develope ...

  2. (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)

    目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选      程序员8月书讯      项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...

  3. iOS 原生地图地理编码与反地理编码

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...

  4. Android百度地图开发02之添加覆盖物 + 地理编码和反地理编码

    下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造Ov ...

  5. 【iOS】7.4 定位服务->2.1.3.2 定位 - 官方框架CoreLocation 功能2:地理编码和反地理编码

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

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

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

  7. 高德地图添加marker及反地理编码获取POI

    项目中集成百度.高德.腾讯地图已是司空见惯的事情,今天我总结了一下项目中用到的高德地图常用的功能: 1.展示高德地图并定位显示定位图标: 2.添加实时大头针: 3.反地理编码获取周围兴趣点 效果如下: ...

  8. IOS高德地图逆地理编码定位+网络判断

    先说下这功能的流程,  流程:判断用户是否联网--->获取用户地理位置经纬度--->通过经纬度去查询地理位置名称 //高德地图 @property (nonatomic, strong) ...

  9. CoreLocation框架的使用---地理编码

    #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...

随机推荐

  1. grep命令经常使用參数及使用方法

    1.grep介绍 grep命令是Linux系统中一种强大的文本搜索工具,它能使用正則表達式搜索文本.并把匹 配的行打印出来.grep全称Global Regular Expression Print, ...

  2. Asp.net 生成静态页面

    http://www.cnblogs.com/tonycall/archive/2009/07/18/1526079.html Asp.net 生成静态页面(简单用法) 第一次发表,有什么错误,请大家 ...

  3. [置顶] 【玩转cocos2d-x之二十】从CCObject看cocos2d-x的内存管理机制

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/13765639 再看CCObject,剔除上节的拷贝相关,以及Lua脚本相关的 ...

  4. HTML5 PACS 医学成像

    http://ivmartel.github.io/dwv/ http://oviyam.raster.in/oviyam2.html https://github.com/ivmartel/dwv ...

  5. java线程(上)Thread和Runnable的区别

    首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈 ...

  6. 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)

    目录 1 阶乘位数 2 凑平方数 3 棋子换位 4 机器人塔 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:10110001001 ...

  7. 有间距的表格布局 table布局

    1.先看有间距的布局效果: 2.少说多做,直接看代码(代码中有注释) <!DOCTYPE html> <html lang="zh"> <head&g ...

  8. 解决Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉

    有这种错误让人很恼火,因为并不知道是哪个文件引起的整个项目错误.所以我们可以打开下边的错误按钮,看看是什么问题. 1.如果是因为java compiler level does not match t ...

  9. urlretrieve 如何给文件下载设置下载进度?

    #python #xiaodeng #如何给文件下载设置下载进度? import urllib def callbackinfo(down,block,size): ''' 回调函数: down:已经 ...

  10. 修改模块搜索路径(注意:py运行完毕,就会失效,他只是临时产生效果)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #修改模块搜索路径(注意:py运行完毕,就会失效,他只是临时产生效果) import sys print sy ...