Example #1
0
        public static IRasterDataset CreateRasterSurf(string string_0, string string_1, string string_2, IPoint ipoint_0,
                                                      int int_0, int int_1, double double_0, double double_1, rstPixelType rstPixelType_0,
                                                      ISpatialReference2 ispatialReference2_0, bool bool_0)
        {
            IWorkspaceFactory factory    = new RasterWorkspaceFactory();
            IRasterWorkspace2 workspace2 = factory.OpenFromFile(string_0, 0) as IRasterWorkspace2;

            return(workspace2.CreateRasterDataset(string_1, string_2, ipoint_0, int_0, int_1, double_0, double_1, 1,
                                                  rstPixelType_0, ispatialReference2_0, bool_0));
        }
Example #2
0
        static void Main(string[] args)
        {
            //ESRI License Initializer generated code.
            m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeAdvanced },
                                                         new esriLicenseExtensionCode[] { });
            //ESRI License Initializer generated code.


            //Get a path to the raster workspace and create a RasterWorkspace object
            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory");
            IWorkspaceFactory workspaceFactory = Activator.CreateInstance(factoryType) as IWorkspaceFactory;
            IRasterWorkspace2 rasterWorkspace  = (IRasterWorkspace2)workspaceFactory.OpenFromFile("\\\\Filepath\\ToRaster\\Folder", 0);
            IRasterDataset    rasterDataset    = rasterWorkspace.OpenRasterDataset("DEM_Resample.tif");

            //Create a raster layer to get the raster object from it
            IRasterLayer rasterLayer = new RasterLayer();

            rasterLayer.CreateFromDataset(rasterDataset);
            IRaster raster = rasterLayer.Raster;

            //Get the raster properties so we can modify them later and get details about them if we so choose.
            IRasterProps rasterProps = raster as IRasterProps;
            double       cellSize    = 60;

            //Declate a new spatial reference if you want to change the spatial reference used.
            ISpatialReferenceFactory srFactory   = new SpatialReferenceEnvironment();
            ISpatialReference2       srReference = srFactory.CreateProjectedCoordinateSystem(26917) as ISpatialReference2;

            //Create an IRasterGeometryProc object as this has the projectFast method we are looking for.
            IRasterGeometryProc rasterGeometryProc = new RasterGeometryProc();

            rasterGeometryProc.ProjectFast(rasterProps.SpatialReference, rstResamplingTypes.RSP_NearestNeighbor, ((object)cellSize), raster);

            //Create a new rasterBandCollection to store the raster in and save it there.
            IRasterBandCollection rasterBandCollection = raster as IRasterBandCollection;
            String outName = "NewImage.tif";

            String outType = "TIFF";

            rasterBandCollection.SaveAs(outName, ((IWorkspace)rasterWorkspace), outType);

            Console.WriteLine("DONE");
            Console.ReadLine();
            //Do not make any call to ArcObjects after ShutDownApplication()
            m_AOLicenseInitializer.ShutdownApplication();
        }
Example #3
0
 public static IRasterDataset CreateRasterSurf(string string_0, string string_1, string string_2, IPoint ipoint_0,
                                               int int_0, int int_1, double double_0, double double_1, int int_2, rstPixelType rstPixelType_0,
                                               ISpatialReference2 ispatialReference2_0, bool bool_0)
 {
     try
     {
         IWorkspaceFactory o         = new RasterWorkspaceFactory();
         IWorkspace        workspace = o.OpenFromFile(string_0, 0);
         IRasterDataset    dataset   = (workspace as IRasterWorkspace2).CreateRasterDataset(string_1, string_2,
                                                                                            ipoint_0, int_0, int_1, double_0, double_1, int_2, rstPixelType_0, ispatialReference2_0, bool_0);
         Marshal.ReleaseComObject(o);
         o = null;
         Marshal.ReleaseComObject(workspace);
         workspace = null;
         GC.Collect();
         return(dataset);
     }
     catch (Exception exception)
     {
         exception.ToString();
     }
     return(null);
 }
