com.supermap.analyst.spatialanalyst

类 ConversionAnalyst



  • public class ConversionAnalyst
    extends Object
    矢量栅格转换类。用于矢量与栅格之间的转换。

    通过本类提供的接口可以实现矢量转为栅格、栅格转为矢量、栅格指定值转为矢量以及栅格细化等功能。

    矢栅转换的方法,需要传入一个矢栅转换参数(ConversionAnalystParameter)对象作为参数,由矢量转为栅格、由栅格转为矢量需要设置的参数有所不同,请参见 ConversionAnalystParameter 类。

    • 方法详细资料

      • getAnalystSetting

        public static GridAnalystSetting getAnalystSetting()
        返回栅格分析环境设置。

        有关“栅格分析环境设置”请参见 GridAnalystSetting 类的介绍。

        返回:
        栅格分析环境设置。
      • setAnalystSetting

        public static void setAnalystSetting(GridAnalystSetting gridAnalystSetting)
        设置栅格分析环境设置。

        有关“栅格分析环境设置”请参见 GridAnalystSetting 类的介绍。

        参数:
        gridAnalystSetting - 栅格分析环境设置。
      • vectorToRaster

        public static DatasetGrid vectorToRaster(ConversionAnalystParameter parameter)
        通过指定转换参数设置将矢量数据集转换为栅格数据集。

        将矢量数据转为栅格数据,需要设置哪些参数,请参阅 ConversionAnalystParameter 类。

        注意:如果将矢量数据转为像素格式(PixelFormat)为 UBIT1、UBIT4 和 UBIT8 的栅格数据集,矢量数据中值为 0 的对象在结果栅格中会丢失。

        参数:
        parameter - 指定的矢量栅格转换参数设置。
        返回:
        结果栅格数据集。
        示范代码:
        以下代码示范了如何通过给定的数据源和矢量数据集,将该矢量数据集转换为栅格数据集。
         public DatasetGrid VectorToRaster(Dataset sourceDatasetVector,
                        Datasource targetDatasource) {
                //实例化一个转换参数设置对象
                ConversionAnalystParameter conversionParameter = new ConversionAnalystParameter();
        
                conversionParameter.setSourceDataset(sourceDatasetVector);
        
                conversionParameter.setTargetDatasource(targetDatasource);
        
                //检查是否存在与结果数据集同名的数据集,如存在则删除
                String targetDatasetName = "resultRaster";
                if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                        targetDatasource.getDatasets().delete(targetDatasetName);
            }
        
                conversionParameter.setTargetDatasetName(targetDatasetName);
                conversionParameter.setPixelFormat(PixelFormat.DOUBLE);
                conversionParameter.setValueFieldName("Value");
                conversionParameter.setCellSize(0.05);
        
                //将矢量数据集转为栅格数据集
                DatasetGrid resultDatasetGrid = ConversionAnalyst.vectorToRaster(conversionParameter);
        
                return resultDatasetGrid;
         }
         
      • rasterToVector

        public static DatasetVector rasterToVector(ConversionAnalystParameter parameter)
        通过指定转换参数设置将栅格数据集转换为矢量数据集。

        将栅格数据转为矢量数据,需要设置哪些参数,请参阅 ConversionAnalystParameter 类。

        使用该方法时,通过 ConversionAnalystParameter 对象的 ConversionAnalystParameter.setSpecifiedValue(long) 方法,指定一个栅格值,可以只将具有该值的栅格转为矢量。

        参数:
        parameter - 指定的矢量栅格转换参数设置。
        返回:
        结果矢量数据集。
        示范代码:
        以下代码示范了如何根据给定的数据源和栅格数据集(DatasetGrid),将该栅格数据集转换为矢量面数据。
         public DatasetVector RasterToVector(Dataset sourceDataset,
                        Datasource targetDatasource) {
                //检查是否存在与结果数据集同名的数据集,如存在则删除
                String targetDatasetName = "resultVector";
                if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                        targetDatasource.getDatasets().delete(targetDatasetName);
            }
        
                //实例化一个转换参数设置对象
                ConversionAnalystParameter conversionParameter = new ConversionAnalystParameter();
        
                conversionParameter.setSourceDataset(sourceDataset);
                conversionParameter.setTargetDatasource(targetDatasource);
                conversionParameter.setTargetDatasetName("resultVector");
                //设置转换类型为面状
                conversionParameter.setTargetDatasetType(DatasetType.REGION);
                //设置结果矢量数据集的值字段
                conversionParameter.setValueFieldName("GridValue");
        
                //调用 ConvertToVector() 方法将栅格数据集转为矢量数据集,并获取结果矢量数据集
                DatasetVector resultDatasetVector = ConversionAnalyst.rasterToVector(conversionParameter);
        
                return resultDatasetVector;
         }
         
      • extractRegion

        public static GeoRegion extractRegion(Dataset sourceDataset,
                                              GeoLine geoLineIn,
                                              GeoLine geoLineOut,
                                              int lineWidth,
                                              int boundWidth)
        从影像数据中提取面
        参数:
        sourceDataset - 影像数据
        geoLineIn - 要提取的地物内部线
        geoLineOut - 要提取的地物外部线
        lineWidth - 线的像素宽度(像素单位)
        boundWidth - 范围扩展宽度(像素单位)
        返回:
        提取的面结果
      • thinRaster

        public static Dataset thinRaster(Dataset sourceDataset,
                                         long backOrNoValue,
                                         double backOrNoDataTolerance,
                                         Datasource targetDatasource,
                                         String targetDatasetName)
        栅格细化,通常在将栅格转换为矢量线数据前使用。

        栅格数据细化处理可以减少栅格数据中用于标识线状地物的单元格的数量,从而提高矢量化的速度和精度。一般作为栅格转线矢量数据之前的预处理,使转换的效果更好。例如一幅扫描的等高线图上可能使用 5、6 个单元格来显示一条等高线的宽度,细化处理后,等高线的宽度就只用一个单元格来显示了,有利于更好地进行矢量化。

        关于无值/背景色及其容限的说明

        进行栅格细化时,允许用户标识那些不需要细化的单元格。对于栅格数据集,通过无值及其容限来确定这些值,对于影像数据集,则通过背景色及其容限来确定。

        • 当对栅格数据集进行细化时,栅格值为 backOrNoValue 参数指定的值的单元格被视为无值,不参与细化,而栅格的原无值将作为有效值来参与细化;同时,在 backOrNoValueTolerance 参数指定的无值的容限范围内的单元格也不参与细化。例如,指定无值的值为 a,指定的无值的容限为 b,则栅格值在 [a-b,a+b] 范围内的单元格均不参与细化。
        • 当对影像数据集进行细化时,栅格值为指定的值的单元格被视为背景色,不参与细化;同时,在 backOrNoValueTolerance 参数指定的背景色的容限范围内的单元格也不参与细化。

          需要注意,影像数据集中栅格值代表的是一个颜色值,因此,如果想要将某种颜色设为背景色,为 backOrNoValue 参数指定的值应为将该颜色(RGB 值)转为 32 位整型之后的值,系统内部会根据像素格式再进行相应的转换。背景色的容限同样为一个 32 位整型值。该值在系统内部被转为分别对应 R、G、B 的三个容限值,例如,指定为背景色的颜色为 (100,200,60),指定的容限值为 329738,该值对应的 RGB 值为 (10,8,5),则值在 (90,192,55) 和 (110,208,65) 之间的颜色均不参与细化。

        注意:对于栅格数据集,如果指定的无值的值,在待细化的栅格数据集的值域范围外,会分析失败,返回 null。

        参数:
        sourceDataset - 指定的待细化的栅格数据集。支持影像数据集。
        backOrNoValue - 指定的指定栅格的背景色或表示无值的值。
        backOrNoDataTolerance - 栅格背景色的容限或无值的容限。
        targetDatasource - 指定的用于存储结果数据集的数据源。
        targetDatasetName - 指定的结果数据集的名称。
        返回:
        结果数据集。
        示范代码:
        以下代码示范了如何通过给定的数据源和栅格数据,将该栅格数据进行细化。
         public Dataset ThinRasterData(Dataset sourceDataset, Datasource targetDatasource) {
                //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
                String targetDatasetName = "resultThinnedRaster";
                if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                        targetDatasource.getDatasets().delete(targetDatasetName);
            }
        
                //调用栅格数据集细化方法,获取结果数据集
                Dataset resultDatasetGrid = ConversionAnalyst.thinRaster(sourceDataset,
                                -9999, 0, targetDatasource, targetDatasetName);
        
                return resultDatasetGrid;
         }
         
      • thinRaster

        public static Dataset thinRaster(Dataset sourceDataset,
                                         long backOrNoValue,
                                         double backOrNoDataTolerance,
                                         Datasource targetDatasource,
                                         String targetDatasetName,
                                         SteppedListener... listeners)
        栅格细化
        参数:
        sourceDataset - 待细化的栅格数据集
        backOrNoValue - 背景色或空值
        backOrNoDataTolerance - 背景色或控制容限
        targetDatasource - 输出数据集所在的数据源
        targetDatasetName - 输出数据集名称
        返回:
        是否细化成功
      • thinRaster

        @Deprecated
        public static Dataset thinRaster(Dataset sourceDataset,
                                                      Datasource targetDatasource,
                                                      String targetDatasetName,
                                                      long backOrNoValue,
                                                      boolean isSaveAsGrid)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 ConversionAnalyst.thinRaster(Dataset, Datasource, String, long, boolean, SteppedListener...) 替换。
        通过减少要素宽度的像元来对栅格化的线状要素进行细化,该方法是处理二值图像的细化方法,如果输入数据不是二值图像,会先将其转化为二值图像。需要指定背景色的值,并对背景色以外的像素值进行细化。
        参数:
        sourceDataset - 指定的待细化的栅格数据集或影像数据集。
        targetDatasource - 保存结果的数据源。
        targetDatasetName - 结果数据集的名称。
        backOrNoValue - 指定的背景色的值,背景色的值和无值都会当成背景色。
        isSaveAsGrid - 是否保存为栅格数据集,ture表示保存为栅格数据集,false保存为原数据类型(栅格或影像)。保存为栅格数据集便于栅格矢量化时指定值矢量化,方便快速获取线数据。
        返回:
        结果数据集,结果数据集为二值图像只有0和1两种值。
      • thinRaster

        public static Dataset thinRaster(Dataset sourceDataset,
                                         Datasource targetDatasource,
                                         String targetDatasetName,
                                         long backOrNoValue,
                                         boolean isSaveAsGrid,
                                         SteppedListener... listeners)
        通过减少要素宽度的像元来对栅格化的线状要素进行细化,该方法是处理二值图像的细化方法,如果不是二值图像会先处理为二值图像,只需指定背景色的值,背景色以外的值都是需要细化的值。该方法的效率最快。
        参数:
        sourceDataset - 指定的待细化的栅格数据集或影像数据集。
        targetDatasource - 保存结果的数据源。
        targetDatasetName - 结果数据集的名称。
        backOrNoValue - 指定的背景色的值,背景色的值和无值都会当成背景色。
        isSaveAsGrid - 是否保存为栅格数据集,ture表示保存为栅格数据集,false保存为原数据类型(栅格或影像)。保存为栅格数据集便于栅格矢量化时指定值矢量化,方便快速获取线数据。
        listeners - 用于接收进度条事件的监听器。
        返回:
        结果数据集,结果数据集为二值图像只有0和1两种值。
      • rasterBoundaryRegion

        public static GeoRegion3D rasterBoundaryRegion(Dataset sourceDataset)
        提取栅格数据集数据部分的栅格范围面。
        参数:
        sourceDataset - 指定的待处理的栅格数据集。
        返回:
        栅格范围面。
      • rasterBoundaryLine

        public static GeoLine3D rasterBoundaryLine(Dataset sourceDataset)
        提取栅格数据集数据部分的栅格范围线。
        参数:
        sourceDataset - 指定的待处理的栅格数据集。
        返回:
        栅格范围线。
      • point3DToRaster

        public static DatasetVolume point3DToRaster(ConversionAnalystParameter parameter,
                                                    int sliceCount,
                                                    double startHeight,
                                                    double sliceHeight)
        三维点转体元栅格。

        注意:该方法只会将起始、终止高度内的三维点进行转换,终止高度=起始高度+体元栅格层数*分层间隔高度。

        参数:
        parameter - 矢量转栅格基础参数。
        sliceCount - 体元栅格层数。
        startHeight - 体元栅格起始高度。一般可以用所有点的最小z值作为起始高度。
        sliceHeight - 体元栅格分层间隔高度。
        返回:
        结果数据集。
      • point3DToRaster

        public static DatasetVolume point3DToRaster(ConversionAnalystParameter parameter,
                                                    int sliceCount,
                                                    double startHeight,
                                                    double sliceHeight,
                                                    SteppedListener... listeners)
        三维点转体元栅格
        参数:
        parameter - 矢量转栅格基础参数
        sliceCount - 体元栅格层数
        startHeight - 体元栅格起始高度
        sliceHeight - 体元栅格分层间隔高度
        返回:
      • addSteppedListener

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

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

Copyright © 2021–2024 SuperMap. All rights reserved.