.Net调用百度地图API和LBS API的办法

用webclient来实现POST跟GET获取百度地图API的数据,然后用Newtonsoft.Json来对json处理,得到想要的值。

返回的json结构参考百度地图API官方文档。

代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Data.SqlClient;
  5 using System.Linq;
  6 using System.Net;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using Newtonsoft.Json;
 10 using Newtonsoft.Json.Linq;
 11 
 12 namespace CY.CommonService
 13 {
 14     public class MapHelper
 15     {
 16         private static string ak = "********";//百度应用的密钥
 17         public static string GetAddress(double latitude, double longitude)
 18         {
 19             string baiduaddress = ConvertBaidu(latitude, longitude);
 20             string url = string.Format("http://api.map.baidu.com/geosearch/v3/nearby?ak={0}&geotable_id=85509&location={1}&radius=1000&sortby=distance:1",
 21                 ak, baiduaddress);
 22             using (WebClient client = new WebClient())
 23             {
 24                 try
 25                 {
 26                     client.Encoding = Encoding.UTF8;
 27                     var map = client.DownloadString(url);
 28                     JObject jobject = JsonConvert.DeserializeObject(map) as JObject;
 29                     string address = jobject["contents"][0]["address"].ToString();
 30                     int distance = Convert.ToInt32(jobject["contents"][0]["distance"].ToString());
 31                     string json = JsonHelper.JsonSerialize(new {address = address, distance = distance});
 32                     return json;
 33                 }
 34                 catch//(Exception)
 35                 {
 36                     string address = GetBaiduMapAddress(latitude, longitude);
 37                     string json = JsonHelper.JsonSerialize(new {address = address, distance = 0});
 38                     return json;
 39                 }
 40             }
 41             
 42         }
 43 
 44         public static string GetBaiduMapAddress(double latitude, double longitude)
 45         {
 46             //string baiduaddress = ConvertBaidu(latitude, longitude);
 47             string url =
 48                 string.Format(
 49                     "http://api.map.baidu.com/geocoder/v2/?ak={0}&location={1},{2}&output=json&pois=1&coordtype=wgs84ll",
 50                     ak, latitude, longitude);
 51             using (WebClient client = new WebClient())
 52             {
 53                 try
 54                 {
 55                     client.Encoding = Encoding.UTF8;
 56                     var map = client.DownloadString(url);
 57                     JObject jobject = JsonConvert.DeserializeObject(map) as JObject;
 58                     string address = jobject["result"]["formatted_address"].ToString();
 59                     return address;
 60                 }
 61                 catch//(Exception)
 62                 {
 63                     return "出错";
 64                 }
 65             }
 66         }
 67 
 68         public static string ConvertBaidu(double latitude, double longitude)
 69         {
 70             string url = string.Format("http://api.map.baidu.com/geoconv/v1/?coords={0},{1}&ak={2}&output=json",
 71                 longitude, latitude, ak);
 72             using (WebClient client = new WebClient())
 73             {
 74                 try
 75                 {
 76                     client.Encoding = Encoding.UTF8;
 77                     var map = client.DownloadString(url);
 78                     JObject jobject = JsonConvert.DeserializeObject(map) as JObject;
 79                     string x = jobject["result"][0]["x"].ToString();
 80                     string y = jobject["result"][0]["y"].ToString();
 81                     string baiduaddress = x + "," + y;
 82                     return baiduaddress;
 83                 }
 84                 catch//(Exception)
 85                 {
 86                     return "出错";
 87                 }
 88             }
 89         }
 90 
 91         public static string SaveToBaidu(string latitude, string longitude,string address)
 92         {
 93             using (WebClient client = new WebClient())
 94             {
 95                 try
 96                 {
 97                     string data = string.Format("title={0}&address={1}&latitude={2}&longitude={3}&coord_type=1&ak={4}&geotable_id=85509",
 98                         address, address, latitude, longitude, ak);
 99                     client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
100                     byte[] sendData = Encoding.UTF8.GetBytes(data);
101                     byte[] response = client.UploadData("http://api.map.baidu.com/geodata/v3/poi/create", "POST", sendData);
102                     string responseString = Encoding.UTF8.GetString(response);
103                     JObject jobject = JsonConvert.DeserializeObject(responseString) as JObject;
104                     string status = jobject["status"].ToString();
105                     string message = jobject["message"].ToString();
106                     //string message = str.ToString();
107                     return message;
108                 }
109                 catch//(Exception)
110                 {
111                     return "出错";
112                 }
113             }
114         }
145     }
146 }

 

.Net调用百度地图API和LBS API的办法

上一篇:JPA注释,内嵌数据对象


下一篇:关于c#中委托与事件的一些理解