I am facing some problems while exporting in_memory group layers to shapefile. but this code is successfully exporting any single in_memory layer to any type like shapefile gdb etc. here is my code.
public static ILayer exportLayer(IPropertySet properties, WorkspaceType type, IFeatureLayer featureLayer) throws Exception
{
IFeatureClass featureClass = featureLayer.getFeatureClass();
IWorkspace sourceWorkspace = new Workspace(((IDataset)featureLayer).getWorkspace());
IWorkspace targetWorkspace = WorkspaceFactory.getFactory(type, properties);
IWorkspaceName sourceWorkspaceName = getWorkspaceName(sourceWorkspace);
IWorkspaceName targetWorkspaceName = getWorkspaceName(targetWorkspace);
IFeatureClassName sourceFeatureClassName = new FeatureClassName();
IDatasetName sourceDatasetName = (IDatasetName) sourceFeatureClassName;
sourceDatasetName.setName(((IDataset)featureLayer).getName());
sourceDatasetName.setWorkspaceNameByRef(sourceWorkspaceName);
// Create a name object for the FGDB feature class and cast it to the
// IDatasetName interface.
IFeatureClassName targetFeatureClassName = new FeatureClassName();
IDatasetName targetDatasetName = (IDatasetName) targetFeatureClassName;
targetDatasetName.setName((String) properties.getProperty("LAYER"));
targetDatasetName.setWorkspaceNameByRef(targetWorkspaceName);
// Create the objects and references necessary for field validation.
IFieldChecker fieldChecker = new FieldChecker();
IFields sourceFields = featureClass.getFields();
IFields[] targetFields = new IFields[1];
IEnumFieldError[] enumFieldError = new IEnumFieldError[1];
// Set the required properties for the IFieldChecker interface.
fieldChecker.setInputWorkspace(sourceWorkspace);
fieldChecker.setValidateWorkspaceByRef(targetWorkspace);
// Validate the fields and check for errors.
fieldChecker.validate(sourceFields, enumFieldError, targetFields);
if (enumFieldError != null)
{
/* handle the field errors */
}
// Find the shape field.
String shapeFieldName = featureClass.getShapeFieldName();
int shapeFieldIndex = featureClass.findField(shapeFieldName);
IField shapeField = sourceFields.getField(shapeFieldIndex);
// Get the geometry definition from the shape field and clone it.
IGeometryDef geometryDef = shapeField.getGeometryDef();
IClone geometryDefClone = (IClone) geometryDef;
IClone targetGeometryDefClone = geometryDefClone.esri_clone();
IGeometryDef targetGeometryDef = new GeometryDef(targetGeometryDefClone);
// Create the converter and run the conversion.
IFeatureDataConverter featureDataConverter = new FeatureDataConverter();
IEnumInvalidObject enumInvalidObject = featureDataConverter
.convertFeatureClass(sourceFeatureClassName, null, null,
targetFeatureClassName, targetGeometryDef,
targetFields[0], "", 1000, 0);
// Check for errors.
IInvalidObjectInfo invalidObjectInfo = null;
enumInvalidObject.reset();
List<Integer> invalidObjects = new ArrayList<Integer>();
while ((invalidObjectInfo = enumInvalidObject.next()) != null)
{
invalidObjects.add(invalidObjectInfo.getInvalidObjectID());
}
IFeatureLayer targetLayer = new FeatureLayer();
targetLayer.setFeatureClassByRef(((Workspace)targetWorkspace).openFeatureClass(targetDatasetName.getName()));
targetLayer.setName(targetDatasetName.getName());
return targetLayer;
}
gets automation exception when trying to convert the data featureDataConverter .convertFeatureClass(sourceFeatureClassName, null, null, targetFeatureClassName, targetGeometryDef, targetFields[0], "", 1000, 0);
Thanks for helping me out.