C#的百度地图开发(二)转换JSON数据为相应的类
在《C#的百度地图开发(一)发起HTTP请求》一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON数据,我们先将这个JSON数据,使用在线工盯进行格式化。
- {
- "status": 0,
- "result": [
- {
- "x": 39.926674689976,
- "y": 116.46594011987
- },
- {
- "x": 40.136798619397,
- "y": 117.10587935376
- }
- ]
- }
根据官方的说明,我们传入几个坐标,转换后就会得到几个坐标,并且是一样的顺序。为了能够更多好的操作数据,我们需要将其转换到相应的类中,所以首先要构造相应的类,然后将数据反序列化到该类中(这里要用到.net的json库Newtonsoft.Json.dll,这个可以到网上自行下载)。
- /// <summary>
- /// 百度坐标的转换结果
- /// </summary>
- [Serializable]
- public class CoordTransResult
- {
- /// <summary>
- /// 状态
- /// </summary>
- public CoordTransStatus status { get; set; }
- /// <summary>
- /// 结果(坐标数组)
- /// </summary>
- public Coordinate[] result { get; set; }
- }
- public enum CoordTransStatus
- {
- /// <summary>
- /// 正常
- /// </summary>
- OK = 0,
- /// <summary>
- /// 内部错误
- /// </summary>
- INTERNAL_ERROR = 1,
- /// <summary>
- /// from非法
- /// </summary>
- FROM_ILLEGAL = 21,
- /// <summary>
- /// to非法
- /// </summary>
- TO_ILLEGAL = 22,
- /// <summary>
- /// coords格式非法
- /// </summary>
- COORDS_ILLEGAL = 24,
- /// <summary>
- /// coords个数非法,超过限制
- /// </summary>
- COORDS_COUNT_ILLEGAL = 25
- }
- /// <summary>
- /// 坐标
- /// </summary>
- [Serializable]
- public class Coordinate
- {
- public Coordinate()
- {
- }
- public Coordinate(String x, String y)
- {
- this.x = x;
- this.y = y;
- }
- public String x { get; set; }
- public String y { get; set; }
- }
这些是构造出的相关类。
- /// <summary>
- /// 转换成百度坐标
- /// </summary>
- /// <param name="coordinates">坐标(经度,纬度),多个坐标间用分号隔开</param>
- /// <param name="mapCoordinateType">坐标类型</param>
- /// <returns></returns>
- public static CoordTransResult TransToBaiduCoord(String coordinates,
- MapCoordinateType mapCoordinateType = MapCoordinateType.GOOGLE_SOSO_ALIYUN_MAPABC_AMAP)
- {
- String transformUrl = String.Format(TRANSFORM_COORDINATE_URL_TEMPLEATE,
- MAP_KEY_BAI_DU,
- coordinates,
- (int)mapCoordinateType,
- (int)MapCoordinateType.BAIDU);
- String transformResponsText = RequestHelper.RequestUrl(transformUrl, null);
- CoordTransResult transformResult = null;
- String info = "";
- try
- {
- transformResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CoordTransResult>(transformResponsText);
- }
- catch (Exception e)
- {
- info = "转换坐标异常:" + e.Message;
- return null;
- }
- return transformResult;
- }
下面是测试代码
- protected void btnTest_Click(object sender, EventArgs e)
- {
- String coordinates = "39.92,116.46;40.13,117.10";
- CoordTransResult coordTransResult=
- BaiduMap.TransToBaiduCoord(coordinates,
- MapCoordinateType.GOOGLE_SOSO_ALIYUN_MAPABC_AMAP);
- Alert.Show(coordTransResult.status.ToString());
- }
测试结果如下
从局部变量中,我们可以看到JSON数据已经转换成到了CoordTransResult的类中,有了这样的数据,我们就可以很方便的进行其他操作,比如依据坐标,获取位置信息、商圈信息等。具体请看后一文《 C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息》。
C#的百度地图开发(二)转换JSON数据为相应的类的更多相关文章
- C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息
原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...
- C#的百度地图开发(一)发起HTTP请求
原文:C#的百度地图开发(一)发起HTTP请求 百度地图的开发文档中给出了很多的事例,而当用到具体的语言来开发时,又会有些差异.我是使用C#来开发的.在获取相应的数据时,需要通过URL传值,然后获取相 ...
- 调用百度地图开发平台的JavascriptAPI实现将市县位置转换成坐标
最近的项目要做的地图比较多,有的还比较复杂,而地图用到的坐标,上网找json文件更是良莠不齐的.真是让人伤脑筋,后来突然想到了百度地图开发平台,没想到真的有对应的API哦,谢天谢地!!!下面说一下完整 ...
- 【百度地图开发之二】基于Fragment的地图框架的使用
写在前面的话: [百度地图开发之二]基于Fragment的地图框架的使用(博客地址:http://blog.csdn.net/developer_jiangqq),转载请注明. Author:hmji ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索
一个. 百度地图城市位置和POI搜索知识 上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...
- android 百度地图开发实例(转载)
因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...
- Android百度地图(二)结合方向传感器我们自己定位哪里走
Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...
- Android studio 百度地图开发(3)地图导航
Android studio 百度地图开发(3)地图导航 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
随机推荐
- 单元测试工具 SmokeTest
.NET 程序集单元测试工具 SmokeTest Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke ...
- javascript中apply和eval结合的强大用法
eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码 如下例子 <a class="cl ...
- 基于visual Studio2013解决面试题之0305广度优先搜索二叉树
题目
- 多校 4686 Arc of Dream hdu 矩阵解
构造矩阵如下: Ai*bi AX*BX AX*BY AY*BX AY*BY 0 a(i-1)*b(i-1) Ai 0 AX 0 AY 0 a(i-1) Bi 0 0 BX BY 0 b(i-1) 1 ...
- 网页class命名规范
CSS样式命名整理 页面结构 容器: container/wrap 总体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:nav 側栏:si ...
- BUG: scheduling while atomic: events/0/4/总结
对于Linux内核来说,Oops就意外着内核出了异常,此时会将产生异常时CPU的状态,出错的指令地址.数据地址及其他寄存器,函数调用的顺序甚至是栈里面的内容都打印出来,然后根据异常的严重程度来决定下一 ...
- TControlStyle.csParentBackground的作用(附Delphi里的所有例子,待续)
Only applicable when Themes are enabled in applications on Windows XP. Causes the parent to draw its ...
- 一劳永逸解决UAC问题(修改QMAKE_LFLAGS_EXE的设置)
如果你的程序跑在一个开启了UAC保护的系统中,而你的程序又没有"盾牌"的话,程序总是会受到各种阻挠的,比如读写文件,写注册表等. 有了"盾牌"的话就不会出现一些 ...
- [置顶] dubbo管理控制台安装
dubbo管理控制台开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能. 1.下载dubbo 地址:http://code.alibabatech.com/mvn ...
- [Android学习笔记]扩展application
扩展Application对象 每一个应用程序启动之后,都会分配一个linux用户,并且运行在一个独立的进程中.默认情况下,一个应用程序只会运行在一个进程中(可以通过配置android:process ...