public static IFeatureClass GetShpFeatureClass(string directory, string fileName) { IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace workspace = workspaceFactory.OpenFromFile(directory, 0); IFeatureClass featureClass = workspace.GetFeatureClass(fileName); IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl; if (factorylock.SchemaLockingEnabled) { factorylock.DisableSchemaLocking(); } return(featureClass); }
/// <summary> /// 获得指定文件夹的工作区间要素编辑接口 /// </summary> /// <param name="folder">文件夹路径</param> /// <returns>要素编辑接口</returns> public static IWorkspaceEdit GetEdit(string folder) { IWorkspaceFactory wsf = new ShapefileWorkspaceFactoryClass(); IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)wsf; if (ipWsFactoryLock.SchemaLockingEnabled) { ipWsFactoryLock.DisableSchemaLocking(); } IFeatureWorkspace fws = (IFeatureWorkspace)wsf.OpenFromFile(folder, 0); IWorkspaceEdit wsEdit = fws as IWorkspaceEdit; return(wsEdit); }
//获取featureClass public static IFeatureClass GetFeatureClass(string filePath) { IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IWorkspaceFactoryLockControl pWorkspaceFactoryLockControl = pWorkspaceFactory as IWorkspaceFactoryLockControl; if (pWorkspaceFactoryLockControl.SchemaLockingEnabled) { pWorkspaceFactoryLockControl.DisableSchemaLocking(); } IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileName(filePath)); return(pFeatureClass); }
public static void Move(string filePath, List <StockTable> tables) { IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromFile(filePath, 0); IEnumDataset dataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset); IFeatureDataset featureDataset = dataset.Next() as IFeatureDataset; foreach (var table in tables) { } IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl; if (factorylock.SchemaLockingEnabled) { factorylock.DisableSchemaLocking(); } }
/// <summary> /// 给要素类 添加字段 XZSDM XZSMC /// </summary> /// <param name="filePath"></param> /// <param name="tables"></param> public static void AddFields(string filePath, List <StockTable> tables) { IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromFile(filePath, 0); foreach (var table in tables) { IFeatureClass featureClass = workspace.GetFeatureClass(table.Name); if (featureClass != null) { IClass pClass = featureClass as IClass; IFieldsEdit fieldsEdit = featureClass.Fields as IFieldsEdit; IField field = null; IFieldEdit fieldedit = null; var index = featureClass.Fields.FindField("XZSDM"); if (index == -1) { field = new FieldClass(); fieldedit = field as IFieldEdit; fieldedit.Type_2 = esriFieldType.esriFieldTypeString; fieldedit.Name_2 = "XZSDM"; pClass.AddField(field); } index = featureClass.Fields.FindField("XZSMC"); if (index == -1) { field = new FieldClass(); fieldedit = field as IFieldEdit; fieldedit.Type_2 = esriFieldType.esriFieldTypeString; fieldedit.Name_2 = "XZSMC"; pClass.AddField(field); } } } IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl; if (factorylock.SchemaLockingEnabled) { factorylock.DisableSchemaLocking(); } }
private static IFeatureClass GetFeatureClass(string mdbfile, string featureClassName) { IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromFile(mdbfile, 0); IFeatureClass featureClass = workspace.GetFeatureClass(featureClassName); IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl; if (factorylock.SchemaLockingEnabled) { factorylock.DisableSchemaLocking(); } IDataset dataset = featureClass as IDataset; Console.WriteLine(dataset.FullName); Console.WriteLine(dataset.Name); Console.WriteLine(dataset.BrowseName); Console.WriteLine(dataset.Category); Console.WriteLine(featureClass.AliasName); return(featureClass); }
/// <summary> /// 根据栅格图层创建SHP,栅格图层要在根目录 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CreatePolygenShpFromRasterLayerButton_Click(object sender, EventArgs e) { string strFileNameWithType = "Rectangle.shp"; //shp文件名 string strFolderPath = Application.StartupPath; IWorkspaceFactory mIWorkspaceFactory = new ShapefileWorkspaceFactory(); //文件夹 IWorkspace mIWorkspace = mIWorkspaceFactory.OpenFromFile(strFolderPath, 0); IFeatureWorkspace mIFeatureWorkspace = mIWorkspace as IFeatureWorkspace; IFeatureClass mIFeatureClass; if (File.Exists(strFolderPath + "\\" + strFileNameWithType)) { mIFeatureClass = mIFeatureWorkspace.OpenFeatureClass(strFileNameWithType);//fileName为文件名(不包含路径) IDataset mIDataset = mIFeatureClass as IDataset; mIDataset.Delete(); } //指定类型和空间参考 IGeometryDef mIGeometryDef = new GeometryDefClass(); IGeometryDefEdit mIGeometryDefEdit = mIGeometryDef as IGeometryDefEdit; mIGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; mIGeometryDefEdit.SpatialReference_2 = this.MapControl.SpatialReference; //建立Shp文件的字段集 IFields mIFields = new FieldsClass(); IFieldsEdit mIFieldsEdit = mIFields as IFieldsEdit; IField mIField = new FieldClass(); IFieldEdit mIFieldEdit = mIField as IFieldEdit; //建立shape(几何)字段 mIFieldEdit.Name_2 = "Shape"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; mIFieldEdit.GeometryDef_2 = mIGeometryDef; mIFieldsEdit.AddField(mIField); //新建Name字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Name"; mIFieldEdit.AliasName_2 = "Name"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; mIFieldsEdit.AddField(mIField); //新建Xmin字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Xmin"; mIFieldEdit.AliasName_2 = "Xmin"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; mIFieldsEdit.AddField(mIField); //新建Ymin字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Ymin"; mIFieldEdit.AliasName_2 = "Ymin"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; mIFieldsEdit.AddField(mIField); //新建Xmax字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Xmax"; mIFieldEdit.AliasName_2 = "Xmax"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; mIFieldsEdit.AddField(mIField); //新建Ymax字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Ymax"; mIFieldEdit.AliasName_2 = "Ymax"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; mIFieldsEdit.AddField(mIField); //新建CSize字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "CSize"; mIFieldEdit.AliasName_2 = "CSize"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; mIFieldsEdit.AddField(mIField); //新建Width字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Width"; mIFieldEdit.AliasName_2 = "Width"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; mIFieldsEdit.AddField(mIField); //新建Height字段 mIField = new FieldClass(); mIFieldEdit = mIField as IFieldEdit; mIFieldEdit.Length_2 = 32; mIFieldEdit.Name_2 = "Height"; mIFieldEdit.AliasName_2 = "Height"; mIFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; mIFieldsEdit.AddField(mIField); //最后创建Shp文件 mIFeatureClass = mIFeatureWorkspace.CreateFeatureClass(strFileNameWithType, mIFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); for (int i = 0; i < this.MapControl.LayerCount; i++) { ILayer mILayer = this.MapControl.get_Layer(i); IRasterLayer mIRasterLayer = mILayer as IRasterLayer; if (mIRasterLayer != null) { IRasterProps mIRasterProps = mIRasterLayer.Raster as IRasterProps; IFeature mIFeature = mIFeatureClass.CreateFeature(); IPointCollection mIPointCollection = new PolygonClass(); mIPointCollection.AddPoint(mIRasterProps.Extent.UpperLeft); mIPointCollection.AddPoint(mIRasterProps.Extent.UpperRight); mIPointCollection.AddPoint(mIRasterProps.Extent.LowerRight); mIPointCollection.AddPoint(mIRasterProps.Extent.LowerLeft); mIPointCollection.AddPoint(mIRasterProps.Extent.UpperLeft); IPolygon mIPolygon = (IPolygon)mIPointCollection; mIFeature.Shape = mIPolygon; mIFeature.set_Value(mIFeature.Fields.FindField("Name"), mILayer.Name); mIFeature.set_Value(mIFeature.Fields.FindField("Xmin"), mIRasterProps.Extent.XMin); mIFeature.set_Value(mIFeature.Fields.FindField("Ymin"), mIRasterProps.Extent.YMin); mIFeature.set_Value(mIFeature.Fields.FindField("Xmax"), mIRasterProps.Extent.XMax); mIFeature.set_Value(mIFeature.Fields.FindField("Ymax"), mIRasterProps.Extent.YMax); mIFeature.set_Value(mIFeature.Fields.FindField("CSize"), mIRasterProps.MeanCellSize().X.RetentionDecimal(3)); //douCellSize = mIRasterProps.MeanCellSize().X.RetentionDecimal(3); mIFeature.set_Value(mIFeature.Fields.FindField("Width"), mIRasterProps.Width); mIFeature.set_Value(mIFeature.Fields.FindField("Height"), mIRasterProps.Height); mIFeature.Store(); } } //解除锁定 IWorkspaceFactoryLockControl mIWorkspaceFactoryLockControl = mIWorkspaceFactory as IWorkspaceFactoryLockControl; if (mIWorkspaceFactoryLockControl.SchemaLockingEnabled) { mIWorkspaceFactoryLockControl.DisableSchemaLocking(); } }
/// <summary> /// Opens the workspace. /// </summary> /// <param name="sFilePath">The s file path.</param> /// <param name="type">The type.</param> /// <returns>IWorkspace.</returns> public static IWorkspace OpenWorkspace(string sFilePath, DataType type) { IWorkspace result; try { sFilePath = sFilePath.TrimEnd(new char[] { '\\' }); IWorkspaceFactory workspaceFactory = null; if (type <= DataType.sde) { switch (type) { case DataType.shp: workspaceFactory = new ShapefileWorkspaceFactoryClass(); //关闭资源锁定 IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)workspaceFactory; if (ipWsFactoryLock.SchemaLockingEnabled) { ipWsFactoryLock.DisableSchemaLocking(); } break; case DataType.mdb: workspaceFactory = new AccessWorkspaceFactoryClass(); break; case (DataType)3: break; case DataType.gdb: workspaceFactory = new FileGDBWorkspaceFactoryClass(); break; default: if (type == DataType.sde) { workspaceFactory = new SdeWorkspaceFactoryClass(); } break; } } else if (type != DataType.cad) { if (type != DataType.raster) { if (type == DataType.coverage) { workspaceFactory = new ArcInfoWorkspaceFactoryClass(); } } else { workspaceFactory = new RasterWorkspaceFactoryClass(); } } else { workspaceFactory = new CadWorkspaceFactoryClass(); } result = workspaceFactory.OpenFromFile(sFilePath, 0); } catch { result = null; } return(result); }
/// <summary> /// 创建矢量图层 /// </summary> /// <param name="path">图层路径</param> /// <param name="sr">参考系</param> /// <param name="attributeNames">属性名称</param> /// <param name="attributeTypes">属性类型</param> /// <param name="shapeType">图层形状</param> ///<returns>要素图层</returns> public static IFeatureLayer CreateFeatureLayer(string path, ISpatialReference sr, string[] attributeNames, string[] attributeTypes, string shapeType) { IWorkspaceFactory xjWsF = new ShapefileWorkspaceFactoryClass(); IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)xjWsF; if (ipWsFactoryLock.SchemaLockingEnabled) { ipWsFactoryLock.DisableSchemaLocking(); } IFeatureWorkspace xjFWs = (IFeatureWorkspace)xjWsF.OpenFromFile(System.IO.Path.GetDirectoryName(path), 0); //新建字段集 IFields xjFields = new FieldsClass(); IFieldsEdit xjFieldsEdit = (IFieldsEdit)xjFields; //新建Shape字段 IField xjField = new FieldClass(); IFieldEdit xjFieldEdit = (IFieldEdit)xjField; xjFieldEdit.Name_2 = "Shape"; //字段名 xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //字段类型 IGeometryDef xjGeometryDef = new GeometryDefClass(); IGeometryDefEdit xjGDefEdit = (IGeometryDefEdit)xjGeometryDef; if (shapeType.Equals("P")) { xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//几何类型 } else if (shapeType.Equals("L")) { xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;//几何类型 } else { xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; //几何类型 } xjGDefEdit.SpatialReference_2 = sr; //参考系 xjFieldEdit.GeometryDef_2 = xjGeometryDef; xjFieldsEdit.AddField(xjField); IFeatureClass xjFeatureClass; IFeatureLayer fl = new FeatureLayerClass(); //新建其他字段 if (attributeNames == null) { xjFeatureClass = xjFWs.CreateFeatureClass(System.IO.Path.GetFileName(path), xjFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); fl.FeatureClass = xjFeatureClass; return(fl); } for (int i = 0; i < attributeNames.Length; i++) { IField xjField2 = new FieldClass(); IFieldEdit xjFieldEdit2 = xjField2 as IFieldEdit; xjFieldEdit2.Name_2 = attributeNames[i]; xjFieldEdit2.Type_2 = GetType(attributeTypes[i]); xjFieldsEdit.AddField(xjField2); } xjFeatureClass = xjFWs.CreateFeatureClass(System.IO.Path.GetFileName(path), xjFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); fl.FeatureClass = xjFeatureClass; return(fl); }