现在的位置: 首页 > 综合 > 正文

ArcEngine,delphi创建shp文件

2013年10月12日 ⁄ 综合 ⁄ 共 2065字 ⁄ 字号 评论关闭

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;

抱歉!评论已关闭.