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

简介: 原文:C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息我们得到了百度坐标,现在依据这一坐标来获取相应的信息。下面是相应的代码   [html] view plaincopy public class BaiduMap   {           ///            /// 依据坐标获取定位信息的URL模板。
原文: C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息

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

 

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  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.   
  11.         /// <summary>  
  12.         /// 依据坐标获取定位信息  
  13.         /// </summary>  
  14.         /// <param name="coordinates">坐标(经度,纬度),多个坐标间用分号隔开</param>  
  15.         /// <param name="mapCoordinateType">坐标类型</param>  
  16.         /// <returns></returns>  
  17.         public static CoordLocationResult FetchLocation(String coordinates,  
  18.                                                      MapCoordinateType mapCoordinateType)  
  19.         {  
  20.             CoordTransResult transformResult = TransToBaiduCoord(coordinates, mapCoordinateType);  
  21.             String info = "";  
  22.             if (!transformResult.status.Equals(CoordTransStatus.OK))  
  23.             {  
  24.                 info = "坐标转换异常:状态是---" + transformResult.status.ToString();  
  25.                 return null;  
  26.             }  
  27.   
  28.             if (transformResult.result == null || transformResult.result.Length <= 0)  
  29.             {  
  30.                 info = "坐标转换异常:结果为空或数组长度为0";  
  31.                 return null;  
  32.             }  
  33.   
  34.             String locationUrl = "";  
  35.             foreach (Coordinate coordTemp in transformResult.result)  
  36.             {  
  37.                 locationUrl = String.Format(GEOCODING_COORDINATE_URL_TEMPLATE,  
  38.                                                     MAP_KEY_BAI_DU,  
  39.                                                     coordTemp.x + "," + coordTemp.y);  
  40.             }  
  41.   
  42.             String locationResponseText = RequestHelper.RequestUrl(locationUrl, null);  
  43.   
  44.             CoordLocationResult locationResult = null;  
  45.             try  
  46.             {  
  47.                 locationResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CoordLocationResult>(locationResponseText);  
  48.             }  
  49.             catch (Exception e)  
  50.             {  
  51.                 info = "定位异常:" + e.Message;  
  52.                 return null;  
  53.             }  
  54.   
  55.             return locationResult;  
  56.         }  
  57. }  

注:

 

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

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

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

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

 

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

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

 

下面是测试代码

 

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  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的官方文档说明。

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

目录
相关文章
|
22天前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
60 12
|
2月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
130 51
|
2月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
94 1
|
2月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
77 2
|
2月前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
66 1
|
2月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
3月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
51 1
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
47 3
|
29天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
91 12
|
2月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
84 4