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

在《C#的百度地图开发(一)发起HTTP请求》一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON数据,我们先将这个JSON数据,使用在线工盯进行格式化。

  1. {
  2. "status": 0,
  3. "result": [
  4. {
  5. "x": 39.926674689976,
  6. "y": 116.46594011987
  7. },
  8. {
  9. "x": 40.136798619397,
  10. "y": 117.10587935376
  11. }
  12. ]
  13. }

根据官方的说明,我们传入几个坐标,转换后就会得到几个坐标,并且是一样的顺序。为了能够更多好的操作数据,我们需要将其转换到相应的类中,所以首先要构造相应的类,然后将数据反序列化到该类中(这里要用到.net的json库Newtonsoft.Json.dll,这个可以到网上自行下载)。

  1. /// <summary>
  2. /// 百度坐标的转换结果
  3. /// </summary>
  4. [Serializable]
  5. public class CoordTransResult
  6. {
  7. /// <summary>
  8. /// 状态
  9. /// </summary>
  10. public CoordTransStatus status { get; set; }
  11. /// <summary>
  12. /// 结果(坐标数组)
  13. /// </summary>
  14. public Coordinate[] result { get; set; }
  15. }
  16. public enum CoordTransStatus
  17. {
  18. /// <summary>
  19. /// 正常
  20. /// </summary>
  21. OK = 0,
  22. /// <summary>
  23. /// 内部错误
  24. /// </summary>
  25. INTERNAL_ERROR = 1,
  26. /// <summary>
  27. /// from非法
  28. /// </summary>
  29. FROM_ILLEGAL = 21,
  30. /// <summary>
  31. /// to非法
  32. /// </summary>
  33. TO_ILLEGAL = 22,
  34. /// <summary>
  35. /// coords格式非法
  36. /// </summary>
  37. COORDS_ILLEGAL = 24,
  38. /// <summary>
  39. /// coords个数非法,超过限制
  40. /// </summary>
  41. COORDS_COUNT_ILLEGAL = 25
  42. }
  43. /// <summary>
  44. /// 坐标
  45. /// </summary>
  46. [Serializable]
  47. public class Coordinate
  48. {
  49. public Coordinate()
  50. {
  51. }
  52. public Coordinate(String x, String y)
  53. {
  54. this.x = x;
  55. this.y = y;
  56. }
  57. public String x { get; set; }
  58. public String y { get; set; }
  59. }

这些是构造出的相关类。

注:
(1).返回的状态值,使用枚举类型,这样更方便程序的编写,也更容易阅读。
(2).返回的结果是一个坐标的数组,所以定义了一个Coordinate的数组。
(3).类必须要在前面标注为可以序列化,即[Serializable]。
(4).类里面的每一个属性都对应JSON数据的一个KEY,属性的名字一定要与JSON数据的KEY相同,并且使用同样的大小写。
有了CoordTransResult的类,就可以通过.net的JSON工具类来反序列化了,请看下面的代码
  1. /// <summary>
  2. /// 转换成百度坐标
  3. /// </summary>
  4. /// <param name="coordinates">坐标(经度,纬度),多个坐标间用分号隔开</param>
  5. /// <param name="mapCoordinateType">坐标类型</param>
  6. /// <returns></returns>
  7. public static CoordTransResult TransToBaiduCoord(String coordinates,
  8. MapCoordinateType mapCoordinateType = MapCoordinateType.GOOGLE_SOSO_ALIYUN_MAPABC_AMAP)
  9. {
  10. String transformUrl = String.Format(TRANSFORM_COORDINATE_URL_TEMPLEATE,
  11. MAP_KEY_BAI_DU,
  12. coordinates,
  13. (int)mapCoordinateType,
  14. (int)MapCoordinateType.BAIDU);
  15. String transformResponsText = RequestHelper.RequestUrl(transformUrl, null);
  16. CoordTransResult transformResult = null;
  17. String info = "";
  18. try
  19. {
  20. transformResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CoordTransResult>(transformResponsText);
  21. }
  22. catch (Exception e)
  23. {
  24. info = "转换坐标异常:" + e.Message;
  25. return null;
  26. }
  27. return transformResult;
  28. }

