C#+ArcEngine:创建矢量图层(ArGIS10.1)

本文介绍了一个用于创建GIS要素图层的代码片段,包括点、线、面类型,并详细展示了如何根据输入参数设置空间参考和字段属性。

分享给有需要的人,代码质量勿喷。 

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", "");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值