ArcEngine,delphi创建shp文件

本文介绍了一个用于创建Shapefile矢量文件的函数。该函数接收文件名、字段信息、几何类型及空间参考等参数,并返回一个特征类。示例展示了如何使用此函数创建一个多线形Shapefile。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值