来深圳一年多了,感觉深圳的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:
拿到url后,可以用代码保存,方法也很简单.
using (WebClient wc = new WebClient()) { wc.DownloadFile(url, saveFile); }
总结:
这里发现一个百度api的问题,marker的color可以通过颜色的单词设置,但是label的color只能用16进制.
需要用到一个转换:
string.Format("{0:x6}", fColor.ToArgb);