在《》一文中,我们得到了百度坐标,现在依据这一坐标来获取相应的信息。下面是相应的代码
public class BaiduMap{ ///注:/// 依据坐标获取定位信息的URL模板。 /// 参数1:百度地图API的KEY。 /// 参数2:坐标(经度,纬度)。 /// public const string GEOCODING_COORDINATE_URL_TEMPLATE = "http://api.map.baidu.com/geocoder/v2/?ak={0}&location={1}&output=json&pois=1"; ////// 依据坐标获取定位信息 /// /// 坐标(经度,纬度),多个坐标间用分号隔开 /// 坐标类型 ///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 (locationResponseText); } catch (Exception e) { info = "定位异常:" + e.Message; return null; } return locationResult; } /// /// 依据坐标获取定位信息 /// /// 坐标 ///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函数是《》中将非百度坐标转换成百度坐标方法的封装。
(3).RequestUrl方法是所说的发起HTTP请求的封装。
(4).CoordLocationResult类的具体实现,请参看后面的代码。
namespace MapApi.Baidu{ [Serializable] public class CoordLocationResult { ///注:类的构造方法依据前面所说的构造,也可以使用工具直接生成( )。/// 状态 /// public String status { get; set; } ////// 结果 /// public CoordLocationResult_Result result { get; set; } } #region CoordLocationResult_Result ////// 定位结果 /// [Serializable] public class CoordLocationResult_Result { ////// 定位的经度与纬度 /// public CoordLocationResult_Result_Location location { get; set; } ////// 结构化地址信息 /// public String formatted_address { get; set; } ////// 所在商圈信息,如 "人民大学,中关村,苏州街" /// public String business { get; set; } ////// 定位的行政区域 /// public CoordLocationResult_Result_AddressComponent addressComponent { get; set; } ////// 周边位置 /// public CoordLocationResult_Result_Poi[] pois { get; set; } ////// 周边区域 /// public CoordLocationResult_Result_PoiRegion[] poiRegions { get; set; } ////// 城市代码 /// public String cityCode { get; set; } } ////// 定位结果之定位的经纬度 /// [Serializable] public class CoordLocationResult_Result_Location { ////// 经度 /// public String lng { get; set; } ////// 纬度 /// public String lat { get; set; } } ////// 定位结果之行政区域 /// [Serializable] public class CoordLocationResult_Result_AddressComponent { ////// 城市名 /// public String city { get; set; } ////// 区县名 /// public String district { get; set; } ////// 省名 /// public String province { get; set; } ////// 街道名 /// public String street { get; set; } ////// 街道门牌号 /// public String street_number { get; set; } } #endregion #region CoordLocationResult_Result_Poi ////// 周边位置信息 /// [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": "" ////// 地址信息 /// public String addr { get; set; } ////// 数据来源 /// public String cp { get; set; } ////// 方向 /// public String direction { get; set; } ////// 离坐标点距离 /// public String distance { get; set; } ////// poi名称 /// public String name { get; set; } ////// poi类型,如’办公大厦,商务大厦’ /// public String poiType { get; set; } ////// poi坐标{x,y} /// public Coordinate point { get; set; } ////// 电话 /// public String tel { get; set; } ////// poi唯一标识 /// public String uid { get; set; } ////// 邮编 /// public String zip { get; set; } } #endregion #region CoordLocationResult_Result_PoiRegion ////// 周边区域 /// [Serializable] public class CoordLocationResult_Result_PoiRegion { ////// 目标方向。比如:内 /// public String direction_desc { get; set; } ////// 区域名称。比如:音乐·家生活广场 /// 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的官方文档说明。
这样,我们就得到了指定坐标点的位置信息,那得到了这些信息后,如果在前面的地图上显示呢?请参看后文《》。
转载请注明出处http://blog.csdn.net/xxdddail/article/details/42705549。