Example #4
0
        /// <summary>
        /// TIN数据转栅格数据并进行坡度分析      张琪    20110614
        /// </summary>
        /// <param name="pTinAdvanced"></param>
        /// <param name="pRastConvType"></param>
        /// <param name="sDir"></param>
        /// <param name="sName"></param>
        /// <param name="ePixelType"></param>
        /// <param name="cellsize"></param>
        /// <param name="pExtent"></param>
        /// <param name="bPerm"></param>
        /// <param name="strType"></param>
        /// <returns></returns>
        public IRasterDataset TinToRaster(ITinAdvanced pTinAdvanced, esriRasterizationType pRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm, String strType)
        {
            try
            {
                ESRI.ArcGIS.Geometry.IPoint pOrigin = pExtent.LowerLeft;
                pOrigin.X = pOrigin.X - (cellsize * 0.5);
                pOrigin.Y = pOrigin.Y - (cellsize * 0.5);
                int nCol, nRow;
                nCol = Convert.ToInt32(Math.Round(pExtent.Width / cellsize)) + 1;
                nRow = Convert.ToInt32(Math.Round(pExtent.Height / cellsize)) + 1;
                IGeoDataset         pGeoDataset        = pTinAdvanced as IGeoDataset;
                ISpatialReference2  pSpatialReference2 = pGeoDataset.SpatialReference as ISpatialReference2;
                IRasterDataset      pRasterDataset     = CreateRasterSurf(sDir, sName, strType, pOrigin, nCol, nRow, cellsize, cellsize, ePixelType, pSpatialReference2, bPerm);
                IRawPixels          pRawPixels         = GetRawPixels(pRasterDataset, 0);
                object              pCache             = pRawPixels.AcquireCache();
                ITinSurface         pTinSurface        = pTinAdvanced as ITinSurface;
                IGeoDatabaseBridge2 pbridge2           = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass();

                IRasterProps pRasterProps = pRawPixels as IRasterProps;
                //float nodataFloat;
                //int nodataInt;
                double dZMin = pTinAdvanced.Extent.ZMin;
                object vNoData;
                if (ePixelType.ToString() == "PT_FLOAT")
                {
                    vNoData = (dZMin - 1).ToString();
                }
                else
                {
                    vNoData = Convert.ToInt32((dZMin - 1));
                }
                pRasterProps.NoDataValue = vNoData;
                IPnt pOffset    = new DblPntClass();
                int  lMaxBlockX = 2048;
                if (nCol < lMaxBlockX)
                {
                    lMaxBlockX = nCol;
                }
                int lMaxBlockY = 2048;
                if (nRow < lMaxBlockY)
                {
                    lMaxBlockY = nRow;
                }
                IPnt pBlockSize = new DblPntClass();
                pBlockSize.X = lMaxBlockX;
                pBlockSize.Y = lMaxBlockY;
                IPixelBlock3 pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3;
                object       blockArray  = pPixelBlock.get_PixelDataByRef(0);
                ITrackCancel pCancel     = new CancelTrackerClass();
                pCancel.CancelOnClick    = false;
                pCancel.CancelOnKeyPress = true;
                int lBlockCount = Convert.ToInt32(Math.Round((nCol / lMaxBlockX) + 0.49) * Math.Round((nRow / lMaxBlockY) + 0.49));
                ESRI.ArcGIS.Geometry.IPoint pBlockOrigin = new ESRI.ArcGIS.Geometry.PointClass();
                int lColOffset, lRowOffset;

                for (lRowOffset = 0; lRowOffset < (nRow - 1);)
                {
                    for (lColOffset = 0; lColOffset < (nCol - 1);)
                    {
                        if ((nCol - lColOffset) < lMaxBlockX)
                        {
                            pBlockSize.X = (nCol - lColOffset);
                            pPixelBlock  = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3;
                            blockArray   = pPixelBlock.get_PixelDataByRef(0);
                        }
                        pBlockOrigin.X = pOrigin.X + (lColOffset * cellsize) + (cellsize * 0.5);
                        pBlockOrigin.Y = pOrigin.Y + ((nRow - lRowOffset) * cellsize) - (cellsize * 0.5);
                        pbridge2.QueryPixelBlock(pTinSurface, pBlockOrigin.X, pBlockOrigin.Y, cellsize, cellsize, pRastConvType, vNoData, ref blockArray);
                        //pTinSurface.QueryPixelBlock(pBlockOrigin.X, pBlockOrigin.Y, cellsize, cellsize, pRastConvType, vNoData, blockArray);
                        pOffset.X = lColOffset;
                        pOffset.Y = lRowOffset;
                        pPixelBlock.set_PixelData(0, (System.Object)blockArray);
                        pRawPixels.Write(pOffset, pPixelBlock as IPixelBlock);
                        if (lBlockCount > 1)
                        {
                            if (!pCancel.Continue())
                            {
                                break;
                            }
                            else if (pTinAdvanced.ProcessCancelled)
                            {
                                break;
                            }
                        }
                        lColOffset = lColOffset + lMaxBlockX;
                    }
                    bool bReset = false;
                    if (pBlockSize.X != lMaxBlockX)
                    {
                        pBlockSize.X = lMaxBlockX;
                        bReset       = true;
                    }
                    if ((nRow - lRowOffset) < lMaxBlockY)
                    {
                        pBlockSize.Y = (nRow - lRowOffset);
                        bReset       = true;
                    }
                    if (bReset)
                    {
                        pPixelBlock.set_PixelData(0, blockArray);
                        pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3;
                        blockArray  = pPixelBlock.get_PixelDataByRef(0);
                    }
                    lRowOffset = lRowOffset + lMaxBlockY;
                }

                pRawPixels.ReturnCache(pCache);
                pCache         = null;
                pRawPixels     = null;
                pPixelBlock    = null;
                pRasterProps   = null;
                blockArray     = 0;
                pRasterDataset = OpenRasterDataset(sDir, sName);
                if (lBlockCount == 1)
                {
                    pTinAdvanced.TrackCancel = null;
                }
                return(pRasterDataset);
            }
            catch
            {
                return(null);
            }
        }
