废话:在一个WPF项目中要使用百度地图坐标转换API,百度都说添加Web引用的方式来获取数据,的确是可以,但是要在程序里动态获取就很麻烦,代码又臭又长,
一向比较懒的我非常难以接受,C#这样优美的语言怎能没有好的解决办法呢?于是在坚持查询下,收集各方资料终于找到了我想要的简单的处理方法。
答案,来之不易,特记录一下,希望能为自己和大家使用。
正文:写代码的文采一般都不好,直接上代码吧,如下:
string webServiceUrl="http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;&from=1&to=5&ak=你的密钥"; //WebRequest在System.Net命名空间里。 WebRequest request = WebRequest.Create(webServiceUrl); request.Method = "GET";//get,post,put.... request.ContentType = "application/json;charset=utf-8"; int num1=0,num2=0; Dictionary<int, double> lngDictionary = new Dictionary<int, double>(); Dictionary<int, double> latDictionary = new Dictionary<int, double>(); using (Stream s = request.GetResponse().GetResponseStream()) { using (StreamReader sr = new StreamReader(s)) { var jsonData = sr.ReadToEnd(); //JavaScriptSerializer类是微软自己提供的解析JSON的工具类,要引用System.Web.Script.Serialization命名空间,需要添加System.Web.Extensions.dll引用。 JavaScriptSerializer json = new JavaScriptSerializer(); //BaiduCoordsConvertResult是我自定义的类对象,根据json数据的内容去定义的,一会后面贴出 BaiduCoordsConvertResult resultData = json.Deserialize<BaiduCoordsConvertResult>(jsonData); if (resultData.status == 0) { foreach (var item in resultData.result) { lngDictionary.Add(num1++, item.x); latDictionary.Add(num2++, item.y); } } else { MessageBox.Show("坐标转换失败,请重新打开文件", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } }
下面贴出根据百度地图坐标转换API返回json数据格式定义的BaiduCoordsConvertResult类的定义
public class BaiduCoordsConvertResult { public int status { get; set; } public XYData[] result { get; set; } } public class XYData { public double x { get; set; } public double y { get; set; } }
手工编写,可能有错误,欢迎指正。