public class BufferAnalyst
extends java.lang.Object
缓冲区分析是 GIS 中基本的空间分析,缓冲区实际上是在基本空间要素周围建立的具有一定宽度的邻近区域。缓冲区分析可以有以下应用,比如确定街道拓宽的范围,确定放射源影响的范围等等。
缓冲区分析支持的数据类型包括:二维点、线、面数据集(记录集)和网络数据集。其中,对网络数据集进行缓冲区分析时,是对其中的弧段作缓冲区。
对于面对象而言,在做缓冲区分析前最好先经过拓扑检查,排除面内相交的情况,所谓面内相交,指的是面对象自身相交,如图所示,图中数字代表面对象的节点顺序。

对“负半径”的说明
关于缓冲区的参数设置,请参见 BufferAnalystParameter 类。
| 限定符和类型 | 方法和说明 |
|---|---|
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)
创建矢量记录集多重缓冲区。
|
public static boolean createBuffer(DatasetVector sourceDataset, DatasetVector resultDataset, BufferAnalystParameter bufferAnalystParameter, boolean isUnion, boolean isAttributeRetained)
sourceDataset - 指定的创建缓冲区的源矢量数据集。resultDataset - 指定的存储缓冲区分析结果的数据集,必须是面数据集。bufferAnalystParameter - 指定的缓冲区分析参数对象。isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交。isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 false 时有效。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();
}public static boolean createBuffer(Recordset sourceRecordset, DatasetVector resultDataset, BufferAnalystParameter bufferAnalystParameter, boolean isUnion, boolean isAttributeRetained)
sourceRecordset - 指定的创建缓冲区的源矢量记录集。resultDataset - 指定的存储缓冲区分析结果的数据集,必须是面数据集。bufferAnalystParameter - 指定的缓冲区分析参数对象。isUnion - 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交。isAttributeRetained - 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 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);
}
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 - 是否生成环状缓冲区。createMultiBuffer(Recordset, DatasetVector, double[], BufferRadiusUnit, int, boolean, boolean, boolean) 方法的示例。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 - 是否生成环状缓冲区。
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);
}
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 - 是否生成环状缓冲区。
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);
}
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 - 是否生成环状缓冲区。createLineOneSideMultiBuffer(DatasetVector, DatasetVector, double[], BufferRadiusUnit, int, boolean, boolean, boolean, boolean) 方法的示例。