public class BufferAnalystGeometry
extends java.lang.Object
| 限定符和类型 | 方法和说明 |
|---|---|
static GeoRegion |
createBuffer(Geometry geometry,
BufferAnalystParameter bufferAnalystParameter,
PrjCoordSys prjCoordSys)
根据给定的几何对象及缓冲区分析参数对象创建缓冲区。
|
public static GeoRegion createBuffer(Geometry geometry, BufferAnalystParameter bufferAnalystParameter, PrjCoordSys prjCoordSys)
该方法适用于当几何对象的来源的投影坐标系的单位,与缓冲区参数中指定的缓冲区半径单位(setRadiusUnit)无法直接转换时,由用户指出源投影坐标系,以保证分析结果的正确。
例如,几何对象 A 所属的数据集的投影坐标系为地理坐标系,为经纬度坐标,单位为度,指定分析半径单位为米,半径为 50,此时如果不指定源坐标系类型,分析的结果是以 50 度作为半径的缓冲面对象,是不满足要求的。指定了源投影坐标系后,分析时系统首先会依据源投影坐标系进行投影转换,使几何对象 A 的坐标与指定的分析半径单位一致或可以直接转换,生成缓冲区后再将结果转换到源投影坐标系。
注意:对点或面对象进行缓冲区分析时,只能采用圆头缓冲模式,即:参数 BufferAnalystParameter 对象中的 setEndType() 方法,只能设置为BufferEndType.ROUND。
geometry - 指定的几何对象。bufferAnalystParameter - 指定的缓冲区分析参数对象,参数中左\右缓冲区都不能设置为0,即不支持生成单边缓冲区。有关缓冲分析参数对象,请参见 BufferAnalystParameter 类。prjCoordSys - 指定的源投影坐标系。
public void bufferAnalystForGeometry() {
// 返回用来建立缓冲区的对象所在的矢量数据集
Workspace workspace = new Workspace();
String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(rootPath + "/shanghai.udb", "shanghai", "");
Datasource targetDatasource = workspace.getDatasources().open(datasourceConnectionInfo);
DatasetVector datasetRoad = (DatasetVector) targetDatasource.getDatasets().get("Road_L");
// 通过查询返回线几何对象所在的记录
QueryParameter queryParam = new QueryParameter();
queryParam.setAttributeFilter("ClassID=411001");
queryParam.setHasGeometry(true);
Recordset queryRecordset = datasetRoad.query(queryParam);
// 新建一个数据集用来存储几何对象的缓冲区
String resultDatasetName = targetDatasource.getDatasets().getAvailableDatasetName("resultDataset");
DatasetVectorInfo datasetvectorInfo = new DatasetVectorInfo();
datasetvectorInfo.setType(DatasetType.REGION);
datasetvectorInfo.setName(resultDatasetName);
datasetvectorInfo.setEncodeType(EncodeType.NONE);
DatasetVector resultDataset = targetDatasource.getDatasets().create(datasetvectorInfo);
Recordset resultDatasetRecordset = resultDataset.getRecordset(false, CursorType.DYNAMIC);
// 设置缓冲区分析参数
BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
bufferAnalystParam.setEndType(BufferEndType.FLAT);
bufferAnalystParam.setLeftDistance(20);
bufferAnalystParam.setRightDistance(20);
// 为线几何对象建立缓冲区,并将分析结果存储在结果数据集中
PrjCoordSys prj = queryRecordset.getDataset().getPrjCoordSys();
while (!queryRecordset.isEOF()) {
GeoLine geolineForBuffer = (GeoLine) queryRecordset.getGeometry();
GeoRegion geometryBuffer = BufferAnalystGeometry.createBuffer(geolineForBuffer, bufferAnalystParam, prj);
resultDatasetRecordset.addNew(geometryBuffer);
resultDatasetRecordset.update();
queryRecordset.moveNext();
}
// 释放占有的资源
queryRecordset.dispose();
resultDatasetRecordset.dispose();
workspace.dispose();
}