C#+Arcengine实现GP工具中Data Management Tool》raster》raster processing中的clip功能(矢量数据对栅格数据的裁剪)
2015-01-28 19:49
543 查看
Arcgisdesktop中Data Management Tool中有一个clip的功能,即可以实现根据矢量数据的范围对栅格数据的裁剪的功能,在这里它有一个可选项use input features for Clipping Geometry,即是否按照所输入shp数据的图形范围对栅格数据进行裁剪,根据其是否勾选,clip有两种实现方法,具体如下:
1,、勾选,即按照矢量数据的范围对栅格数据进行裁剪(裁剪后输出范围和输入的shp相同):
/// <summary>
/// 按shp范围裁剪Raster数据
/// </summary>
/// <param name="inShp">输入shp数据</param>
/// <param name="inRaster">输入Raster数据</param>
private string ClipDem(string inShp, string inRaster)
{
try
{
//调用GP工具
Geoprocessor clipGeoprocessor = new Geoprocessor();
//这个工作空间大家电脑上都有,可以都写这个,不必更换路径(只要你装了arcgis)
clipGeoprocessor.SetEnvironmentValue("workspace", @"C:\Users\TOMATO\Documents\ArcGIS\Default.gdb");
clipGeoprocessor.OverwriteOutput = true;
//要保存的裁剪raster名称
string clipRasterName = "clipRaster.tif";
//路径+raster名称(newFolder是你想保存裁剪影像的路径)
string clipRaster = newFolder + "\\" + clipRasterName;
//判断此栅格文件是否存在,若存在,删除
if (File.Exists(clipRaster))
{
File.Delete(clipRaster);
}
//初始化clip工具
Clip newClipRaster = new Clip()
{
in_raster = inRaster, // 输入栅格数据(路径+名称)
out_raster = clipRaster, //要输出的裁剪栅格数据的路径+名称
clipping_geometry = "ClippingGeometry", //注意,此处就是arcgis中use input features for Clipping Geometry勾选的状态,不勾选为none
rectangle = "#", //此处为输出矩形的范围,注意,这里若给出范围,则裁剪图像按给出的范围输出,不管你上面的勾是否勾选
in_template_dataset = inShp // 输入的矢量数据的路径+名称(应该必须为polygon,未验证)
};
IGeoProcessorResult result = (IGeoProcessorResult)clipGeoprocessor.Execute(newClipRaster, null);
//判断是否裁剪成功
if (!File.Exists(clipRaster))
{
return null;
}
return clipRaster;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
2、不勾选,即按照矢量数据的外包矩形的范围对栅格数据进行裁剪(裁剪后输出的范围是输入shp图像的外包矩形的范围):
/// <summary>
/// 按shp外包矩形范围裁剪Raster数据
/// </summary>
/// <param name="inShp">输入shp数据</param>
/// <param name="inRaster">输入Raster数据</param>
private string ClipDem(string inShp, string inRaster)
{
try
{
//调用GP工具
Geoprocessor clipGeoprocessor = new Geoprocessor();
clipGeoprocessor.OverwriteOutput = true;
//创建工作空间
IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(shapefilePath, 0);
////得到用户所选shp文件中的featureClass
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(inShpName));
//得到feature,进而得到shp外包矩形的范围
IFeatureCursor featureCursor = featureClass.Search(null, false);
IFeature feature = featureCursor.NextFeature();
while (feature != null)
{
//此处即为shp外包矩形的范围
rectangle = string.Format("{0} {1} {2} {3}", feature.ShapeCopy.Envelope.XMin, feature.ShapeCopy.Envelope.YMin, feature.ShapeCopy.Envelope.XMax, feature.ShapeCopy.Envelope.YMax);
feature = featureCursor.NextFeature();
}
string clipRasterName = "clipRaster.tif";//要输出的裁剪raster名称
string outputrasterpath = staruoPath + "\\" + clipRasterName; //路径+raster名称
//判断此文件是否存在,若存在,删除
if (File.Exists(outputrasterpath))
{
File.Delete(outputrasterpath);
}
//初始化clip工具
Clip clipRaster = new Clip()
{
in_raster = inRaster,//同上
out_raster = outputrasterpath,//同上
clipping_geometry = "none",//此处即为不勾选的情况
rectangle =rectangle //输出范围为外包矩形
};
IGeoProcessorResult result = (IGeoProcessorResult)clipGeoprocessor.Execute(clipRaster, null);
if (File.Exists(outputrasterpath))
{
MessageBox.Show("裁剪成功!");
}
}
}
catch (Exception ex)
{
MessageBox.Show("失败!");
Console.WriteLine(ex.Message);
}
}
注意,输入shp文件的路径+名称和要输入栅格数据的路径+名称,一定要写正确,不然GP工具调用的时候容易报出“对com组建的调用返回了错误的HRESULT_FAIL”这个错误,如确定输入路径正确,还是报错,可以参考http://llsshh1985.blog.163.com/blog/static/14006860320145174550560/(arcgisengine中调用GP报错的问题)
1,、勾选,即按照矢量数据的范围对栅格数据进行裁剪(裁剪后输出范围和输入的shp相同):
/// <summary>
/// 按shp范围裁剪Raster数据
/// </summary>
/// <param name="inShp">输入shp数据</param>
/// <param name="inRaster">输入Raster数据</param>
private string ClipDem(string inShp, string inRaster)
{
try
{
//调用GP工具
Geoprocessor clipGeoprocessor = new Geoprocessor();
//这个工作空间大家电脑上都有,可以都写这个,不必更换路径(只要你装了arcgis)
clipGeoprocessor.SetEnvironmentValue("workspace", @"C:\Users\TOMATO\Documents\ArcGIS\Default.gdb");
clipGeoprocessor.OverwriteOutput = true;
//要保存的裁剪raster名称
string clipRasterName = "clipRaster.tif";
//路径+raster名称(newFolder是你想保存裁剪影像的路径)
string clipRaster = newFolder + "\\" + clipRasterName;
//判断此栅格文件是否存在,若存在,删除
if (File.Exists(clipRaster))
{
File.Delete(clipRaster);
}
//初始化clip工具
Clip newClipRaster = new Clip()
{
in_raster = inRaster, // 输入栅格数据(路径+名称)
out_raster = clipRaster, //要输出的裁剪栅格数据的路径+名称
clipping_geometry = "ClippingGeometry", //注意,此处就是arcgis中use input features for Clipping Geometry勾选的状态,不勾选为none
rectangle = "#", //此处为输出矩形的范围,注意,这里若给出范围,则裁剪图像按给出的范围输出,不管你上面的勾是否勾选
in_template_dataset = inShp // 输入的矢量数据的路径+名称(应该必须为polygon,未验证)
};
IGeoProcessorResult result = (IGeoProcessorResult)clipGeoprocessor.Execute(newClipRaster, null);
//判断是否裁剪成功
if (!File.Exists(clipRaster))
{
return null;
}
return clipRaster;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
2、不勾选,即按照矢量数据的外包矩形的范围对栅格数据进行裁剪(裁剪后输出的范围是输入shp图像的外包矩形的范围):
/// <summary>
/// 按shp外包矩形范围裁剪Raster数据
/// </summary>
/// <param name="inShp">输入shp数据</param>
/// <param name="inRaster">输入Raster数据</param>
private string ClipDem(string inShp, string inRaster)
{
try
{
//调用GP工具
Geoprocessor clipGeoprocessor = new Geoprocessor();
clipGeoprocessor.OverwriteOutput = true;
//创建工作空间
IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(shapefilePath, 0);
////得到用户所选shp文件中的featureClass
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(inShpName));
//得到feature,进而得到shp外包矩形的范围
IFeatureCursor featureCursor = featureClass.Search(null, false);
IFeature feature = featureCursor.NextFeature();
while (feature != null)
{
//此处即为shp外包矩形的范围
rectangle = string.Format("{0} {1} {2} {3}", feature.ShapeCopy.Envelope.XMin, feature.ShapeCopy.Envelope.YMin, feature.ShapeCopy.Envelope.XMax, feature.ShapeCopy.Envelope.YMax);
feature = featureCursor.NextFeature();
}
string clipRasterName = "clipRaster.tif";//要输出的裁剪raster名称
string outputrasterpath = staruoPath + "\\" + clipRasterName; //路径+raster名称
//判断此文件是否存在,若存在,删除
if (File.Exists(outputrasterpath))
{
File.Delete(outputrasterpath);
}
//初始化clip工具
Clip clipRaster = new Clip()
{
in_raster = inRaster,//同上
out_raster = outputrasterpath,//同上
clipping_geometry = "none",//此处即为不勾选的情况
rectangle =rectangle //输出范围为外包矩形
};
IGeoProcessorResult result = (IGeoProcessorResult)clipGeoprocessor.Execute(clipRaster, null);
if (File.Exists(outputrasterpath))
{
MessageBox.Show("裁剪成功!");
}
}
}
catch (Exception ex)
{
MessageBox.Show("失败!");
Console.WriteLine(ex.Message);
}
}
注意,输入shp文件的路径+名称和要输入栅格数据的路径+名称,一定要写正确,不然GP工具调用的时候容易报出“对com组建的调用返回了错误的HRESULT_FAIL”这个错误,如确定输入路径正确,还是报错,可以参考http://llsshh1985.blog.163.com/blog/static/14006860320145174550560/(arcgisengine中调用GP报错的问题)
相关文章推荐
- C#+Arcengine实现GP工具中的extract by mask(提取掩膜),可以实现提取shp范围的栅格数据,可用来获得shp范围的高程
- ArcEngine调用GP工具实现多边形Clip裁剪功能
- Arcengine+C#实现矢量数据的裁剪
- C#+arcengine调用GP工具实现feature to line 功能
- C#+arcengine实现栅格计算器的减功能(可以用来修改栅格数据的高程)
- C#+arcengine调用GP工具实现产生随机点的功能
- C#+arcengine调用GP工具实现extract values to points的功能(可以用来高程)
- 基于ArcEngine+C#实现的JLKDataManager空间数据平台架构设计
- C#+ArcEngine:加载打开Shp矢量数据和栅格数据(VS2010窗体+代码)
- Arcgis实现为栅格中nodata或者数据质量差的点赋邻域值Nibble工具
- 利用Arcengine的GP工具实现缓冲区分析功能
- C#+arcengine实现输出水深图的功能(通过淹没区域和dem高程数据)(包含栅格计算器(减)、feature to line、产生随机点、获得高程、extract values to poin)
- C#+ArcEngine加载影像Raster栅格数据,并与ArcGIS一样判断是否创建金字塔。
- Erdas:将shp文件保存为Erdas中适用的AOI文件 矢量数据裁剪栅格
- 基于ArcEngine+C#开发的空间数据管理平台架构设计及功能说明
- 矢量裁剪栅格(过滤)(c#)
- 如何使数据绑定的控件实现“上一条”、“下一条”、“第一条”和“最后一条”的功能?(WinForm, C#)
- c# 调用ArcEngine的GP工具
- 推荐几款优秀的数据比较同步工具 Data Compare and Sync tool
- C# 将Excel数据导入到数据库(实现SQL2000企业管理器导入EXCEL功能)