public bool CreateRaster(IRasterDataset pRDs, IRasterWorkspaceEx pWorkSpace) { IRasterProps pRasterProps = (IRasterProps)pRDs.CreateDefaultRaster(); IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass(); pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionJPEG2000; pRasterStorageDef.CompressionQuality = 50; pRasterStorageDef.PyramidLevel = 2; pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation; pRasterStorageDef.TileHeight = 128; pRasterStorageDef.TileWidth = 128; IRasterDef pRasterDef = new RasterDefClass(); pRasterDef.Description = "RasterDataset"; pRasterDef.SpatialReference = pRasterProps.SpatialReference; IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; pGeoDefEdit.AvgNumPoints_2 = 4; pGeoDefEdit.GridCount_2 = 1; pGeoDefEdit.set_GridSize(0, 1000); pGeoDefEdit.SpatialReference_2 = pRasterProps.SpatialReference; IRasterDataset pRasterDataset = pWorkSpace.CreateRasterDataset("zzy", 3, rstPixelType.PT_UCHAR, pRasterStorageDef, "", pRasterDef, pGeoDef); pRasterDataset = pRDs; return(true); }
public bool CopyRaster(IRasterWorkspace2 pRW, string pFileName, IRasterWorkspaceEx pWorkSpace, string pDestName) { try { IRasterDataset pRds = pRW.OpenRasterDataset(pFileName); IRasterProps pRasterProps = (IRasterProps)pRds.CreateDefaultRaster(); IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass(); IRasterDef pRasterDef = new RasterDefClass(); pRasterDef.SpatialReference = pRasterProps.SpatialReference; IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; pGeoDefEdit.AvgNumPoints_2 = 4; pGeoDefEdit.GridCount_2 = 1; pGeoDefEdit.set_GridSize(0, 1000); pGeoDefEdit.SpatialReference_2 = pRasterProps.SpatialReference; IRasterDataset pRasterDataset = pWorkSpace.SaveAsRasterDataset(pDestName, pRds.CreateDefaultRaster(), pRasterStorageDef, "", pRasterDef, pGeoDef); return(true); } catch (System.Exception ex) { return(false); } }
/// <summary> /// 创建内存IFeatureLayer,该方法为创建内存临时图层的便捷方法,创建的图层带有id,和name两个属性字段。 /// </summary> /// <param name="myAxMapControl">AxMapControl扩展对象</param> /// <param name="strIFeatureClassName">IFeatureClass名称</param> /// <param name="myEsriGeometryType">数据类型</param> /// <returns>IFeatureLayer对象</returns> public static IFeatureLayer CreateMemoryFeatureLayer(this AxMapControl myAxMapControl, String strIFeatureClassName, esriGeometryType myEsriGeometryType) { IWorkspaceFactory myIWorkspaceFactory = new InMemoryWorkspaceFactoryClass(); IWorkspaceName myIWorkspaceName = myIWorkspaceFactory.Create("", strIFeatureClassName, null, 0); IName myIName = (IName)myIWorkspaceName; IWorkspace myIWorkspace = (IWorkspace)myIName.Open(); IField myIField = null; IFields myIFields = new FieldsClass(); IFieldsEdit myIFieldsEdit = myIFields as IFieldsEdit; IFieldEdit myIFieldEdit = null; IFeatureClass myIFeatureClass = null; IFeatureLayer myIFeatureLayer = null; try { //主键id myIField = new FieldClass(); myIFieldEdit = myIField as IFieldEdit; myIFieldEdit.Name_2 = "id"; myIFieldEdit.IsNullable_2 = true; myIFieldEdit.Length_2 = 50; myIFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; myIFieldsEdit.AddField(myIField); //名称name myIField = new FieldClass(); myIFieldEdit = myIField as IFieldEdit; myIFieldEdit.Name_2 = "name"; myIFieldEdit.IsNullable_2 = true; myIFieldEdit.Length_2 = 50; myIFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; myIFieldsEdit.AddField(myIField); //IGeometryI字段 IGeometryDef myIGeometryDef = new GeometryDefClass(); IGeometryDefEdit myIGeometryDefEdit = (IGeometryDefEdit)myIGeometryDef; myIGeometryDefEdit.AvgNumPoints_2 = 5; myIGeometryDefEdit.GeometryType_2 = myEsriGeometryType; myIGeometryDefEdit.GridCount_2 = 1; myIGeometryDefEdit.HasM_2 = false; myIGeometryDefEdit.HasZ_2 = false; myIGeometryDefEdit.SpatialReference_2 = myAxMapControl.SpatialReference; myIField = new FieldClass(); myIFieldEdit = myIField as IFieldEdit; myIFieldEdit.Name_2 = "SHAPE"; myIFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; myIFieldEdit.GeometryDef_2 = myIGeometryDef; myIFieldEdit.IsNullable_2 = true; myIFieldEdit.Required_2 = true; myIFieldsEdit.AddField(myIField); // myIFeatureClass = (myIWorkspace as IFeatureWorkspace).CreateFeatureClass(strIFeatureClassName, myIFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); (myIFeatureClass as IDataset).BrowseName = strIFeatureClassName; myIFeatureLayer = new FeatureLayerClass(); myIFeatureLayer.Name = strIFeatureClassName; myIFeatureLayer.FeatureClass = myIFeatureClass; } catch { } return(myIFeatureLayer); }
private IFeatureClass CreateFeatureClass(IFeatureWorkspace FeatureWorkspace, string LayerName, esriFeatureType featureType, esriGeometryType GeometryType) { IFields fields = new FieldsClass(); IFieldsEdit edit = fields as IFieldsEdit; //创建OBJECTID字段 IField field3 = new FieldClass(); IFieldEdit edit2 = field3 as IFieldEdit; edit2.Name_2 = "OBJECTID"; edit2.AliasName_2 = "OBJECTID"; edit2.Type_2 = esriFieldType.esriFieldTypeOID; edit.AddField(field3); //创建Shape字段 IGeometryDef def = new GeometryDefClass(); IGeometryDefEdit edit4 = def as IGeometryDefEdit; edit4.GeometryType_2 = GeometryType; edit4.GridCount_2 = 1; edit4.set_GridSize(0, 1000); edit4.AvgNumPoints_2 = 2; edit4.HasM_2 = false; edit4.HasZ_2 = false; edit4.SpatialReference_2 = this.ExportSpatialReference; IField field4 = new FieldClass(); IFieldEdit edit3 = field4 as IFieldEdit; edit3.Name_2 = "SHAPE"; edit3.AliasName_2 = "SHAPE"; edit3.Type_2 = esriFieldType.esriFieldTypeGeometry; edit3.GeometryDef_2 = def; edit.AddField(field4); string ShapeFiledName = field4.Name; UID uid = null; UID uid2 = null; switch (featureType) { case esriFeatureType.esriFTSimple: //FeatureClass IObjectClassDescription description4 = new FeatureClassDescriptionClass(); uid = description4.InstanceCLSID; uid2 = description4.ClassExtensionCLSID; break; case esriFeatureType.esriFTAnnotation: //AnnotationFeatureClass IObjectClassDescription description = new AnnotationFeatureClassDescriptionClass(); uid = description.InstanceCLSID; uid2 = description.ClassExtensionCLSID; GeometryType = esriGeometryType.esriGeometryPolygon; break; } //创建要素对象 IFeatureClass fc = FeatureWorkspace.CreateFeatureClass(LayerName, fields, uid, uid2, featureType, ShapeFiledName, null); return(fc); }
public static IFeatureClass CreateFClassInPDB(IWorkspace accessworkspace, string feaDSname, string FCname, esriGeometryType esriGeometryType, ISpatialReference sprf) { try { IFeatureDataset featureDataset = ((IFeatureWorkspace)accessworkspace).OpenFeatureDataset(feaDSname); //IGeoDataset geoDataset = featureDataset as IGeoDataset; IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "SHAPE"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); IFeatureClass fc = featureDataset.CreateFeatureClass(FCname, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); return(fc); } catch (Exception ee) { MessageBox.Show(ee.Message.ToString()); return(null); } }
private IFeatureClass CreateShapeFile(string shapeFullname, string proj) { FileInfo finfo = new FileInfo(shapeFullname); string parFolder = System.IO.Path.GetDirectoryName(shapeFullname); if (!Directory.Exists(parFolder)) { Directory.CreateDirectory(parFolder); } IWorkspaceFactory shpwf = new ShapefileWorkspaceFactory(); IFeatureWorkspace featureWs = shpwf.OpenFromFile(parFolder, 0) as IFeatureWorkspace; IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; //添加几何字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeomDef = new GeometryDefClass(); IGeometryDefEdit pGeomDefEdit = pGeomDef as IGeometryDefEdit; pGeomDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint; //几何类型 pGeomDefEdit.HasZ_2 = true; //是否有Z值 pGeomDefEdit.SpatialReference_2 = CreateSpatialReference(proj); //设置空间参考 pFieldEdit.GeometryDef_2 = pGeomDef; pFieldsEdit.AddField(pField); return(featureWs.CreateFeatureClass(finfo.Name, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null)); }
public void SetGridSize() { //简单判断下 try { if ((m_dblTempGridIndex1 != 0) && (m_dblTempGridIndex1 <= m_dblTempGridIndex2)) { return; } if ((m_dblTempGridIndex2 != 0) && (m_dblTempGridIndex2 < m_dblTempGridIndex3)) { return; } if (m_pFeaCls == null) { return; } //获得igeometrydef string strShapeName = m_pFeaCls.ShapeFieldName; IField pShapeField = m_pFeaCls.Fields.get_Field(m_pFeaCls.FindField(m_pFeaCls.ShapeFieldName)); if (pShapeField == null) { return; } IGeometryDefEdit pGeometryDefEdit = pShapeField.GeometryDef as IGeometryDefEdit; //根据设置值进行设置 if (m_dblTempGridIndex1 == 0) { pGeometryDefEdit.GridCount_2 = 0; return; } if (m_dblTempGridIndex2 == 0) { pGeometryDefEdit.GridCount_2 = 1; pGeometryDefEdit.set_GridSize(0, m_dblTempGridIndex1); return; } if (m_dblTempGridIndex3 == 0) { pGeometryDefEdit.GridCount_2 = 2; pGeometryDefEdit.set_GridSize(0, m_dblTempGridIndex1); pGeometryDefEdit.set_GridSize(1, m_dblTempGridIndex2); return; } pGeometryDefEdit.GridCount_2 = 3; pGeometryDefEdit.set_GridSize(0, m_dblTempGridIndex1); pGeometryDefEdit.set_GridSize(1, m_dblTempGridIndex2); pGeometryDefEdit.set_GridSize(2, m_dblTempGridIndex3); } catch (Exception ex) { MessageBox.Show("空间索引设置出现错误" + Environment.NewLine + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
public IFields CreateShapeFields(esriGeometryType p_esriGeotype) { //创建字段编辑所需要的接口 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; //创建基本必要的属性字段 IField pFld = new FieldClass(); IFieldEdit pFldEdit = pFld as IFieldEdit; pFldEdit.Name_2 = "shape"; pFldEdit.IsNullable_2 = false; pFldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //增加特定的属性字段 pFieldsEdit.AddField(pFld); IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = p_esriGeotype; pGeoDefEdit.SpatialReference_2 = (ISpatialReference) new UnknownCoordinateSystem(); pFldEdit.GeometryDef_2 = pGeoDef; return(pFieldsEdit as IFields); }
internal static IFields CreateBaseStationFields(ISpatialReference spatialReference) { //Set up a simple fields collection IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; //Make the shape field //it will need a geometry definition, with a spatial reference IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDef(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pGeometryDefEdit.SpatialReference_2 = spatialReference; pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); //Add OID field pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Length_2 = 30; pFieldEdit.Name_2 = "OID"; //pFieldEdit.AliasName_2 = "AliasName"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); return(pFields); }
public static IFields ConvertGeometryFieldFromLowToHighPrecision(IFields fields) { IFieldsEdit fieldsEdit = (IFieldsEdit)fields; IField field = null; IFieldEdit fieldEdit = null; for (int i = 0; i < fields.FieldCount; i++) { field = fields.Field[i]; fieldEdit = (IFieldEdit)field; if (field.GeometryDef != null) { IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)fieldEdit.GeometryDef; if (IsLowPrecisionSpatialReference(geometryDefEdit.SpatialReference)) { geometryDefEdit.SpatialReference_2 = ConvertSpatialReferenceFromLowToHighPrecision(geometryDefEdit.SpatialReference); } break; } } return(fields); }
private string GenerateTemp3DPolygonStorage() { string newFeatureClassName = $"Polygon3D_L{Helper.GetTemporaryNameSuffix()}"; IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass(); IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription; IFields fields = ocDescription.RequiredFields; int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName); IField field = fields.get_Field(shapeFieldIndex); IGeometryDef geometryDef = field.GeometryDef; IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; geometryDefEdit.HasZ_2 = true; geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; geometryDefEdit.SpatialReference_2 = ArcMapInstance.Document.FocusMap.SpatialReference; IFieldsEdit fieldsEdit = (IFieldsEdit)fields; IField isVisibleField = new FieldClass(); IFieldEdit isVisibleFieldEdit = (IFieldEdit)isVisibleField; isVisibleFieldEdit.Name_2 = "IS_VISIBLE"; isVisibleFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger; fieldsEdit.AddField(isVisibleFieldEdit); GenerateTempStorage(newFeatureClassName, fields, esriGeometryType.esriGeometryPolygon); return(newFeatureClassName); }
public IFeatureClass CreateShapeFile(DataSet ds, string strOutShpName, ISpatialReference pSRF) { try { DirectoryInfo di = new DirectoryInfo(strOutShpName); string filefolder = di.Parent.FullName; ClsGDBDataCommon cdc = new ClsGDBDataCommon(); //cdc.OpenFromShapefile(filefolder); IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; //设置字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = (IFieldEdit)pField; //创建类型为几何类型的字段 IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pGeoDefEdit.HasM_2 = false; pGeoDefEdit.HasZ_2 = false; pGeoDefEdit.SpatialReference_2 = pSRF; pFieldEdit.Name_2 = "SHAPE"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldEdit.GeometryDef_2 = pGeoDef; //pFieldEdit.IsNullable_2 = true; //pFieldEdit.Required_2 = true; pFieldsEdit.AddField(pField); for (int i = 0; i < ds.Tables[0].Columns.Count; i++) { pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = ds.Tables[0].Columns[i].ColumnName; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); } ClsGDBDataCommon comm = new ClsGDBDataCommon(); IWorkspace inmemWor = comm.OpenFromShapefile(filefolder); // ifeatureworkspacee IFeatureWorkspace pFeatureWorkspace = inmemWor as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureWorkspace.CreateFeatureClass(di.Name, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); return(pFeatureClass); //IFeatureLayer pFeatureLayer = new FeatureLayerClass(); //pFeatureLayer.FeatureClass = pFeatureClass; //pFeatureLayer.Name = System.IO.Path.GetFileNameWithoutExtension(di.Name); //m_mapControl.AddLayer(pFeatureLayer as ILayer, 0); //m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } catch (SystemException ee) { MessageBox.Show(ee.Message); return(null); } }
public static IFeatureClass CreateFeatureClass(IWorkspace workspace, string featureClassName, esriGeometryType type, ISpatialReference spatialReference) { IFeatureWorkspace pFeatureWorkspace = workspace as IFeatureWorkspace; IFeatureClassDescription pFeatureClassDescription = new FeatureClassDescriptionClass(); IObjectClassDescription pObjectClassDescription = pFeatureClassDescription as IObjectClassDescription; IFields pFields = pObjectClassDescription.RequiredFields; IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; for (int i = 0; i < pFields.FieldCount; i++) { if (pFieldsEdit.Field[i].Type == esriFieldType.esriFieldTypeGeometry) { IFieldEdit pFieldEdit = pFieldsEdit.Field[i] as IFieldEdit; IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = type; pGeometryDefEdit.SpatialReference_2 = spatialReference; pFieldEdit.GeometryDef_2 = pGeometryDef; } } IFieldChecker pFieldChecker = new FieldCheckerClass(); IEnumFieldError enumFieldError = null; IFields validatedFields = null; pFieldChecker.ValidateWorkspace = workspace; pFieldChecker.Validate(pFields, out enumFieldError, out validatedFields); return(pFeatureWorkspace.CreateFeatureClass(featureClassName, validatedFields, pObjectClassDescription.InstanceCLSID, pObjectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, "SHAPE", "")); }
public IField2 GetGeometryField(string geometryType, string geometryFieldName) { esriGeometryType type = _geometryTypeProvider.GetGeometryType(geometryType); // Create the geometry field IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; // Assign Geometry Definition geometryDefEdit.GeometryType_2 = type; geometryDefEdit.GridCount_2 = 1; geometryDefEdit.set_GridSize(0, 0.5); geometryDefEdit.AvgNumPoints_2 = 2; geometryDefEdit.HasM_2 = false; geometryDefEdit.HasZ_2 = false; // Create Geometry Field IField fieldShape = new FieldClass(); IFieldEdit fieldEditShape = (IFieldEdit)fieldShape; fieldEditShape.Name_2 = geometryFieldName; fieldEditShape.AliasName_2 = geometryFieldName; fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry; fieldEditShape.GeometryDef_2 = geometryDef; return(null); }
private static IFeatureClass CreateFeaturepointClass(String featureClassName, IFeatureWorkspace featureWorkspace, ISpatialReference spatialReference) { try { IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass(); IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription; IFields fields = ocDescription.RequiredFields; int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName); IField field = fields.get_Field(shapeFieldIndex); IGeometryDef geometryDef = field.GeometryDef; IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; geometryDefEdit.SpatialReference_2 = spatialReference; IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(featureClassName, fields, ocDescription.ClassExtensionCLSID, ocDescription.InstanceCLSID, esriFeatureType.esriFTSimple, fcDescription.ShapeFieldName, ""); return(featureClass); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "异常"); return(null); } }
/// <summary> /// 创建一个要素集 /// </summary> /// <param name="shpfolder"></param> /// <param name="shpname"></param> /// <returns></returns> public static IFeatureClass CreatePolygonFeatureClass(string shpfolder, string shpname) { IWorkspaceFactory pWorkSpaceFac = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkSpace = pWorkSpaceFac.OpenFromFile(shpfolder, 0) as IFeatureWorkspace; //创建字段集2 IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass(); IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription;//创建必要字段 IFields fields = ocDescription.RequiredFields; int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName); IField field = fields.get_Field(shapeFieldIndex); IGeometryDef geometryDef = field.GeometryDef; IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; //geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; //geometryDefEdit.SpatialReference_2 = spatialReference; geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; ISpatialReferenceFactory pSpatialRefFac = new SpatialReferenceEnvironmentClass(); IProjectedCoordinateSystem pcsSys = pSpatialRefFac.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_Zone_39); geometryDefEdit.SpatialReference_2 = pcsSys; IFieldChecker fieldChecker = new FieldCheckerClass(); IEnumFieldError enumFieldError = null; IFields validatedFields = null; //将传入字段 转成 validatedFields fieldChecker.ValidateWorkspace = (IWorkspace)pFeatureWorkSpace; fieldChecker.Validate(fields, out enumFieldError, out validatedFields); IFeatureClass featureClass = pFeatureWorkSpace.CreateFeatureClass(shpname, validatedFields, ocDescription.InstanceCLSID, ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, fcDescription.ShapeFieldName, ""); AddField(featureClass, "BuildID", "自带id", 50); return(featureClass); }
/// <summary> /// 在地理数据库中创建要素类 /// </summary> /// <param name="workspacePath">工作空间路径</param> /// <param name="feaclassName">所创建要素类名称</param> /// <param name="GeometeyType">枚举要素类类型: esriGeimetryType(</param> /// <param name="gcsType">地理空间坐标系类型,格式如: (int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980</param> /// <returns></returns> public IFeatureClass CreateFeatureClass(string workspacePath, string feaclassName, esriGeometryType GeometeyType, int gcsType) { AccessGeoData accData = new AccessGeoData(); IFeatureWorkspace pFeaWorkspace = accData.OpenFeatureWorkspace(workspacePath); spatialRef = spatialRefFactory.CreateGeographicCoordinateSystem(gcsType); //字段编辑:包括ObjectID 与 Shape IFields fields = new FieldsClass(); IFieldsEdit fedits = (IFieldsEdit)fields; //构建唯一标识符字段 IField objfield = new FieldClass(); IFieldEdit objEdit = (IFieldEdit)objfield; objEdit.Name_2 = "OBJECTID"; objEdit.Type_2 = esriFieldType.esriFieldTypeOID; fedits.AddField(objEdit); //构建shape IField Spfield = new FieldClass(); IFieldEdit fEdit = (IFieldEdit)Spfield; IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef; pGeoDefEdit.GeometryType_2 = GeometeyType; pGeoDefEdit.SpatialReference_2 = spatialRef; fEdit.Name_2 = "Shape"; fEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; fEdit.GeometryDef_2 = pGeoDef; fedits.AddField(Spfield); //附加一个可编辑字段,存放属性值 IField fieldZ = new FieldClass(); IFieldEdit EditZ = (IFieldEdit)fieldZ; EditZ.Name_2 = "Value"; EditZ.Type_2 = esriFieldType.esriFieldTypeDouble; fedits.AddField(EditZ); //若有其他需求,在此处添加字段,参加Value字段添加方式 IFeatureClass pFeaClass = pFeaWorkspace.CreateFeatureClass(feaclassName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); return pFeaClass; }
/// <summary> /// 在内存中创建要素类 /// </summary> /// <returns></returns> public IFeatureClass MemoryFeatureClass() { AccessGeoData accData = new AccessGeoData(); IFeatureWorkspace pFeaWorkspace = accData.FeatureWorkspace(); IFields fields = new FieldsClass(); IFieldsEdit fedits = (IFieldsEdit)fields; IField objfield = new FieldClass(); IFieldEdit objEdit = (IFieldEdit)objfield; objEdit.Name_2 = "OBJECTID"; objEdit.Type_2 = esriFieldType.esriFieldTypeOID; fedits.AddField(objEdit); IField Spfield = new FieldClass(); IFieldEdit fEdit = (IFieldEdit)Spfield; IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pGeoDefEdit.SpatialReference_2 = spatialRef; fEdit.Name_2 = "Shape"; fEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; fEdit.GeometryDef_2 = pGeoDef; fedits.AddField(Spfield); IField fieldZ = new FieldClass(); IFieldEdit EditZ = (IFieldEdit)fieldZ; EditZ.Name_2 = "Z"; EditZ.Type_2 = esriFieldType.esriFieldTypeDouble; fedits.AddField(EditZ); IFeatureClass pFeaClass = pFeaWorkspace.CreateFeatureClass("FeaturePoints", fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); return pFeaClass; }
/// <summary> /// 新建线图层 /// </summary> public void CreatePolylineLayer() { SaveFileDialog sfdPoint = new SaveFileDialog(); sfdPoint.Title = "请选择线图层的存储位置"; sfdPoint.Filter = "Shapefile(*.shp)|*.shp|All files(*.*)|*.*"; sfdPoint.RestoreDirectory = true; if (sfdPoint.ShowDialog() == DialogResult.OK) { LocalFilePath = sfdPoint.FileName; FilePath = System.IO.Path.GetDirectoryName(LocalFilePath); FileName = System.IO.Path.GetFileName(LocalFilePath); IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "SHAPE"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(FilePath, 0) as IFeatureWorkspace; pFeatureWorkspace.CreateFeatureClass(FileName, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); m_mapControl.AddShapeFile(FilePath, FileName); m_mapControl.ActiveView.Refresh(); } }
public static IFields CreateFields(esriGeometryType geoType) { IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass(); IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription; IFields fields = ocDescription.RequiredFields; int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName); IField field = fields.get_Field(shapeFieldIndex); IGeometryDef geometryDef = field.GeometryDef; IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; geometryDefEdit.GeometryType_2 = geoType; ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); var sr = spatialReferenceFactory.CreateGeographicCoordinateSystem(4326); geometryDefEdit.SpatialReference_2 = sr; IFieldsEdit fieldsEdit = (IFieldsEdit)fields; field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = "Name"; fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; fieldsEdit.AddField(field); return(fields); }
/// <summary> /// 导出要素类到目标工作空间 /// </summary> /// <param name="featureClass"></param> /// <param name="workspace"></param> /// <param name="queryGeometry"></param> /// <param name="spatialRelEnum"></param> /// <param name="whereClause"></param> /// <returns></returns> public static Boolean ExportToWorkspace(IFeatureClass featureClass, IWorkspace workspace, IGeometry queryGeometry = null, esriSpatialRelEnum spatialRelEnum = esriSpatialRelEnum.esriSpatialRelIntersects, string whereClause = "") { IDataset inDataSet = featureClass as IDataset; IFeatureClassName inFCName = inDataSet.FullName as IFeatureClassName; IWorkspace inWorkspace = inDataSet.Workspace; IDataset outDataSet = workspace as IDataset; IWorkspaceName outWorkspaceName = outDataSet.FullName as IWorkspaceName; IFeatureClassName outFCName = new FeatureClassNameClass(); IDatasetName dataSetName = outFCName as IDatasetName; dataSetName.WorkspaceName = outWorkspaceName; dataSetName.Name = inDataSet.Name; IFieldChecker fieldChecker = new FieldCheckerClass { InputWorkspace = inWorkspace, ValidateWorkspace = workspace }; IFields fields = featureClass.Fields; fieldChecker.Validate(fields, out IEnumFieldError enumFieldError, out IFields outFields); IFeatureDataConverter featureDataConverter = null; IField geometryField; try { IGeometryDef geometryDef = null; ISpatialFilter pSF = new SpatialFilterClass(); for (int i = 0; i < outFields.FieldCount; i++) { if (outFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { geometryField = outFields.get_Field(i); geometryDef = geometryField.GeometryDef; IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef; targetFCGeoDefEdit.GridCount_2 = 1; targetFCGeoDefEdit.set_GridSize(0, 0); targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference; pSF.Geometry = queryGeometry; pSF.GeometryField = featureClass.ShapeFieldName; pSF.SpatialRel = spatialRelEnum; pSF.WhereClause = whereClause; break; } } featureDataConverter = new FeatureDataConverterClass(); featureDataConverter.ConvertFeatureClass(inFCName, pSF, null, outFCName, geometryDef, outFields, " ", 1000, 0); return(true); } catch (Exception ex) { LOG.Error("图层数据导出出错!" + ex.Message); throw ex; } }
/// <summary> /// 将一个要素类从一个工作空间转移到另外一个工作空间 /// 注意目标工作空间不能有改要素类,必须先清除 /// </summary> /// <param name="sourceWorkspace">源工作空间</param> /// <param name="targetWorkspace">目标工作空间</param> /// <param name="nameOfSourceFeatureClass">源要素类名</param> /// <param name="nameOfTargetFeatureClass">目标要素类名</param> public void IFeatureDataConverter_ConvertFeatureClass(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureClass, string nameOfTargetFeatureClass) { //create source workspace name IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //create source dataset name IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = nameOfSourceFeatureClass; //create target workspace name IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //create target dataset name IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = nameOfTargetFeatureClass; //Open input Featureclass to get field definitions. ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName; IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open(); //Validate the field names because you are converting between different workspace types. IFieldChecker fieldChecker = new FieldCheckerClass(); IFields targetFeatureClassFields; IFields sourceFeatureClassFields = sourceFeatureClass.Fields; IEnumFieldError enumFieldError; // Most importantly set the input and validate workspaces! fieldChecker.InputWorkspace = sourceWorkspace; fieldChecker.ValidateWorkspace = targetWorkspace; fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); // Loop through the output fields to find the geomerty field IField geometryField; for (int i = 0; i < targetFeatureClassFields.FieldCount; i++) { if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { geometryField = targetFeatureClassFields.get_Field(i); // Get the geometry field's geometry defenition IGeometryDef geometryDef = geometryField.GeometryDef; //Give the geometry definition a spatial index grid count and grid size IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef; targetFCGeoDefEdit.GridCount_2 = 1; targetFCGeoDefEdit.set_GridSize(0, 0); //Allow ArcGIS to determine a valid grid size for the data loaded targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference; // we want to convert all of the features IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause = ""; // Load the feature class IFeatureDataConverter fctofc = new FeatureDataConverterClass(); IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0); break; } } }
/// <summary> /// SDE要素类导出mdb(要素集下要素类) /// </summary> /// <param name="IN_SourceWorkspace">源工作空间</param> /// <param name="IN_TargetWorkspace">目标要素数据集</param> /// <param name="IN_SourceFeatureClassName">源要素类名</param> /// <param name="IN_TargetFeatureClassName">目标要素类名</param> private void ConvertFeatureClass(IWorkspace IN_SourceWorkspace, IFeatureDataset IN_TargetWorkspace, string IN_SourceFeatureClassName, string IN_TargetFeatureClassName) { #region 环境配置 //创建源工作空间名 IDataset Temp_SourceWorkspaceDataset = (IDataset)IN_SourceWorkspace; IWorkspaceName Temp_SourceWorkspaceName = (IWorkspaceName)Temp_SourceWorkspaceDataset.FullName; //创建源要素数据集名 IFeatureClassName Temp_SourceFeatureClassName = new FeatureClassNameClass(); IDatasetName Temp_SourceDatasetName = (IDatasetName)Temp_SourceFeatureClassName; Temp_SourceDatasetName.WorkspaceName = Temp_SourceWorkspaceName; Temp_SourceDatasetName.Name = IN_SourceFeatureClassName; //创建目标工作空间名 IDataset Temp_TargetWorkspaceDataset = (IDataset)IN_TargetWorkspace.Workspace; IWorkspaceName Temp_TargetWorkspaceName = (IWorkspaceName)(Temp_TargetWorkspaceDataset.FullName); //创建目标要素类名 IFeatureClassName Temp_TargetFeatureClassName = new FeatureClassNameClass(); IDatasetName Temp_TargetDatasetName = (IDatasetName)Temp_TargetFeatureClassName; Temp_TargetDatasetName.WorkspaceName = Temp_TargetWorkspaceName; Temp_TargetDatasetName.Name = IN_TargetFeatureClassName; //创建目标要素数据集名 IFeatureDatasetName Temp_TargetFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName Temp_TargetDatasetName2 = (IDatasetName)Temp_TargetFeatureDatasetName; Temp_TargetDatasetName2.WorkspaceName = Temp_TargetWorkspaceName; Temp_TargetDatasetName2.Name = IN_TargetWorkspace.Name; #endregion //打开源要素类获取字段定义 ESRI.ArcGIS.esriSystem.IName Temp_SourceName = (ESRI.ArcGIS.esriSystem.IName)Temp_SourceFeatureClassName; IFeatureClass Temp_SourceFeatureClass = (IFeatureClass)Temp_SourceName.Open(); //验证字段 IFieldChecker Temp_FieldChecker = new FieldCheckerClass(); IFields Temp_TargetFeatureClassFields; IFields Temp_SourceFeatureClassFields = Temp_SourceFeatureClass.Fields; IEnumFieldError enumFieldError; Temp_FieldChecker.InputWorkspace = IN_SourceWorkspace; Temp_FieldChecker.ValidateWorkspace = IN_TargetWorkspace.Workspace; Temp_FieldChecker.Validate(Temp_SourceFeatureClassFields, out enumFieldError, out Temp_TargetFeatureClassFields); //批量导入 IField Temp_GeometryField; for (int i = 0; i < Temp_TargetFeatureClassFields.FieldCount; i++) { if (Temp_TargetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { Temp_GeometryField = Temp_TargetFeatureClassFields.get_Field(i); //获取空间定义 IGeometryDef Temp_GeometryDef = Temp_GeometryField.GeometryDef; IGeometryDefEdit Temp_TargetFCGeoDefEdit = (IGeometryDefEdit)Temp_GeometryDef; Temp_TargetFCGeoDefEdit.GridCount_2 = 1; Temp_TargetFCGeoDefEdit.set_GridSize(0, 0); Temp_TargetFCGeoDefEdit.SpatialReference_2 = Temp_GeometryField.GeometryDef.SpatialReference; //定义筛选条件 IQueryFilter Temp_QueryFilter = new QueryFilterClass(); Temp_QueryFilter.WhereClause = ""; //导入要素类至要素数据集 IFeatureDataConverter Temp_FeatureDataConverter = new FeatureDataConverterClass(); IEnumInvalidObject enumErrors = Temp_FeatureDataConverter.ConvertFeatureClass(Temp_SourceFeatureClassName, Temp_QueryFilter, Temp_TargetFeatureDatasetName, Temp_TargetFeatureClassName, Temp_GeometryDef, Temp_TargetFeatureClassFields, "", 1000, 0); break; } } }
/// <summary> /// Coder: 梁 爽 /// Date: 2008-10-16 /// Content:该函数实现要素类的创建,首先用接口IGeometryDefEdit设置要素类的类型,即是Point,Polylin还是Polygon /// 然后用接口IFieldEdit设置要素类的字段,这里设置了三个字段,分别是ID,OID和Shape。最后通过接口IFeatureWorkspace /// 的CreateFeatureClass方法创建要素类,函数返回IFeatureClass接口类型 /// </summary> /// <param name="pWorkspace">设置工作空间</param> /// <param name="pGeometryType">设置要素的类型,即是点,线,还是面</param> /// <param name="strFeatName">设置要素类的名称</param> /// <param name="ValCoordinatType">传递一个数值型参数,该参数为1-UnkownCoordinateSystem,2-GeographicCoordinateSystem /// 或3ProjectedCoordinateSystem</param> /// <returns></returns> private IFeatureClass CreateFeatureClass(esriGeometryType pesriGeometryType, string pstrLayerName, IWorkspace pWorkspace, IMapControl4 pm_mapControl, List <string> pstrFieldNameLt = null, List <esriFieldType> pesriFieldTypeLt = null) { //创建要素空间 IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = (IGeometryDefEdit)geometryDef; //_esriGeometryType could be: esriGeometryPoint, esriGeometryMultipoint, //esriGeometryPolyline, esriGeometryPolygon, and esriGeometryMultiPatch. pGeometryDefEdit.GeometryType_2 = pesriGeometryType; pGeometryDefEdit.SpatialReference_2 = pm_mapControl.SpatialReference; // Set the grid count to 1 and the grid size to 0 to allow ArcGIS to // determine a valid grid size. pGeometryDefEdit.GridCount_2 = 1; pGeometryDefEdit.set_GridSize(0, 0); //新建字段 IFieldsEdit pFieldsEdit = new FieldsClass(); //添加“Shape”字段 IFieldEdit pField; pField = new FieldClass(); pField.Type_2 = esriFieldType.esriFieldTypeGeometry; pField.GeometryDef_2 = geometryDef; pField.Name_2 = "Shape"; pFieldsEdit.AddField((IField)pField); //添加其它字段 if (pstrFieldNameLt != null) { //we don't need the first three FieldNames, i.e., "FID", "Shape", and "Id" for (int i = 0; i < pstrFieldNameLt.Count; i++) { pFieldsEdit.AddField((IField)GenerateFieldEdit(pesriFieldTypeLt[i], pstrFieldNameLt[i])); } } string strFullName = pWorkspace.PathName + "\\" + pstrLayerName; File.Delete(strFullName + ".dbf"); File.Delete(strFullName + ".lyr"); File.Delete(strFullName + ".prj"); File.Delete(strFullName + ".shp"); //File.Delete(strFullName + ".shp.PALANQUE.2296.5388.sr.lock"); File.Delete(strFullName + ".shx"); try { return(pFeatureWorkspace.CreateFeatureClass(pstrLayerName, (IFields)pFieldsEdit, null, null, esriFeatureType.esriFTSimple, "Shape"", "")); } catch { return(pFeatureWorkspace.CreateFeatureClass(pstrLayerName, (IFields)pFieldsEdit, null, null, esriFeatureType.esriFTSimple, "Shape", "")); } }
/// <summary> /// Transfers data from an input FeatureClass to an output FeatureClass with data filtered with the specified query filter. /// </summary> /// <param name="inputWorkspace">The input workspace.</param> /// <param name="inputFeatureClassName">Name of the input feature class.</param> /// <param name="outputWorkspace">The output workspace.</param> /// <param name="outputFeatureClassName">Name of the output feature class.</param> /// <param name="outputFeatureDatasetName">The output FeatureDataset</param> /// <param name="queryFilter">The query filter used to filter data to be transfered.</param> public static IEnumInvalidObject TransferData(IFeatureWorkspace inputWorkspace, IFeatureClass inputFeatureClass, IFeatureWorkspace outputWorkspace, IFeatureClassName outputFeatureClassName, IFeatureDatasetName outputFeatureDatasetName, IQueryFilter queryFilter, ISpatialReference outputSpatialReference) { if (inputWorkspace == null) { throw new ArgumentNullException("A valid input feature workspace reference [inputWorkspace] is required."); } if (inputFeatureClass == null) { throw new ArgumentNullException("A valid input featureclass [inputFeatureClass] is required."); } if (outputWorkspace == null) { throw new ArgumentNullException("A valid output feature workspace reference [outputWorkspace] is required."); } if (outputFeatureClassName == null) { throw new ArgumentNullException("A valid output featureclass name reference [outputFeatureClassName] is required."); } IDataset dataset = (IDataset)inputFeatureClass; IFeatureClassName inputFeatureClassName = (IFeatureClassName)dataset.FullName; IEnumFieldError error = null; IFields outFields = null; IFields inFields = inputFeatureClass.Fields; FieldCheckerClass fieldChecker = new FieldCheckerClass(); fieldChecker.InputWorkspace = (IWorkspace)inputWorkspace; fieldChecker.ValidateWorkspace = (IWorkspace)outputWorkspace; fieldChecker.Validate(inFields, out error, out outFields); IField shapeField = null; for (int i = 0; i < outFields.FieldCount; i++) { if (outFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { shapeField = outFields.get_Field(i); break; } } IGeometryDef shapeGeoDef = shapeField.GeometryDef; IGeometryDefEdit shapeGeoDefEdit = shapeGeoDef as IGeometryDefEdit; shapeGeoDefEdit.GridCount_2 = 1; shapeGeoDefEdit.set_GridSize(0, DefaultIndexGrid(ref inputFeatureClass)); shapeGeoDefEdit.SpatialReference_2 = outputSpatialReference; FeatureDataConverterClass fdc = new FeatureDataConverterClass(); return(fdc.ConvertFeatureClass(inputFeatureClassName, queryFilter, outputFeatureDatasetName, outputFeatureClassName, shapeGeoDefEdit, outFields, "", 1000, 0)); }
public static IFields GetFields(IFeatureClass featureClass) { IFields pNewFields = new FieldsClass(); IFields pFields = featureClass.Fields; IFieldsEdit pNewFieldsEdit = pNewFields as IFieldsEdit; int fieldCount = pFields.FieldCount; for (int i = 0; i < fieldCount; i++) { IField pField = pFields.Field[i]; if (pField.Name == "OBJECTID_1" || pField.Name == "OBJECTID") { continue; } if (pField.Editable == false) { continue; } IField pNewField = new FieldClass(); IFieldEdit pNewFieldEdit = pNewField as IFieldEdit; pNewFieldEdit.Name_2 = pField.Name; pNewFieldEdit.AliasName_2 = pField.AliasName; if (pField.Type == esriFieldType.esriFieldTypeGeometry) { pNewFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = pField.GeometryDef.GeometryType; if (pField.GeometryDef.SpatialReference.Name == "Unknown") { ISpatialReference pSpatialReference = new UnknownCoordinateSystemClass(); pSpatialReference.SetDomain(-1000000, 1000000, -1000000, 1000000); pSpatialReference.SetZDomain(0, 0); pSpatialReference.SetMDomain(0, 0); pGeometryDefEdit.SpatialReference_2 = pSpatialReference; } else { pGeometryDefEdit.SpatialReference_2 = pField.GeometryDef.SpatialReference; } pNewFieldEdit.GeometryDef_2 = pGeometryDefEdit; } else { pNewFieldEdit.DefaultValue_2 = pField.DefaultValue; pNewFieldEdit.DomainFixed_2 = pField.DomainFixed; pNewFieldEdit.Domain_2 = pField.Domain; pNewFieldEdit.Precision_2 = pField.Precision; pNewFieldEdit.Required_2 = pField.Required; pNewFieldEdit.Scale_2 = pField.Scale; pNewFieldEdit.Type_2 = pField.Type; } pNewFieldsEdit.AddField(pNewField); } return(pNewFieldsEdit); }
private IFeatureClass method_1(IFeatureWorkspace ifeatureWorkspace_0, string string_4, double double_0, ITextSymbol itextSymbol_0, IFields ifields_0) { IObjectClassDescription description = new AnnotationFeatureClassDescriptionClass(); IFeatureClassDescription description2 = description as IFeatureClassDescription; IClone requiredFields = description.RequiredFields as IClone; IFields fields = requiredFields.Clone() as IFields; IFieldEdit edit = null; int index = fields.FindField(description2.ShapeFieldName); edit = fields.get_Field(index) as IFieldEdit; IGeometryDefEdit geometryDef = edit.GeometryDef as IGeometryDefEdit; IFeatureWorkspaceAnno anno = ifeatureWorkspace_0 as IFeatureWorkspaceAnno; IGraphicsLayerScale referenceScale = new GraphicsLayerScaleClass { ReferenceScale = double_0, Units = esriUnits.esriMeters }; UID instanceCLSID = description.InstanceCLSID; UID classExtensionCLSID = description.ClassExtensionCLSID; ISymbolCollection symbolCollection = new SymbolCollectionClass(); symbolCollection.set_Symbol(0, itextSymbol_0 as ISymbol); IAnnotateLayerPropertiesCollection2 annoProperties = new AnnotateLayerPropertiesCollectionClass(); IAnnotateLayerProperties item = new LabelEngineLayerPropertiesClass { Class = "要素类 1", FeatureLinked = false, AddUnplacedToGraphicsContainer = false, CreateUnplacedElements = true, DisplayAnnotation = true, UseOutput = true }; ILabelEngineLayerProperties properties2 = item as ILabelEngineLayerProperties; properties2.Offset = 0.0; properties2.SymbolID = 0; properties2.Symbol = itextSymbol_0; annoProperties.Add(item); for (int i = 0; i < ifields_0.FieldCount; i++) { if (fields.FindField(ifields_0.get_Field(i).Name) == -1) { (fields as IFieldsEdit).AddField(ifields_0.get_Field(i)); } } try { return(anno.CreateAnnotationClass(string_4, fields, instanceCLSID, classExtensionCLSID, description2.ShapeFieldName, "", null, null, annoProperties, referenceScale, symbolCollection, false)); } catch (Exception exception) { Logger.Current.Error("", exception, ""); } return(null); }
public void IFeatureDataConverter(IWorkspace pSourceWorkspace, IWorkspace pTargetWorkspace, string pSFeatureClass, string pDFeatureClass) { IDataset sourceWorkspaceDataset = (IDataset)pSourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = pSFeatureClass; IDataset targetWorkspaceDataset = (IDataset)pTargetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = pDFeatureClass; ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName; IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open(); IFieldChecker fieldChecker = new FieldCheckerClass(); IFields targetFeatureClassFields; IFields sourceFeatureClassFields = sourceFeatureClass.Fields; IEnumFieldError enumFieldError; fieldChecker.InputWorkspace = pSourceWorkspace; fieldChecker.ValidateWorkspace = pTargetWorkspace; fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); IField geometryField; for (int i = 0; i < targetFeatureClassFields.FieldCount; i++) { if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { geometryField = targetFeatureClassFields.get_Field(i); IGeometryDef geometryDef = geometryField.GeometryDef; IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef; targetFCGeoDefEdit.GridCount_2 = 1; targetFCGeoDefEdit.set_GridSize(0, 0); targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference; IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause = ""; IFeatureDataConverter fctofc = new FeatureDataConverterClass(); IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0); break; } } }
public void Test() { //定义一个几何字段,类型为点类型 ISpatialReferenceFactory2 originalSpatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference originalSpatialReference = originalSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); IGeometryDefEdit pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pGeoDefEdit.SpatialReference_2 = originalSpatialReference; //定义一个字段集合对象 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; //定义shape字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SHAPE"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldsEdit.AddField(pField); pFieldEdit.GeometryDef_2 = pGeoDef; //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "STCD"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SLM10"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SLM20"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SLM40"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IFeatureWorkspace pFWS = pWorkspaceFactory.OpenFromFile(workspaceDirectory, 0) as IFeatureWorkspace; IFeatureClass pFtClass = pFWS.CreateFeatureClass("Test", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null); }
/// <summary> /// create a feature class in workspace with type geometry /// </summary> /// <param name="geometry">geometry of feature class</param> /// <param name="featureWorkspace">workspace for store feature class</param> /// <returns>feature class created</returns> private IFeatureClass CreateFeatureClass(IGeometry geometry, IFeatureWorkspace featureWorkspace) { // Create a fields collection for the feature class. IFields fields = new FieldsClass(); IFieldsEdit fieldsEdit = (IFieldsEdit)fields; // Add an object ID field to the fields collection. This is mandatory for feature classes. IField oidField = new FieldClass(); IFieldEdit oidFieldEdit = (IFieldEdit)oidField; oidFieldEdit.Name_2 = "OID"; oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID; fieldsEdit.AddField(oidField); IField idField = new FieldClass(); IFieldEdit idFieldEdit = (IFieldEdit)idField; idFieldEdit.Name_2 = SAUtility.FieldNameIdWatershed; idFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; fieldsEdit.AddField(idField); // Create a geometry definition (and spatial reference) for the feature class. IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; geometryDefEdit.GeometryType_2 = geometry.GeometryType; geometryDefEdit.SpatialReference_2 = geometry.SpatialReference; IFeatureClassDescription featureClassDescription = new FeatureClassDescriptionClass(); IObjectClassDescription objectClassDescription = (IObjectClassDescription)featureClassDescription; // Add a geometry field to the fields collection. This is where the geometry definition is applied. IField geometryField = new FieldClass(); IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField; geometryFieldEdit.Name_2 = featureClassDescription.ShapeFieldName; geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; geometryFieldEdit.GeometryDef_2 = geometryDef; fieldsEdit.AddField(geometryField); // Use IFieldChecker to create a validated fields collection. IFieldChecker fieldChecker = new FieldCheckerClass(); IEnumFieldError enumFieldError = null; IFields validatedFields = null; fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace; fieldChecker.Validate(fields, out enumFieldError, out validatedFields); // The enumFieldError enumerator can be inspected at this point to determine // which fields were modified during validation. // Create the feature class. Note that the CLSID parameter is null - this indicates to use the // default CLSID, esriGeodatabase.Feature (acceptable in most cases for feature classes). IFeatureClass featureClass = featureWorkspace.CreateFeatureClass("pourPoint", validatedFields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, featureClassDescription.ShapeFieldName, string.Empty); return(featureClass); }