• C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息


    在《C#的百度地图开发(二)转换JSON数据为相应的类》一文中,我们得到了百度坐标,现在依据这一坐标来获取相应的信息。下面是相应的代码

    public class BaiduMap
    {
            /// <summary>
            /// 依据坐标获取定位信息的URL模板。
            /// 参数1:百度地图API的KEY。
            /// 参数2:坐标(经度,纬度)。        
            /// </summary>
            public const string GEOCODING_COORDINATE_URL_TEMPLATE =
                "http://api.map.baidu.com/geocoder/v2/?ak={0}&location={1}&output=json&pois=1";
    
            /// <summary>
            /// 依据坐标获取定位信息
            /// </summary>
            /// <param name="coordinates">坐标(经度,纬度),多个坐标间用分号隔开</param>
            /// <param name="mapCoordinateType">坐标类型</param>
            /// <returns></returns>
            public static CoordLocationResult FetchLocation(String coordinates,
                                                         MapCoordinateType mapCoordinateType)
            {
                CoordTransResult transformResult = TransToBaiduCoord(coordinates, mapCoordinateType);
                String info = "";
                if (!transformResult.status.Equals(CoordTransStatus.OK))
                {
                    info = "坐标转换异常:状态是---" + transformResult.status.ToString();
                    return null;
                }
    
                if (transformResult.result == null || transformResult.result.Length <= 0)
                {
                    info = "坐标转换异常:结果为空或数组长度为0";
                    return null;
                }
    
                String locationUrl = "";
                foreach (Coordinate coordTemp in transformResult.result)
                {
                    locationUrl = String.Format(GEOCODING_COORDINATE_URL_TEMPLATE,
                                                        MAP_KEY_BAI_DU,
                                                        coordTemp.x + "," + coordTemp.y);
                }
    
                String locationResponseText = RequestHelper.RequestUrl(locationUrl, null);
    
                CoordLocationResult locationResult = null;
                try
                {
                    locationResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CoordLocationResult>(locationResponseText);
                }
                catch (Exception e)
                {
                    info = "定位异常:" + e.Message;
                    return null;
                }
    
                return locationResult;
            }
    <span style="white-space:pre">	</span>    /// <summary>
            /// 依据坐标获取定位信息
            /// </summary>
            /// <param name="coordinate">坐标</param>
            /// <returns></returns>
            public static CoordLocationResult FetchLocation(Coordinate coordinate)
            {
                if (coordinate == null)
                {
                    return null;
                }
                return FetchLocation(String.Format("{0},{1}", coordinate.x, coordinate.y), MapCoordinateType.GOOGLE_SOSO_ALIYUN_MAPABC_AMAP);
            }
    }
    注:

    (1).使用const常量来定义一个百度地图API的URL模板,方便后面的调用。

    (2).TransToBaiduCoord函数是《C#的百度地图开发(二)转换JSON数据为相应的类》中将非百度坐标转换成百度坐标方法的封装。

    (3).RequestUrl方法是《C#的百度地图开发(一)发起HTTP请求》所说的发起HTTP请求的封装。

    (4).CoordLocationResult类的具体实现,请参看后面的代码。

    namespace MapApi.Baidu
    {
    
        [Serializable]
        public class CoordLocationResult
        {
            /// <summary>
            /// 状态
            /// </summary>
            public String status { get; set; }
    
            /// <summary>
            /// 结果
            /// </summary>
            public CoordLocationResult_Result result { get; set; }
        }
    
        #region CoordLocationResult_Result
        /// <summary>
        /// 定位结果
        /// </summary>
        [Serializable]
        public class CoordLocationResult_Result
        {
            /// <summary>
            /// 定位的经度与纬度
            /// </summary>
            public CoordLocationResult_Result_Location location { get; set; }
    
            /// <summary>
            /// 结构化地址信息
            /// </summary>
            public String formatted_address { get; set; }
    
            /// <summary>
            /// 所在商圈信息,如 "人民大学,中关村,苏州街"
            /// </summary>	
            public String business { get; set; }
    
            /// <summary>
            /// 定位的行政区域
            /// </summary>
            public CoordLocationResult_Result_AddressComponent addressComponent { get; set; }
    
            /// <summary>
            /// 周边位置
            /// </summary>
            public CoordLocationResult_Result_Poi[] pois { get; set; }
    
            /// <summary>
            /// 周边区域
            /// </summary>
            public CoordLocationResult_Result_PoiRegion[] poiRegions { get; set; }
    
            /// <summary>
            /// 城市代码
            /// </summary>
            public String cityCode { get; set; }
        }
    
        /// <summary>
        /// 定位结果之定位的经纬度
        /// </summary>
        [Serializable]
        public class CoordLocationResult_Result_Location
        {
            /// <summary>
            /// 经度
            /// </summary>
            public String lng { get; set; }
    
            /// <summary>
            /// 纬度
            /// </summary>
            public String lat { get; set; }
        }
    
        /// <summary>
        /// 定位结果之行政区域
        /// </summary>
        [Serializable]
        public class CoordLocationResult_Result_AddressComponent
        {
            /// <summary>
            /// 城市名
            /// </summary>
            public String city { get; set; }
    
            /// <summary>
            /// 区县名
            /// </summary>
            public String district { get; set; }
    
            /// <summary>
            /// 省名
            /// </summary>
            public String province { get; set; }
    
            /// <summary>
            /// 街道名
            /// </summary>
            public String street { get; set; }
    
            /// <summary>
            /// 街道门牌号
            /// </summary>
            public String street_number { get; set; }
        }
    
        #endregion
    
        #region CoordLocationResult_Result_Poi
        /// <summary>
        /// 周边位置信息
        /// </summary>
        [Serializable]
        public class CoordLocationResult_Result_Poi
        {
            //"addr": "福建省厦门市湖里区嘉禾路388",
            //       "cp": "NavInfo",
            //       "direction": "西",
            //       "distance": "49",
            //       "name": "永同昌大厦",
            //       "poiType": "商务大厦",
            //       "point": {
            //           "x": 118.13374113945,
            //           "y": 24.501871673827
            //       },
            //       "tel": "",
            //       "uid": "19c4b3f2642893beafb22a1e",
            //       "zip": ""
    
            /// <summary>
            /// 地址信息
            /// </summary>
            public String addr { get; set; }
    
            /// <summary>
            /// 数据来源
            /// </summary>
            public String cp { get; set; }
    
            /// <summary>
            /// 方向
            /// </summary>
            public String direction { get; set; }
    
            /// <summary>
            /// 离坐标点距离
            /// </summary>
            public String distance { get; set; }
    
            /// <summary>
            /// poi名称
            /// </summary>
            public String name { get; set; }
    
            /// <summary>
            /// poi类型,如’办公大厦,商务大厦’
            /// </summary>
            public String poiType { get; set; }
    
            /// <summary>
            /// poi坐标{x,y}
            /// </summary>
            public Coordinate point { get; set; }
    
            /// <summary>
            /// 电话
            /// </summary>
            public String tel { get; set; }
    
            /// <summary>
            /// poi唯一标识
            /// </summary>
            public String uid { get; set; }
    
            /// <summary>
            /// 邮编
            /// </summary>
            public String zip { get; set; }
        }
        #endregion
    
        #region CoordLocationResult_Result_PoiRegion
        /// <summary>
        /// 周边区域
        /// </summary>
        [Serializable]
        public class CoordLocationResult_Result_PoiRegion
        {
            /// <summary>
            /// 目标方向。比如:内
            /// </summary>
            public String direction_desc { get; set; }
    
            /// <summary>
            /// 区域名称。比如:音乐·家生活广场
            /// </summary>
            public String name { get; set; }
        }
        #endregion
    
    }
    注:类的构造方法依据前面所说的构造,也可以使用工具直接生成(链接)。

    下面是测试代码

     protected void btnTest_Click(object sender, EventArgs e)
            {          
                Coordinate coordinate = new Coordinate("39.92", "116.46");
                CoordLocationResult coordLocationResult=BaiduMap.FetchLocation(coordinate);
                Alert.Show(coordLocationResult.status.ToString());
            }

    测试结果如下

    从图中可以看到,formatted_address是位置信息,business是商圈信息,pois是周围的信息,其他的信息可自行参考百度地图WebApi的官方文档说明。

    这样,我们就得到了指定坐标点的位置信息,那得到了这些信息后,如果在前面的地图上显示呢?请参看后文《C#的百度地图开发(四)前端显示与定位》。

    转载请注明出处http://blog.csdn.net/xxdddail/article/details/42705549。

  • 相关阅读:
    百度Apollo安装说明
    Ubuntu 16.04 kinetic 下安装turtlebot2
    三维点云地图构建方法
    jupyter中添加conda环境
    Pyplot教程(深度学习入门3)
    linux下安装tomcat,部署项目
    linux下修改系统时间
    手把手集成web端手写公式功能
    如何查看端口是被哪个程序占用的
    Bootstrap的优先级、选择器、伪类
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604976.html
Copyright © 2020-2023  润新知