下面是测试代码

  1. protected void btnTest_Click(object sender, EventArgs e)
  2. {
  3. String coordinates = "39.92,116.46;40.13,117.10";
  4. CoordTransResult coordTransResult=
  5. BaiduMap.TransToBaiduCoord(coordinates,
  6. MapCoordinateType.GOOGLE_SOSO_ALIYUN_MAPABC_AMAP);
  7. Alert.Show(coordTransResult.status.ToString());
  8. }

测试结果如下


 

从局部变量中,我们可以看到JSON数据已经转换成到了CoordTransResult的类中,有了这样的数据,我们就可以很方便的进行其他操作,比如依据坐标,获取位置信息、商圈信息等。具体请看后一文《 C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息》。

C#的百度地图开发(二)转换JSON数据为相应的类的更多相关文章

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

    原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...

  2. C#的百度地图开发(一)发起HTTP请求

    原文:C#的百度地图开发(一)发起HTTP请求 百度地图的开发文档中给出了很多的事例,而当用到具体的语言来开发时,又会有些差异.我是使用C#来开发的.在获取相应的数据时,需要通过URL传值,然后获取相 ...

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

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

  4. 【百度地图开发之二】基于Fragment的地图框架的使用

    写在前面的话: [百度地图开发之二]基于Fragment的地图框架的使用(博客地址:http://blog.csdn.net/developer_jiangqq),转载请注明. Author:hmji ...

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

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

  6. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

    一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...

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

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

  8. Android百度地图(二)结合方向传感器我们自己定位哪里走

    Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...

  9. Android studio 百度地图开发(3)地图导航

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

随机推荐

  1. UVA 10201 Adventures in Moving - Part IV(dp)

    Problem A: Adventures in Moving - Part IV To help you move from Waterloo to the big city, you are co ...

  2. Freemarker概念简单介绍

    Freemarker概念简单介绍 1.   Freemarker是什么 模板引擎:一种基于模板的,用来生成输出文本的通过工具. 基于java开发包和类库 2.   Freemarker能做什么 MVC ...

  3. android launcher开发之图标背景以及默认配置

    1:然后我自己看了一下桌面图标的载入过程: 桌面第一次载入时是默认读取一个xml配置文件,完毕配置工作.这个配置文件在Launcher文件夹下, 路径是:\Launcher\res\xml\defau ...

  4. [置顶] 应广大童鞋的要求提供一个封装模块,直接和ADB 服务进程交互

    很多童鞋在用ADB 的时候都是直接启动ADB 的进程,然后通过管道的方式获取输出,这样多个线程同时使用ADB 的时候任务管理器一闪一闪的,是不是很不爽啊,原先介绍过可以直接和ADB 服务进程通信,不用 ...

  5. css3 animation动画事件

    当使用css3时,会遇到利用@keyframes来定义动画事件,利用以下3个事件,能够捕捉当前元素的动画: AnimationEnd //动画结束时 AnimationStart  //动画開始 An ...

  6. 一百多道.NET面试题!

    1.a=10,b=15,在不用第三方变量的前提下,把a,b的值互换 方法一: a=a+b;  b=a-b;  a=a-b;  方法二: a^=b^(b^=a^b);  2.已知数组int[] max= ...

  7. android端从服务器抓取的几种常见的数据的处理方式

    1.图片 public void look(View v) { String path = et_path.getText().toString(); try { URL url = new URL( ...

  8. [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)

    循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量.存储在其中的队列称为循环队列(Circular Queue). ...

  9. python中的中文编码

    我现在编写python代码,有一些内容需要用中文编写,例如注释,一些其它的东西 默认python是不支持中文的,包括两个方面不支持,一是文件编码默认是ansi的,二是虚拟机运行解析脚本时也是非utf的 ...

  10. 一场刺激的游戏——很文艺的山东省第四届ACM赛总结(菜鸟版)

               人生就像一个个节点,节点中或许有成功,失败,满足,遗憾,但是只要它是不可复制的,在日后,便是美好.                                         ...