首页 > 学院 > 开发设计 > 正文

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

2019-11-14 15:59:18
字体:
来源:转载
供稿:网友

我们得到了百度坐标,现在依据这一坐标来获取相应的信息。下面是相应的代码

 

[html] view plaincopy在CODE上查看代码片
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;          }  }  

注:

 

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

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

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

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

 

[html] view%20plaincopy
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    }  

注:类的构造方法依据前面所说的构造,也可以使用工具直接生成(链接)。

 

下面是测试代码

 

[html] view%20plaincopy
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的官方文档说明。

这样,我们就得到了指定坐标点的位置信息,那得到了这些信息后,如果在前面的地图上显示呢?


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表