原文: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. Socket开发时,Available为0,实际还有数据的问题

    这段时间处理Socket通讯,比如文件传输,通常代码如下: string filename = @"c:\abc.txt"; // 发送文件名字符串长度(测试代码,实际请传输字符串 ...

  2. 火炬之光模型导出(Unity载入火炬之光的模型)

    先说明几点.导出方案可行,測试通过. python和blender的版本号一定要用下文中所说的.新的Python或者是新的Blender版本号都无法完美导入. 导入导出脚本能够选择 (http://c ...

  3. HDU 4669 Mutiples on a circle (DP , 统计)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个环,每个点是一个数字,取一个子串,使 ...

  4. oracle表连接------&gt;排序合并连接(Merge Sort Join)

    排序合并连接 (Sort Merge Join)是一种两个表在做连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的连接方法. 对于排序合并连接的优缺点及适用场景例如以下: a,通常 ...

  5. poj 2126 Factoring a Polynomial 数学多项式分解

    题意: 给一个多项式,求它在实数域内的可分解性. 分析: 代数基本定理. 代码: //poj 2126 //sep9 #include <iostream> using namespace ...

  6. JS - 全屏滚动

    下载地址:http://www.lanrentuku.com/js/quanping-1141.html

  7. Complete Guide for Spring Boot Actuator

    You are here to learn about Spring Boot Actuator for collecting metrics about your production grade ...

  8. uva 10603

    紫皮书的例题 照着敲了一遍,非原创 大题思路主要是三杯水,而水的总数是知道的,相当于知道第一第二杯水的体积,第三杯水的体积也就确定了. 用第一第二杯水的体积来标记数组是否遍历过 优先队列来找移动体积最 ...

  9. Qt制作应用插件

    在Qt下,插件有两种形式,一种是用于QtCreator下,扩展IDE功能.另一种是用于扩展开发者的应用.本文要讲的是后者. 定义一个纯虚类作为插件接口 #include <QtPlugin> ...

  10. Please verify you invoked Maven from the correct directory

    解决办法: 在cmd中,把当前路径转换到一个含有pom文件的 项目路径下 再使用 类似下面的deploy就行 mvn deploy:deploy-file -DgroupId=com.taobao.n ...