直接上代码
public IFeatureClass createFeatureClass(IFeatureWorkspace featureWorkspace,
ISpatialReference spatialReference,
List<ShpField> fieldList,
int geometryType,
String featureClassName) {
try {
//要素类描述类
IFeatureClassDescription fcDesc = new FeatureClassDescription();
IObjectClassDescription ocDesc = (IObjectClassDescription) fcDesc;
GeometryDef geometryDef = new GeometryDef();
//设置几何类型
geometryDef.setGeometryType(geometryType);
//设置空间参考
geometryDef.setSpatialReferenceByRef(spatialReference);
//添加必要字段
IFields fields = ocDesc.getRequiredFields();
//设置几何字段
int shpIndex = fields.findField("SHAPE");
IField shpField = fields.getField(shpIndex);
IFieldEdit fieldEdit = (IFieldEdit) shpField;
fieldEdit.setGeometryDefByRef(geometryDef);
IFieldsEdit fieldsEdit = (IFieldsEdit) fields;
//添加属性字段
for (ShpField field : fieldList) {
fieldsEdit.addField(buildField(field.getName(), field.getType()));
}
//创建要素类
IFeatureClass featureClass = featureWorkspace.createFeatureClass(featureClassName, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null);
//释放资源
Cleaner.release(fcDesc);
Cleaner.release(ocDesc);
Cleaner.release(geometryDef);
Cleaner.release(fields);
Cleaner.release(shpField);
Cleaner.release(fieldEdit);
Cleaner.release(fieldsEdit);
return featureClass;
} catch (IOException e) {
throw new BusinessException("创建要素类失败!请检查文件名是否已存在", e);
}
}
字段实体类
@Data
public class ShpField {
/**字段名称*/
private String name;
/**字段类型,与esriFieldType对应*/
private int type;
/**字段值*/
private Object value;
}
该方法仅限创建点线面等简单要素。