C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息

我们得到了百度坐标,现在依据这一坐标来获取相应的信息。下面是相应的代码

[html] view plaincopy

  1. public class BaiduMap
  2. {
  3. /// <summary>
  4. /// 依据坐标获取定位信息的URL模板。
  5. /// 参数1:百度地图API的KEY。
  6. /// 参数2:坐标(经度,纬度)。
  7. /// </summary>
  8. public const string GEOCODING_COORDINATE_URL_TEMPLATE =
  9. "http://api.map.baidu.com/geocoder/v2/?ak={0}&location={1}&output=json&pois=1";
  10. /// <summary>
  11. /// 依据坐标获取定位信息
  12. /// </summary>
  13. /// <param name="coordinates">坐标(经度,纬度),多个坐标间用分号隔开</param>
  14. /// <param name="mapCoordinateType">坐标类型</param>
  15. /// <returns></returns>
  16. public static CoordLocationResult FetchLocation(String coordinates,
  17. MapCoordinateType mapCoordinateType)
  18. {
  19. CoordTransResult transformResult = TransToBaiduCoord(coordinates, mapCoordinateType);
  20. String info = "";
  21. if (!transformResult.status.Equals(CoordTransStatus.OK))
  22. {
  23. info = "坐标转换异常:状态是---" + transformResult.status.ToString();
  24. return null;
  25. }
  26. if (transformResult.result == null || transformResult.result.Length <= 0)
  27. {
  28. info = "坐标转换异常:结果为空或数组长度为0";
  29. return null;
  30. }
  31. String locationUrl = "";
  32. foreach (Coordinate coordTemp in transformResult.result)
  33. {
  34. locationUrl = String.Format(GEOCODING_COORDINATE_URL_TEMPLATE,
  35. MAP_KEY_BAI_DU,
  36. coordTemp.x + "," + coordTemp.y);
  37. }
  38. String locationResponseText = RequestHelper.RequestUrl(locationUrl, null);
  39. CoordLocationResult locationResult = null;
  40. try
  41. {
  42. locationResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CoordLocationResult>(locationResponseText);
  43. }
  44. catch (Exception e)
  45. {
  46. info = "定位异常:" + e.Message;
  47. return null;
  48. }
  49. return locationResult;
  50. }
  51. }

注:

(1).使用const常量来定义一个百度地图API的URL模板,方便后面的调用。

(2).TransToBaiduCoord函数是《C#的百度地图开发(二)转换JSON数据为相应的类》中将非百度坐标转换成百度坐标方法的封装。

(3).RequestUrl方法是《C#的百度地图开发(一)发起HTTP请求》所说的发起HTTP请求的封装。

(4).CoordLocationResult类的具体实现,请参看后面的代码。

