LBS——地理編碼 座標轉地名(C#)
阿新 • • 發佈:2018-12-21
地理編碼 高德、百度座標取地名
採用高德免費Key方式或者百度Key方式 地理編碼 (供從經緯度座標到地址的轉換服務)
座標取地名
/// <summary>
/// 座標轉地名型別
/// </summary>
public enum CON_TYPE
{
[Description("高德座標轉地名")]
GCJ02_TO_ADDRESS = 1,
[ Description("百度座標轉地名")]
DB09_TO_ADDRESS = 2
}
/// <summary>
/// 座標轉地名
/// 如採用高德轉地名,請傳入標準GCJ02座標
/// 如採用百度轉地名,請傳入標準DB09座標
/// </summary>
/// <param name="lat">緯度(注意座標系)</param>
/// <param name="lon">經度(注意座標系)</param>
/// <param name="TYPE">型別</param>
/// <param name="ask">金鑰(高德地名不需要金鑰)</param>
/// <returns>地名</returns>
public static string GPS_TO_ADDRESS(double lat, double lon, CON_TYPE TYPE,string ask=null)
{
string MSG = "";
switch (TYPE)
{
case CON_TYPE.GCJ02_TO_ADDRESS:
MSG= GCJ02_TO_ADDRESS(lat, lon);
break;
case CON_TYPE.DB09_TO_ADDRESS:
MSG = DB09_TO_ADDRESS(lat, lon, ask);
break;
}
return MSG;
}
#region 轉化方法
/// <summary>
/// 高德轉地名
/// </summary>
/// <param name="lat">緯度</param>
/// <param name="lon">經度</param>
/// <returns></returns>
private static string GCJ02_TO_ADDRESS(double lat, double lon)
{
string url = "http://gc.ditu.aliyun.com/regeocoding";
Dictionary<string, string> myDic = new Dictionary<string, string>();
myDic.Add("l", lat + "," + lon);//36.6424,107.6821
myDic.Add("type", "010");
string jsonText = "";
string rusting = "";
try
{
jsonText = CreateHttpGetResponse(url, myDic);
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
JArray addrList = (JArray)JsonConvert.DeserializeObject(jo["addrList"].ToString());
string status = addrList[0]["status"].ToString();
if (status == "1")
{
rusting = addrList[0]["admName"].ToString() + addrList[0]["name"].ToString();
}
else
{
rusting= addrList.ToString();
}
return rusting;
}
catch (Exception)
{
return rusting;
}
}
/// <summary>
/// 百度轉地名介面
/// </summary>
/// <param name="lat">緯度</param>
/// <param name="lon">經度</param>
/// <param name="ask">百度金鑰</param>
/// <returns>地址</returns>
private static string DB09_TO_ADDRESS(double lat, double lon,string ask)
{
string url = "http://api.map.baidu.com/geocoder/v2/";
Dictionary<string, string> myDic = new Dictionary<string, string>();
myDic.Add("location", lat + "," + lon);
myDic.Add("coordtype", "gcj02ll");
myDic.Add("output", "json");
myDic.Add("ak", ask);
string jsonText = "";
string rusting = "無地址";
try
{
jsonText = CreateHttpGetResponse(url, myDic);
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
if (jo["status"].ToString() == "0")
{
JObject joadd = (JObject)JsonConvert.DeserializeObject(jo["result"].ToString());
rusting = joadd["formatted_address"].ToString();
}
else if (jo["status"].ToString() == "4")
{
rusting = "ASK超額";
}
else
{
rusting = jo.ToString();
}
return rusting;
}
catch (Exception)
{
return rusting;
}
}
#endregion
http 後臺呼叫方法
/// <summary>
/// 後臺http呼叫
/// </summary>
/// <param name="url">ip地址</param>
/// <param name="parameters">引數</param>
/// <returns>返回結果</returns>
public static string CreateHttpGetResponse(string url, IDictionary<string, string> parameters)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
}
HttpWebRequest request = null;
StringBuilder buffer = new StringBuilder();
if (!(parameters == null || parameters.Count == 0))
{
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("?{0}={1}", key, parameters[key]);
}
i++;
}
}
//如果是傳送HTTPS請求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//request = WebRequest.Create(url) as HttpWebRequest;
//request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url + buffer.ToString()) as HttpWebRequest;
}
request.Method = "GET";
request.Headers.Add("X_REG_CODE", "288a633ccc1");
request.Headers.Add("X_MACHINE_ID", "a306b7c51254cfc5e22c7ac0702cdf87");
request.Headers.Add("X_REG_SECRET", "de308301cf381bd4a37a184854035475d4c64946");
request.Headers.Add("X_STORE", "0001");
request.Headers.Add("X_BAY", "0001-01");
request.Headers.Add("X-Requested-With", "XMLHttpRequest");
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Accept-Language", "zh-CN");
request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.Accept = "*/*";
request.CookieContainer = new CookieContainer();
HttpWebResponse res;
try
{
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
Stream s = res.GetResponseStream();
StreamReader sr = new StreamReader(s);
//讀取伺服器端返回的訊息
string sReturnString = sr.ReadLine();
return sReturnString;
}