com.supermap.data

类 DatasetGrid



  • public class DatasetGrid
    extends Dataset

    栅格数据集类。

    栅格数据集类,该类用于描述栅格数据,例如高程数据集和土地利用图。栅格数据采用网格形式组织并使用二维的栅格的像素值来记录数据,每个栅格(cell)代表一个像素要素,栅格值可以描述各种数据信息。栅格数据集中每一个栅格(cell)存储的是表示地物的属性值,属性值可以是土壤类型、密度值、高程、温度、湿度等。

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

    • 方法详细资料

      • getWidth

        public int getWidth()
        返回栅格数据集的栅格的宽度。单位为像素。
        返回:
        栅格数据集的栅格的宽度。
      • getHeight

        public int getHeight()
        返回栅格数据集的栅格的高度。单位为像素。
        返回:
        栅格数据集的栅格的高度。
      • setGeoReference

        public void setGeoReference(Rectangle2D value)
        将栅格数据集对应到地理坐标系中指定的地理范围。
        参数:
        value - 指定的地理范围。
      • getPixelFormat

        public PixelFormat getPixelFormat()
        返回栅格数据存储的像素格式。每个象素采用不同的字节进行表示,单位为比特(bit)。详细信息请参考 PixelFormat
        返回:
        栅格数据存储的像素格式。
        另请参阅:
        PixelFormat
      • getBlockSizeOption

        public BlockSizeOption getBlockSizeOption()
        返回像素分块类型。用于栅格数据集或影像数据。
        返回:
        返回像素分块类型。
      • getRowBlockCount

        public int getRowBlockCount()
        返回栅格数据经过分块后所得到的总行数。
        返回:
        栅格数据经过分块后所得到的总行数。
      • getColumnBlockCount

        public int getColumnBlockCount()
        返回栅格数据集分块后的所得到的总列数。
        返回:
        栅格数据集分块后的所得到的总列数。
      • getNoValue

        public double getNoValue()
        返回栅格数据集的空值,当此数据集为空值时,用户可采用-9999来表示。
        返回:
        栅格数据集的空值。
      • setNoValue

        public void setNoValue(double value)
        设置栅格数据集的空值,当此数据集为空值时,用户可采用-9999来表示。
        参数:
        value - 栅格数据集的空值。
      • getHasPyramid

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

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

        注意:

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

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

        返回:
        栅格数据集的显示区域。
      • setClipRegion

        public void setClipRegion(GeoRegion value)
        设置栅格数据集的显示区域。

        当用户设置此方法后,栅格数据集就按照给定的区域进行显示,区域之外的都不显示。

        注意:

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

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

        参数:
        value - 栅格数据集的显示区域。
        示范代码:
        以下代码示范如何给栅格数据集设置显示区域。
         public void setClipRegionTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)中包含一个栅格数据集 Raster (datasetGrid),打开栅格数据集
                // 定义显示区域的范围
                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);
                // 设置显示区域
                datasetGrid.setClipRegion(georegion);
                datasetGrid.close();
            }
        
      • calculateExtremum

        public boolean calculateExtremum()
        计算栅格数据集的极值,即最大值和最小值。建议:栅格数据集在一些分析或者操作之后,建议调用此接口,计算一下最大最小值。
        返回:
        如果计算成功返回 true,否则返回 false。
        示范代码:
        以下代码示范如何计算栅格数据集中栅格的最大值最小值。
         public void calculateExtremumTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)中包含一个栅格数据集 Raster,打开栅格数据集
                // 计算栅格数据集中栅格值的最大值最小值
                DatasetGrid datasetGrid = (DatasetGrid) datasource.getDatasets().get(
                        "Raster");
                datasetGrid.open();
                if (datasetGrid.calculateExtremum()) {
                    double maxValue = datasetGrid.getMaxValue();
                    double minValue = datasetGrid.getMinValue();
                    System.out.println("栅格值的最大值为:" + maxValue + "栅格值的最小值为:" + minValue);
                }
                datasetGrid.close();
            }
         
      • CalculateHistogram

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

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

        public void setNetCDFVarInfo(NetCDFVarInfo value)
        设置当前 NetCDFVarInfo 的信息。调用该方法之后必须重新打开数据集才能起作用。
        参数:
        value - 当前 NetCDFVarInfo 的信息。
      • getValue

        public double getValue(int column,
                               int row)
        根据给定的行数和列数返回栅格数据集的栅格所对应的栅格值。注意:该方法的参数值的行、列数从零开始计数。
        参数:
        column - 列
        row - 行
        返回:
        栅格数据集的栅格所对应的栅格值。
        另请参阅:
        DatasetGrid.gridToXY(Point)
        示范代码:
        请参见 DatasetGrid.gridToXY() 方法的示例。
      • setValue2

        public void setValue2(int column,
                              int row,
                              double value)
        设置指定行列号的栅格值。

        注意:这里的行、列号从零开始计数。

        参数:
        column - 指定列。
        row - 指定行。
        value - 栅格值。
      • setValue

        public double setValue(int column,
                               int row,
                               double value)
        根据给定的行数和列数设置栅格数据集的栅格所对应的栅格值。

        注意:该方法的参数值的行、列数从零开始计数。

        参数:
        column - 指定的栅格数据集中的列数
        row - 指定的栅格数据集中的行数
        value - 指定的栅格数据集的栅格所对应的栅格值。
        返回:
        栅格数据集的栅格所对应的修改之前的栅格值。
      • gridToXY

        public Point2D gridToXY(Point point)
        根据指定的行数和列数所对应的栅格点转换为地理坐标系下的点,即 X, Y 坐标。
        参数:
        point - 指定的行数和列数所对应的栅格。
        返回:
        地理坐标系下的对应的点坐标。
        示范代码:
        以下代码示范如何将指定行列数处的栅格点的值转换为地理坐标系下的点。
         public void gridToXYTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)中包含一个栅格数据集 Raster,打开栅格数据集
                // 取出指定行列数处的栅格点的值,并将该点转换为地理坐标系下的点
                DatasetGrid datasetGrid = (DatasetGrid) datasource.getDatasets().get(
                        "Raster");
                datasetGrid.open();
        
                java.awt.Point point = new java.awt.Point(100, 50);
                double value = datasetGrid.getValue(100, 50);
                Point2D point2D = datasetGrid.gridToXY(point);
                System.out.println("该点的栅格值为:" + value + "地理坐标为:" + point2D);
                datasetGrid.close();
            }
         
      • xyToGrid

        public Point xyToGrid(Point2D point)
        将地理坐标系下的点(X Y)转换为栅格数据集中对应的栅格。
        参数:
        point - 指定的地理坐标系下的点。
        返回:
        栅格数据集对应的栅格。
      • buildPyramid

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

        public boolean buildPyramid(ResamplingMethod eMethod)
        该方法用于给栅格数据创建指定类型的金字塔,目的是提高栅格数据的显示速度。
        参数:
        eMethod - 指定的建金字塔方法的类型。
        返回:
        创建是否成功,成功返回true,失败返回false。
      • buildPyramid

        public boolean buildPyramid()
        该方法用于给栅格数据创建金字塔。目的是提高栅格数据的显示速度。金字塔只能针对原始的数据进行创建;用户仅能给一个数据集创建一次金字塔,如果想再次创建需要将原来创建的金字塔进行删除,当该栅格数据集显示的时候,已创建的金字塔都将被访问。下图所示为不同比例尺下金字塔的建立过程。

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

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

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

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

        public boolean updatePyramid(Rectangle2D value)
        按指定范围更新栅格数据集影像金字塔。
        参数:
        value - 更新金字塔的指定影像范围。
        返回:
        如果更新成功,返回 true,否则返回 false。
        示范代码:
        以下代码示范如何根据指定范围更新栅格数据集影像金字塔。
         public void updatePyramidTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 数据源(datasource)中包含一个栅格数据集 Raster,打开栅格数据集
                DatasetGrid datasetGrid = (DatasetGrid) datasource.getDatasets().get("Raster");
                datasetGrid.open();
        
                //指定栅格数据集金字塔更新范围
                Rectangle2D rectangle2D = datasetGrid.getBounds();
                double width = rectangle2D.getRight() - rectangle2D.getLeft();
                double height = rectangle2D.getTop() - rectangle2D.getBottom();
                rectangle2D.setLeft(rectangle2D.getLeft() + width/4);
                rectangle2D.setRight(rectangle2D.getRight() - width/4);
                rectangle2D.setTop(rectangle2D.getTop() + height/4);
                rectangle2D.setBottom(rectangle2D.getBottom() + height/4);
                
                //按指定范围更新影像金字塔
                datasetGrid.updatePyramid(rectangle2D);
                
                //关闭数据集
                datasetGrid.close();
            }
         
      • getColorTable

        public Colors getColorTable()
        打开数据集时返回颜色表。
        返回:
        颜色表。
      • setColorTable

        public void setColorTable(Colors colors)
        设置颜色表。
        参数:
        colors - 颜色表对象。
      • getBounds

        public Rectangle2D getBounds()
        从类复制的说明: Dataset
        返回数据集中包含所有对象的最小外接矩形。对于矢量数据集来说,为数据集中所有对象的最小外接矩形;对于栅格数据集来说,为当前栅格或影像的地理范围。
        覆盖:
        getBounds 在类中 Dataset
        返回:
        数据集中包含所有对象的最小外接矩形。
      • buildValueTable

        public DatasetVector buildValueTable(Datasource targetDatasource,
                                             String tableName)
        创建栅格值属性表,其类型为属性表数据集类型TABULAR

        栅格数据集的像素格式为SINGLEDOUBLE ,无法创建属性表,即调用该方法返回为 null。

        返回属性表数据集含有系统字段和两个记录栅格信息字段,GRIDVALUE 记录栅格值,GRIDCOUNT 记录栅格值对应的像元个数。

        参数:
        targetDatasource - 指定的用于存储属性表数据集的数据源。
        tableName - 所创建的属性表数据集的名称。
        返回:
        返回栅格值属性表对象。
      • getGridStatisticsResult

        public StatisticsResult getGridStatisticsResult()
        返回栅格数据集的统计结果,包括最大值、最小值、均值、中值、众数、稀数、方差、标准差等。

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

        若栅格数据集的像素格式为SINGLEDOUBLE 时,统计结果对象中的众数数组(通过 getMajority() 方法取得)和稀数数组(通过 getMinority() 方法取得)为空数组,兵且中值(通过 getMedianValue() 方法取得)为0,统计不包含这三个结果。

        返回:
        栅格数据集的统计结果对象。
      • buildStatistics

        public StatisticsResult buildStatistics()
        对栅格数据集执行统计操作,返回该栅格数据集的统计结果对象。统计的结果包括栅格数据集的最大值、最小值、均值、中值、众数、稀数、方差、标准差等。
        返回:
        栅格数据集的统计结果对象。
      • update

        public boolean update(DatasetGrid 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.