Example #5
0
        public IRasterDataset TinToRaster2(ITinAdvanced pTinAdvanced, esriRasterizationType pRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm, String strType)
        {
            try
            {
                ESRI.ArcGIS.Geometry.IPoint pOrigin = pExtent.LowerLeft;
                pOrigin.X = pOrigin.X - (cellsize * 0.5);
                pOrigin.Y = pOrigin.Y - (cellsize * 0.5);
                int nCol, nRow;
                nCol = Convert.ToInt32(Math.Round(pExtent.Width / cellsize)) + 1;
                nRow = Convert.ToInt32(Math.Round(pExtent.Height / cellsize)) + 1;
                IGeoDataset        pGeoDataset        = pTinAdvanced as IGeoDataset;
                ISpatialReference2 pSpatialReference2 = pGeoDataset.SpatialReference as ISpatialReference2;
                IRasterDataset     pRasterDataset     = CreateRasterSurf(sDir, sName, strType, pOrigin, nCol, nRow, cellsize, cellsize, ePixelType, pSpatialReference2, bPerm);
                IRawPixels         pRawPixels         = GetRawPixels(pRasterDataset, 0);
                IPnt pBlockSize = new DblPntClass();
                pBlockSize.X = nCol;
                pBlockSize.Y = nRow;
                IPixelBlock3        pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3;
                object              blockArray  = pPixelBlock.get_PixelDataByRef(0);
                ITinSurface         pTinSurface = pTinAdvanced as ITinSurface;
                IGeoDatabaseBridge2 pbridge2    = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass();

                IRasterProps pRasterProps = pRawPixels as IRasterProps;
                object       nodataFloat;
                object       nodataInt;
                pOrigin.X = pOrigin.X + (cellsize * 0.5);
                pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5);

                if (ePixelType.ToString() == "PT_FLOAT")
                {
                    nodataFloat = pRasterProps.NoDataValue;
                    pTinSurface.QueryPixelBlock(pOrigin.X, pOrigin.Y, cellsize, cellsize, pRastConvType, nodataFloat, blockArray);
                }
                else
                {
                    nodataInt = pRasterProps.NoDataValue;
                    pTinSurface.QueryPixelBlock(pOrigin.X, pOrigin.Y, cellsize, cellsize, pRastConvType, nodataInt, blockArray);
                }

                if (pTinAdvanced.ProcessCancelled == false)
                {
                    return(null);
                }
                IPnt pOffset = new DblPntClass();
                pOffset.X = 0;
                pOffset.Y = 0;
                pRawPixels.Write(pOffset, pPixelBlock  as IPixelBlock);
                if (!bPerm && ePixelType.ToString() == "PT_FLOAT")
                {
                    IRasterBand       pBand  = pRawPixels as IRasterBand;
                    IRasterStatistics pStats = pBand.Statistics;
                    pStats.Recalculate();
                }
                if (bPerm)
                {
                    pRawPixels     = null;
                    pPixelBlock    = null;
                    pRasterProps   = null;
                    blockArray     = 0;
                    pRasterDataset = OpenRasterDataset(sDir, sName);
                }
                return(pRasterDataset);
            }

            catch
            {
                return(null);
            }
        }
