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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM