com.supermap.data

类 DatasetImage



  • public class DatasetImage
    extends Dataset

    影像数据集类。

    影像数据集类,该类用于描述影像数据,不具备属性信息,例如影像地图、多波段影像和实物地图等。

    光栅数据采用网格形式组织并使用二维栅格的像素值来记录数据,每个栅格(cell)代表一个像素要素,栅格值可以描述各种数据信息。影像数据集中每一个栅格存储的是一个颜色值或颜色的索引值(RGB 值)。

    注意:在对数据集进行操作前需要先打开数据集,即调用 Dataset.open() 方法。

    • 方法详细资料

      • getBlockSizeOption

        public BlockSizeOption getBlockSizeOption()
        返回影像数据集的像素分块类型。
        返回:
        影像数据集的像素分块类型。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • getClipRegion

        public GeoRegion getClipRegion()
        返回影像数据集的裁剪区域。若用户设置栅格数据集的裁剪区域后,影像数据集就按照给定的区域进行显示,区域之外的都不显示。

        注意:

        1.当用户所设定的影像数据集的地理范围(即调用 DatasetImage.SetGeoReference() 方法)与所设定的裁剪区域无重叠区域,影像数据集不显示。

        2.当重新设置影像数据集的地理范围,不自动修改影像数据集的裁剪区域。

        返回:
        影像数据集的显示区域。
      • setClipRegion

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

        当该方法设置后,影像数据集就按照给定的区域进行显示,区域之外的都不显示。

        注意:

        1.当用户所设定的影像数据集的地理范围(即调用 DatasetImage.SetGeoReference() 方法)与所设定的裁剪区域无重叠区域,影像数据集不显示。

        2.当重新设置影像数据集的地理范围,不自动修改影像数据集的裁剪区域。

        参数:
        value - 影像数据集的显示区域。
        示范代码:
        以下代码示范如何给栅格数据集设置显示区域。
         public void setClipRegionTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)包含一个名为 Image 的影像数据集 datasetImage,打开影像数据集
                // 定义显示区域的范围
                Point2Ds point2Ds = new Point2Ds();
                point2Ds.add(new Point2D(0, 0));
                point2Ds.add(new Point2D(800, 0));
                point2Ds.add(new Point2D(800, 800));
                point2Ds.add(new Point2D(0, 800));
                point2Ds.add(new Point2D(0, 0));
                GeoRegion georegion = new GeoRegion(point2Ds);
        
                // 设置显示区域
                datasetImage.setClipRegion(georegion);
                datasetImage.close();
            }
         
      • getImageStatisticsResult

        public HashMap<Integer,StatisticsResult> getImageStatisticsResult()
        返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。

        若影像数据集没有进行过栅格统计,即没有调用 buildStatistics() 方法,则各波段的统计结果对象的各项统计值均为0。

        返回:
        返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。
      • getHasPyramid

        @Deprecated
        public boolean getHasPyramid()
        已过时。 判断影像数据集是否已创建金字塔。
        返回:
        影像数据集是否已创建金字塔,已创建金字塔返回 true,否则返回 false。
        另请参阅:
        DatasetImage.buildPyramid()
        示范代码:
        请参见 DatasetImage.buildPyramid() 方法的示例。
      • getBandCount

        public int getBandCount()
        返回波段的个数。
        返回:
        波段的个数。
      • getNoData

        public double getNoData(int index)
        返回影像数据集指定波段的无值。
        参数:
        index - 指定的波段索引号,从 0 开始。
        返回:
        影像数据集中指定波段的无值。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • setNoData

        public void setNoData(double value,
                              int index)
        设置影像数据集指定波段的无值。
        参数:
        value - 指定的无值。
        index - 指定的波段索引号,从 0 开始。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • getMinValue

        public double getMinValue(int index)
        返回影像数据集指定波段的最小像素值。
        参数:
        index - 指定的波段索引号,从 0 开始。
        返回:
        影像数据集指定波段的最小像素值。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • getMaxValue

        public double getMaxValue(int index)
        返回影像数据集指定波段的最大像素值。
        参数:
        index - 指定的波段索引号,从 0 开始。
        返回:
        影像数据集指定波段的最大像素值。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • getPixelFormat

        public PixelFormat getPixelFormat(int index)
        返回影像数据集指定波段的像素格式。
        参数:
        index - 指定的波段索引号,从 0 开始。
        返回:
        影像数据集指定波段的像素格式。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • getPalette

        public Colors getPalette(int index)
        返回影像数据集指定波段的颜色调色板。
        参数:
        index - 指定的波段索引号,从 0 开始。
        返回:
        影像数据集指定波段的颜色调色板。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • setPalette

        public void setPalette(Colors value,
                               int index)
        设置影像数据集指定波段的颜色调色板。
        参数:
        value - 指定的颜色调色板。
        index - 指定的波段索引号,从 0 开始。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • setGeoReference

        public void setGeoReference(Rectangle2D value)
        将影像数据集对应到地理坐标系中指定的地理范围。当导入某个影像数据之后,数据的坐标范围有误,可以通过指定一个 Bounds,使得导入的影像数据具有正确的坐标范围。
        参数:
        value - 指定的影像数据的地理范围。
      • calculateExtremum

        public boolean calculateExtremum()
        计算影像数据集的极值,即像素的最大值和最小值。

        调用改方法后,getMaxValue()getMinValue() 方法的返回值为影像数据集的像素的最大值和最小值,不调用该方法,这两个方法返回值为默认值 0。

        返回:
        如果计算成功返回 true,否则返回 false。
        示范代码:
        以下代码示范如何计算影像数据集中像素的最大值最小值。
         public void calculateExtremumTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)中包含一个影像数据集 BeijingTerrian,打开栅格数据集
                // 计算栅格数据集中栅格值的最大值最小值
                DatasetImage datasetImage = (DatasetImage) datasource.getDatasets().get(
                        "BeijingTerrian");
                datasetImage.open();
                if (datasetImage.calculateExtremum()) {
                    double maxValue = datasetImage.getMaxValue();
                    double minValue = datasetImage.getMinValue();
                    System.out.println("像素值的最大值为:" + maxValue + "像素值的最小值为:" + minValue);
                }
                datasetGrid.close();
            }
         
      • calculateExtremum

        public boolean calculateExtremum(int index)
        计算影像数据指定波段的极值,即最大值和最小值。
        参数:
        index - 要计算极值的影像数据的波段序号。
        返回:
        如果计算成功返回true,否则返回false。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • CalculateHistogram

        public boolean CalculateHistogram(int[] arrBandSelect)
        计算直方图
        参数:
        arrBandSelect - 波段索引数组
      • GetHistogram

        public Histogram GetHistogram(int nBandIndex)
        获取指定波段的直方图
        参数:
        nBandIndex - 波段索引
        返回:
        指定波段的直方图
      • getValue

        public double getValue(int column,
                               int row,
                               int index)
        返回影像数据集指定波段中指定行列处的像素值。
        参数:
        column - 指定的列号,从 0 开始。
        row - 指定的行号,从 0 开始。
        index - 指定的波段索引号,从 0 开始。
        返回:
        影像数据集指定波段中指定行列处的像素值。对于PixelFormat为RGB和RGBA两种像素格式的影像数据,该方法的返回值为Color对象中的int值。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • setValue

        public double setValue(int column,
                               int row,
                               double value,
                               int index)
        设置影像数据集指定波段中指定行列处的像素值。
        参数:
        column - 指定的列号,从 0 开始。
        row - 指定的行号,从 0 开始。
        value - 指定的要设置的像素值。对于PixelFormat为RGB和RGBA两种像素格式的影像数据,该值为Color对象中的int值。
        index - 指定的波段索引号,从 0 开始。
        返回:
        新设置的像素值。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • setValue2

        public void setValue2(int column,
                              int row,
                              double value,
                              int index)
        设置影像数据集指定波段中指定行列处的像素值。
        参数:
        column - 指定的列号,从 0 开始。
        row - 指定的行号,从 0 开始。
        value - 指定的要设置的像素值。对于PixelFormat为RGB和RGBA两种像素格式的影像数据,该值为Color对象中的int值。
        index - 指定的波段索引号,从 0 开始。
      • imageToXY

        public Point2D imageToXY(Point point)
        将影像数据集的每一个像素点对应到地理坐标系下的坐标点,即 x, y 坐标。
        参数:
        point - 指定的行数和列数所对应的影像点。
        返回:
        地理坐标系下的对应的点坐标。
        示范代码:
        以下代码示范如何将指定行列数处的点转换为地理坐标系下的点。
         public void imageToXYTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)包含一个名为 Image 的影像数据集 datasetImage,打开影像数据集
                // 将指定行列数处的点转换为地理坐标系下的点
                java.awt.Point point = new java.awt.Point(100, 50);
                Point2D point2D = datasetImage.imageToXY(point);
                System.out.println("该点的地理坐标为:" + point2D);
                datasetImage.close();
            }
         
      • xyToImage

        public Point xyToImage(Point2D point)
        将影像数据集的在地理坐标系下的点(X, Y 坐标)对应到像素中。
        参数:
        point - 指定的地理坐标系下的点。
        返回:
        影像数据集对应的影像点。
      • buildStatistics

        public HashMap<Integer,StatisticsResult> buildStatistics()
        对影像数据集执行统计操作,返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。统计的结果包括栅格数据集的最大值、最小值、均值、中值、众数、稀数、方差、标准差等。
        返回:
        返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。
      • buildPyramid

        public boolean buildPyramid(ResamplingMethod eMethod,
                                    boolean bCreateCOG)
        创建金字塔
        参数:
        eMethod - 金字塔算法,默认是平均值,目前只支持临近值和平均值
        bCreateCOG - 是否创建COG格式内置金字塔,本参数仅影像直接打开起效
        返回:
        true or false
      • buildPyramid

        public boolean buildPyramid(ResamplingMethod eMethod)
        创建金字塔。
        参数:
        eMethod - 金字塔生成算法,目前只支持邻近值算法和平均值算法,默认为平均值算法。
        返回:
        创建金字塔是否成功,成功返回 true,否则返回 false。
        另请参阅:
        ResamplingMethod
      • buildPyramid

        public boolean buildPyramid()
        给影像数据集创建金字塔。目的是提高影像数据集的显示速度。金字塔只能针对原始的数据进行创建;一次仅能给一个数据集创建金字塔,当显示该影像数据集的时候,已创建的金字塔都将被访问。下图为不同比例尺下金字塔的建立过程。

        返回:
        如果创建成功,返回 true;否则返回 false。
        示范代码:
        以下代码示范如何为影像数据集创建金字塔,输出影像数据集的高度与宽度。
         public void buildPyramidTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)包含一个名为 Image 的影像数据集 datasetImage,打开影像数据集
                DatasetImage datasetImage = (DatasetImage) datasource.getDatasets().get(
                        "Image");
                datasetImage.close();
        
                // 判断当前影像数据集是否有金字塔,如果有,移除金字塔后重新创建;如果没有,直接创建金字塔
                if (datasetImage.hasPyramid()) {
                    datasetImage.removePyramid();
                    System.out.println("判断当前影像数据集是否有金字塔的方法返回值为:" +
                                       datasetImage.hasPyramid());
                    datasetImage.buildPyramid();
                } else {
                    datasetImage.buildPyramid();
                }
        
                // 输出影像数据集的高度与宽度
                System.out.println("影像数据集的高度为:" + datasetImage.getHeight());
                System.out.println("影像数据集的宽度为:" + datasetImage.getWidth());
            }
         
      • getPyramidMethod

        public ResamplingMethod getPyramidMethod()
        获取影像数据集的金字塔的生成算法。

        目前只支持邻近值和平均值算法。

        返回:
        创建金字塔的算法。
        另请参阅:
        ResamplingMethod
      • updatePyramid

        public boolean updatePyramid(Rectangle2D value)
        根据指定范围更新影像数据集金字塔。
        参数:
        value - 更新金字塔的指定影像范围。
        返回:
        如果更新成功,返回 true,否则返回 false。
        示范代码:
        请参见 DatasetGrid.updatePyramid() 方法的示例。
      • addBand

        public int addBand(DatasetImage dataset)
        向指定的多波段影像数据集中追加波段。
        参数:
        dataset - 影像数据集。
        返回:
        添加波段的个数。
        示范代码:
        以下代码示范如何向多波段影像数据集追加波段。
         public void addBandTest() {
                    // 前提条件:已打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象,数据源中包含影像数据集"image"。
                    // 打开影像数据集
                    DatasetImage datasetImage = (DatasetImage) datasource.getDatasets().get("image");
        
                    // 新建一个多波段影像数据集 bandImage,向其追加一个波段 datasetImage,并将其命名为“波段1”
                    DatasetImageInfo datasetImageInfo = new DatasetImageInfo("MultiBand", datasetImage );
                    DatasetImage bandImage = datasource.getDatasets().create(datasetImageInfo);
                    bandImage.addBand(datasetImage);
        
                    datasetImage.close();
                }
         
      • addBand

        public int addBand(DatasetImage[] datasets)
        向指定的多波段影像数据集合中追加多个波段。
        参数:
        datasets - 影像数据集合。
        返回:
        添加波段的个数。
      • addBand

        public int addBand(DatasetImage dataset,
                           int[] indexes)
        向指定的多波段影像数据集中按照指定的索引追加多个波段。
        参数:
        dataset - 要追加的波段所在的影像数据集。
        indexes - 要追加的波段索引。
        返回:
        添加的波段个数。
      • get

        public String get(int index)
        返回指定序号的波段的名称。
        参数:
        index - 指定的波段的序号。
        返回:
        指定序号的波段的名称。
      • deleteBand

        public boolean deleteBand(int index)
        根据指定索引号删除某个波段。
        参数:
        index - 指定要删除波段的索引。
        返回:
        删除成功返回 true;否则返回 false。
      • deleteBand

        public boolean deleteBand(int startIndex,
                                  int count)
        根据指定的开始索引和删除个数,删除多波段影像数据集中的波段。
        参数:
        startIndex - 指定删除波段的开始索引号。
        count - 要删除的波段的个数。
        返回:
        删除成功返回 true;否则返回 false。
      • indexOf

        public int indexOf(String bandName)
        根据指定的波段名字,返回该波段在多波段影像数据集中的索引。
        参数:
        bandName - 指定波段的名称。
        返回:
        波段所在的索引。
      • update

        public boolean update(DatasetImage dataset)
        根据指定的影像数据集更新。

        注意:指定的影像数据集和被更新的影像数据集的编码方式(EncodeType)和像素类型(PixelFormat)必须保持一致。

        参数:
        dataset - 指定的影像数据集。
        返回:
        一个布尔值,表示更新是否成功,如果更新成功,返回 true,否则返回 false。
        示范代码:
        请参见 DatasetImage.create(DatasetImageInfo) 方法的示例。
      • hasPyramid

        public boolean hasPyramid()
        影像数据集是否有金字塔
        返回:
        有金字塔返回true,否则返回false。
      • hasStatistics

        public boolean hasStatistics()
        影像数据集是否有统计信息
        返回:
        有统计信息返回true,否则返回false。
      • hasHistograms

        public boolean hasHistograms()
        影像数据集是否有直方图信息
        返回:
        有直方图信息返回true,否则返回false。

Copyright © 2021–2024 SuperMap. All rights reserved.