Example #6
0
        /// <summary>
        /// 创建RasterDataset文件   张琪    20110614
        /// </summary>
        /// <param name="sDir">保存路径</param>
        /// <param name="sName">文件名</param>
        /// <param name="sFormat"></param>
        /// <param name="pOrigin">点</param>
        /// <param name="nCol"></param>
        /// <param name="nRow"></param>
        /// <param name="cellsizeX"></param>
        /// <param name="cellsizeY"></param>
        /// <param name="ePixelType"></param>
        /// <param name="pSR"></param>
        /// <param name="bPerm"></param>
        /// <returns></returns>
        public IRasterDataset CreateRasterSurf(String sDir, String sName, String sFormat, ESRI.ArcGIS.Geometry.IPoint pOrigin, int nCol, int nRow, Double cellsizeX, Double cellsizeY, rstPixelType ePixelType, ISpatialReference2 pSR, bool bPerm)
        {
            IWorkspaceFactory prWksFac          = new RasterWorkspaceFactoryClass();
            IWorkspace        pWorkspace        = prWksFac.OpenFromFile(sDir, 0);
            IRasterWorkspace2 pRasterWorkspace2 = pWorkspace as IRasterWorkspace2;
            int            numbands             = 1;
            IRasterDataset pRasterDataset       = pRasterWorkspace2.CreateRasterDataset(sName, sFormat, pOrigin, nCol, nRow, cellsizeX, cellsizeY, numbands, ePixelType, pSR, bPerm);

            return(pRasterDataset);
        }
Example #7
0
        public IRasterDataset CreateRasterSurf(string sDir, string sName, string sFormat, IPoint pOrigin, int nCol, int nRow, double cellsizeX, double cellsizeY, rstPixelType ePixelType, ISpatialReference2 pSR, bool bPerm)
        {
            //IWorkspaceFactory rWksFac = new RasterWorkspaceFactory();

            //IWorkspace wks = rWksFac.OpenFromFile(sDir, 0);

            //IRasterWorkspace2 rWks = wks as IRasterWorkspace2;

            //int numbands = 1;

            //IRasterDataset pRDS;// = new RasterDatasetClass();
            //pRDS = rWks.CreateRasterDataset(sName, sFormat, pOrigin, nCol, nRow, cellsizeX, cellsizeY, numbands, ePixelType, pSR, bPerm);
            //return pRDS;

            IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory();

            ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0);
            ESRI.ArcGIS.esriSystem.IName           pname          = (IName)pworkspaceName;
            ESRI.ArcGIS.Geodatabase.IWorkspace     inmemWor       = (IWorkspace)pname.Open();
            IPoint            originpoint = pOrigin;
            IRasterWorkspace2 rasterws    = (IRasterWorkspace2)inmemWor;

            //用于计算的 float型的栅格数据
            IRasterDataset demdataset = rasterws.CreateRasterDataset("Dataset", "MEM", originpoint, nCol, nRow,
                                                                     (double)cellsizeX, (double)cellsizeY, 1, rstPixelType.PT_DOUBLE, null, true);

            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pname);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceFactory);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceName);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(inmemWor);
            }
            catch { }
            GC.Collect();
            return(demdataset);
        }
