arcgis engine for java二次开发,根据属性过滤shp文件

对应arcmap功能如下图
对应arcmap功能
inputFilePath、inputFileName 、outputPath 、outputFileName 、cql 参数替换即可,例如:

String inputFilePath = “D:\”; // 输入文件路径
String inputFileName = “input.shp”; // 输入文件名
String cql = “DLMC = ‘果园’ OR DLMC = ‘茶园’”; // 过滤表达式
String outputPath = “D:\”; // 输出文件路径
String outputFileName = “output.shp”; // 输出文件名

public JsonResult handleFilterShp() {

        String inputFilePath = ""; // 输入文件路径
        String inputFileName = ""; // 输入文件名
        String cql = "DLMC = '果园' OR DLMC = '茶园'"; // 过滤表达式
        String outputPath = ""; // 输出文件路径
        String outputFileName = ""; // 输出文件名

        // 输入
        ShapefileWorkspaceFactory factory = null;
        Workspace workspace = null;
        FeatureClass featureClass = null;
        QueryFilter queryFilter = null;
        FeatureCursor featureCursor = null;
        
        // 输出
        Workspace outWorkspace = null;
        FeatureClass outFeatureClass = null;
        FeatureCursor outFeatureCursor = null;
        try {
            // 打开输入shp文件
            factory = new ShapefileWorkspaceFactory();
            workspace = new Workspace(factory.openFromFile(inputFilePath, 0));
            featureClass = new FeatureClass(workspace.openFeatureClass(inputFileName));
            final int count = featureClass.featureCount(null);
            // 更具sql过滤
            queryFilter = new QueryFilter();
            queryFilter.setWhereClause(cql);
            featureCursor = new FeatureCursor(featureClass.search(queryFilter, true));
            
            // 创建输出shp文件
            outWorkspace = new Workspace(factory.openFromFile(outputPath, 0));
            IFeatureClass iOutFeatureClass = outWorkspace.createFeatureClass(outputFileName, featureClass
                    .getFields(), featureClass.getCLSID(), featureClass.getEXTCLSID(), featureClass
                    .getFeatureType(), featureClass.getShapeFieldName(), "");
            outFeatureClass = new FeatureClass(iOutFeatureClass);
            outFeatureCursor =new FeatureCursor(outFeatureClass.IFeatureClass_insert(true));
            IFeatureBuffer outFeatureBuffer = outFeatureClass.createFeatureBuffer();

            IFeature iFeature = featureCursor.nextFeature();
            while (iFeature != null) {
                IGeometry shapeCopy = iFeature.getShapeCopy();
                if (!(shapeCopy instanceof ITopologicalOperator))
                {
                    continue;
                }

                ITopologicalOperator shapeTopologicalGeom = (ITopologicalOperator) shapeCopy;
                outFeatureBuffer.setShapeByRef(shapeTopologicalGeom.buffer(0));
                
                // 复制字段到输出shp
                IFields fields = iFeature.getFields();
                IFields outFields = outFeatureBuffer.getFields();
                for (int i = 0; i < fields.getFieldCount(); i++) {
                    IField field = fields.getField(i);
                    if (field.getType() == esriFieldType.esriFieldTypeOID || field.getType() == esriFieldType.esriFieldTypeGeometry)
                    {
                        continue;
                    }
                    String name = field.getName();
                    outFeatureBuffer.setValue(outFields.findField(name), iFeature.getValue(fields.findField(name)));
                }
                outFeatureCursor.insertFeature(outFeatureBuffer);
                iFeature = featureCursor.nextFeature();
            }
            outFeatureCursor.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            if(factory != null) {
                factory.release();
            }
            if(workspace != null) {
                workspace.release();
            }
            if(featureClass != null) {
                featureClass.release();
            }
            if(queryFilter != null) {
                queryFilter.release();
            }
            if(featureCursor != null) {
                featureCursor.release();
            }
            if(outWorkspace != null) {
                outWorkspace.release();
            }
            if(outFeatureClass != null) {
                outFeatureClass.release();
            }
            if(outFeatureCursor != null) {
                outFeatureCursor.release();
            }
        }
        return null;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值