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

原文: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. }

测试结果如下

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

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

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

上一篇:node 创建静态web服务器(上)


下一篇:[Node]创建静态资源服务器