com.supermap.analyst.spatialanalyst
类 BufferAnalyst

java.lang.Object
  继承者 com.supermap.analyst.spatialanalyst.BufferAnalyst

public class BufferAnalyst
extends java.lang.Object

缓冲区分析类。该类用于为点、线、面数据集(或记录集)以及网络数据集创建缓冲区,包括单重缓冲区、多重缓冲区和线单边多重缓冲区。

缓冲区分析是围绕空间对象,使用一个或多个与这些对象的距离值(称为缓冲半径)作为半径,生成一个或多个区域的过程。缓冲区也可以理解为空间对象的一种影响或服务范围。

缓冲区分析的基本作用对象是点、线、面。SuperMap 支持对二维点、线、面数据集(或记录集)和网络数据集进行缓冲区分析。其中,对网络数据集进行缓冲区分析时,是对其中的弧段作缓冲区。缓冲区的类型可以分析单重缓冲区(或称简单缓冲区)和多重缓冲区。下面以简单缓冲区为例分别介绍点、线、面的缓冲区。

缓冲区分析在 GIS 空间分析中经常用到,且往往结合叠加分析来共同解决实际问题。缓冲区分析在农业、城市规划、生态保护、防洪抗灾、军事、地质、环境等诸多领域都有应用。

例如扩建道路时,可根据道路扩宽宽度对道路创建缓冲区,然后将缓冲区图层与建筑图层叠加,通过叠加分析查找落入缓冲区而需要被拆除的建筑;又如,为了保护环境和耕地,可对湿地、森林、草地和耕地进行缓冲区分析,在缓冲区内不允许进行工业建设。

