废话:在一个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; }
}
手工编写,可能有错误,欢迎指正。