com.supermap.data
类 DatasetImage
- java.lang.Object
-
- com.supermap.data.InternalHandle
-
- 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()
给影像数据集创建金字塔。boolean
buildPyramid(ResamplingMethod eMethod)
创建金字塔。boolean
buildPyramid(ResamplingMethod eMethod, boolean bCreateCOG)
创建金字塔HashMap<Integer,StatisticsResult>
buildStatistics()
对影像数据集执行统计操作,返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。boolean
calculateExtremum()
计算影像数据集的极值,即像素的最大值和最小值。boolean
calculateExtremum(int index)
计算影像数据指定波段的极值,即最大值和最小值。boolean
CalculateHistogram(int[] arrBandSelect)
计算直方图boolean
deleteBand(int index)
根据指定索引号删除某个波段。boolean
deleteBand(int startIndex, int count)
根据指定的开始索引和删除个数,删除多波段影像数据集中的波段。String
get(int index)
返回指定序号的波段的名称。int
getBandCount()
返回波段的个数。BlockSizeOption
getBlockSizeOption()
返回影像数据集的像素分块类型。GeoRegion
getClipRegion()
返回影像数据集的裁剪区域。boolean
getHasPyramid()
已过时。判断影像数据集是否已创建金字塔。int
getHeight()
返回影像数据集的影像数据的高度。Histogram
GetHistogram(int nBandIndex)
获取指定波段的直方图HashMap<Integer,StatisticsResult>
getImageStatisticsResult()
返回一个哈希表对象,其中键值为影像数据集的波段,映射值为该波段的统计结果。double
getMaxValue(int index)
返回影像数据集指定波段的最大像素值。double
getMinValue(int index)
返回影像数据集指定波段的最小像素值。double
getNoData(int index)
返回影像数据集指定波段的无值。Colors
getPalette(int index)
返回影像数据集指定波段的颜色调色板。PixelFormat
getPixelFormat(int index)
返回影像数据集指定波段的像素格式。ResamplingMethod
getPyramidMethod()
获取影像数据集的金字塔的生成算法。double
getValue(int column, int row, int index)
返回影像数据集指定波段中指定行列处的像素值。int
getWidth()
返回影像数据集的影像数据的宽度。boolean
hasHistograms()
影像数据集是否有直方图信息boolean
hasPyramid()
影像数据集是否有金字塔boolean
hasStatistics()
影像数据集是否有统计信息Point2D
imageToXY(Point point)
将影像数据集的每一个像素点对应到地理坐标系下的坐标点,即 x, y 坐标。int
indexOf(String bandName)
根据指定的波段名字,返回该波段在多波段影像数据集中的索引。boolean
removePyramid()
删除已创建的金字塔。void
set(int index, String value)
设置指定序号的波段的名称。void
setClipRegion(GeoRegion value)
设置影像数据集的裁剪区域。void
setGeoReference(Rectangle2D value)
将影像数据集对应到地理坐标系中指定的地理范围。void
setNoData(double value, int index)
设置影像数据集指定波段的无值。void
setPalette(Colors value, 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 value)
根据指定范围更新影像数据集金字塔。Point
xyToImage(Point2D point)
将影像数据集的在地理坐标系下的点(X, Y 坐标)对应到像素中。-
从类继承的方法 com.supermap.data.Dataset
addClosedListener, addClosingListener, addLockChangedListener, addSteppedListener, close, dispose, equals, getBounds, getDatasource, getDescription, getEncodeType, getExtInfo, getGeoStoreType, getGroup, getID, getLockState, getName, getPrivilegeTypes, getPrivilegeTypes, getPrjCoordSys, getSchema, getTableName, getTransState, getType, hashCode, hasPrivilegeGrant, hasPrjCoordSys, isDisposed, isOpen, isReadOnly, isVersioned, open, refresh, removeClosedListener, removeClosingListener, removeLockChangedListener, removeSteppedListener, setBounds, setDescription, setExtInfo, setLockState, setPrivilegeTypes, setPrjCoordSys, setReadOnly, toString
-
-
-
-
方法详细资料
-
getWidth
public int getWidth()
返回影像数据集的影像数据的宽度。单位为像素。- 返回:
- 影像数据集的影像数据的宽度。
- 另请参阅:
DatasetImage.buildPyramid()
- 示范代码:
- 请参见
DatasetImage.buildPyramid()
方法的示例。
-
getHeight
public int getHeight()
返回影像数据集的影像数据的高度。单位为像素。- 返回:
- 影像数据集的影像数据的高度。
- 另请参阅:
DatasetImage.buildPyramid()
- 示范代码:
- 请参见
DatasetImage.buildPyramid()
方法的示例。
-
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()
方法的示例。
-
removePyramid
public boolean removePyramid()
删除已创建的金字塔。- 返回:
- 如果删除成功,返回 true;否则返回 false。
- 另请参阅:
DatasetImage.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
- 要追加的波段索引。- 返回:
- 添加的波段个数。
-
get
public String get(int index)
返回指定序号的波段的名称。- 参数:
index
- 指定的波段的序号。- 返回:
- 指定序号的波段的名称。
-
set
public void set(int index, String value)
设置指定序号的波段的名称。- 参数:
index
- 指定的波段的序号。value
- 指定序号的波段的名称。- 另请参阅:
DatasetImage.addBand(DatasetImage)
- 示范代码:
- 请参见
DatasetImage.addBand()
方法的示例。
-
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.