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(); }