com.supermap.data.processing

类 ImageCacheBuilder

  • java.lang.Object
    • com.supermap.data.InternalHandle
      • com.supermap.data.InternalHandleDisposable
        • com.supermap.data.processing.ImageCacheBuilder
  • 所有已实现的接口:
    IDisposable


    public class ImageCacheBuilder
    extends com.supermap.data.InternalHandleDisposable
    影像缓存生成类,该类主要用于为影像数据生成供三维场景发布使用的影像缓存,其配置文件为 *.sci3d 格式。

    在三维场景中影像图层是必不可少的,如何添加影像图层请查看 Layer3Ds.add(…) 等方法的说明。

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

    ImageCacheBuilder 类为用户提供了影像缓存生成的相关接口,生成影像缓存通常情况下包含以下步骤:

    1、获得用于生成缓存的原始数据,即 Image 数据集。

    2、使用 ImageCacheBuilder 类完成影像数据集到影像缓存的生成。

    若需要在三维场景中显示的原始影像数据分开存储在多个数据集中,则此时需要通过该类分别生成缓存,存放在不同的目录下,然后分别加载影像缓存;或者将这些数据集加载到三维场景中,通过 SceneCacheBuilder.build() 方法以生成场景缓存的方式,通过一次调用即可生成对应的影像缓存。

    若需要生成缓存的原始数据集的数量较大,如100,1000,建议用户将这些数据集配成一张地图,然后生成二维或三维地图缓存,关于二三维地图缓存的生成可参见 MapCacheBuilderMapCache3DBuilder 类。

    关于影像缓存的详细介绍请参见《二三维缓存》技术文档。

    • 构造器详细资料

      • ImageCacheBuilder

        public ImageCacheBuilder()
        构造一个新的缓存生成类对象。
      • ImageCacheBuilder

        public ImageCacheBuilder(DatasetImage dataset,
                                 String outputFolder)
        根据指定的影像数据集和输出缓存文件所在文件夹的全路径名,构造一个缓存生成类对象。

        该构造函数生成的缓存对象的名字与影像数据集的名称相同。

        参数:
        dataset - 指定的影像数据集
        outputFolder - 指定的输出缓存文件所在文件夹的全路径名
      • ImageCacheBuilder

        public ImageCacheBuilder(DatasetImage dataset,
                                 String outputFolder,
                                 String name)
        根据指定的影像数据集、输出缓存文件所在文件夹的全路径名以及生成的缓存对象名称,构造一个缓存生成类对象。
        参数:
        dataset - 指定的影像数据集
        outputFolder - 指定的输出缓存文件所在文件夹的全路径名
        name - 指定的生成的缓存对象名称
    • 方法详细资料

      • getDataset

        public DatasetImage getDataset()
        返回用于创建缓存的影像数据集。
        返回:
        用于创建缓存的影像数据集。
      • setDataset

        public void setDataset(DatasetImage dataset)
        设置用于创建缓存的影像数据集。

        setImageFileName()setDataset()setDatasetGrid() 三个方法互斥,即以最后一个设置的方法为有效设置,相应的另外两个方法即使设置了也会被置为null。

        参数:
        dataset - 用于创建缓存的影像数据集。
      • getDatasetGrid

        public DatasetGrid getDatasetGrid()
        返回用于创建缓存的 GRID 数据集,影像缓存中的颜色由数据集的颜色表来控制。
        返回:
        用于创建缓存的 GRID 数据集。
      • setDatasetGrid

        public void setDatasetGrid(DatasetGrid datasetGrid)
        设置用于创建缓存的 GRID 数据集,影像缓存中的颜色由数据集的颜色表来控制。

        setImageFileName()setDataset()setDatasetGrid() 三个方法互斥,即以最后一个设置的方法为有效设置,相应的另外两个方法即使设置了也会被置为null。

        参数:
        datasetGrid - 用于创建缓存的 GRID 数据集。
      • getOutputFolder

        public String getOutputFolder()
        返回输出的缓存文件所在的目录的全路径名。
        返回:
        输出的缓存文件所在的目录的全路径名。
      • setOutputFolder

        public void setOutputFolder(String value)
        设置输出的缓存文件所在的目录的全路径名。
        参数:
        value - 输出的缓存文件所在的目录的全路径名。
      • getCacheName

        public String getCacheName()
        返回生成的缓存配置文件的名称。
        返回:
        生成的缓存配置文件的名称。
      • setCacheName

        public void setCacheName(String value)
        设置生成的缓存配置文件的名称。

        该名称对应缓存配置文件的名称,不含后缀名以及路径信息。

        参数:
        value - 生成的缓存配置文件的名称。
      • getClipRegion

        public GeoRegion getClipRegion()
        返回数据集的裁剪区域。

        数据集的裁剪区域为可以访问的区域。

        返回:
        数据集的裁剪区域。
      • setClipRegion

        public void setClipRegion(GeoRegion clipRegion)
        设置数据集的裁剪区域。

        数据集的裁剪区域为可以访问的区域。

        参数:
        clipRegion - 数据集的裁剪区域。
      • computeOutputScales

        public boolean computeOutputScales()
        计算生成影像缓存时的合适输出比例尺,即提供的默认输出比例尺。该操作会修改 setOutputScales() 方法的设置值,通过该方法可以查看默认的输出比例尺。
        返回:
        一个布尔值,若计算成功返回 true,否则返回 false。
      • getDefaultOutputScales

        public double[] getDefaultOutputScales()
        返回默认的缓存生成比例尺。
        返回:
        返回默认的缓存生成比例尺。
      • getOutputScaleCaptions

        public HashMap<Double,String> getOutputScaleCaptions()
        返回影像缓存比例尺的别名。
        返回:
        影像缓存比例尺的别名。
      • setOutputScaleCaptions

        public void setOutputScaleCaptions(HashMap<Double,String> scaleCaptions)
        设置影像缓存比例尺的别名。

        一般设置为比例尺大小倒数的字符串,如1:10000为10000。

        当设置的别名不唯一时,程序抛出异常。

        参数:
        scaleCaptions - 影像缓存比例尺的别名。
      • getOutputScales

        public double[] getOutputScales()
        返回影像缓存的比例尺数组。
        返回:
        影像缓存的比例尺数组。
      • setOutputScales

        public void setOutputScales(double[] values)
        设置影像缓存的比例尺数组。

        缓存比例尺数组中有一个非法(数值非法或出缓存时比例尺数组不是子集)时,缓存生成失败。

        参数:
        values - 影像缓存的比例尺数组。
      • getBeginLevel

        public int getBeginLevel()
        返回开始生成缓存的层数。

        层是存放数据的根节点,每层存放了不同比例尺下的数据,开始的层数用来指定显示数据的最小分辨率。

        开始的层数是一个大于0的整数。

        返回:
        开始生成缓存的层数。
      • setBeginLevel

        public void setBeginLevel(int beginLevel)
        设置开始生成缓存的层数。

        层是存放数据的根节点,每层存放了不同比例尺下的数据,开始的层数用来指定显示数据的最小分辨率。

        开始的层数是一个大于0的整数。

        参数:
        beginLevel - 开始生成缓存的层数。
      • getImageFileName

        public String getImageFileName()
        返回用于生产缓存的影像文件的名称。
        返回:
        用于生产缓存的影像文件的名称。
      • setImageFileName

        public void setImageFileName(String imageFileName)
        设置用于生产缓存的影像文件的名称。

        目前支持的文件格式为SIT,该方式的生成与通过设置数据集方式生成效果一样,该接口的使用可以简化用户的使用。

        setImageFileName()setDataset()setDatasetGrid() 三个方法互斥,即以最后一个设置的方法为有效设置,相应的另外两个方法即使设置了也会被置为null。

        参数:
        imageFileName - 用于生产缓存的影像文件的名称。
      • getImageType

        public CacheImageType getImageType()
        返回缓存图片的类型。
        返回:
        缓存图片的类型。
      • setImageType

        public void setImageType(CacheImageType imageType)
        设置缓存图片的类型。
        参数:
        imageType - 缓存图片的类型。
      • getStorageType

        public StorageType getStorageType()
        返回缓存存储方式。
        返回:
        缓存存储方式。
        默认值:
        默认值为 StorageType.Original,即原始模式。
      • setStorageType

        public void setStorageType(StorageType storageType)
        设置缓存存储方式。
        参数:
        storageType - 缓存存储方式。
      • getEndLevel

        public int getEndLevel()
        返回结束生成缓存的层数。

        层是存放数据的根节点,每层存放了不同比例尺下的数据,结束的层数用来指定显示数据的最高分辨率。

        返回:
        结束生成缓存的层数。
      • setEndLevel

        public void setEndLevel(int endLevel)
        设置结束生成缓存的层数。

        层是存放数据的根节点,每层存放了不同比例尺下的数据,结束的层数用来指定显示数据的最高分辨率。

        结束的层数一般不超过20。

        对于每个用来创建影像缓存的文件,都有一个最合适的结束层数,即使你通过该方法设置了大于该默认结束层数的层数,所生成的缓存也不会包含大于默认结束层数的缓存。

        参数:
        endLevel - 结束生成缓存的层数。
      • getDefaultBeginLevel

        public int getDefaultBeginLevel()
        返回生成影像缓存的默认起始层数。
        返回:
        生成影像缓存的默认起始层数。
      • getDefaultEndLevel

        public int getDefaultEndLevel()
        返回生成影像缓存的默认结束层数。
        返回:
        生成影像缓存的默认结束层数。
      • getSampleSize

        public int getSampleSize()
        返回缓存预处理后生成的每个缓存分块文件的采样尺寸,单位为像素。

        对于影像数据来说,该方法返回值即为缓存预处理后每个分块影像的影像尺寸。

        返回:
        缓存预处理后生成的每个缓存分块文件的采样尺寸,单位为像素。
      • setSampleSize

        public void setSampleSize(int value)
        设置缓存预处理后生成的每个缓存分块文件的采样尺寸,单位为像素。
        参数:
        value - 缓存预处理后生成的每个缓存分块文件的采样尺寸,单位为像素
      • getPassword

        public String getPassword()
        返回用于创建缓存时对数据进行加密的密码。在添加图层时,需要使用该密码才能成功添加。如果使用默认值,可不指定密码便能打开。

        该密码不会写到缓存数据的配置文件中,同时,fromConfigFile 方法也不会还原该密码。

        返回:
        用于创建缓存时对数据进行加密的密码。
        默认值:
        默认值为一个字符串。
      • setPassword

        public void setPassword(String password)
        设置用于创建缓存时对数据进行加密的密码。在添加图层时,需要使用该密码才能成功添加。如果使用默认值,可不指定密码便能打开。

        该密码不会写到缓存数据的配置文件中,同时,fromConfigFile 方法也不会还原该密码。

        *

        注意:当 StorageType.Original 时,该方法是无效的;当 StorageType.Compact 时,该方法才有效。

        参数:
        password - 用于创建缓存时对数据进行加密的密码。
      • getColorTable

        public Colors getColorTable()
        返回颜色表,即一个颜色集合对象。
        返回:
        一个颜色集合对象。
        默认值:
        默认值为颜色集合对象中没有颜色,即Colors.getCount() 方法的返回值为0。
      • setColorTable

        public void setColorTable(Colors colorTable)
        根据指定的颜色集合对象设置颜色表。

        当颜色集合对象中的颜色个数为0时,则基于栅格数据集的所生成的影像缓存保持其栅格数据集本身的颜色。

        当颜色集合对象中的颜色个数为1时,则基于栅格数据集的所生成的影像缓存的所有栅格颜色都被设置为颜色表中的这种颜色。

        当颜色集合对象中的颜色个数大于1时,则基于栅格数据集的所生成的影像缓存的颜色根据颜色表中的颜色插值。

        参数:
        colorTable - 指定的颜色集合对象。
      • getGridValueTable

        public double[] getGridValueTable()
        返回栅格值表。
        返回:
        一个存放栅格值的数组。
      • setGridValueTable

        public void setGridValueTable(double[] value)
        根据指定的栅格值数组设置栅格值表。

        栅格数据集的栅格颜色是setColorTable() 方法与setGridValueTable()相关作用的结果,有以下几点注意:

        1.如果没有通过 setColorTable() 方法设置颜色表或颜色表中的颜色个数为1,调用该方法设置栅格值无效。

        2.如果颜色表中的颜色个数为2时,栅格数据集的栅格值以栅格值数组中的最后一个栅格值为分界值,最小栅格值到分界值之间的所有栅格颜色为颜色表中的第一个颜色,分界值到最大栅格值之间的所有栅格颜色被设置为颜色表中的第二个颜色。

        3.如果颜色表中的颜色个数大于2,当栅格值数组中的栅格值的个数为1,栅格数据集的栅格值以这个栅格值为分界值,最小栅格值到分界值之间的所有栅格颜色为颜色表中的第一个颜色,分界值到最大栅格值之间的所有栅格颜色被设置为颜色表中的最后一个颜色;当栅格数组中的栅格值个数大于等于2时,栅格值表中的第一个栅格值到最小栅格值之间的所有栅格颜色被设置为颜色表中的第一个颜色,栅格值表中的最后一个栅格值到最大栅格值这个区间的所有栅格被设置为颜色表中的最后一个颜色,栅格值表中最小值和最大值这个区间的栅格颜色通过剩下的颜色表中的颜色个数插值得到。

        参数:
        value - 指定的栅格值数组。
      • getSpecialValueColor

        public Color getSpecialValueColor()
        返回基于栅格数据集的所生成的影像缓存的指定栅格值的颜色。
        返回:
        指定栅格值的颜色。
        默认值:
        默认值为 Color(0,0,0,0),即透明的黑色。
      • setSpecialValueColor

        public void setSpecialValueColor(Color value)
        设置基于栅格数据集的所生成的影像缓存的指定栅格值的颜色。

        可对将指定的栅格值的栅格颜色半透明显示,例如:ImageCacheBuilder.setSpecialValueColor(new Color(255, 0, 0,127)),以红色半透明的颜色显示指定栅格值。半透显示的前提条件是将setSpecialValueTransparent() 设置为false。

        参数:
        value - 指定栅格值的颜色。
      • getSpecialValue

        public double getSpecialValue()
        返回基于栅格数据集的所生成的影像缓存的指定栅格值。

        该方法的返回值与栅格数据集的getNoValue() 方法的返回值相等。

        返回:
        图层的特殊值。
      • setSpecialValue

        public void setSpecialValue(double value)
        设置基于栅格数据集的所生成的影像缓存的指定栅格值。

        用来生成影像缓存的栅格数据集中的每一个栅格都有不同的栅格值,该方法可使与该值相等的栅格以调用setSpecialValueColor() 所设置的颜色显示出来。

        参数:
        value - 指定的栅格值。
      • isSpecialValueTransparent

        public boolean isSpecialValueTransparent()
        返回基于栅格数据集的所生成的影像缓存的指定栅格值(SpecialValue)所处区域是否透明。
        返回:
        一个布尔值,基于栅格数据集的所生成的影像缓存的特殊值(SpecialValue)所处区域透明返回 true,否则返回 false。
        默认值:
        默认值为 false。
      • setSpecialValueTransparent

        public void setSpecialValueTransparent(boolean transparent)
        设置基于栅格数据集的所生成的影像缓存的指定栅格值(SpecialValue)所处区域是否透明。
        参数:
        transparent - 一个布尔值,true 表示指定栅格值所处区域透明,false表示不透明。
      • getDynamicPrjCoordSysType

        public PrjCoordSysType getDynamicPrjCoordSysType()
        返回基于栅格数据集生成的影像缓存所使用的投影坐标系。
        返回:
        当前栅格数据集生成的地形缓存所设置的投影坐标系类型。
      • setDynamicPrjCoordSysType

        public void setDynamicPrjCoordSysType(PrjCoordSysType prjType)
        设置基于栅格数据集生成的影像缓存所使用的投影坐标系。
        参数:
        prjType - 投影坐标系类型,指明设置的投影坐标系。
      • build

        public boolean build()
        创建影像缓存。

        如果没有对要创建影像缓存的文件设置起始层和终止层,则在调用该方法创建缓存时,会自动调用computeLevel() 方法。

        返回:
        创建成功返回 true,否则返回 false。
      • buildWithoutConfigFile

        public boolean buildWithoutConfigFile()
        为影像数据创建 SCI3D 影像缓存。使用该方法创建缓存不会生成影像缓存的配置文件。
        返回:
        一个布尔值,若创建缓存成功,返回 true,否则返回 false。
      • computeLevel

        public boolean computeLevel()
        计算并设置数据所适合的缓存级数。

        缓存的层级主要与用来创建缓存的文件(影像文件、影像数据集和栅格数据集)的范围相关。。

        如果调用了该方法,则相当于调用了setBeginLevel() 方法和setEndLevel() 方法对数据集设置系统计算的默认的起始层和终止层。

        返回:
        成功返回 true,否则返回 false。
      • computeImageFileName

        @Deprecated
        public String[] computeImageFileName()
        已过时。 
      • computeImageFileName

        @Deprecated
        public String[] computeImageFileName(int specialLevel)
        已过时。 
      • toConfigFile

        public boolean toConfigFile(String fileName)
        将SCI3D影像缓存生成类对象的相关设置写到指定的文件中,文件的后缀名为.sci3d,即缓存数据的配置文件。

        setDataset() 方法的设置值,即用于生成缓存的原始数据集不会写到配置文件中。

        参数:
        fileName - 缓存配置文件的全路径。
        返回:
        若保存缓存配置文件成功返回 true,否则返回 false。
      • fromConfigFile

        public boolean fromConfigFile(String fileName)
        导入缓存文件,根据缓存数据的配置文件中的内容来指定 SCI3D 影像缓存生成类对象相关设置的值。

        该方法不会修改 setDataset() 方法的设置值,即用于生成缓存的原始数据集不会修改。

        参数:
        fileName - 缓存配置文件的全路径。
        返回:
        若导入缓存配置文件成功返回 true,否则返回 false。
      • getTiles

        public Tile[] getTiles(Rectangle2D tileBounds,
                               double scale)
        返回指定条件的瓦片。
        参数:
        tileBounds - 瓦片范围。
        scale - 瓦片比例尺。
        返回:
        返回指定条件的瓦片。
      • getTilingMode

        public ImageTilingMode getTilingMode()
        获取影像缓存的剖分方式。
        返回:
        剖分方式。
      • setTilingMode

        public void setTilingMode(ImageTilingMode value)
        设置影像缓存的剖分方式。
        参数:
        value - 指定的剖分方式。
      • getDatasetVolume

        public DatasetVolume getDatasetVolume()
        获取三维栅格数据集。
        返回:
        三维栅格数据集。
      • setDatasetVolume

        public void setDatasetVolume(DatasetVolume value)
        设置三维栅格数据集。
        参数:
        value - 指定的三维栅格数据集。
      • getDatasetMosaic

        public DatasetMosaic getDatasetMosaic()
        获取镶嵌数据集。
        返回:
        镶嵌数据集。
      • setDatasetMosaic

        public void setDatasetMosaic(DatasetMosaic value)
        设置镶嵌数据集。
        参数:
        value - 指定的镶嵌数据集。
      • SciConfigFileToSci3DConfigFile

        public boolean SciConfigFileToSci3DConfigFile(String sciSourcePath,
                                                      String outPutFileName,
                                                      String password)
        sci转sci3d(配置文件)

        仅支持以文件方式转换的配置文件提取数据,不支持以sci配置文件流转sci3d配置文件流的方式。

        参数:
        sciSourcePath - 待转换sci文件路径。
        outPutFileName - 设置转换结果sci3d文件全路径。
        password - 密码
        返回:
        一个布尔值,若计算成功返回 true,否则返回 false。
      • SciConfigFileToSci3DConfigFile

        public byte[] SciConfigFileToSci3DConfigFile(byte[] srcStream,
                                                     String password)
        sci转sci3d(支持流传递)。

        sci配置文件流转sci3d配置文件流,仅支持转配置文件,不支持提取数据。

        参数:
        srcStream -
        password - 密码
        返回:
        输出一个结果数据
      • extractFilesFromSciCache

        public byte[] extractFilesFromSciCache(String[] sourceFileNames)
        批量获取指定tiles的流
        参数:
        sourceFileNames - 指定的tiles名称(层行列+下划线组成,例:10_377_1675)
        返回:
      • getProcessThreadsCount

        public int getProcessThreadsCount()
        用于获取线程数(球面)。
      • setProcessThreadsCount

        public void setProcessThreadsCount(int threadsCount)
        用于设置线程数(球面)。
      • getBlockScale

        public int getBlockScale()
        获取组合因子(球面)
      • setBlockScale

        public void setBlockScale(int blockScale)
        设置组合因子(球面)
      • getUpdateRegion

        public GeoRegion getUpdateRegion()
        获取影像缓存局部更新,实现指定区域进行影像缓存数据更新。
        返回:
        影像缓存更新区域
      • setUpdateRegion

        public void setUpdateRegion(GeoRegion geoRegion)
        设置影像缓存局部更新,实现指定区域进行影像缓存数据更新。

        进行局部更新时,"ImageCacheBuilder.OutputFolder"和"ImageCacheBuilder.CacheName"的值要与被更新的数据保持一致。

        参数:
        geoRegion - 影像缓存更新区域
      • addSteppedListener

        public void addSteppedListener(SteppedListener l)
        添加一个用于接收进度条事件(SteppedEvent)的监听器。
        参数:
        l - 一个用于接收进度条事件的监听器。
      • removeSteppedListener

        public void removeSteppedListener(SteppedListener l)
        移除一个用于接收进度条事件(SteppedEvent)的监听器。
        参数:
        l - 一个用于接收进度条事件的监听器。
      • dispose

        public void dispose()
        释放该对象所占用的资源。当调用该方法之后,此对象不再可用。
      • reBuildPyramid

        public boolean reBuildPyramid(String sci3dPath)
        影像缓存重建金字塔
      • setIsDisposable

        public static void setIsDisposable(com.supermap.data.InternalHandleDisposable obj,
                                           boolean disposable)

Copyright © 2021–2024 SuperMap. All rights reserved.