原文: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. MFC画二维动态图表[GDI]

    源博客:http://www.codeproject.com/Articles/9350/2D-Animated-Charts 源代码:http://download.csdn.net/detail/ ...

  2. 14.6.7?Limits on InnoDB Tables InnoDB 表的限制

    14.6.7?Limits on InnoDB Tables InnoDB 表的限制 警告: 不要把MySQL system tables 从MyISAM 到InnoDB 表. 这是不支持的操作,如果 ...

  3. iOS两个强制旋转屏幕的方法

    第一个: // 状态栏动画持续时间 CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimation ...

  4. mssql数据库游标批量改动符合条件的记录

    //需求:因为项目刚上传,没有票数,为了表现出一定的人气,须要在一開始把各项目的票数赋一个值 , 但每一个项目不能一样,否则easy看出问题,呵呵 . DECLARE @Id varchar(50) ...

  5. mysql sql执行顺序

    <pre name="code" class="html">mysql> explain select * from (select * fr ...

  6. find查找大于1M小于10M的文件 $ find . -size +1M -size -10M

    查找大于1M小于10M的文件$ find . -size +1M -size -10M

  7. <摘录>详谈高性能UDP服务器的开发

    上一篇文章我详细介绍了如何开发一款高性能的TCP服务器的网络传输层.本章我将谈谈如何开发一个高性能的UDP服务器的网络层.UDP服务器的网络层开 发相对与TCP服务器来说要容易和简单的多,UDP服务器 ...

  8. IDFA的值什么时候会发生改变

    在何种情况下 , 应用的IDFA值会发生改变? 近期工作中须要获得一个能够唯一地标示每个不同应用的ID,之前的苹果UDID已经不让使用了. 那么我们须要使用新的IDFA来引用.可是在某些情况下这个ID ...

  9. Spring Bean范围 示例

    Spring 该目的是通过默认单身创建的对象 设定Bean范围.由Bean美元Scope财产 Scope取值范围: Singleton:单例 proptotype:非单例 Request:创建该Bea ...

  10. xp下Oracle数据库导入SQLServer数据库数据

    Oracle数据库利用ODBC数据源.PLSQL Developer导入SQLServer数据库数据 操作: 建立数据源:控制面板→管理工具→数据源 (ODBC) 打开,界面如下: 点击添加,界面如下 ...