二维地图缓存生成类,用于生成 sci 格式的地图缓存配置文件。二维地图缓存指的是将地图生成主要供二维窗口使用的缓存。

命名空间:  SuperMap.Data.Processing
程序集:  SuperMap.Data.Processing (in SuperMap.Data.Processing)
版本: dll

语法

C#
public class MapCacheBuilder : IDisposable

备注

地图缓存是一种用于改善地图浏览用户体验的优化策略。服务器端创建了地图缓存之后,客户端用户的每一次地图浏览,比如平移、放大、缩小地图,都会向服务器端发送一个 URL 请求,此时,服务器端按照匹配的条件,将已缓存的数据返回到客户端。

使用 SuperMap Deskpro .NET 6R 产品支持以 ImagePlugin 方式加载二维地图缓存,即以数据源方式加载缓存数据,此时,缓存数据表现为影像数据集。

注意:

  1. 不推荐对生成的缓存地图进行旋转。如想得到较佳的旋转效果,建议先配好地图,对地图进行旋转,然后再生成缓存文件。
  2. 使用带有固定比例尺的地图生成缓存时需注意以下几点:
    • 生成缓存的比例尺必须为固定比例尺中的值的子集。
    • 带有固定比例尺的地图调用 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 iObjects .NET


SuperMap Objects .NET

受以下版本支持: 6.1.3

请参见