[html] view plaincopy

  1. namespace MapApi.Baidu
  2. {
  3. [Serializable]
  4. public class CoordLocationResult
  5. {
  6. /// <summary>
  7. /// 状态
  8. /// </summary>
  9. public String status { get; set; }
  10. /// <summary>
  11. /// 结果
  12. /// </summary>
  13. public CoordLocationResult_Result result { get; set; }
  14. }
  15. #region CoordLocationResult_Result
  16. /// <summary>
  17. /// 定位结果
  18. /// </summary>
  19. [Serializable]
  20. public class CoordLocationResult_Result
  21. {
  22. /// <summary>
  23. /// 定位的经度与纬度
  24. /// </summary>
  25. public CoordLocationResult_Result_Location location { get; set; }
  26. /// <summary>
  27. /// 结构化地址信息
  28. /// </summary>
  29. public String formatted_address { get; set; }
  30. /// <summary>
  31. /// 所在商圈信息,如 "人民大学,中关村,苏州街"
  32. /// </summary>
  33. public String business { get; set; }
  34. /// <summary>
  35. /// 定位的行政区域
  36. /// </summary>
  37. public CoordLocationResult_Result_AddressComponent addressComponent { get; set; }
  38. /// <summary>
  39. /// 周边位置
  40. /// </summary>
  41. public CoordLocationResult_Result_Poi[] pois { get; set; }
  42. /// <summary>
  43. /// 周边区域
  44. /// </summary>
  45. public CoordLocationResult_Result_PoiRegion[] poiRegions { get; set; }
  46. /// <summary>
  47. /// 城市代码
  48. /// </summary>
  49. public String cityCode { get; set; }
  50. }
  51. /// <summary>
  52. /// 定位结果之定位的经纬度
  53. /// </summary>
  54. [Serializable]
  55. public class CoordLocationResult_Result_Location
  56. {
  57. /// <summary>
  58. /// 经度
  59. /// </summary>
  60. public String lng { get; set; }
  61. /// <summary>
  62. /// 纬度
  63. /// </summary>
  64. public String lat { get; set; }
  65. }
  66. /// <summary>
  67. /// 定位结果之行政区域
  68. /// </summary>
  69. [Serializable]
  70. public class CoordLocationResult_Result_AddressComponent
  71. {
  72. /// <summary>
  73. /// 城市名
  74. /// </summary>
  75. public String city { get; set; }
  76. /// <summary>
  77. /// 区县名
  78. /// </summary>
  79. public String district { get; set; }
  80. /// <summary>
  81. /// 省名
  82. /// </summary>
  83. public String province { get; set; }
  84. /// <summary>
  85. /// 街道名
  86. /// </summary>
  87. public String street { get; set; }
  88. /// <summary>
  89. /// 街道门牌号
  90. /// </summary>
  91. public String street_number { get; set; }
  92. }
  93. #endregion
  94. #region CoordLocationResult_Result_Poi
  95. /// <summary>
  96. /// 周边位置信息
  97. /// </summary>
  98. [Serializable]
  99. public class CoordLocationResult_Result_Poi
  100. {
  101. //"addr": "福建省厦门市湖里区嘉禾路388",
  102. //       "cp": "NavInfo",
  103. //       "direction": "西",
  104. //       "distance": "49",
  105. //       "name": "永同昌大厦",
  106. //       "poiType": "商务大厦",
  107. //       "point": {
  108. //           "x": 118.13374113945,
  109. //           "y": 24.501871673827
  110. //       },
  111. //       "tel": "",
  112. //       "uid": "19c4b3f2642893beafb22a1e",
  113. //       "zip": ""
  114. /// <summary>
  115. /// 地址信息
  116. /// </summary>
  117. public String addr { get; set; }
  118. /// <summary>
  119. /// 数据来源
  120. /// </summary>
  121. public String cp { get; set; }
  122. /// <summary>
  123. /// 方向
  124. /// </summary>
  125. public String direction { get; set; }
  126. /// <summary>
  127. /// 离坐标点距离
  128. /// </summary>
  129. public String distance { get; set; }
  130. /// <summary>
  131. /// poi名称
  132. /// </summary>
  133. public String name { get; set; }
  134. /// <summary>
  135. /// poi类型,如’办公大厦,商务大厦’
  136. /// </summary>
  137. public String poiType { get; set; }
  138. /// <summary>
  139. /// poi坐标{x,y}
  140. /// </summary>
  141. public Coordinate point { get; set; }
  142. /// <summary>
  143. /// 电话
  144. /// </summary>
  145. public String tel { get; set; }
  146. /// <summary>
  147. /// poi唯一标识
  148. /// </summary>
  149. public String uid { get; set; }
  150. /// <summary>
  151. /// 邮编
  152. /// </summary>
  153. public String zip { get; set; }
  154. }
  155. #endregion
  156. #region CoordLocationResult_Result_PoiRegion
  157. /// <summary>
  158. /// 周边区域
  159. /// </summary>
  160. [Serializable]
  161. public class CoordLocationResult_Result_PoiRegion
  162. {
  163. /// <summary>
  164. /// 目标方向。比如:内
  165. /// </summary>
  166. public String direction_desc { get; set; }
  167. /// <summary>
  168. /// 区域名称。比如:音乐·家生活广场
  169. /// </summary>
  170. public String name { get; set; }
  171. }
  172. #endregion
  173. }