Example #8
0
        public IRasterDataset TinToRaster_new(ITinAdvanced pTin, esriRasterizationType eRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm)
        {
            IPoint pOrigin = pExtent.LowerLeft;

            //pOrigin.X = pOrigin.X - (cellsize * 0.5);
            //pOrigin.Y = pOrigin.Y - (cellsize * 0.5);
            pOrigin.X = pOrigin.X;
            pOrigin.Y = pOrigin.Y;
            int nCol, nRow;

            nCol = (int)Math.Round(pExtent.Width / cellsize);
            nRow = (int)Math.Round(pExtent.Height / cellsize);
            IGeoDataset        pGDS = pTin as IGeoDataset;
            ISpatialReference2 pSR  = pGDS.SpatialReference as ISpatialReference2;
            //这个pOrigin为栅格左下角
            IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory();
            IRasterWorkspace2 rasterws          = pworkspaceFactory.OpenFromFile(sDir, 0) as IRasterWorkspace2;
            IPoint            originpoint       = pOrigin;

            //用于计算的 float型的栅格数据
            IRasterDataset demdataset = rasterws.CreateRasterDataset(sName, "TIFF", originpoint, nCol, nRow,
                                                                     cellsize, cellsize, 1, rstPixelType.PT_DOUBLE, null, true);

            IRasterDataset pRDS = demdataset;

            //IRawPixels pRawPixels = GetRawPixels(pRDS, 0);
            IRaster pRaster    = pRDS.CreateDefaultRaster();
            IPnt    pBlockSize = new DblPnt();

            //nCol = 50;
            //nRow = 50;
            pBlockSize.X = nCol;
            pBlockSize.Y = nRow;
            IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize);
            //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize);
            IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3;

            //object val = pPixelBlock.get_SafeArray(0);
            ITinSurface pTinSurf = pTin as ITinSurface;
            // IRasterProps pRasterProps = pRawPixels as IRasterProps;
            IRasterProps pRasterProps = pRaster as IRasterProps;
            object       nodata;

            //pOrigin.X = pOrigin.X + (cellsize * 0.5);
            //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5);
            pOrigin.X = pOrigin.X;
            pOrigin.Y = pOrigin.Y + (cellsize * nRow);
            nodata    = pRasterProps.NoDataValue;
            IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass();

            //这个pOrigin为栅格左上角
            //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val);
            //if (pTin.ProcessCancelled)
            //    return null;
            //val.GetType();
            CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, ref pPixelBlock3);
            IPnt pOffset = new DblPnt();

            pOffset.X = 0;
            pOffset.Y = 0;
            //pPixelBlock3.set_PixelData(0, val);
            //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘
            IRasterEdit prasteredit = pRaster as IRasterEdit;

            prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3);
            //pRDS = OpenOutputRasterDataset(sDir, sName);

            //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize);
            //pRaster.Read(pOffset,pb);

            // ISaveAs pSaveas = pRasterProps as ISaveAs2;
            // pSaveas.SaveAs(sDir + "\\" + sName, null, "TIFF");

            prasteredit.Refresh();


            return(pRDS);
        }
Example #9
0
        /// <summary>
        /// Export CurrentList to .shp
        /// </summary>
        /// <param name="path">path to target shapefile</param>
        private void CurrentListAsShapefile(string path)
        {
            if (CurrentList.Count == 0)
            {
                throw new Exception("Current list is empty.");
            }

            // Create fields
            List <Field> fields = new List <Field>();
            List <KeyValuePair <string, string> > properties = CurrentList[0].GetPropertyList();
            int additionalFieldColumnIndexShapefile          = 0;

            for (int column = 1; column <= properties.Count; column++) //
            {
                string name = properties[column - 1].Key;
                int    length;
                if (name == "additional")
                {
                    additionalFieldColumnIndexShapefile = column + 1;
                    length = 16;
                }
                else
                {
                    length = 100;
                }
                fields.Add(GeoHelper.CreateField(name, name == "additional" ? esriFieldType.esriFieldTypeDouble : esriFieldType.esriFieldTypeString, length));
            }

            // Create spatial reference
            ISpatialReferenceFactory    srFactory            = new SpatialReferenceEnvironment();
            SpatialReferenceEnvironment pSpatialReferenceEnv = default(SpatialReferenceEnvironment);
            ISpatialReference2          pSpatialReference    = default(ISpatialReference2);
            //IGeographicCoordinateSystem cs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);

            // Add data
            string filePath = "";
            string fileName = "";

            FileUtil.ExtractFileNameFromFullPath(path, ref filePath, ref fileName);
            GeoHelper.CreateShpFile(filePath, fileName, fields.ToArray(), pSpatialReference, (featureClass) =>
            {
                for (int i = 0; i < CurrentList.Count; i++)
                {
                    POI poi = CurrentList[i];

                    List <KeyValuePair <string, string> > _properties = poi.GetPropertyList();

                    IPoint point = new ESRI.ArcGIS.Geometry.Point();
                    point.X      = poi._lon ?? 0;
                    point.Y      = poi._lat ?? 0;

                    IFeature feature = featureClass.CreateFeature();
                    feature.Shape    = point;

                    // Attributes table record column index starts at 2
                    for (int column = 2; column <= _properties.Count + 1; column++) //
                    {
                        string value = _properties[column - 2].Value;
                        if (additionalFieldColumnIndexShapefile == column)
                        {
                            if (value == null)
                            {
                                value = "0";
                            }
                            feature.set_Value(column, double.Parse(value));
                        }
                        else
                        {
                            feature.set_Value(column, value);
                        }
                    }

                    feature.Store();
                }

                return(true);
            });
        }
