C#+ArcEngine:創建矢量圖層(ArGIS10.1)

分享給有需要的人,代碼質量勿噴。 

private void xjCreateFeatureLayer(string xjLayerFullPath, string xjLayerType, ISpatialReference xjSpatialReference,
	string[] xjFieldsName, string[] xjFieldsAliasName, string[] xjFieldsType)
{
	//目錄
	string xjFileFolder = System.IO.Path.GetDirectoryName(xjLayerFullPath);
	//文件名
	string xjFileName = System.IO.Path.GetFileName(xjLayerFullPath);

	//工作空間
	IWorkspaceFactory xjShpWorkspaceFactory = new ShapefileWorkspaceFactory();
	IFeatureWorkspace xjFeatureWorkspace = xjShpWorkspaceFactory.OpenFromFile(xjFileFolder, 0) as IFeatureWorkspace;

	//檢查文件是否存在
	if (System.IO.File.Exists(xjLayerFullPath))
	{
		if (XtraMessageBox.Show("該文件夾下已經有同名文件,替換原文件?", "詢問", MessageBoxButtons.OKCancel,
			MessageBoxIcon.Question) == DialogResult.OK)
		{
			IFeatureWorkspace FWS = xjShpWorkspaceFactory.OpenFromFile(xjFileFolder, 0) as IFeatureWorkspace;
			IFeatureClass pFeatureClass = FWS.OpenFeatureClass(xjFileName);
			IDataset pDataset = pFeatureClass as IDataset;
			pDataset.Delete();
		}
		else
			return;
	}

	//字段檢查
	if (((xjFieldsName.Length != xjFieldsAliasName.Length) || (xjFieldsName.Length != xjFieldsType.Length)
		|| (xjFieldsAliasName.Length != xjFieldsType.Length)))
	{
		XtraMessageBox.Show("字段名稱或別名或類型數量不符!!!", "警告",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
		return;
	}

	//添加字段
	IFields xjNewFields = new FieldsClass();
	IFieldsEdit xjFieldsEdit = xjNewFields as IFieldsEdit;

	IField xjField = new FieldClass();
	IFieldEdit xjFieldEdit = xjField as IFieldEdit;

	#region 設置類型:點線面
		if ((xjLayerType == "Point") || (xjLayerType == "點"))
		{
			//添加Shape字段
			xjFieldEdit.Name_2 = "Shape";
			xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

			IGeometryDef xjGeomDef = new GeometryDefClass();
			IGeometryDefEdit xjGeomDefEdit = xjGeomDef as IGeometryDefEdit;
			xjGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//點類型
			xjGeomDefEdit.HasZ_2 = true;//圖層是有高程值的

			xjGeomDefEdit.SpatialReference_2 = xjSpatialReference;//設置空間參考
			xjFieldEdit.GeometryDef_2 = xjGeomDef;

			xjFieldsEdit.AddField(xjField);
		}
		else if ((xjLayerType == "Polyline") || (xjLayerType == "線"))
		{
			//添加Shape字段                       
			xjFieldEdit.Name_2 = "Shape";
			xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

			IGeometryDef xjGeomDef = new GeometryDefClass();
			IGeometryDefEdit xjGeomDefEdit = xjGeomDef as IGeometryDefEdit;
			xjGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;//線類型

			//圖層是有高程值的
			xjGeomDefEdit.HasZ_2 = true;
			//圖層是有里程值的
			xjGeomDefEdit.HasM_2 = true;

			//設置空間參考
			xjGeomDefEdit.SpatialReference_2 = xjSpatialReference;

			xjFieldEdit.GeometryDef_2 = xjGeomDef;
			xjFieldsEdit.AddField(xjField);
		}
		else if ((xjLayerType == "Polygon") || (xjLayerType == "面"))
		{
			//添加Shape字段                       
			xjFieldEdit.Name_2 = "Shape";
			xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

			IGeometryDef xjGeomDef = new GeometryDefClass();
			IGeometryDefEdit xjGeomDefEdit = xjGeomDef as IGeometryDefEdit;
			xjGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;//面類型

			//設置空間參考
			xjGeomDefEdit.SpatialReference_2 = xjSpatialReference;

			xjFieldEdit.GeometryDef_2 = xjGeomDef;
			xjFieldsEdit.AddField(xjField);
		}
	#endregion

		//添加其它字段
		for (int i = 0; i < xjFieldsName.Length; i++)
		{
			xjField = new FieldClass();
			xjFieldEdit = xjField as IFieldEdit;

			//名稱
			xjFieldEdit.Name_2 = xjFieldsName[i];
			//別名
			xjFieldEdit.AliasName_2 = xjFieldsAliasName[i];
			//類型
			if (xjFieldsType[i] == "int")
			{
				xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
			}
			else if (xjFieldsType[i] == "double")
			{
				xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
			}
			else if (xjFieldsType[i] == "LongInt")
			{
				xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
			}
			else if (xjFieldsType[i] == "float")
			{
				xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeSingle;
			}
			else
			{
				xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
			}

			xjFieldsEdit.AddField(xjField);
		}

	//創要素數據集
	IFeatureClass xjFeatureClass = xjFeatureWorkspace.CreateFeatureClass(xjFileName, xjNewFields,
		null, null, esriFeatureType.esriFTSimple, "Shape", "");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章