com.supermap.data
类 DatasetImage

java.lang.Object
  继承者 com.supermap.data.Dataset
      继承者 com.supermap.data.DatasetImage

public class DatasetImage
extends Dataset

影像数据集类。

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

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

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


方法摘要
 int addBand(DatasetImage dataset)
          向指定的多波段影像数据集中追加波段。
 int addBand(DatasetImage[] datasets)
          向指定的多波段影像数据集合中追加多个波段。
 int addBand(DatasetImage dataset, int[] indexes)
          向指定的多波段影像数据集中按照指定的索引追加多个波段。
 boolean buildPyramid()
          给影像数据集创建金字塔。
 java.util.HashMap<java.lang.Integer,StatisticsResult> buildStatistics()
          对影像数据集执行统计操作,返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。
 boolean calculateExtremum()
          计算影像数据集的极值,即像素的最大值和最小值。
 boolean calculateExtremum(int index)
          计算影像数据指定波段的极值,即最大值和最小值。
 boolean CalculateHistogram(int[] arrBandSelect)
          计算直方图
 boolean deleteBand(int index)
          根据指定索引号删除某个波段。
 boolean deleteBand(int startIndex, int count)
          根据指定的开始索引和删除个数,删除多波段影像数据集中的波段。
 java.lang.String get(int index)
          返回指定序号的波段的名称。
 int getBandCount()
          返回波段的个数。
 BlockSizeOption getBlockSizeOption()
          返回影像数据集的像素分块类型。
 GeoRegion getClipRegion()
          返回影像数据集的裁剪区域。
 ColorSpaceType getColorSpace()
          返回色彩显示模式。
 boolean getHasPyramid()
          已过时。 判断影像数据集是否已创建影像金字塔。true 表示已经创建,false 表示未创建。
 int getHeight()
          返回影像数据集的影像数据的高度。
 Histogram GetHistogram(int nBandIndex)
          获取指定波段的直方图
 java.util.HashMap<java.lang.Integer,StatisticsResult> getImageStatisticsResult()
          返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。
 double getMaxValue(int index)
          返回影像数据集指定波段的最大像素值。
 double getMinValue(int index)
          返回影像数据集指定波段的最小像素值。
 double getNoData(int index)
          返回影像数据集指定波段的无值。
 Colors getPalette(int index)
          返回影像数据集指定波段的颜色调色板。
 PixelFormat getPixelFormat(int index)
          返回影像数据集指定波段的像素格式。
 double getValue(int column, int row, int index)
          返回影像数据集指定波段中指定行列处的像素值。
 int getWidth()
          返回影像数据集的影像数据的宽度。
 boolean hasHistograms()
          影像数据集是否有直方图信息
 boolean hasPyramid()
          影像数据集是否有金字塔
 boolean hasStatistics()
          影像数据集是否有统计信息
 Point2D imageToXY(java.awt.Point point)
          将影像数据集的每一个像素点对应到地理坐标系下的坐标点,即 x, y 坐标。
 int indexOf(java.lang.String bandName)
          根据指定的波段名字,返回该波段在多波段影像数据集中的索引。
 boolean removePyramid()
          删除已创建的金字塔。
 void set(int index, java.lang.String value)
          设置指定序号的波段的名称。
 void setClipRegion(GeoRegion value)
          设置影像数据集的裁剪区域。
 void setColorSpace(ColorSpaceType colorSpaceType)
          设置色彩显示模式。
 void setGeoReference(Rectangle2D value)
          将影像数据集对应到地理坐标系中指定的地理范围。
 void setNoData(double value, int index)
          设置影像数据集指定波段的无值。
 void setPalette(Colors palette, int index)
          设置影像数据集指定波段的颜色调色板。
 double setValue(int column, int row, double value, int index)
          设置影像数据集指定波段中指定行列处的像素值。
 void setValue2(int column, int row, double value, int index)
          设置影像数据集指定波段中指定行列处的像素值。
 boolean update(DatasetImage dataset)
          根据指定的影像数据集更新。
 boolean updatePyramid(Rectangle2D rectangle2D)
          根据指定范围更新影像数据集金字塔。
 java.awt.Point xyToImage(Point2D point)
          将影像数据集的在地理坐标系下的点(X, Y 坐标)对应到像素中。
 
