我們得到了百度坐標,現在依據這一坐標來獲取相應的信息。下面是相應的代碼
- 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類的具體實現,請參看后面的代碼。
- 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的官方文檔說明。
這樣,我們就得到了指定坐標點的位置信息,那得到了這些信息后,如果在前面的地圖上顯示呢?