com.supermap.analyst

类 BufferAnalyst

  • java.lang.Object
    • com.supermap.analyst.BufferAnalyst


  • public class BufferAnalyst
    extends java.lang.Object
    缓冲区分析类。

    缓冲区分析是 GIS 中基本的空间分析,缓冲区实际上是在基本空间要素周围建立的具有一定宽度的邻近区域。缓冲区分析可以有以下应用,比如确定街道拓宽的范围,确定放射源影响的范围等等。

    缓冲区分析支持的数据类型包括:二维点、线、面数据集(记录集)和网络数据集。其中,对网络数据集进行缓冲区分析时,是对其中的弧段作缓冲区。

    对于面对象而言,在做缓冲区分析前最好先经过拓扑检查,排除面内相交的情况,所谓面内相交,指的是面对象自身相交,如图所示,图中数字代表面对象的节点顺序。

    对“负半径”的说明

    • 如果缓冲区半径为数值型,则仅面数据支持负半径;
    • 如果缓冲区半径为字段或字段表达式,如果字段或字段表达式的值为负值,对于点、线数据取其绝对值;对于面数据,若合并缓冲区,则取其绝对值,若不合并,则按照负半径处理。

    关于缓冲区的参数设置,请参见 BufferAnalystParameter 类。

    • 方法详细资料

      • createBuffer

        public static boolean createBuffer(DatasetVector sourceDataset,
                                           DatasetVector resultDataset,
                                           BufferAnalystParameter bufferAnalystParameter,
                                           boolean isUnion,
                                           boolean isAttributeRetained)
        创建矢量数据集缓冲区。
        参数:
        sourceDataset - 指定的创建缓冲区的源矢量数据集。
        resultDataset - 指定的存储缓冲区分析结果的数据集,必须是面数据集。
        bufferAnalystParameter - 指定的缓冲区分析参数对象。
        isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交。
        isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 false 时有效。
        返回:
        一个布尔值,如果创建矢量数据集缓冲区成功返回 true,否则返回 false。
        Example:
        以下代码示范了如何创建线矢量数据集的缓冲区。
        public void bufferAnalystForDataset() {
        
                // 返回用来建立缓冲区的矢量数据集
                Workspace workspace = new Workspace();
                String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
                DatasourceConnectionInfo datasourceConnectionInfo = newDatasourceConnectionInfo(rootPath + "/shanghai/shanghai.udb", "shanghai", "");
                Datasource targetDatasource = workspace.getDatasources().open(datasourceConnectionInfo);
                DatasetVector datasetRoad = (DatasetVector) targetDatasource.getDatasets().get("Road_L");
        
                // 创建一个面矢量数据集,用于存储缓冲区分析的结果
                String resultDatasetName = targetDatasource.getDatasets().getAvailableDatasetName("resultDatasetBuffer");
                DatasetVectorInfo datasetvectorInfo = new DatasetVectorInfo();
                datasetvectorInfo.setType(DatasetType.REGION);
                datasetvectorInfo.setName(resultDatasetName);
                datasetvectorInfo.setEncodeType(EncodeType.NONE);
                DatasetVector resultDatasetBuffer = targetDatasource.getDatasets().create(datasetvectorInfo);
        
                // 设置缓冲区分析参数
                BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
                bufferAnalystParam.setEndType(BufferEndType.FLAT);
                bufferAnalystParam.setLeftDistance(20);
                bufferAnalystParam.setRightDistance(20);
        
                // 调用创建矢量数据集缓冲区方法
                BufferAnalyst.createBuffer(datasetRoad,
                                           resultDatasetBuffer, bufferAnalystParam, false, true);
        
                // 释放工作空间占有的资源
                workspace.dispose();
            }
      • createBuffer

        public static boolean createBuffer(Recordset sourceRecordset,
                                           DatasetVector resultDataset,
                                           BufferAnalystParameter bufferAnalystParameter,
                                           boolean isUnion,
                                           boolean isAttributeRetained)
        创建矢量记录集缓冲区。
        参数:
        sourceRecordset - 指定的创建缓冲区的源矢量记录集。
        resultDataset - 指定的存储缓冲区分析结果的数据集,必须是面数据集。
        bufferAnalystParameter - 指定的缓冲区分析参数对象。
        isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交。
        isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 false 时有效。
        返回:
        一个布尔值,如果创建矢量记录集缓冲区成功返回 true,否则返回 false。
        Example:
        以下代码示范了如何创建线矢量记录集的缓冲区,假设为通过查询方式返回的线记录集建立缓冲区。
         public void bufferAnalystForRecordset(Recordset recordsetLine, DatasetVector resultDatasetBuffer)
                {
                // 设置缓冲区分析参数
                BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
                bufferAnalystParam.setEndType(BufferEndType.FLAT);
                bufferAnalystParam.setLeftDistance(20);
                bufferAnalystParam.setRightDistance(20);
        
                // 调用为记录集建立缓冲区的方法
                BufferAnalyst.createBuffer(recordsetLine, resultDatasetBuffer, bufferAnalystParam, false,true);
        
             }
             
      • createMultiBuffer

        public static boolean createMultiBuffer(DatasetVector sourceDataset,
                                                DatasetVector resultDataset,
                                                double[] bufferRadiuses,
                                                BufferRadiusUnit bufferRadiusUnit,
                                                int semicircleSegments,
                                                boolean isUnion,
                                                boolean isAttributeRetained,
                                                boolean isRing)
        创建矢量数据集多重缓冲区。
        参数:
        sourceDataset - 指定的创建多重缓冲区的源矢量数据集。
        resultDataset - 指定的用于存储缓冲区分析结果的数据集。
        bufferRadiuses - 指定的多重缓冲区半径列表。
        bufferRadiusUnit - 指定的缓冲区半径单位。
        semicircleSegments - 指定的弧段拟合数。
        isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
        isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
        isRing - 是否生成环状缓冲区。
        返回:
        一个布尔值,如果创建矢量数据集多重缓冲区成功返回 true,否则返回 false。
        Example:
        请参见 createMultiBuffer(Recordset, DatasetVector, double[], BufferRadiusUnit, int, boolean, boolean, boolean) 方法的示例。
      • createMultiBuffer

        public static boolean createMultiBuffer(Recordset sourceRecordset,
                                                DatasetVector resultDataset,
                                                double[] bufferRadiuses,
                                                BufferRadiusUnit bufferRadiusUnit,
                                                int semicircleSegments,
                                                boolean isUnion,
                                                boolean isAttributeRetained,
                                                boolean isRing)
        创建矢量记录集多重缓冲区。
        参数:
        sourceRecordset - 指定的创建多重缓冲区的源矢量记录集。
        resultDataset - 指定的用于存储缓冲区分析结果的数据集。
        bufferRadiuses - 指定的多重缓冲区半径列表。
        bufferRadiusUnit - 指定的缓冲区半径单位。
        semicircleSegments - 指定的弧段拟合数。
        isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
        isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
        isRing - 是否生成环状缓冲区。
        返回:
        一个布尔值,如果创建矢量记录集多重缓冲区成功返回 true,否则返回 false。
        Example:
        以下代码示范了如何根据给定的记录集创建线的多重缓冲区。假设已经获取需要做缓冲区的记录集,并且用于存储结果的数据集已经创建或存在。
         public void multiBufferForRecordset(Recordset sourceRecordset,
                        DatasetVector resultDataset) {
                // 使用数组来存储多重缓冲区的半径
                double[] arrayRadius = { 30, 90, 100, 200 };
         
                // 设置弧段拟合数为20
                int semicircleSegments = 20;
         
                BufferAnalyst.createMultiBuffer(sourceRecordset, resultDataset, arrayRadius, BufferRadiusUnit.Meter, semicircleSegments, false,true, false);
         }
         
      • createLineOneSideMultiBuffer

        public static boolean createLineOneSideMultiBuffer(DatasetVector sourceDataset,
                                                           DatasetVector resultDataset,
                                                           double[] bufferRadiuses,
                                                           BufferRadiusUnit bufferRadiusUnit,
                                                           int semicircleSegments,
                                                           boolean isLeft,
                                                           boolean isUnion,
                                                           boolean isAttributeRetained,
                                                           boolean isRing)
        创建矢量线数据集单边多重缓冲区。
        参数:
        sourceDataset - 指定的创建多重缓冲区的源矢量数据集。
        resultDataset - 指定的用于存储缓冲区分析结果的数据集,必须是面数据集。
        bufferRadiuses - 指定的多重缓冲区半径列表。
        bufferRadiusUnit - 指定的缓冲区半径单位。
        semicircleSegments - 指定的弧段拟合数。
        isLeft - 是否生成左缓冲区。
        isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
        isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
        isRing - 是否生成环状缓冲区。
        返回:
        一个布尔值,如果创建矢量线数据集单边多重缓冲区成功返回 true,否则返回 false。
        Example:
        以下代码示范了如何根据给定的数据源和线矢量数据集创建线的单边多重缓冲区。
         public void oneSideMultiBufferForDataset(DatasetVector sourceDataset,
                        DatasetVector resultDataset) {
                //使用数组来存储多重缓冲区的半径
                double[] arrayRadius ={30,100};
         
                //设置弧段拟合数为20
                int semicircleSegments = 20;
         
                //设置单边缓冲区的类型为左缓冲区
                boolean isLeft = true;
         
                BufferAnalyst.createLineOneSideMultiBuffer(sourceDataset, resultDataset, arrayRadius, BufferRadiusUnit.Meter, semicircleSegments, isLeft, false, true, false);
         }
         
      • createLineOneSideMultiBuffer

        public static boolean createLineOneSideMultiBuffer(Recordset sourceRecordset,
                                                           DatasetVector resultDataset,
                                                           double[] bufferRadiuses,
                                                           BufferRadiusUnit bufferRadiusUnit,
                                                           int semicircleSegments,
                                                           boolean isLeft,
                                                           boolean isUnion,
                                                           boolean isAttributeRetained,
                                                           boolean isRing)
        创建矢量记录集单边多重缓冲区。
        参数:
        sourceRecordset - 指定的创建多重缓冲区的源矢量记录集。
        resultDataset - 指定的用于存储缓冲区分析结果的数据集,必须是面数据集。
        bufferRadiuses - 指定的多重缓冲区半径列表。
        bufferRadiusUnit - 指定的缓冲区半径单位。
        semicircleSegments - 指定的弧段拟合数。
        isLeft - 是否生成左缓冲区。
        isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
        isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
        isRing - 是否生成环状缓冲区。
        返回:
        一个布尔值,如果成功返回 true,否则返回 false。
        Example:
        请参见 createLineOneSideMultiBuffer(DatasetVector, DatasetVector, double[], BufferRadiusUnit, int, boolean, boolean, boolean, boolean) 方法的示例。