因为需求只要完整地址所以用字符串解析。并没有使用Json解析。
public class AmapUtil
{
const string key = "132976335b2e02f3d6455f91bb8a98d4";
/// <summary>
/// 根据经纬度获取地址
/// </summary>
/// <param name="LngLatStr">经度纬度组成的字符串 例如:"113.692100,34.752853"</param>
/// <param name="timeout">超时时间默认10秒</param>
/// <returns>失败返回"" </returns>
public static string GetLocationByLngLat(string LngLatStr, int timeout = 10000)
{
string url = $"http://restapi.amap.com/v3/geocode/regeo?key={key}&location={LngLatStr}";
return GetLocationByURL(url, timeout);
}
/// <summary>
/// 根据经纬度获取地址
/// </summary>
/// <param name="lng">经度 例如:113.692100</param>
/// <param name="lat">维度 例如:34.752853</param>
/// <param name="timeout">超时时间默认10秒</param>
/// <returns>失败返回"" </returns>
public static string GetLocationByLngLat(double lng,double lat, int timeout = 10000)
{
string url = $"http://restapi.amap.com/v3/geocode/regeo?key={key}&location={lng},{lat}";
return GetLocationByURL(url, timeout);
}
/// <summary>
/// 根据URL获取地址
/// </summary>
/// <param name="url">Get方法的URL</param>
/// <param name="timeout">超时时间默认10秒</param>
/// <returns></returns>
private static string GetLocationByURL(string url,int timeout=10000)
{
string strResult = "";
try
{
HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
req.ContentType = "multipart/form-data";
req.Accept = "*/*";
//req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
req.UserAgent = "";
req.Timeout = timeout;
req.Method = "GET";
req.KeepAlive = true;
HttpWebResponse response = req.GetResponse() as HttpWebResponse;
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
strResult = sr.ReadToEnd();
}
int formatted_addressIndex = strResult.IndexOf("formatted_address");
int addressComponentIndex = strResult.IndexOf("addressComponent");
int cutIndex = addressComponentIndex - formatted_addressIndex - 23;
int subIndex = formatted_addressIndex + 20;
return strResult.Substring(subIndex, cutIndex);
}
catch (Exception)
{
strResult = "";
}
return strResult;
}
}