Example #10
0
        public static IRasterDataset TinToRaster(ITinAdvanced itinAdvanced_0,
                                                 esriRasterizationType esriRasterizationType_0, string string_0, string string_1, string string_2,
                                                 rstPixelType rstPixelType_0, double double_0, IEnvelope ienvelope_0, bool bool_0)
        {
            object obj3;
            IPoint lowerLeft = ienvelope_0.LowerLeft;

            lowerLeft.X -= double_0 * 0.5;
            lowerLeft.Y -= double_0 * 0.5;
            int                num              = ((int)Math.Round((double)(ienvelope_0.Width / double_0))) + 1;
            int                num2             = ((int)Math.Round((double)(ienvelope_0.Height / double_0))) + 1;
            IGeoDataset        dataset          = itinAdvanced_0 as IGeoDataset;
            ISpatialReference2 spatialReference = dataset.SpatialReference as ISpatialReference2;
            IRasterDataset     dataset2         = CreateRasterSurf(string_0, string_1, string_2, lowerLeft, num, num2, double_0,
                                                                   double_0, 1, rstPixelType_0, spatialReference, bool_0);
            IRawPixels   rawPixels = GetRawPixels(dataset2, 0);
            object       cache     = rawPixels.AcquireCache();
            ITinSurface  pSurface  = itinAdvanced_0 as ITinSurface;
            IRasterProps o         = rawPixels as IRasterProps;
            double       zMin      = itinAdvanced_0.Extent.ZMin;

            if (rstPixelType_0 == rstPixelType.PT_FLOAT)
            {
                obj3 = (float)(zMin - 1.0);
            }
            else
            {
                obj3 = (int)(zMin - 1.0);
            }
            o.NoDataValue = obj3;
            IPnt tlc  = new DblPnt();
            int  num4 = 2048;

            if (num < 2048)
            {
                num4 = num;
            }
            int num5 = 2048;

            if (num2 < 2048)
            {
                num5 = num2;
            }
            IPnt size = new DblPnt
            {
                X = num4,
                Y = num5
            };
            IPixelBlock3 block  = rawPixels.CreatePixelBlock(size) as IPixelBlock3;
            ITrackCancel cancel = new CancelTracker
            {
                CancelOnClick    = false,
                CancelOnKeyPress = true
            };
            int num6 = (int)(Math.Round((double)((num / num4) + 0.49)) * Math.Round((double)((num2 / num5) + 0.49)));

            if (num6 == 1)
            {
                itinAdvanced_0.TrackCancel = cancel;
            }
            IPoint point2 = new Point();
            object obj4   = block.get_PixelDataByRef(0);

            for (int i = 0; i < num2; i += num5)
            {
                for (int j = 0; j < num; j += num4)
                {
                    if ((num - j) < num4)
                    {
                        size.X = num - j;
                        block  = rawPixels.CreatePixelBlock(size) as IPixelBlock3;
                        obj4   = block.get_PixelDataByRef(0);
                    }
                    point2.X = (lowerLeft.X + (j * double_0)) + (double_0 * 0.5);
                    point2.Y = (lowerLeft.Y + ((num2 - i) * double_0)) - (double_0 * 0.5);
                    IGeoDatabaseBridge2 bridge = new GeoDatabaseHelper() as IGeoDatabaseBridge2;
                    bridge.QueryPixelBlock(pSurface, point2.X, point2.Y, double_0, double_0, esriRasterizationType_0,
                                           obj3, ref obj4);
                    tlc.X = j;
                    tlc.Y = i;
                    block.set_PixelData(0, obj4);
                    rawPixels.Write(tlc, block as IPixelBlock);
                }
                bool flag = false;
                if (size.X != num4)
                {
                    size.X = num4;
                    flag   = true;
                }
                if ((num2 - i) < num5)
                {
                    size.Y = num2 - i;
                    flag   = true;
                }
                if (flag)
                {
                    block = rawPixels.CreatePixelBlock(size) as IPixelBlock3;
                    obj4  = block.get_PixelDataByRef(0);
                }
            }
            rawPixels.ReturnCache(cache);
            Marshal.ReleaseComObject(cache);
            cache = null;
            Marshal.ReleaseComObject(rawPixels);
            rawPixels = null;
            Marshal.ReleaseComObject(block);
            block = null;
            Marshal.ReleaseComObject(o);
            o    = null;
            obj4 = 0;
            GC.Collect();
            return(dataset2);
        }
