首页 > 代码库 > [转] arcgis Engine创建shp图层

[转] arcgis Engine创建shp图层

小生 原文 arcgis Engine创建shp图层

以创建点图层为例。首先要得到保存文件的地址。

            SaveFileDialog saveFileDialog = new SaveFileDialog();            saveFileDialog.Filter = "Shape文件(*.shp)|*.shp";            saveFileDialog.Title = "新建点形shp文件";            saveFileDialog.CheckFileExists = false;            DialogResult dialogResult = saveFileDialog.ShowDialog();            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();            int index;            string fileName;            string filePath;            if (dialogResult == DialogResult.OK)            {                fileFullPath = saveFileDialog.FileName;                index = fileFullPath.LastIndexOf("\");                fileName = fileFullPath.Substring(index + 1);                filePath = fileFullPath.Substring(0, index);                if (System.IO.File.Exists(saveFileDialog.FileName))//检查文件是否存在                {                    if (MessageBox.Show("该文件夹下已经有同名文件,替换原文件?", "询问", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)                    {                        IFeatureWorkspace FWS = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace;                        IFeatureClass pFeatureClass = FWS.OpenFeatureClass(fileName);                        IDataset pDataset = pFeatureClass as IDataset;                        pDataset.Delete();                    }                    //System.IO.File.Delete(saveFileDialog.FileName);                    else                        return;                }                            }            else            {                fileFullPath = null;                return;            }      

 然后,要为该SHP建立新的字段:

            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 GeometryDef();            IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;            pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//点、线、面什么的            pGeometryDefEdit.SpatialReference_2 = axMapControl1.SpatialReference;                      ISpatialReferenceFactory2 ipSpaRefFa = new SpatialReferenceEnvironmentClass();            IGeographicCoordinateSystem ipGeoCorSys = new GeographicCoordinateSystemClass();            ipGeoCorSys = ipSpaRefFa.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);            ISpatialReference ipSpaRef = ipGeoCorSys;            //IControlPrecision2 contrPrecision = ipSpaRef as IControlPrecision2;                       pGeometryDefEdit.SpatialReference_2 = ipSpaRef;                        pFieldEdit.GeometryDef_2 = pGeometryDef;            pFieldsEdit.AddField(pField);            pField = new FieldClass();//新建字段            pFieldEdit = pField as IFieldEdit;            pFieldEdit.Length_2 = 100;            pFieldEdit.Name_2 = "editorName";            pFieldEdit.AliasName_2 = "editorName";            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;                        pFieldsEdit.AddField(pField);            //继续增加其它字段

 最后,创建图层

            IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace;                       int i = fileName.IndexOf(".shp");            if(i == -1 )            pFeatureWorkspace.CreateFeatureClass(fileName + ".shp", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");            else            pFeatureWorkspace.CreateFeatureClass(fileName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");                       axMapControl1.AddShapeFile(filePath, fileName + ".shp");

 

[转] arcgis Engine创建shp图层