说明:

  1. 对于面对象,在做缓冲区分析前最好先经过拓扑检查,排除面内相交的情况,所谓面内相交,指的是面对象自身相交,如图所示,图中数字代表面对象的节点顺序。
  2. 对“负半径”的说明
  3. 关于缓冲区的参数设置,请参见 BufferAnalystParameter 类。


    方法摘要
    static void addSteppedListener(SteppedListener l)
              添加一个进度条事件(SteppedEvent)的监听器。
    static boolean createBuffer(DatasetVector sourceDataset, DatasetVector resultDataset, BufferAnalystParameter bufferAnalystParameter, boolean isUnion, boolean isAttributeRetained)
              创建矢量数据集缓冲区。
    static boolean createBuffer(Recordset sourceRecordset, DatasetVector resultDataset, BufferAnalystParameter bufferAnalystParameter, boolean isUnion, boolean isAttributeRetained)
              创建矢量记录集缓冲区。
    static boolean createLineOneSideMultiBuffer(DatasetVector sourceDataset, DatasetVector resultDataset, double[] bufferRadiuses, BufferRadiusUnit bufferRadiusUnit, int semicircleSegments, boolean isLeft, boolean isUnion, boolean isAttributeRetained, boolean isRing)
              创建矢量线数据集单边多重缓冲区。
    static boolean createLineOneSideMultiBuffer(Recordset sourceRecordset, DatasetVector resultDataset, double[] bufferRadiuses, BufferRadiusUnit bufferRadiusUnit, int semicircleSegments, boolean isLeft, boolean isUnion, boolean isAttributeRetained, boolean isRing)
              创建矢量线记录集单边多重缓冲区。
    static boolean createMultiBuffer(DatasetVector sourceDataset, DatasetVector resultDataset, double[] bufferRadiuses, BufferRadiusUnit bufferRadiusUnit, int semicircleSegments, boolean isUnion, boolean isAttributeRetained, boolean isRing)
              创建矢量数据集多重缓冲区。
    static boolean createMultiBuffer(Recordset sourceRecordset, DatasetVector resultDataset, double[] bufferRadiuses, BufferRadiusUnit bufferRadiusUnit, int semicircleSegments, boolean isUnion, boolean isAttributeRetained, boolean isRing)
              创建矢量记录集多重缓冲区。
    static void removeSteppedListener(SteppedListener l)
              移除一个进度条事件(SteppedEvent)的监听器。
     
    从类 java.lang.Object 继承的方法
    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    方法详细信息

    createBuffer

    public static boolean createBuffer(DatasetVector sourceDataset,
                                       DatasetVector resultDataset,
                                       BufferAnalystParameter bufferAnalystParameter,
                                       boolean isUnion,
                                       boolean isAttributeRetained)
    创建矢量数据集缓冲区。

    有关缓冲区分析的介绍,请参阅 BufferAnalyst 类。

    参数:
    sourceDataset - 指定的创建缓冲区的源矢量数据集。支持点、线、面数据集和网络数据集。对网络数据集进行分析,是对其中的弧段作缓冲区。
    resultDataset - 指定的存储缓冲区分析结果的数据集,必须是面数据集。
    bufferAnalystParameter - 指定的缓冲区分析参数对象。
    isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交。
    isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 false 时有效。
    返回:
    一个布尔值,如果成功返回 true,否则返回 false。
    示例:
    以下代码示范了如何创建线矢量数据集的缓冲区。
    public void bufferAnalystForDataset() {
    
            // 返回用来建立缓冲区的矢量数据集
            Workspace workspace = new Workspace();
            DatasourceConnectionInfo datasourceConnectionInfo = new
                    DatasourceConnectionInfo("G:/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)
    创建矢量记录集缓冲区。

    有关缓冲区分析的介绍,请参阅 BufferAnalyst 类。

    参数:
    sourceRecordset - 指定的创建缓冲区的源矢量记录集。支持点、线、面记录集。
    resultDataset - 指定的存储缓冲区分析结果的数据集,必须是面数据集。
    bufferAnalystParameter - 指定的缓冲区分析参数对象。
    isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交。
    isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 false 时有效。
    返回:
    一个布尔值,如果成功返回 true,否则返回 false。
    示例:
    以下代码示范了如何创建线矢量记录集的缓冲区,假设为通过查询方式返回的线记录集建立缓冲区。
     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);
    
         }
         

    createLineOneSideMultiBuffer

    public static boolean createLineOneSideMultiBuffer(DatasetVector sourceDataset,
                                                       DatasetVector resultDataset,
                                                       double[] bufferRadiuses,
                                                       BufferRadiusUnit bufferRadiusUnit,
                                                       int semicircleSegments,
                                                       boolean isLeft,
                                                       boolean isUnion,
                                                       boolean isAttributeRetained,
                                                       boolean isRing)
    创建矢量线数据集单边多重缓冲区。

    线的单边多重缓冲区,是指在线对象的一侧生成多重缓冲区。左侧是指沿线对象的节点序列方向的左侧,右侧为节点序列方向的右侧。

    有关缓冲区分析的更多介绍,请参阅 BufferAnalyst 类。

    注意:不支持对网络数据集创建线的单边多重缓冲区。

    参数:
    sourceDataset - 指定的创建多重缓冲区的源矢量数据集。只支持线数据集。
    resultDataset - 指定的用于存储缓冲区分析结果的数据集,必须是面数据集。
    bufferRadiuses - 指定的多重缓冲区半径列表。单位由 bufferRadiusUnit 参数指定。
    bufferRadiusUnit - 指定的缓冲区半径单位。
    semicircleSegments - 指定的弧段拟合数。
    isLeft - 是否生成左缓冲区。设置为 true,在线的左侧生成缓冲区,否则在右侧生成缓冲区。
    isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
    isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
    isRing - 是否生成环状缓冲区。设置为 true,则生成多重缓冲区时外圈缓冲区是以环状区域与内圈数据相邻的;设置为 false,则外围缓冲区是一个包含了内圈数据的区域。
    返回:
    一个布尔值,如果成功返回 true,否则返回 false。
    示例:
    以下代码示范了如何根据给定的数据源和线矢量数据集创建线的单边多重缓冲区。
     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)
    创建矢量线记录集单边多重缓冲区。

    有关线单边多重缓冲区分析的介绍,请参阅另一重载方法 createLineOneSideMultiBuffer;有关缓冲区分析的更多介绍,请参阅 BufferAnalyst 类。

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

    createMultiBuffer

    public static boolean createMultiBuffer(DatasetVector sourceDataset,
                                            DatasetVector resultDataset,
                                            double[] bufferRadiuses,
                                            BufferRadiusUnit bufferRadiusUnit,
                                            int semicircleSegments,
                                            boolean isUnion,
                                            boolean isAttributeRetained,
                                            boolean isRing)
    创建矢量数据集多重缓冲区。

    有关缓冲区分析的介绍,请参阅 BufferAnalyst 类。

    参数:
    sourceDataset - 指定的创建多重缓冲区的源矢量数据集。支持点、线、面数据集和网络数据集。对网络数据集进行分析,是对其中的弧段作缓冲区。
    resultDataset - 指定的用于存储缓冲区分析结果的数据集。
    bufferRadiuses - 指定的多重缓冲区半径列表。单位由 bufferRadiusUnit 参数指定。
    bufferRadiusUnit - 指定的缓冲区半径单位。
    semicircleSegments - 指定的弧段拟合数。
    isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
    isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
    isRing - 是否生成环状缓冲区。设置为 true,则生成多重缓冲区时外圈缓冲区是以环状区域与内圈数据相邻的;设置为 false,则外围缓冲区是一个包含了内圈数据的区域。
    返回:
    一个布尔值,如果成功返回 true,否则返回 false。
    示例:
    请参见 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)
    创建矢量记录集多重缓冲区。

    有关缓冲区分析的介绍,请参阅 BufferAnalyst 类。

    参数:
    sourceRecordset - 指定的创建多重缓冲区的源矢量记录集。支持点、线、面记录集。
    resultDataset - 指定的用于存储缓冲区分析结果的数据集。
    bufferRadiuses - 指定的多重缓冲区半径列表。单位由 bufferRadiusUnit 参数指定。
    bufferRadiusUnit - 指定的缓冲区半径单位。
    semicircleSegments - 指定的弧段拟合数。
    isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
    isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
    isRing - 是否生成环状缓冲区。设置为 true,则生成多重缓冲区时外圈缓冲区是以环状区域与内圈数据相邻的;设置为 false,则外围缓冲区是一个包含了内圈数据的区域。
    返回:
    一个布尔值,如果成功返回 true,否则返回 false。
    示例:
    以下代码示范了如何根据给定的记录集创建线的多重缓冲区。假设已经获取需要做缓冲区的记录集,并且用于存储结果的数据集已经创建或存在。
     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);
     }
     

    addSteppedListener

    public static void addSteppedListener(SteppedListener l)
    添加一个进度条事件(SteppedEvent)的监听器。

    参数:
    l - 一个用于接收进度条事件的监听器。

    removeSteppedListener

    public static void removeSteppedListener(SteppedListener l)
    移除一个进度条事件(SteppedEvent)的监听器。

    参数:
    l - 一个用于接收进度条事件的监听器。