com.supermap.analyst

类 BufferAnalystGeometry

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


  • public class BufferAnalystGeometry
    extends java.lang.Object
    几何对象缓冲区分析类。
    • 方法详细资料

      • createBuffer

        public static GeoRegion createBuffer(Geometry geometry,
                                             BufferAnalystParameter bufferAnalystParameter,
                                             PrjCoordSys prjCoordSys)
        根据给定的几何对象及缓冲区分析参数对象创建缓冲区。可以指定源投影坐标系。

        该方法适用于当几何对象的来源的投影坐标系的单位,与缓冲区参数中指定的缓冲区半径单位(setRadiusUnit)无法直接转换时,由用户指出源投影坐标系,以保证分析结果的正确。

        例如,几何对象 A 所属的数据集的投影坐标系为地理坐标系,为经纬度坐标,单位为度,指定分析半径单位为米,半径为 50,此时如果不指定源坐标系类型,分析的结果是以 50 度作为半径的缓冲面对象,是不满足要求的。指定了源投影坐标系后,分析时系统首先会依据源投影坐标系进行投影转换,使几何对象 A 的坐标与指定的分析半径单位一致或可以直接转换,生成缓冲区后再将结果转换到源投影坐标系。

        注意:对点或面对象进行缓冲区分析时,只能采用圆头缓冲模式,即:参数 BufferAnalystParameter 对象中的 setEndType() 方法,只能设置为BufferEndType.ROUND

        参数:
        geometry - 指定的几何对象。
        bufferAnalystParameter - 指定的缓冲区分析参数对象,参数中左\右缓冲区都不能设置为0,即不支持生成单边缓冲区。有关缓冲分析参数对象,请参见 BufferAnalystParameter 类。
        prjCoordSys - 指定的源投影坐标系。
        返回:
        根据几何对象创建缓冲区,成功返回一个面对象,失败则返回一个空的面对象。
        Example:
        以下代码示范了如何根据给定的几何对象创建缓冲区,假设为通过查询返回的线几何对象创建缓冲区。
         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();
                }