function CreateShapefile(const FileName: string; pFields: IFieldsEdit;
ShapeType: Integer; SpatialReference: ISpatialReference = nil):
IFeatureClass;
var
strFolder, strName : string;
pWS : IWorkspace;
pFWS : IFeatureWorkspace;
pWorkspaceFactory : IWorkspaceFactory;
pField : IFieldEdit;
pGeomDef : IGeometryDefEdit;
pFeatureClass : IFeatureClass;
const
strShapeFieldName = 'Shape';
begin
strFolder := ExtractFileDir(FileName);
strName := ExtractFileName(FileName);
pWorkspaceFactory := CoShapefileWorkspaceFactory.Create as
IWorkspaceFactory;
pWorkspaceFactory.OpenFromFile(strFolder, 0, pWS);
pWS.QueryInterface(IFeatureWorkspace, pFWS);
pField := CoField.Create as IFieldEdit;
pField.Set_Name(strShapeFieldName);
pField.Set_Type_(esriFieldTypeGeometry);
pGeomDef := CoGeometryDef.Create as IGeometryDefEdit;
pGeomDef.Set_GeometryType(ShapeType);
if SpatialReference = nil then
pGeomDef._Set_SpatialReference(CoUnknownCoordinateSystem.Create as
ISpatialReference)
else
pGeomDef._Set_SpatialReference(SpatialReference);
pField._Set_GeometryDef(pGeomDef);
pFields.AddField(pField);
pFWS.CreateFeatureClass(strName, pFields, nil, nil, esriFTSimple,
strShapeFieldName, '', pFeatureClass);
result := pFeatureClass;
pWorkspaceFactory := nil;
pField := nil;
pGeomDef := nil;
end;
// 调用例子 by yanleigis landgis@126.com
var
pField : IFieldEdit;
pFields : IFieldsEdit;
begin
pField := CoField.Create as IFieldEdit;
pField.Set_Name('ID');
pField.Set_Type_(esriFieldTypeInteger);
pFields := CoFields.Create as IFieldsEdit;
pFields.AddField(pField);
if CreateShapefile('c:/temp/testshp', pFields, esriGeometryPolyline)=nil then
begin
Raise exception.Create('创建失败');
end;
end;