之前写了一个矢量数据剪裁栅格的例子(掩膜),用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

 

posted on 2008-08-07 21:12  张进洁  阅读(2537)  评论(0编辑  收藏  举报