ZhenHero
路人甲
路人甲
  • 注册日期2003-08-14
  • 发帖数11
  • QQ
  • 铜币195枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1279回复:1

大家有使用过Mosaic函数作影像镶嵌的吗?

楼主#
更多 发布于:2005-06-06 14:26
<P>我使用IRasterGeometryProc接口的Mosaic镶嵌影像,对于只用一个波段的影像,代码的运行符合预期,但是对于多波段的影响,运行后发现新生成的影像的波段内容一样的,即全是第一个波段分量。其代码如下:</P>
<P>Private Function Mosaic(pSourRasterWorkspace As IRasterWorkspace, pSourLayer As Collection, pResuRasterWorkspace As IRasterWorkspace, strResuLayer) As IRaster<BR>    <BR>    Dim strSourFormat As String<BR>    <BR>    Dim pSourSpatialRef As ISpatialReference</P>
<P>    Dim dSourCellSize As Double<BR>    <BR>    Dim pvSourRasterBandCollection As Collection<BR>    Set pvSourRasterBandCollection = New Collection<BR>    <BR>    Dim nvLayerCount As Long<BR>    nvLayerCount = 1<BR>    <BR>    Dim pSourRasterBandCollection As IRasterBandCollection<BR>    Dim pSourRasterBand As IRasterBand<BR>    <BR>    Dim nBandCount As Long<BR>    Dim nMaxBandCount As Long<BR>    <BR>    Dim nLayerCount As Long<BR>    nLayerCount = pSourLayer.Count<BR>    <BR>    Dim nLayerIndex As Long<BR>    For nLayerIndex = 1 To nLayerCount<BR>        Dim strLayer As String<BR>        strLayer = pSourLayer.Item(nLayerIndex)<BR>    <BR>        Dim pSourRasterDataset As IRasterDataset<BR>        Set pSourRasterDataset = pSourRasterWorkspace.OpenRasterDataset(strLayer)<BR>    <BR>        Debug.Assert Not pSourRasterDataset Is Nothing<BR>    <BR>        If nLayerIndex = 1 Then<BR>            strSourFormat = pSourRasterDataset.Format<BR>        <BR>            Dim pSourRaster As IRaster<BR>            Set pSourRaster = pSourRasterDataset.CreateDefaultRaster<BR>            <BR>            Dim pSourRasterProps As IRasterProps<BR>            Set pSourRasterProps = pSourRaster<BR>            <BR>            Set pSourSpatialRef = pSourRasterProps.SpatialReference<BR>            <BR>            Dim pSourPnt As IPnt<BR>            Set pSourPnt = pSourRasterProps.MeanCellSize<BR>            <BR>            Dim dSourCellSizeX As Double<BR>            Dim dSourCellSizeY As Double<BR>            <BR>            dSourCellSizeX = pSourPnt.X<BR>            dSourCellSizeY = pSourPnt.Y<BR>            <BR>            dSourCellSize = (dSourCellSizeX + dSourCellSizeY) / 2<BR>        End If<BR>        <BR>        Dim strFormat As String<BR>        strFormat = pSourRasterDataset.Format<BR>        <BR>        If strFormat = strSourFormat Then<BR>            nBandCount = 0<BR>        <BR>            Set pSourRasterBandCollection = pSourRasterDataset<BR>            nBandCount = pSourRasterBandCollection.Count<BR>            <BR>            If nBandCount > nMaxBandCount Then<BR>                nMaxBandCount = nBandCount<BR>            End If<BR>            <BR>            pvSourRasterBandCollection.Add pSourRasterBandCollection<BR>            nvLayerCount = nvLayerCount + 1<BR>        End If<BR>        <BR>    Next nLayerIndex<BR>    <BR>    Dim pResuRaster As IRaster<BR>    Set pResuRaster = New Raster<BR>        <BR>    Dim pResuRasterBandCollection As IRasterBandCollection<BR>    Set pResuRasterBandCollection = pResuRaster<BR>    <BR>    Dim nBandIndex As Long<BR>    For nBandIndex = 0 To nMaxBandCount - 1<BR>    <BR>        Dim pTempRaster As IRaster<BR>        Set pTempRaster = New Raster<BR>        <BR>        Dim pTempRasterBandCollection As IRasterBandCollection<BR>        Set pTempRasterBandCollection = pTempRaster<BR>        <BR>        For nLayerIndex = 1 To nvLayerCount - 1<BR>            Set pSourRasterBandCollection = pvSourRasterBandCollection.Item(nLayerIndex)<BR>            <BR>            If Not pSourRasterBandCollection Is Nothing Then<BR>                Set pSourRasterBand = pSourRasterBandCollection.Item(nBandIndex)<BR>                <BR>                pTempRasterBandCollection.AppendBand pSourRasterBand<BR>            End If<BR>        Next nLayerIndex<BR>        <BR>        Dim pRasterGeometryProc As IRasterGeometryProc<BR>        Set pRasterGeometryProc = New RasterGeometryProc<BR>    <BR>        Dim pMosaicedRaster As IRaster<BR>        Set pMosaicedRaster = pRasterGeometryProc.Mosaic(CStr(nBandIndex + 1), pResuRasterWorkspace, strSourFormat, dSourCellSize, pSourSpatialRef, pTempRaster)</P>
<P>        Dim pMosaicedRasterBandCollection As IRasterBandCollection<BR>        Set pMosaicedRasterBandCollection = pMosaicedRaster<BR>        <BR>        pResuRasterBandCollection.AppendBand pMosaicedRasterBandCollection.Item(0)</P>
<P>    Next nBandIndex<BR>    <BR>    pResuRasterBandCollection.SaveAs strResuLayer, pResuRasterWorkspace, strSourFormat<BR>    <BR>    Set Mosaic = pResuRasterBandCollection<BR>    <BR>End Function</P>
喜欢0 评分0
butry
路人甲
路人甲
  • 注册日期2004-07-18
  • 发帖数312
  • QQ
  • 铜币1004枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-06-07 09:13
没有用过这个,只用过MOSIC。
4S(RS+GPS+GIS+CS)工程师 失望过,徘徊过,伤心过,但我心依然坚强! 偶炒蛋不累!4S更不累!!就是没有力气上床了……
举报 回复(0) 喜欢(0)     评分
游客

返回顶部