Arcengine+C#实现矢量数据的裁剪
2016-08-08 14:25
441 查看
最近工作需要完成图像的裁剪,因为有很多需要裁剪的图像,用arcgis做的话工作量太大,而且后期工作涉及到自动化处理,所以写了段代码用engine实现图像的裁剪功能。首先要获得你所需要被裁剪的图层的IFeatureLayer和裁剪图层的IFeatureLayer,然后调用IBasicGeoprocessor.Clip方法进行裁剪,我把该方法单独封装了一下,代码如下:
public IFeatureClass Clip(IFeatureClass pInputFeatureClass, IFeatureClass pClipFeatureClass, string pfilePath, string pfileName)
{
IFeatureClassName pOutput = new FeatureClassNameClass();
pOutput.ShapeFieldName = pInputFeatureClass.ShapeFieldName;
pOutput.ShapeType = pInputFeatureClass.ShapeType;
pOutput.FeatureType = esriFeatureType.esriFTSimple;
//获取shapefile数据工作空间
IWorkspaceName pWsN = new WorkspaceNameClass();
pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";
pWsN.PathName = pfilePath;
//通过IDatasetName设置输出结果相关参数
IDatasetName pDatasetName = pOutput as IDatasetName;
pDatasetName.Name = pfileName;
pDatasetName.WorkspaceName = pWsN;
//初始化IBasicGeoprocessor对象,调用clip方法
IBasicGeoprocessor pBasicGeo = new BasicGeoprocessorClass();
pBasicGeo.SpatialReference = axMapControl1.SpatialReference;
//进行裁剪运算
IFeatureClass pFeatureClass = pBasicGeo.Clip(pInputFeatureClass as ITable, true , pClipFeatureClass as ITable, true , 0.01, pOutput);
return pFeatureClass;
}
然后我添加了一个button和三个mapcontrol控件,在axmapcontrol1和axmapcontrol2的属性里直接添加了图层,代码如下:
private void button1_Click(object sender, EventArgs e)
{
ILayer pInputLayer = axMapControl1.get_Layer(0);//获取在axmapcontrol1中加载的图层,是需要被裁剪的图层
ILayer pClipLayer = axMapControl2.get_Layer(0);//获取在axmapcontrol2中加载的图层,是裁剪图层
if (pInputLayer != null && pClipLayer != null)
{
IFeatureLayer pInputFeatureLayer = pInputLayer as IFeatureLayer;
IFeatureLayer pClipFeatureLayer = pClipLayer as IFeatureLayer;
IFeatureClass outFeatureClass = Clip(pInputFeatureLayer.FeatureClass, pClipFeatureLayer.FeatureClass, @"C:\Users\Administrator\Desktop\", "裁剪分析结果");
if (outFeatureClass != null)
{
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = outFeatureClass;
pFeatureLayer.Name = outFeatureClass.AliasName;
this.axMapControl3.AddLayer(pFeatureLayer);
}
}
相关文章推荐
- C#+Arcengine实现GP工具中Data Management Tool》raster》raster processing中的clip功能(矢量数据对栅格数据的裁剪)
- C#+ArcEngine:txt点数据转Shp矢量数据
- C#+ArcEngine:加载打开Shp矢量数据和栅格数据(VS2010窗体+代码)
- AE矢量数据裁剪 (群:64150589,群友大鹏实现的)
- 基于ArcEngine+C#实现的JLKDataManager空间数据平台架构设计
- C#+Arcengine实现GP工具中的extract by mask(提取掩膜),可以实现提取shp范围的栅格数据,可用来获得shp范围的高程
- C#+arcengine实现输出水深图的功能(通过淹没区域和dem高程数据)(包含栅格计算器(减)、feature to line、产生随机点、获得高程、extract values to poin)
- C#+arcengine实现栅格计算器的减功能(可以用来修改栅格数据的高程)
- C#如何实现窗体间数据互访?
- ASP.net(c#)用类的思想实现插入数据到ACCESS例子
- 用C#实现的数据加密(二) —— 哈希算法
- 数据结构与算法(C#实现)系列---演示篇(一)(外摘)
- C#实现Socket传输简单数据
- C#实现的数据加密和解密
- C#实现Socket传输简单数据
- 一个只能输入数值型数据的文本框类实现(C#)
- 用C#实现的数据加密(一) —— 对称加密算法
- ASP.NET中运用xmlhttp实现无刷新数据传递(C# and JavaScript)
- 数据结构课程设计-----用C#实现双向链表
- 用C#接口实现通用的文本数据序列化