arcengine 中tin文件怎么转换成raster

已邀请:

evergreenxq

赞同来自:

网上找到一段代码,但报错,请帮忙看看
        public IRasterDataset tin2raster(string tempBathyTIN, string geoPath, string gridName)
        {
            string tinFolder = System.IO.Path.GetDirectoryName(tempBathyTIN);
            string tinName = System.IO.Path.GetFileName(tempBathyTIN);
            IRasterDataset rasterDataset = new RasterDatasetClass();
            try
            {
                string rasterPath = System.IO.Path.GetDirectoryName(geoPath);
                IWorkspaceFactory TinWF = new TinWorkspaceFactory();
                ITinWorkspace TinWK = TinWF.OpenFromFile(tinFolder, 0) as ITinWorkspace;
                ITinAdvanced2 tinAd = TinWK.OpenTin(tinName) as ITinAdvanced2;
                IEnvelope extent = tinAd.Extent;
                IPoint origin = extent.LowerLeft;
                origin.X = origin.X - (5 * 0.5);
                origin.Y = origin.Y - (5 * 0.5);
                int nCol = (int)Math.Round(extent.Width / 5) + 1;
                int nRow = (int)Math.Round(extent.Height / 5) + 1;

                ISpatialReference2 spatialRef = (ISpatialReference2)extent.SpatialReference;

                IWorkspaceFactory rasterWF = new RasterWorkspaceFactoryClass();
                IRasterWorkspace2 workSpace = (IRasterWorkspace2)rasterWF.OpenFromFile(rasterPath, 0);

                rasterDataset = workSpace.CreateRasterDataset(gridName, "IMAGINE Image", origin, nCol, nRow, 5, 5, 1, ESRI.ArcGIS.Geodatabase.rstPixelType.PT_FLOAT, spatialRef, true);


                IRasterBandCollection bandColl = (IRasterBandCollection)rasterDataset;
                IRasterBand rasterBand = bandColl.Item(0);
                IRawPixels rawPixels = (IRawPixels)rasterBand;
                IPnt blockSize = new DblPntClass();
                blockSize.X = nCol;
                blockSize.Y = nRow;
                IPixelBlock3 pixelBlock = (IPixelBlock3)rawPixels.CreatePixelBlock(blockSize);
                ITinSurface tinSurface = (ITinSurface)tinAd;
                IRasterProps rasterProps = (IRasterProps)rawPixels;
                object nodataFloat;
                //long nodataInt;
                object val = pixelBlock.get_PixelDataByRef(0);          
                double cellsize = 5;
                origin.X = origin.X + (5 * 0.5);
                origin.Y = origin.Y + (5 * nRow) - (5 * 0.5);

                nodataFloat = Convert.ToSingle(rasterProps.NoDataValue.ToString());
                tinSurface.QueryPixelBlock(origin.X, origin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodataFloat, val);
                IPnt offset = new DblPntClass();
                offset.X = 0;
                offset.Y = 0;
                rawPixels.Write(offset, pixelBlock as IPixelBlock);


            }
            catch (Exception ex)
            {
              

            }
       
            return rasterDataset;

        }

要回复问题请先登录注册