LBS——地理编码 坐标转地名(C#)

地理编码 高德、百度坐标取地名


采用高德免费Key方式或者百度Key方式 地理编码 (供从经纬度坐标到地址的转换服务)

坐标取地名

        /// <summary>
        /// 坐标转地名类型
        /// </summary>
        public enum CON_TYPE
        {
            [Description("高德坐标转地名")]
            GCJ02_TO_ADDRESS = 1,
            [Description("百度坐标转地名")]
            DB09_TO_ADDRESS = 2
        }
        /// <summary>
        /// 坐标转地名
        /// 如采用高德转地名,请传入标准GCJ02坐标
        /// 如采用百度转地名,请传入标准DB09坐标
        /// </summary>
        /// <param name="lat">纬度(注意坐标系)</param>
        /// <param name="lon">经度(注意坐标系)</param>
        /// <param name="TYPE">类型</param>
        /// <param name="ask">密钥(高德地名不需要密钥)</param>
        /// <returns>地名</returns>
        public static string GPS_TO_ADDRESS(double lat, double lon, CON_TYPE TYPE,string ask=null)
        {
            string MSG = "";
            switch (TYPE)
            {
                case CON_TYPE.GCJ02_TO_ADDRESS:
                    MSG= GCJ02_TO_ADDRESS(lat, lon);
                    break;
                case CON_TYPE.DB09_TO_ADDRESS:
                    MSG = DB09_TO_ADDRESS(lat, lon, ask);
                    break;
            }
            return MSG;
        }

        #region 转化方法
        /// <summary>
        /// 高德转地名
        /// </summary>
        /// <param name="lat">纬度</param>
        /// <param name="lon">经度</param>
        /// <returns></returns>
        private static string GCJ02_TO_ADDRESS(double lat, double lon)
        {
            string url = "http://gc.ditu.aliyun.com/regeocoding";
            Dictionary<string, string> myDic = new Dictionary<string, string>();
            myDic.Add("l", lat + "," + lon);//36.6424,107.6821
            myDic.Add("type", "010");
            string jsonText = "";
            string rusting = "";
            try
            {
                jsonText = CreateHttpGetResponse(url, myDic);
                JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
                JArray addrList = (JArray)JsonConvert.DeserializeObject(jo["addrList"].ToString());
                string status = addrList[0]["status"].ToString();
                if (status == "1")
                {
                    rusting = addrList[0]["admName"].ToString() + addrList[0]["name"].ToString();
                }
                else
                {
                    rusting= addrList.ToString();
                }
                return rusting;
            }
            catch (Exception)
            {
                return rusting;
            }
        }
        /// <summary>
        /// 百度转地名接口
        /// </summary>
        /// <param name="lat">纬度</param>
        /// <param name="lon">经度</param>
        /// <param name="ask">百度密钥</param>
        /// <returns>地址</returns>
        private static string DB09_TO_ADDRESS(double lat, double lon,string ask)
        {
            string url = "http://api.map.baidu.com/geocoder/v2/";
            Dictionary<string, string> myDic = new Dictionary<string, string>();
            myDic.Add("location", lat + "," + lon);
            myDic.Add("coordtype", "gcj02ll");
            myDic.Add("output", "json");
            myDic.Add("ak", ask);
            string jsonText = "";
            string rusting = "无地址";
            try
            {
                jsonText = CreateHttpGetResponse(url, myDic);
                JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
                if (jo["status"].ToString() == "0")
                {
                    JObject joadd = (JObject)JsonConvert.DeserializeObject(jo["result"].ToString());
                    rusting = joadd["formatted_address"].ToString();
                }
                else if (jo["status"].ToString() == "4")
                {
                    rusting = "ASK超额";
                }
                else
                {
                    rusting = jo.ToString();
                }
                return rusting;
            }
            catch (Exception)
            {
                return rusting;
            }
        }
        #endregion

http 后台调用方法

        /// <summary>
        /// 后台http调用
        /// </summary>
        /// <param name="url">ip地址</param>
        /// <param name="parameters">参数</param>
        /// <returns>返回结果</returns>
       public static string CreateHttpGetResponse(string url, IDictionary<string, string> parameters)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }

            HttpWebRequest request = null;

            StringBuilder buffer = new StringBuilder();
            if (!(parameters == null || parameters.Count == 0))
            {
                int i = 0;
                foreach (string key in parameters.Keys)
                {
                    if (i > 0)
                    {
                        buffer.AppendFormat("&{0}={1}", key, parameters[key]);
                    }
                    else
                    {
                        buffer.AppendFormat("?{0}={1}", key, parameters[key]);
                    }
                    i++;
                }
            }
            //如果是发送HTTPS请求   
            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                //request = WebRequest.Create(url) as HttpWebRequest;
                //request.ProtocolVersion = HttpVersion.Version10;
            }
            else
            {
                request = WebRequest.Create(url + buffer.ToString()) as HttpWebRequest;
            }
            request.Method = "GET";

            request.Headers.Add("X_REG_CODE", "288a633ccc1");
            request.Headers.Add("X_MACHINE_ID", "a306b7c51254cfc5e22c7ac0702cdf87");
            request.Headers.Add("X_REG_SECRET", "de308301cf381bd4a37a184854035475d4c64946");
            request.Headers.Add("X_STORE", "0001");
            request.Headers.Add("X_BAY", "0001-01");
            request.Headers.Add("X-Requested-With", "XMLHttpRequest");
            request.ContentType = "application/x-www-form-urlencoded";
            request.Headers.Add("Accept-Language", "zh-CN");
            request.Headers.Add("Accept-Encoding", "gzip, deflate");
            request.Accept = "*/*";

            request.CookieContainer = new CookieContainer();


            HttpWebResponse res;
            try
            {
                res = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }
            Stream s = res.GetResponseStream();
            StreamReader sr = new StreamReader(s);

            //读取服务器端返回的消息 
            string sReturnString = sr.ReadLine();
            return sReturnString;
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值