C#调用百度静态地图

时间:2024-12-26 22:37:32

来深圳一年多了,感觉深圳的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

C#调用百度静态地图

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格式的地图图片,地图大小、显示范围、缩放级别可设定。
  • 可生成添加多种覆盖物的地图图片,包括普通标注点、自定义样式标注点、标签、折线、多边形。
  • 支持高清地图底图,可更好适配高分屏的移动设备。

本文提供了标注点,标签的方法,但是没有对折现和多边形进行实现.有需要的朋友可自行添加.

下面是类设计图.

C#调用百度静态地图C#调用百度静态地图C#调用百度静态地图

地图的参数主要是:

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 = ,
Height = ,
Zoom = ,
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 = ;
label.Latitude = map.Latitude;
label.Longitude = map.Longitude;
label.FontSize = ;
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

C#调用百度静态地图

拿到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