注:类的构造方法依据前面所说的构造,也可以使用工具直接生成(链接)。

下面是测试代码

[html] view plaincopy

  1. protected void btnTest_Click(object sender, EventArgs e)
  2. {
  3. Coordinate coordinate = new Coordinate("39.92", "116.46");
  4. CoordLocationResult coordLocationResult=BaiduMap.FetchLocation(coordinate);
  5. Alert.Show(coordLocationResult.status.ToString());
  6. }

测试结果如下

从图中可以看到,formatted_address是位置信息,business是商圈信息,pois是周围的信息,其他的信息可自行参考百度地图WebApi的官方文档说明。

这样,我们就得到了指定坐标点的位置信息,那得到了这些信息后,如果在前面的地图上显示呢?

时间: 2024-10-06 21:09:15

C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息的相关文章

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

C#的百度地图开发(二)转换JSON数据为相应的类

原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON数据,我们先将这个JSON数据,使用在线工盯进行格式化. [html] view plaincopy { "status": 0, "result": [ { "x": 39.926674689976, "y": 116.4659

android 百度地图开发实例(转载)

因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点android 百度地图开发常用的方法. 1初始化 MapManager mBMapMan = new BMapManager(this);boolean isSuccess = mBMapMan.init(this.mStrKey, new MyGeneralListener()); isSuccess 的值

delphi 调用百度地图WEBSERVICE转换GPS坐标

百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者xml格式). 注:本接口支持回调. 服务地址 http://api.map.baidu.com/geoconv/v1/? 组成说明: 域名:http://api.map.baidu.com 服务名:geoconv 服务版本号:v1 服务参数说明 参数 含义 取值范围 是否必须 默认取值 coord

Android studio 百度地图开发(5)查询周边服务(加油站)

email:[email protected] 开发环境:win7 64位,Android Studio,请注意是Android Studio,使用的导航SDK版本:3.1.0. 百度地图应用(1):Android studio 百度地图开发(1)配置工程.显示地图 百度地图应用(2):Android studio 百度地图开发(2)地图定位 百度地图应用(3):Android studio 百度地图开发(3)地图导航 百度地图应用(4):Android studio 百度地图开发(4)触摸选点

百度地图开发(二)之添加覆盖物 + 地理编码和反地理编码

之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示. 详见:Android百度地图开发(一)之初体验 下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造OverlayOptions(地图覆盖物选型基类). 3. 在地图上添加覆盖物. 4. 添加相应的监听事件. 在API中可以看到,BaiDuMap类中有一个方法: 这个方法就是用

android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索

最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两者合起来先自动获取自己所在位置的经纬度然后与固定地点进行路径搜索时却弄不出来了,因为刚开始 写的两者在两个类中总是取不到经纬度值,后来将两者写到同一个类中去了,终于取到经纬度值了,也运行出来了.需要 在 BDLocationListener的onReceiveLocation里获取到经纬度值,因为已

delphi 调用百度地图WEBSERVICE转换GPS坐标 转

http://www.cnblogs.com/happyhills/p/3789864.html 百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者xml格式). 注:本接口支持回调. 服务地址 http://api.map.baidu.com/geoconv/v1/? 组成说明: 域名:http://api.map.baidu.com 服务名:g

百度地图开发定位与显示Demo(Android)

百度地图给我们提供了非常丰富的API供我们进行二次开发.百度地图的SDK与定位SDK在今年6月份进行了更新.地图更新为3.0,定位更新为4.2.百度说:这次更新对接口有了较大部分的调整,与之前版本不兼容.本篇博文基于以上最新版本的API提供一个小例子:获取自己当前的经纬度坐标,并且显示在地图上.这里只给出核心代码,其他KEY的引入,地图控件的添加,权限的声明,定位服务的声明可在百度地图API官网(http://developer.baidu.com/map/sdkandev-download.h