二维地图缓存生成类,用于生成 sci 格式的地图缓存配置文件。二维地图缓存指的是将地图生成主要供二维窗口使用的缓存。
命名空间:
SuperMap.Data.Processing程序集: SuperMap.Data.Processing (in SuperMap.Data.Processing)
版本: dll
语法
C# |
---|
public class MapCacheBuilder : IDisposable |
备注
地图缓存是一种用于改善地图浏览用户体验的优化策略。服务器端创建了地图缓存之后,客户端用户的每一次地图浏览,比如平移、放大、缩小地图,都会向服务器端发送一个 URL 请求,此时,服务器端按照匹配的条件,将已缓存的数据返回到客户端。
使用 SuperMap Deskpro .NET 6R 产品支持以 ImagePlugin 方式加载二维地图缓存,即以数据源方式加载缓存数据,此时,缓存数据表现为影像数据集。
注意:
- 不推荐对生成的缓存地图进行旋转。如想得到较佳的旋转效果,建议先配好地图,对地图进行旋转,然后再生成缓存文件。
- 使用带有固定比例尺的地图生成缓存时需注意以下几点:
- 生成缓存的比例尺必须为固定比例尺中的值的子集。
- 带有固定比例尺的地图调用 ComputeOutputScales() 时计算出的比例尺就是固定比例尺的值。
关于二维地图缓存的详细介绍请参见《二三维缓存》技术文档。
示例
以下代码示范如何生成地图缓存,并且展示如何进行相关参数的设置来满足建立缓存的参数要求。
假设打开了一个工作空间workspace对象,工作空间中存在一幅地图并且该地图已在地图窗口(m_mapControl 对象)中打开。
另外,代码中还使用了一些事先声明的变量:m_cacheName为String类型的变量;g_outputFolder为String类型的变量,并且赋值为一个存储目录;m_outputScales为一个Double类型的一维数组;m_stringBuilder为StringBuilder对象。
CopyC#
private void MapCacheBuilderSample() { try { //创建一个MapCacheBuilder对象,对其进行必要的设置 m_mapCacheBuilder = new MapCacheBuilder(); //生成的地图缓存配置文件的名称 m_cacheName = m_mapControl.Map.Name; m_mapCacheBuilder.CacheName = m_cacheName; //生成的地图缓存输出的文件夹 m_mapCacheBuilder.OutputFolder = g_outputFolder; //生成的地图缓存对象 m_mapCacheBuilder.Map = m_mapControl.Map; // 设置生成的地图缓存的比例尺数组 m_outputScales = new Double[4]; Double initScale = m_mapControl.Map.Scale * 2; for (Int32 i = 0; i < 4; i++) { m_outputScales[i] = initScale; initScale /= 2; } m_mapCacheBuilder.OutputScales = m_outputScales; //获取在指定比例尺下,根据给定中心点生成的地图缓存图片名称 m_mapCacheBuilder.ComputeImageFileName(new Point2D(81.6845, 14.644), 1 / 465.074235610423); //计算生成地图缓存时的合适输出比例尺,即默认输出比例尺 m_mapCacheBuilder.ComputeOutputScales(); //获取或设置地图缓存的剖分方式:Local为本地剖分,Global为全球性剖分 m_mapCacheBuilder.TilingMode = MapTilingMode.Local; //生成的地图缓存的瓦片的格式 m_mapCacheBuilder.TileFormat = TileFormat.PNG; //生成的地图缓存的瓦片的大小 m_mapCacheBuilder.TileSize = TileSize.Size256; //设置生成缓存的版本 m_mapCacheBuilder.Version = MapCacheVersion.Version_50; //生成的地图缓存的存储类型 m_mapCacheBuilder.StorageType = StorageType.Original; //设置地图缓存的密码 m_mapCacheBuilder.Password = "123456"; //设置MapControl当前地图的可见范围生成地图缓存 m_mapCacheBuilder.Bounds = m_mapControl.Map.ViewBounds; //设置地图缓存图片是否背景透明 m_mapCacheBuilder.IsTransparent = false; //设置生成的地图缓存的裁剪区域,用以设置不规则范围来生成缓存 m_mapCacheBuilder.ClipRegion = new GeoRegion(new Point2Ds(new Point2D[] { new Point2D(10, 10), new Point2D(30, 10), new Point2D(30, 20), new Point2D(10, 20) })); //设置生成缓存的DPI m_mapCacheBuilder.DPI = 76.2; //生成地图缓存图片的压缩率 m_mapCacheBuilder.ImageCompress = 80; //获取地图缓存的 Hash 值 String stringHashCode = m_mapCacheBuilder.HashCode; //设置地图缓存的索引范围 m_mapCacheBuilder.IndexBounds = m_mapControl.Map.Bounds; //设置是否追加生成缓存 m_mapCacheBuilder.IsAppending = false; //设置缓存日志文件里是否写入缓存生成的进度信息 m_mapCacheBuilder.IsBlockOverRecord = true; //设置缓存生成完成是否删除日志文件 m_mapCacheBuilder.IsDeleteLogFile = false; //设置是否完全填充缓存图片 m_mapCacheBuilder.IsFillMargin = true; //设置缓存日志文件里是否写入每个比例尺缓存生成结束时的信息 m_mapCacheBuilder.IsScaleOverRecord = false; //设置缓存日志文件里是否写入缓存生成结束时的结果信息 m_mapCacheBuilder.IsTaskOverRecord = false; //生成地图缓存 m_mapCacheBuilder.Build(); //将地图的用户配置生成指定文件的缓存配置文件 m_mapCacheBuilder.ToConfigFile(Path.Combine(Path.Combine(g_outputFolder, m_cacheName), m_cacheName + ".sci")); //获取返回生成缓存的结果信息,包括生成图片数,各种耗时等 m_stringBuilder.AppendFormat("缓存生成共用:[{0}ms]", m_mapCacheBuilder.BuildResult.BuildTime); m_stringBuilder.AppendLine(); m_stringBuilder.AppendFormat("绘制耗时:[{0}ms]", m_mapCacheBuilder.BuildResult.DrawTime); m_stringBuilder.AppendLine(); m_stringBuilder.AppendFormat("IO操作耗时:[{0}ms]", m_mapCacheBuilder.BuildResult.IOTime); m_stringBuilder.AppendLine(); m_stringBuilder.AppendFormat("查询耗时:[{0}ms]", m_mapCacheBuilder.BuildResult.QueryTime); m_stringBuilder.AppendLine(); m_stringBuilder.AppendFormat("共生成图片[{0}]张", m_mapCacheBuilder.BuildResult.TileCount); //添加SteppedListener,在事件处理函数中显示创建缓存的进度 m_mapCacheBuilder.Stepped += new SteppedEventHandler(mapCacheBuilder_Stepped); } catch (Exception ex) { Trace.WriteLine(ex.Message); } }
继承层次
System..::.Object
SuperMap.Data.Processing..::.MapCacheBuilder
SuperMap.Data.Processing..::.MapCacheBuilder