Example #11
0
        public static IRasterDataset TinToRaster(ITinAdvanced itinAdvanced_0,
                                                 esriRasterizationType esriRasterizationType_0, string string_0, string string_1, rstPixelType rstPixelType_0,
                                                 double double_0, IEnvelope ienvelope_0, bool bool_0)
        {
            IPoint lowerLeft = ienvelope_0.LowerLeft;

            lowerLeft.X -= double_0 * 0.5;
            lowerLeft.Y -= double_0 * 0.5;
            int                num              = (int)Math.Round((double)((ienvelope_0.Width / double_0) + 1.0));
            int                num2             = (int)Math.Round((double)((ienvelope_0.Height / double_0) + 1.0));
            IGeoDataset        dataset          = itinAdvanced_0 as IGeoDataset;
            ISpatialReference2 spatialReference = dataset.SpatialReference as ISpatialReference2;
            IRasterDataset     dataset2         = CreateRasterSurf(string_0, string_1, "GRID", lowerLeft, num, num2, double_0,
                                                                   double_0, rstPixelType_0, spatialReference, true);
            IRasterBandCollection bands    = dataset2 as IRasterBandCollection;
            IRawPixels            pixels   = bands.Item(0) as IRawPixels;
            ITinSurface           pSurface = itinAdvanced_0 as ITinSurface;

            pSurface.RasterInterpolationMethod = esriSurfaceInterpolationType.esriNaturalNeighborInterpolation;
            IRasterProps props       = pixels as IRasterProps;
            object       noDataValue = props.NoDataValue;
            IPnt         tlc         = new DblPnt();
            int          num3        = 2048;
            int          num4        = 2048;

            if (num < 2048)
            {
                num3 = num;
            }
            if (num2 < num4)
            {
                num4 = num2;
            }
            IPnt size = new DblPnt
            {
                X = num3,
                Y = num4
            };
            IPixelBlock pxls   = pixels.CreatePixelBlock(size);
            object      block  = pxls.get_SafeArray(0);
            IPoint      point2 = new Point();

            for (int i = 0; i < num2; i += num4)
            {
                for (int j = 0; j < num; j += num3)
                {
                    if ((num - j) < num3)
                    {
                        size.X = num - j;
                        pxls   = pixels.CreatePixelBlock(size);
                        block  = pxls.get_SafeArray(0);
                    }
                    point2.X = (lowerLeft.X + (j * double_0)) + (double_0 * 0.5);
                    point2.Y = (lowerLeft.Y + ((num2 - i) * double_0)) - (double_0 * 0.5);
                    IGeoDatabaseBridge2 bridge = new GeoDatabaseHelper() as IGeoDatabaseBridge2;
                    bridge.QueryPixelBlock(pSurface, point2.X, point2.Y, double_0, double_0, esriRasterizationType_0,
                                           noDataValue, ref block);
                    tlc.X = j;
                    tlc.Y = i;
                    pxls.set_SafeArray(0, block);
                    pixels.Write(tlc, pxls);
                }
                bool flag = false;
                if (size.X != num3)
                {
                    size.X = num3;
                    flag   = true;
                }
                if ((num2 - i) < num4)
                {
                    size.Y = num2 - i;
                }
                if (flag)
                {
                    block = pixels.CreatePixelBlock(size).get_SafeArray(0);
                }
            }
            return(dataset2);
        }