C# 百度API地址坐标互相转换

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