对应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;
}