Fork me on GitHub

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);

源代码如下:https://files.cnblogs.com/kulong995/StaticMap.7z

posted @ 2013-10-14 17:08  idoku  阅读(5609)  评论(0编辑  收藏  举报