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

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

  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类的具体实现,请参看后面的代码。

  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. }

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

下面是测试代码

  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的官方文档说明。

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

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

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

    原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...

  2. C#的百度地图开发(四)前端显示与定位

    原文:C#的百度地图开发(四)前端显示与定位 有了这些定位信息,那要如何在前端的页面上显示出来呢?这需要用到百度地图的JavaScript的API.下面是示例代码. 前端代码 <%@ Page  ...

  3. 调用百度地图开发平台的JavascriptAPI实现将市县位置转换成坐标

    最近的项目要做的地图比较多,有的还比较复杂,而地图用到的坐标,上网找json文件更是良莠不齐的.真是让人伤脑筋,后来突然想到了百度地图开发平台,没想到真的有对应的API哦,谢天谢地!!!下面说一下完整 ...

  4. 【地图功能开发系列:二】根据地址名称通过百度地图API查询出坐标

    根据地址名称通过百度地图API查询出坐标 百度地图ApiUrl string url = "http://api.map.baidu.com/geocoder?address={0}& ...

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

    http://www.cnblogs.com/happyhills/p/3789864.html   百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参 ...

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

    因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...

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

    百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者 ...

  8. Android studio 百度地图开发(2)地图定位

    Android studio 百度地图开发(2)地图定位 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...

  9. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

随机推荐

  1. 《Head First 设计模式》学习笔记——状态模式

    在软件开发过程中.应用程序可能会依据不同的情况作出不同的处理. 最直接的解决方式是将这些全部可能发生的情况全都考虑到.然后使用if... ellse语句来做状态推断来进行不同情况的处理. 可是对复杂状 ...

  2. Kendo UI开发教程(25): 单页面应用(三) View

    View为屏幕上某个可视部分,可以处理用户事件. View可以通过HTML创建或是通过script元素.缺省情况下View将其所包含的内容封装在一个Div元素中.Kendo创建View有两种方式: 使 ...

  3. DataTable的一些使用技巧

    在做机房的时候经常用到DataTable,发现如果DataTable使用的好的话,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果.现在对我知道的一些技巧做个总结,虽然都是一些简单的,但是发 ...

  4. [置顶] 手把手教你iOS消息推送证书生成以及Push消息

    iOS推送消息是许多iOS应用都具备的功能,今天在给应用加推送功能,在生成证书的过程中,发生了各种令人蛋痛的事.下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provi ...

  5. c# 使用OracleParameter,同时使用replace函数

    也算不上是手误吧,这个问题竟然困扰了我那么多天,就是更新代码的时候,使用replace,但是oracle在.net下竟然是不支持汉字,所谓使用类似update x set y='m' where y= ...

  6. Spring Boot Mongodb

    Spring注解学习,有助于更好的理解下面代码: @ConditionOnClass表明该@Configuration仅仅在一定条件下才会被加载,这里的条件是Mongo.class位于类路径上 @En ...

  7. 使用apache daemon让java程序在unix系统上以服务方式运行

    通过使用apache_commons_daemon,可以让Java程序在unix系统上以服务器的方式运行. 当然,通过wrapper也是可以达到这样的目的,wrapper还可以指定java应用中用到的 ...

  8. goldengate 简单配置 oracle to oralce

    做oracle时配置的,goldengate 是同步异构数据库最好的工具.这个是基于oracle to oracle 单向复制 添加增量复制进程   add extract process -- -- ...

  9. mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方 ...

  10. gridView自己定义做时间排版

    公司有需求要做一个时间排版,原型例如以下 由于要用的gridView,曾经就是它的排版非常多,最看是想用一个checkbox搞定. 后来证实功能可以达到.可是排版是乱的.还是老老实实多写点吧(直接上代 ...