ArcEngine对CSV文件的操作

本文介绍如何使用ArcGIS API实现CSV文件的加载及与SHP文件的关联,并导出关联后的数据。首先通过OLEDBWorkspaceFactory加载CSV文件为表,接着将此表与指定字段关联到SHP文件上,最后导出关联结果。

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

加载csv文件

using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DataSourcesOleDB;
using ESRI.ArcGIS.Geodatabase;

public static ITable OpenCSVFile(string csvFullPath){
    string csvPath = System.IO.Path.GetDirectoryName(csvFullPath); //csv文件的文件夹位置
    string csvName = System.IO.Path.GetFileName(csvFullPath);//csv文件的文件名
    IWorkspaceFactory pWorkspaceFactory = new OLEDBWorkspaceFactory();
    IPropertySet pPropSet = new PropertySet();
    //注意如果csv文件的字符编码是utf-8
    //pPropSet.SetProperty("CONNECTSTRING", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + tablePath + ";Extended Properties='Text;HDR=Yes;IMEX=1;CharacterSet=65001;'");
    pPropSet.SetProperty("CONNECTSTRING", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + csvPath + ";Extended Properties='Text;HDR=Yes;IMEX=1;'");
    IWorkspace pWorkspace = pWorkspaceFactory.Open(pPropSet, 0);
    IFeatureWorkspace pFeatureWorkspace2 = (IFeatureWorkspace)pWorkspace;
    ITable pTable = pFeatureWorkspace2.OpenTable(csvName);
    return pTable;
}

shp文件join csv表格并导出

using ESRI.ArcGIS.GeoDatabaseUI;
using ESRI.ArcGIS.Carto;

public static void JoinCSV2ShpAndExport(IFeatureLayer pFeatureLayer, ITable pTable, string layerJoinField, string csvJoinField)
{
      //join
     IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
     IMemoryRelationshipClassFactory pMemoryRelationClassFC = new MemoryRelationshipClassFactory();
     IRelationshipClass pRelationshipClass = pMemoryRelationClassFC.Open("", pFeatureClass, layerJoinField, (IObjectClass)pTable, csvJoinField, "forword", "backword", esriRelCardinality.esriRelCardinalityOneToOne);
     IDisplayRelationshipClass pDisplayrelationShip = (IDisplayRelationshipClass)pFeatureLayer;                                pDisplayrelationShip.DisplayRelationshipClass(pRelationshipClass, esriJoinType.esriLeftOuterJoin);

     IRelationshipClassCollectionEdit pRelClassCollEdit = pFeatureLayer as IRelationshipClassCollectionEdit;
    pRelClassCollEdit.AddRelationshipClass(pRelationshipClass);
     IDisplayTable displayTable = pRelClassCollEdit as IDisplayTable;
     IRelQueryTable joinedTable = displayTable.DisplayTable as IRelQueryTable;
     //导出
     IDatasetName srcName = (joinedTable as IDataset).FullName as IDatasetName;
     IDatasetName destName = new FeatureClassNameClass() as IDatasetName;
     destName.Name = "aa";//输出文件的名称

     IWorkspaceName destWsName = new WorkspaceNameClass();
     destWsName.PathName = "C:\\Temp\\";//输出文件的位置
     destWsName.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory.1";

    destName.WorkspaceName = destWsName;

    IFeatureClassName destFcName = destName as IFeatureClassName;
    destFcName.FeatureType = esriFeatureType.esriFTSimple;
    destFcName.ShapeFieldName = "Shape";
    destFcName.ShapeType = pFeatureClass.ShapeType;

    IQueryFilter queryF = null;
    ISelectionSet selnSet = null;
    IGeometryDef geomDef = null;
    ExportOperation exOp = new ExportOperationClass();
    exOp.ExportFeatureClass(srcName, queryF, selnSet, geomDef, destFcName, 0);

    ////移除表连接
    pRelClassCollEdit.RemoveAllRelationshipClasses();
    pDisplayrelationShip.DisplayRelationshipClass(null, esriJoinType.esriLeftInnerJoin);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值