C#的百度地圖開發(三)依據座標擷取位置、商圈及周邊資訊

來源:互聯網
上載者:User

標籤:百度地圖   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;        }}
注:

(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。

C#的百度地圖開發(三)依據座標擷取位置、商圈及周邊資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.