c#封装百度web服务geocoding api 、百度坐标转换示例(乘风破浪的姐姐第三季)

网友投稿 308 2022-06-07


1、创建基础参数类

复制代码 代码如下:

public static class BaiduConstParams    {        public const string PlaceApIv2Search = "http://api.map.baidu.com/place/v2/search";        public const string PlaceApIv2Detail = "http://api.map.baidu.com/place/v2/detail";        public const string PlaceApIv2Eventsearch = "http://api.map.baidu.com/place/v2/eventsearch";        public const string PlaceApIv2Eventdetail = "http://api.map.baidu.com/place/v2/eventdetail";        public const string GeocodingApIv2 = "http://api.map.baidu.com/geocoder/v2/";        public const string GeocodingApIv2Reverse = "http://api.map.baidu.com/geocoder/v2/";        public const string TranslateApi = "http://openapi.baidu.com/public/2.0/bmt/translate";        public const string GeoconvApi = "http://api.map.baidu.com/geoconv/v1/";    }     public static class BaiduErrorMessages    {        public const string NotKey = "密钥不存在";        public const string LackParam = "缺少必要请求参数";    }

2、定义API错误信息与产品信息

复制代码 代码如下:

public enum BaiduLbsType    {        PlaceApIv2Search,        PlaceApIv2Detail,        PlaceApIv2Eventsearch,        PlaceApIv2Eventdetail,        GeocodingApIv2,        GeocodingApIv2Reverse,        Translate,        Geoconv    }     public enum Status    {        ///

        /// 正常            ///         Ok = 0,        ///         /// 请求参数非法            ///         ParameterInvalid = 2,        ///         /// 权限校验失败        ///         VerifyFailure = 3,        ///         /// 配额校验失败        ///         QuotaFailure = 4,        ///         /// 不存在或者非法            ///         AkFailure = 5,        ///         /// Transform 内部错误        ///         InternalError = 1,        ///         /// from非法        ///         FromIllegal = 21,        ///         /// to非法        ///         ToIllegal = 22,        ///         /// coords非法        ///         CoordsIllegal = 24,        ///         /// coords个数非法,超过限制        ///                 CoordsCountIllegal = 25     }

3、定义API结果返回实体映射类

复制代码 代码如下:

public class BaiduGeocodingResults    {        ///

        /// 返回结果状态值, 成功返回0,其他值请查看附录。        ///         [JsonProperty(PropertyName = "status")]        public Status Status;         ///         /// 返回结果状态值, 成功返回0,其他值请查看附录。        ///         [JsonProperty(PropertyName = "result")]        public BaiduGeocodingResult Result;    }     public class BaiduGeocodingResult    {        ///         /// 经纬度坐标        ///         [JsonProperty(PropertyName = "location")]        public BaiduGeocodingLoaction Location;        ///         /// 位置的附加信息,是否精确查找。1为精确查找,0为不精确。        ///         [JsonProperty(PropertyName = "precise")]        public int Precise;        ///         /// 可信度        ///         [JsonProperty(PropertyName = "confidence")]        public int Confidence;        ///         /// 地址类型        ///         [JsonProperty(PropertyName = "level")]        public string Level;         ///         /// 结构化地址信息        ///         [JsonProperty(PropertyName = "formatted_address")]        public string FormattedAddress;         ///         /// 所在商圈信息,如 "人民大学,中关村,苏州街"        ///         [JsonProperty(PropertyName = "business")]        public string Business;         ///         /// 具体地址        ///         [JsonProperty(PropertyName = "addressComponent")]        public BaiduGeocodingAddress AddressComponent;    }     public class BaiduGeocodingLoaction    {        ///         /// 纬度值        ///         [JsonProperty(PropertyName = "lat")]        public decimal Lat;        ///         /// 经度值        ///         [JsonProperty(PropertyName = "lng")]        public decimal Lng;    }     public class BaiduGeocodingAddress    {        ///         /// 城市名        ///         [JsonProperty(PropertyName = "city")]        public string City;        ///         /// 区县名        ///         [JsonProperty(PropertyName = "district")]        public string District;        ///         /// 省名        ///         [JsonProperty(PropertyName = "province")]        public string Province;        ///         /// 街道名        ///         [JsonProperty(PropertyName = "street")]        public string Street;        ///         /// 街道门牌号        ///         [JsonProperty(PropertyName = "street_number")]        public string StreetNumber;    }

4、创建API通用处理类

复制代码 代码如下:

public class BaiduLbs    {        private readonly string _key;         public static string CurrentRequest = "";         public BaiduLbs(string key)        {            _key = key;        }         ///