从类 com.supermap.data.Dataset 继承的方法
addClosedListener, addClosingListener, addSteppedListener, close, dispose, getBounds, getDatasource, getDescription, getEncodeType, getExtInfo, getLockState, getName, getPrjCoordSys, getTableName, getType, hasPrjCoordSys, hasVersion, isOpen, isReadOnly, open, removeClosedListener, removeClosingListener, removeSteppedListener, setBounds, setDescription, setExtInfo, setLockState, setPrjCoordSys, setReadOnly
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

getWidth

public int getWidth()
返回影像数据集的影像数据的宽度。单位为像素。

返回:
影像数据集的影像数据的宽度。
另请参见:
buildPyramid()
示例:
请参见 DatasetImage.buildPyramid() 方法的示例。

getHeight

public int getHeight()
返回影像数据集的影像数据的高度。单位为像素。

返回:
影像数据集的影像数据的高度。
另请参见:
buildPyramid()
示例:
请参见 DatasetImage.buildPyramid() 方法的示例。

getHasPyramid

public boolean getHasPyramid()
已过时。 判断影像数据集是否已创建影像金字塔。true 表示已经创建,false 表示未创建。

返回:
影像数据集是否已创建影像金字塔。
另请参见:
buildPyramid()
示例:
请参见 DatasetImage.buildPyramid() 方法的示例。

getBandCount

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

返回:
波段的个数。

get

public java.lang.String get(int index)
返回指定序号的波段的名称。

参数:
index - 指定的波段的序号。
返回:
指定序号的波段的名称。

set

public void set(int index,
                java.lang.String value)
设置指定序号的波段的名称。

参数:
index - 指定的波段的序号。
value - 指定序号的波段的名称。
另请参见:
addBand(DatasetImage)
示例:
请参见 DatasetImage.addBand() 方法的示例。

getColorSpace

public ColorSpaceType getColorSpace()
返回色彩显示模式。

返回:
色彩显示模式。

setColorSpace

public void setColorSpace(ColorSpaceType colorSpaceType)
设置色彩显示模式。

参数:
colorSpaceType - 色彩显示模式。

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();
    }
 

imageToXY

public Point2D imageToXY(java.awt.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 java.awt.Point xyToImage(Point2D point)
将影像数据集的在地理坐标系下的点(X, Y 坐标)对应到像素中。

参数:
point - 指定的地理坐标系下的点。
返回:
影像数据集对应的影像点。

setGeoReference

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

参数:
value - 指定的影像数据的地理范围。

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());
    }
 

updatePyramid

public boolean updatePyramid(Rectangle2D rectangle2D)
根据指定范围更新影像数据集金字塔。

参数:
rectangle2D - 更新金字塔的指定影像范围。
返回:
如果更新成功,返回 true,否则返回 false。
示例:
请参见 DatasetGrid.updatePyramid() 方法的示例。

removePyramid

public boolean removePyramid()
删除已创建的金字塔。

返回:
如果删除成功,返回 true;否则返回 false。
另请参见:
buildPyramid()
示例:
请参见 DatasetImage.buildPyramid() 方法的示例。

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 - 要追加的波段索引。
返回:
添加的波段个数。

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(java.lang.String bandName)
根据指定的波段名字,返回该波段在多波段影像数据集中的索引。

参数:
bandName - 指定波段的名称。
返回:
波段所在的索引。

update

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

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

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

getImageStatisticsResult

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

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

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

buildStatistics

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

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

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

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 开始。

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

getBlockSizeOption

public BlockSizeOption getBlockSizeOption()
返回影像数据集的像素分块类型。

返回:
影像数据集的像素分块类型。
从以下版本开始:
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 palette,
                       int index)
设置影像数据集指定波段的颜色调色板。

参数:
palette - 指定的颜色调色板。
index - 指定的波段索引号,从 0 开始。
从以下版本开始:
SuperMap iObjects Java 7.0.0

getPixelFormat

public PixelFormat getPixelFormat(int index)
返回影像数据集指定波段的像素格式。

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

CalculateHistogram

public boolean CalculateHistogram(int[] arrBandSelect)
计算直方图

参数:
arrBandSelect - 波段索引数组

GetHistogram

public Histogram GetHistogram(int nBandIndex)
获取指定波段的直方图

参数:
nBandIndex - 波段索引
返回:
指定波段的直方图

hasPyramid

public boolean hasPyramid()
影像数据集是否有金字塔

返回:
有金字塔返回true,否则返回false。

hasStatistics

public boolean hasStatistics()
影像数据集是否有统计信息

返回:
有统计信息返回true,否则返回false。

hasHistograms

public boolean hasHistograms()
影像数据集是否有直方图信息

返回:
有直方图信息返回true,否则返回false。