zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java-ApiDemo
    java编译器特性
    java
    java
    java
    java
    java
    java
    hdoj 3549 Flow Problem(最大网络流)
    hdoj 1269 迷宫城堡(强连通分量)
  • 原文地址:https://www.cnblogs.com/kulong995/p/3368048.html
Copyright © 2011-2022 走看看