通過C#代碼將地址字符串轉為經緯度坐標,或者將經緯度轉為具體的地址字符串,在不通外網的項目中是有需求的。
具體步驟:
一、創建BaiduMapHelper,用於定義地址信息和請求。
public static class BaiduMapHelper { #region 常量 //百度地圖Api Ak public const string BaiduAk = "你的百度Key"; /// <summary> /// 經緯度 逆地理編碼 Url 需要Format 0.ak 1.經度 2.緯度 /// </summary> private const string BaiduGeoCoding_ApiUrl = "http://api.map.baidu.com/geocoder/v2/?ak={0}&location={1},{2}&output=json&pois=0"; /// <summary> /// 0.地址字符串 1.ak /// </summary> private const string BaiduGeoCoding_ApiCoord = "http://api.map.baidu.com/geocoder/v2/?ak={0}&address={1}&output=json"; #endregion #region 地址轉換器 /// <summary> /// 根據地址信息 獲取 經緯度 /// </summary> /// <param name="addressStr">地址字符串</param> /// <returns></returns> public static BaiDuGeoCoding AddressToCoordinate(string addressStr) { string url = string.Format(Baidu_GeoCoding_ApiCoord, addressStr); var model = HttpClientHelper.GetResponse<BaiDuGeoCoding>(url); return model; } /// <summary> /// 根據經緯度 獲取 地址信息 /// </summary> /// <param name="lat">經度</param> /// <param name="lng">緯度</param> /// <returns></returns> public static BaiDuGeoCoding CoordinateToAddress(object lat, string lng) { string url = string.Format(Baidu_GeoCoding_ApiUrl, lat, lng); var model = HttpClientHelper.GetResponse<BaiDuGeoCoding>(url); return model; } #endregion #region 輔助格式化 /// <summary> /// /// <summary> /// 經緯度 逆地理編碼 Url 需要Format 0.經度 1.緯度 /// </summary> /// </summary> public static string Baidu_GeoCoding_ApiUrl { get { return string.Format(BaiduGeoCoding_ApiUrl, BaiduAk, "{0}", "{1}"); } } /// <summary> /// 地址字符串 /// </summary> public static string Baidu_GeoCoding_ApiCoord { get { return string.Format(BaiduGeoCoding_ApiCoord, BaiduAk, "{0}"); } } #endregion #region model public class BaiDuGeoCoding { public int Status { get; set; } public Result Result { get; set; } } public class Result { public Location Location { get; set; } public string Formatted_Address { get; set; } public string Business { get; set; } public AddressComponent AddressComponent { get; set; } public string CityCode { get; set; } } public class AddressComponent { /// <summary> /// 省份 /// </summary> public string Province { get; set; } /// <summary> /// 城市名 /// </summary> public string City { get; set; } /// <summary> /// 區縣名 /// </summary> public string District { get; set; } /// <summary> /// 街道名 /// </summary> public string Street { get; set; } public string Street_number { get; set; } } public class Location { public string Lng { get; set; } public string Lat { get; set; } } #endregion }
二、創建HttpClientHelper,用於操作具體請求,返回響應數據。
public static class HttpClientHelper { /// <summary> /// GET請求 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <returns></returns> public static T GetResponse<T>(string url) where T : class, new() { string returnValue = string.Empty; HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(url)); webReq.Method = "GET"; webReq.ContentType = "application/json"; using (HttpWebResponse response = (HttpWebResponse)webReq.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { returnValue = streamReader.ReadToEnd(); T result = default(T); result = JsonConvert.DeserializeObject<T>(returnValue); return result; } } } }
三 、獲取
調用相應的發放獲取數據
BaiduMapHelper.AddressToCoordinate(地址串);
BaiduMapHelper.CoordinateToAddress(經緯度);
尊重他人勞動成果,參考原文 https://www.cnblogs.com/genesis/p/6644895.html