通过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