        /// 请求        ///         ///         ///         ///         ///         public void Request(string param, BaiduLbsType baiduLbsType, Encoding encoding, Action action)        {            WebClient webClient = new WebClient { Encoding = encoding };            string url = "";            switch (baiduLbsType)            {                case BaiduLbsType.PlaceApIv2Search:                    url = string.Format(BaiduConstParams.PlaceApIv2Search + "?{0}", param);                    break;                case BaiduLbsType.PlaceApIv2Detail:                    url = string.Format(BaiduConstParams.PlaceApIv2Detail + "?{0}", param);                    break;                case BaiduLbsType.PlaceApIv2Eventsearch:                    url = string.Format(BaiduConstParams.PlaceApIv2Eventsearch + "?{0}", param);                    break;                case BaiduLbsType.PlaceApIv2Eventdetail:                    url = string.Format(BaiduConstParams.PlaceApIv2Eventdetail + "?{0}", param);                    break;                case BaiduLbsType.GeocodingApIv2:                case BaiduLbsType.GeocodingApIv2Reverse:                    url = string.Format(BaiduConstParams.GeocodingApIv2 + "?{0}", param);                    break;                case BaiduLbsType.Translate:                    url = string.Format(BaiduConstParams.TranslateApi + "?{0}", param);                    break;                case BaiduLbsType.Geoconv:                    url = string.Format(BaiduConstParams.GeoconvApi + "?{0}", param);                    break;             }            CurrentRequest = url;            action(webClient.DownloadString(url));        }         ///         /// 响应        ///         ///         ///         ///         ///         public T Response(string param, BaiduLbsType baiduLbsType, Encoding encoding)        {            T t = default(T);             Request(param, baiduLbsType, encoding, json =>                {                    if (baiduLbsType == BaiduLbsType.GeocodingApIv2 || baiduLbsType == BaiduLbsType.GeocodingApIv2Reverse)                    {                        if (json.Contains("\"result\":[]"))                        {                            json = json.Replace("\"result\":[]", "\"result\":{}");                        }                    }                    t = (T)JsonConvert.DeserializeObject(json, typeof(T));                });            return t;        }         public BaiduGeocodingResults BaiduGeocoding(string address, string city)        {            address = System.Web.HttpUtility.UrlEncode(address);            city = System.Web.HttpUtility.UrlEncode(city);            string request = string.Format("address={0}&output=json&ak={1}&city={2}", address, _key, city);            var result = Response(request, BaiduLbsType.GeocodingApIv2, Encoding.UTF8);            if (result.Status == Status.Ok && result.Result.Location == null)            {                request = string.Format("address={0}&output=json&ak={1}&city={2}", city + address, _key, city);                return Response(request, BaiduLbsType.GeocodingApIv2, Encoding.UTF8);            }            return result;        }         public BaiduGeocodingResults BaiduGeocoding(string longitude, string dimensions, string pois)        {            var location = longitude + "," + dimensions;            string request = string.Format("ak={0}&location={1}&pois={2}", _key, location, pois);            return Response(request, BaiduLbsType.GeocodingApIv2, Encoding.UTF8);        }               public GeoconvResults BaiduGeoconv(GeoconvParams geoconvParams, ref List geoconvPois)        {            geoconvParams.Ak = _key;            return Response(geoconvParams.ToString(ref geoconvPois), BaiduLbsType.Geoconv, Encoding.UTF8);        }         public GeoconvResults BaiduGeoconv(GeoconvParams geoconvParams, GeoconvPOI geoconvPoi)        {            geoconvParams.Ak = _key;            List geoconvPois = new List                                               {                                                   geoconvPoi                                               };            return Response(geoconvParams.ToString(ref geoconvPois), BaiduLbsType.Geoconv, Encoding.UTF8);        }    }


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:simplehtmldom Doc api帮助文档(simple html dom)
下一篇:Python配置同花顺全数据接口教程详解(python获取同花顺数据)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~