C#調用百度靜態地圖


  來深圳一年多了,感覺深圳的IT氛圍確實比長沙好,工作和生活節奏比較快,適合於學習.來深后一直在現在所在的公司,部門從開始4個人,發展到現在10來人了,感覺還是不錯的.

發現自己很少寫博客了,倒不是學得比長沙少,只是一般用為知筆記(http://wiz.cn/index.html),因為比較方便快捷.但是還是得寫一寫了:),一來分享,二來鍛煉自己.往后爭取每周

分享一點.

  這次項目中移動端有一處需求是百度地圖截圖的上傳,開始設計的是上傳圖片.但是通過查閱百度的API(http://developer.baidu.com/map/staticimg.htm)

發現其新提供了獲取靜態圖的功能.那么接口只需要很少的參數即可實現這個功能.

 如:http://api.map.baidu.com/staticimage?center=116.403874,39.914888&width=300&height=200&zoom=15

center:坐標格式lng<經度>,lat<緯度>.也可以是中文名稱.

width,height:生成圖片的寬高.

zoom:地圖級別[3,19].

  根據百度"參考"谷歌的習慣,料想谷歌必定有這個功能,想必外國朋友都寫好了幫助方法.google一下發現有個正是我需要的:

http://www.codeproject.com/Articles/28492/A-C-Wrapper-for-Google-s-Static-Map-API

英文不錯的可以直接看.我按照作者的思路改成了百度的幫助方法的.

根據百度提供了靜態圖API,主要包括以下功能:

  • PNG格式的地圖圖片,地圖大小、顯示范圍、縮放級別可設定。
  • 可生成添加多種覆蓋物的地圖圖片,包括普通標注點、自定義樣式標注點、標簽、折線、多邊形。
  • 支持高清地圖底圖,可更好適配高分屏的移動設備。

 本文提供了標注點,標簽的方法,但是沒有對折現和多邊形進行實現.有需要的朋友可自行添加.

下面是類設計圖.

地圖的參數主要是:

Width:生成靜態圖的寬.

Height:生成靜態圖的高.

Latitude:地圖緯度.

Markers集合:包括Marker的經緯度,大小,顏色,文字等屬性.

Labels集合:包括Labe的經緯度,大小,文字,文字顏色,背景色等屬性.

根據百度API提供的屬性,將size和color設為其提供的enum類型.

下面的代碼會創建一個靜態圖地址的url:

 var marker = new StaticMapHelper.MapMarker();
            var label = new StaticMapHelper.MapLabel();

            var map = new StaticMapHelper
            {
                Width = 300,
                Height = 300,
                Zoom = 18,
                Latitude = 113.989119,
                Longitude = 22.557382
            };
            marker.Latitude = map.Latitude;
            marker.Longitude = map.Longitude;
            marker.Size = StaticMapHelper.mSize.l;
            marker.Color = StaticMapHelper.mColor.Black;
            marker.Label = "A";
            map.Markers.Add(marker);

            label.Content = "東方科技園";
            label.Border = 1;
            label.Latitude = map.Latitude;
            label.Longitude = map.Longitude;
            label.FontSize = 16;
            label.FontColor = Color.Red;
            label.BgColor = Color.Blue;
            map.Labels.Add(label);
            string url = map.Render();

生成url:

http://api.map.baidu.com/staticimage?center=113.989119,22.557382&zoom=18&weight=300&height=300&markers=113.989119,22.557382&markerStyle=l,black,A&labels=113.989119,22.557382&labelStyles=%E4%B8%9C%E6%96%B9%E7%A7%91%E6%8A%80%E5%9B%AD,1,16,ffff0000,ff0000ff,0

 

拿到url后,可以用代碼保存,方法也很簡單.

 using (WebClient wc = new WebClient())
                    {
                        wc.DownloadFile(url, saveFile);
                    }

 

總結:

這里發現一個百度api的問題,marker的color可以通過顏色的單詞設置,但是label的color只能用16進制.

需要用到一個轉換:

string.Format("{0:x6}", fColor.ToArgb);

源代碼如下:http://files.cnblogs.com/kulong995/StaticMap.7z


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM