小生 原文 arcgis Engine创建shp图层
以创建点图层为例。首先要得到保存文件的地址。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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建立新的字段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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); //继续增加其它字段 |
最后,创建图层
1
2
3
4
5
6
7
8
9
|
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" );
|