之前写了一个矢量数据剪裁栅格的例子(掩膜),用SpatialAnalystTools中的 ExtractByMask或者ExtractByPolygon实现会方便一些,这里参考帮助里面的实例,先将矢量转栅格,再用该栅格抽取,用到SpatialAnalyst和GeoAnalyst中的IExtractionOp和IConversionOp,下面是部分代码,其中的FCCoventToPolygon和GetDataSourceFromRaster函数是另外写的。
Public Function ExtractRasterbyFeatureClass(ByVal pRaster As IRaster, ByVal ExtentFeatureClass As IFeatureClass) As IRaster
Dim pFeatureClass As IFeatureClass
'当范围数据为polyline时,将其转为polygon形式的featureclass
If ExtentFeatureClass.ShapeType = esriGeometryType.esriGeometryPolyline Then
pFeatureClass = FCCoventToPolygon(ExtentFeatureClass)
Else
pFeatureClass = ExtentFeatureClass
End If
'接口转化为IGeoDataset,做为后面的格式转换函数的参数(该参数要求为IGeoDataset形式)
Dim pTempDS As IGeoDataset
pTempDS = pFeatureClass
'定义格式转化器
Dim pConOp As IConversionOp
pConOp = New RasterConversionOp
'设置转换的环境参数
Dim pRasterAnalysisEnvironment As IRasterAnalysisEnvironment
pRasterAnalysisEnvironment = pConOp
Dim pProp As IRasterProps
pProp = pRaster
pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, pProp.MeanCellSize.X)
'得到raster的数据源的路径,做为后面的工作空间
Dim RasterFullPath, RasterPath As String
RasterFullPath = GetDataSourceFromRaster(pRaster)
RasterPath = IO.Path.GetDirectoryName(RasterFullPath)
Dim sPath As String
sPath = RasterPath
'删除已有文件
Dim fs
fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(sPath + "\" + "TempCov.img") Then
fs.Deletefile(sPath + "\" + "TempCov.img")
End If
'打开工作空间
Dim pWs As IWorkspace
Dim pWksF As IWorkspaceFactory
pWksF = New RasterWorkspaceFactory
pWs = pWksF.OpenFromFile(RasterPath, 0)
'进行格式转换操作,将矢量数据转为栅格
Dim pRasterDataset As IRasterDataset
pRasterDataset = pConOp.ToRasterDataset(pTempDS, "IMAGINE Image", pWs, "TempCov.img")
'进行抽取操作,使用RasterExtractionOp运算器
Dim pOutRaster As IRaster
Dim pExtrOp As IExtractionOp
Dim pGeoDataset As IGeoDataset
pGeoDataset = pRaster '接口转化为IGeoDataset,做为后面的栅格抽取函数的参数(该参数要求为IGeoDataset形式)
pExtrOp = New RasterExtractionOp
pOutRaster = pExtrOp.Raster(pGeoDataset, pRasterDataset)
Return pOutRaster
End Function