예제 #1
0
        //public IFeatureClass createPolygons3()
        //{
        //    createFeatureClass();

        //}
        public IFeatureClass createPolygons2()
        {
            createFeatureClass();
            IRasterProps           rsProp   = (IRasterProps)inputRaster;
            int                    bndCnt   = ((IRasterBandCollection)inputRaster).Count;
            IPnt                   rsPnt    = rsProp.MeanCellSize();
            double                 cellArea = rsPnt.X * rsPnt.Y;
            double                 tCells   = minArea / cellArea;
            IFunctionRasterDataset sDset    = rsUtil.createMeanShiftFuction(inputRaster, (int)tCells);

            FunctionRasters.meanShiftFunctionDataset rFunc = (FunctionRasters.meanShiftFunctionDataset)sDset.Function;
            IRaster2               rs2   = (IRaster2)rsUtil.createRaster(sDset);
            IRasterCursor          rsCur = rs2.CreateCursorEx(null);
            IRasterDomainExtractor dExt  = new RasterDomainExtractorClass();

            do
            {
                IPixelBlock            pb     = rsCur.PixelBlock;
                IFunctionRasterDataset pbDset = rsUtil.PixelBlockToRaster(pb, rsCur.TopLeft, sDset);
                IRaster rs          = rsUtil.createRaster(pbDset);
                int     numClusters = rFunc.NumClusters;
                for (int c = 0; c < numClusters; c++)
                {
                    IFunctionRasterDataset fd  = rsUtil.calcEqualFunction(pbDset, c);
                    IFunctionRasterDataset fd2 = rsUtil.setNullValue(fd, 0);
                    IPolygon polys             = dExt.ExtractDomain(rsUtil.createRaster(fd2), true);
                }
            } while (rsCur.Next() == true);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rsCur);



            return(outftr);
        }
예제 #2
0
        private void IDWInterpolation(IFeatureClass pointFeature, IRaster refRaster, string name)
        {
            IFeatureClassDescriptor pointDescript = new FeatureClassDescriptorClass();

            pointDescript.Create(pointFeature, null, name);
            object                     extend   = (refRaster as IGeoDataset).Extent;
            IRasterProps               refProps = refRaster as IRasterProps;
            object                     cell     = refProps.MeanCellSize().X;
            IInterpolationOp           interpla = new RasterInterpolationOpClass();
            IRasterAnalysisEnvironment IDWEnv   = interpla as IRasterAnalysisEnvironment;

            IDWEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cell);
            IDWEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extend);
            IGeoDataset   output = interpla.IDW((IGeoDataset)pointDescript, 2, null, null);
            IGeoDataset   input  = refRaster as IGeoDataset;
            IExtractionOp op     = new RasterExtractionOpClass();

            output = op.Raster(output, input);
            var               clipRaster   = (IRaster)output;
            ISaveAs           pSaveAs      = clipRaster as ISaveAs;
            IWorkspaceFactory workspaceFac = new RasterWorkspaceFactoryClass();
            var               groups       = Regex.Match(name, @"^(\d+)_(\d+)_(\d+)$").Groups;

            name = string.Format("{0:D2}{1:D2}", int.Parse(groups[2].Value), int.Parse(groups[3].Value));
            IDataset outDataset = pSaveAs.SaveAs(fileName + name + ".img", workspaceFac.OpenFromFile(filePath, 0), "IMAGINE Image");

            System.Runtime.InteropServices.Marshal.ReleaseComObject(outDataset);
        }
예제 #3
0
        /// <summary>
        /// Each BuilderItem contains a Function Raster Dataset which is used to create the thumbnail.
        /// The thumbnail is created by Nearest Neighbor resampling of the Function Raster Dataset.
        /// The resampled raster is exported as a byte array and saved Into the IMemoryBlobStreamVariant.
        /// The blob is then inserted into the Thumbnail field.
        /// </summary>
        /// <param name="mybuilderItem">Item containing the Function Dataset to be added to the Mosaic Dataset</param>
        private void Resampling(IBuilderItem mybuilderItem)
        {
            try
            {
                IFunctionRasterDataset pFuncRasterDataset = mybuilderItem.Dataset; // Get the FunctionRasterDataset from mybuilderItem
                IRasterDataset         pRasterDataset;
                pRasterDataset = (IRasterDataset)pFuncRasterDataset;               // Cast the FunctionRasterDataset to Raster Dataset
                IPropertySet thePropSet = pFuncRasterDataset.Properties;           // Get the properties of the raster Dataset
                IRaster      praster    = pRasterDataset.CreateDefaultRaster();    // Create default raster from the above raster dataset
                praster.ResampleMethod = rstResamplingTypes.RSP_NearestNeighbor;   // The raster is resampled by RSP_NearestNeighbor
                IRasterProps pRasterProps = (IRasterProps)praster;                 // Raster properties are used to update the height, width of the raster
                pRasterProps.Height = 256;
                pRasterProps.Width  = 256;

                IRasterExporter pConverter = new RasterExporterClass();                           // IRasterExporter object is used to convert the raster to byte array.
                byte[]          pBytesArr;
                pBytesArr = pConverter.ExportToBytes(praster, "TIFF");                            // Convert the resampled Raster to a Byte array
                IMemoryBlobStream        memBlobStream = new MemoryBlobStream();                  // Create new IMemoryBlobStream
                IMemoryBlobStreamVariant varBlobStream = (IMemoryBlobStreamVariant)memBlobStream; // Assign to IMemoryBlobStreamVariant
                object anObject = pBytesArr;
                varBlobStream.ImportFromVariant(anObject);                                        // IMemoryBlobStreamVariant object is assigned the byte array
                thePropSet.SetProperty("ThumbNail", memBlobStream);                               // and saved to the property "ThumbNail"
            }
            catch (Exception ex)
            {
                System.Exception myExc = new System.Exception(
                    "Error: Failed to Re-Sampled the raster.Thumbnails will not be created." + ex.Message, ex);
                throw myExc;
            }
            return;
        }
예제 #4
0
        public IRasterRenderer CreateDefaultRasterRenderer(IRaster raster)
        {
            //Get raster dataset
            IRasterBandCollection rasterBandCollection = (IRasterBandCollection)raster;
            IRasterBand           rasterBand           = rasterBandCollection.Item(0);
            IRasterDataset        rasterDataset        = (IRasterDataset)rasterBand;

            //Check for TIFF format
            string format_Renamed = rasterDataset.Format;

            if (format_Renamed.Substring(0, 4) != "TIFF")
            {
                return(null);
            }

            //check for bit depth
            IRasterProps rasterProps = (IRasterProps)rasterBand;

            if (rasterProps.PixelType != rstPixelType.PT_U1)
            {
                return(null);
            }

            //create renderer for 1 bit raster
            //Create a unique value renderer and associate it with raster
            IRasterUniqueValueRenderer rasterUniqueValueRenderer = new RasterUniqueValueRendererClass();
            IRasterRenderer            rasterRenderer            = (IRasterRenderer)rasterUniqueValueRenderer;

            rasterRenderer.Raster = raster;
            rasterRenderer.Update();

            //Define the renderer
            rasterUniqueValueRenderer.HeadingCount = 1;
            rasterUniqueValueRenderer.set_Heading(0, "");
            rasterUniqueValueRenderer.set_ClassCount(0, 2);
            rasterUniqueValueRenderer.Field = "VALUE";
            rasterUniqueValueRenderer.AddValue(0, 0, 0);
            rasterUniqueValueRenderer.AddValue(0, 1, 1);
            rasterUniqueValueRenderer.set_Label(0, 0, "0");
            rasterUniqueValueRenderer.set_Label(0, 1, "1");

            // Define symbology for rendering value 0
            IColor color1 = (IColor)(CreateRGBColor(200, 50, 0)); //Brown color

            ISimpleFillSymbol simpleFillSymbol1 = new SimpleFillSymbolClass();

            simpleFillSymbol1.Color = color1;
            rasterUniqueValueRenderer.set_Symbol(0, 0, (ISymbol)simpleFillSymbol1);

            IColor color2 = new RgbColorClass();

            color2.NullColor = true;

            ISimpleFillSymbol simpleFillSymbol2 = new SimpleFillSymbolClass();

            simpleFillSymbol2.Color = color2;

            rasterUniqueValueRenderer.set_Symbol(0, 1, (ISymbol)simpleFillSymbol2);
            return(rasterRenderer);
        }
예제 #5
0
        /// <summary>
        /// Read the band and pixelType information.
        /// </summary>
        /// <param name="rasterFile">The raster file.</param>
        /// <param name="bandCount">The band count.</param>
        /// <param name="pixelType">Type of the pixel.</param>
        /// <returns><c>true</c> succeed, <c>false</c> failed.</returns>
        public static bool ReadBandAndPixelInfo(string rasterFile, out int bandCount, out string pixelType)
        {
            IRasterLayer pRasterLayer = null;

            try
            {
                pRasterLayer = new RasterLayerClass();
                pRasterLayer.CreateFromFilePath(rasterFile);
                bandCount = pRasterLayer.BandCount;
                IRaster      pRaster      = pRasterLayer.Raster;
                IRasterProps pRasterProps = pRaster as IRasterProps;
                pixelType = MapAPI.GetPixelType(pRasterProps);
                return(true);
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show("读取栅格元数据失败!请检查文件是否损坏:" + rasterFile, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                Log.WriteLog(typeof(MapAPI), ex);
                bandCount = -1;
                pixelType = string.Empty;
                return(false);
            }
            finally
            {
                if (pRasterLayer != null)
                {
                    Marshal.ReleaseComObject(pRasterLayer);
                }
            }
        }
예제 #6
0
        /// <summary>
        /// 获取该栅格图像的相关数据
        /// <remarks>
        /// <list type="bullet">
        /// <item>
        /// <term>
        /// 初始化_pDataset
        /// </term>
        /// <item>
        /// 获取栅格的Height和Width
        /// </item>
        /// </item>
        /// </list>
        /// </remarks>
        /// </summary>
        /// <returns></returns>
        private void Open()
        {
            //Open
            IWorkspaceFactory pRFactory       = new RasterWorkspaceFactoryClass();
            IRasterWorkspace2 rasterWorkspace = pRFactory.OpenFromFile(_rasterWorkSapce, 0) as IRasterWorkspace2;

            if (rasterWorkspace == null)
            {
                throw new ArgumentException("栅格文件无法打开");
            }
            _pDataset = rasterWorkspace.OpenRasterDataset(_rasterName);
            //set height and width

            IRasterProps pRasterProps = (IRasterProps)GetRaster();

            RasterInfo = new RasterInformation()
            {
                Width       = pRasterProps.Width,
                Height      = pRasterProps.Height,
                XCellSize   = pRasterProps.MeanCellSize().X,
                YCellSize   = pRasterProps.MeanCellSize().Y,
                OriginPoint = new PointClass()
                {
                    X = pRasterProps.Extent.XMin, Y = pRasterProps.Extent.YMin
                },
                SpatialReference = ((IGeoDataset)_pDataset).SpatialReference
            };
        }
예제 #7
0
        /// <summary>
        /// Ge the render color of the input layer rendering with classified color ramp.
        /// </summary>
        /// <param name="layer">Input raster layer</param>
        /// <param name="value">Pixel value</param>
        /// <returns></returns>
        private static IColor GetRenderColor_Classified(ILayer layer, double value)
        {
            IRasterLayer rasterLayer = (IRasterLayer)layer;

            // Check whether the value is NoData value
            IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster;

            System.Array noDataValue = (System.Array)rasterProps.NoDataValue;
            if ((rasterProps.NoDataValue != null) && (Convert.ToDouble(noDataValue.GetValue(0)) == value))
            {
                return(null);
            }

            RasterClassifyColorRampRenderer rasterRender = (RasterClassifyColorRampRenderer)rasterLayer.Renderer;
            IRasterRendererColorRamp        colorRamp    = (IRasterRendererColorRamp)rasterRender;

            for (int index = 0; index < rasterRender.ClassCount - 1; index++)
            {
                if (value <= rasterRender.Break[index])
                {
                    return(colorRamp.ColorRamp.Color[index]);
                }
            }

            return(colorRamp.ColorRamp.Color[rasterRender.ClassCount - 1]);
        }
예제 #8
0
        private void btnImport_Click(object sender, EventArgs e)
        {
            ESRI.ArcGIS.SystemUI.ICommand command = new ControlsAddDataCommandClass();
            command.OnCreate(pMapControlSpacial);
            command.OnClick();
            //在此添加空间参考的详细信息
            if (pMapControlSpacial.Map != null)
            {
                for (int i = 0; i < pMapControlSpacial.Map.LayerCount; i++)
                {
                    ILayer pLayer = pMapControlSpacial.Map.get_Layer(i);

                    if (pLayer is IFeatureLayer)
                    {
                        IFeatureLayer     pFeatureLayer     = pLayer as IFeatureLayer;
                        IGeoDataset       pGeoDataset       = pFeatureLayer as IGeoDataset;
                        ISpatialReference pSpatialReference = pGeoDataset.SpatialReference;

                        richTextReference.Text = ClsGDBDataCommon.GetReferenceString(pSpatialReference);
                        pSpaReference          = pSpatialReference;
                    }
                    if (pLayer is IRasterLayer)
                    {
                        IRasterLayer      pRasterLayer      = pLayer as IRasterLayer;
                        IRaster           pRaster           = pRasterLayer.Raster;
                        IRasterProps      pRasterProps      = pRaster as IRasterProps;
                        ISpatialReference pSpatialReference = pRasterProps.SpatialReference;

                        richTextReference.Text = ClsGDBDataCommon.GetReferenceString(pSpatialReference);
                        pSpaReference          = pSpatialReference;
                    }
                }
                pMapControlSpacial.Map.ClearLayers();
            }
        }
예제 #9
0
        public static float[,] Raster2Mat(IRasterLayer rasterlayer) //将栅格数据转为二元数组
        {
            IRaster      raster       = rasterlayer.Raster;
            IRaster2     raster2      = raster as IRaster2;
            IRasterProps pRasterProps = (IRasterProps)raster;
            IPnt         pntstart     = new DblPntClass();

            pntstart.SetCoords(0, 0);
            IPnt pntend = new DblPntClass();

            pntend.SetCoords(pRasterProps.Width, pRasterProps.Height);
            IPixelBlock3 unionPixelBlock = (IPixelBlock3)raster.CreatePixelBlock(pntend);

            System.Single[,] floatMat;
            try
            {
                raster.Read(pntstart, (IPixelBlock)unionPixelBlock);
                floatMat = (System.Single[, ])unionPixelBlock.get_PixelData(0);
            }
            catch (Exception e) {
                raster.Read(pntstart, (IPixelBlock)unionPixelBlock);
                int[,] intMat = (int[, ])unionPixelBlock.get_PixelData(0);
                floatMat      = new System.Single[pRasterProps.Width, pRasterProps.Height];
                Parallel.For(0, pRasterProps.Width, i =>
                {
                    for (int j = 0; j < pRasterProps.Height; j++)
                    {
                        floatMat[i, j] = Convert.ToSingle(intMat[i, j]);
                    }
                });
            }

            return(floatMat);
        }
예제 #10
0
        //裁剪
        private IRaster ShpLayerClipRaster(IFeatureLayer featureLayer, IRaster raster)
        {
            IFeatureLayer pFeaLyr;
            IRasterAnalysisEnvironment pEnv;
            IGeoDataset pTempDS;

            pFeaLyr = featureLayer;
            pTempDS = pFeaLyr.FeatureClass as IGeoDataset;
            IConversionOp pConOp = new RasterConversionOpClass();

            pEnv = pConOp as IRasterAnalysisEnvironment;

            IRasterProps pProp    = raster as IRasterProps;
            object       cellSize = 0.01;

            pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSize);
            IRasterConvertHelper rsh = new RasterConvertHelperClass();

            IRaster tempRaster = rsh.ToRaster1(pTempDS, "Grid", pEnv);


            IRaster       pOutRaster;
            IExtractionOp pExtrOp = new RasterExtractionOpClass();

            pOutRaster = (IRaster)pExtrOp.Raster((IGeoDataset)raster, (IGeoDataset)tempRaster);


            return(pOutRaster);
        }
예제 #11
0
        //行列号的三维坐标
        public bool GetGeoXYZ(IRaster pRaster, double[,] dbData, Pt2i ptLeftTop, int nH, int nW, ref Pt3d ptXYZ)
        {
            ptXYZ = null;
            if (pRaster == null)
            {
                return(false);
            }

            IRasterProps pProps   = pRaster as IRasterProps;
            IRaster2     pRaster2 = pRaster as IRaster2;

            //if( ( m_pGdalData == NULL )||( m_pGdalData->m_bIsGeoFile != true) )
            //{
            //    return false;
            //}
            //CmlGeoRaster* pGeoRaster = (CmlGeoRaster*)m_pGdalData;
            ptXYZ   = new Pt3d();
            ptXYZ.X = pRaster2.ToMapX(nW); //m_nXOffSet + nW)*pGeoRaster->m_dXResolution + pGeoRaster->m_PtOrigin.X ;
            ptXYZ.Y = pRaster2.ToMapY(nH); // + nH)*pGeoRaster->m_dYResolution + pGeoRaster->m_PtOrigin.Y ;

            //pProps.NoDataValue.GetType();
            double dbNoDataValue = getNoDataValue(pProps.NoDataValue);//Convert.ToDouble(((object[])pProps.NoDataValue)[0]);

            if ((true == GetDoubleVal(pRaster, dbData, ptLeftTop, nH, nW, ref ptXYZ.Z)) && (Math.Abs(ptXYZ.Z - dbNoDataValue) != 0))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #12
0
        public bool GetDoubleVal(IRaster pRaster, double[,] dbData, Pt2i ptLeftTop, int nH, int nW, ref double dVal)
        {
            IRasterProps pProps  = pRaster as IRasterProps;
            int          nHeight = pProps.Height;
            int          nWidth  = pProps.Width;

            dVal = double.NaN;
            if ((nH >= nHeight) || (nW >= nWidth))
            {
                return(false);
            }

            //相对坐标
            nW -= ptLeftTop.X;
            nH -= ptLeftTop.Y;

            int nSubWidth  = dbData.GetLength(0);
            int nSubHeight = dbData.GetLength(1);

            if (nW < 0 || nW >= nSubWidth || nH < 0 || nH >= nSubHeight)
            {
                return(false);
            }

            dVal = dbData[nW, nH];
            //IRasterBandCollection pBandCollection=pRaster as IRasterBandCollection;
            //IRasterBand pBand=pBandCollection.Item(0);
            //IRaster2 pRaster2 = pRaster as IRaster2;
            //dVal = Convert.ToDouble(pRaster2.GetPixelValue(0, nW, nH));


            return(true);
        }
예제 #13
0
        public bool CreateRaster(IRasterDataset pRDs, IRasterWorkspaceEx pWorkSpace)
        {
            IRasterProps      pRasterProps      = (IRasterProps)pRDs.CreateDefaultRaster();
            IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();

            pRasterStorageDef.CompressionType     = esriRasterCompressionType.esriRasterCompressionJPEG2000;
            pRasterStorageDef.CompressionQuality  = 50;
            pRasterStorageDef.PyramidLevel        = 2;
            pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
            pRasterStorageDef.TileHeight          = 128;
            pRasterStorageDef.TileWidth           = 128;
            IRasterDef pRasterDef = new RasterDefClass();

            pRasterDef.Description      = "RasterDataset";
            pRasterDef.SpatialReference = pRasterProps.SpatialReference;
            IGeometryDef     pGeoDef     = new GeometryDefClass();
            IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;

            pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            pGeoDefEdit.AvgNumPoints_2 = 4;
            pGeoDefEdit.GridCount_2    = 1;
            pGeoDefEdit.set_GridSize(0, 1000);
            pGeoDefEdit.SpatialReference_2 = pRasterProps.SpatialReference;
            IRasterDataset pRasterDataset = pWorkSpace.CreateRasterDataset("zzy", 3, rstPixelType.PT_UCHAR, pRasterStorageDef, "", pRasterDef, pGeoDef);

            pRasterDataset = pRDs;
            return(true);
        }
예제 #14
0
        //这个版本虽然XY互换了,但会改变影像的分辨率
        public bool NorthEastToEastNorth3(IRasterLayer pRasterLayer) //坐标系x,y变换
        {
            if (pRasterLayer == null)
            {
                return(false);
            }

            IGeoReference pGeoReference = pRasterLayer as IGeoReference;
            IPoint        pt            = new PointClass();

            pt.X = 0;
            pt.Y = 0;
            pGeoReference.Rotate(pt, -90);  //顺时针旋转90

            //水平旋转
            IRaster2     pRaster2  = pRasterLayer.Raster as IRaster2;
            IRasterProps pProps    = pRaster2 as IRasterProps;
            int          nWidth    = pProps.Width;
            int          nHeight   = pProps.Height;
            double       dbCenterY = (pProps.Extent.UpperLeft.Y + pProps.Extent.LowerRight.Y) / 2;
            double       dbDeltaX  = 0;
            double       dbDeltaY  = -dbCenterY * 2;

            pGeoReference.Flip();
            pGeoReference.Shift(dbDeltaX, dbDeltaY);

            //IRasterEdit pRasterEdit = pRaster2 as IRasterEdit;
            //System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterEdit);

            return(true);
        }
예제 #15
0
        /// <summary>
        /// Ge the render color of the input layer rendering with discrete color ramp.
        /// </summary>
        /// <param name="layer">Input raster layer</param>
        /// <param name="value">Pixel value</param>
        /// <returns></returns>
        private static IColor GetRenderColor_UniqueValues(ILayer layer, double value)
        {
            IRasterLayer rasterLayer = (IRasterLayer)layer;

            // Check whether the value is NoData value
            IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster;

            System.Array noDataValue = (System.Array)rasterProps.NoDataValue;
            if ((rasterProps.NoDataValue != null) && (Convert.ToDouble(noDataValue.GetValue(0)) == value))
            {
                return(null);
            }

            IRasterRendererUniqueValues uniqueValues = (IRasterRendererUniqueValues)rasterLayer.Renderer;
            IRasterRendererColorRamp    colorRamp    = (IRasterRendererColorRamp)rasterLayer.Renderer;

            for (int i = 0; i < uniqueValues.UniqueValues.Count; i++)
            {
                if (value == Convert.ToDouble(uniqueValues.UniqueValues.UniqueValue[i]))
                {
                    return(colorRamp.ColorRamp.Color[i]);
                }
            }

            return(null);
        }
예제 #16
0
        public bool CopyRaster(IRasterWorkspace2 pRW, string pFileName, IRasterWorkspaceEx pWorkSpace, string pDestName)
        {
            try
            {
                IRasterDataset pRds = pRW.OpenRasterDataset(pFileName);


                IRasterProps      pRasterProps      = (IRasterProps)pRds.CreateDefaultRaster();
                IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();

                IRasterDef pRasterDef = new RasterDefClass();
                pRasterDef.SpatialReference = pRasterProps.SpatialReference;
                IGeometryDef     pGeoDef     = new GeometryDefClass();
                IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;
                pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
                pGeoDefEdit.AvgNumPoints_2 = 4;
                pGeoDefEdit.GridCount_2    = 1;
                pGeoDefEdit.set_GridSize(0, 1000);
                pGeoDefEdit.SpatialReference_2 = pRasterProps.SpatialReference;
                IRasterDataset pRasterDataset = pWorkSpace.SaveAsRasterDataset(pDestName, pRds.CreateDefaultRaster(), pRasterStorageDef, "", pRasterDef, pGeoDef);

                return(true);
            }
            catch (System.Exception ex)
            {
                return(false);
            }
        }
예제 #17
0
        private void SetMeanCellSize()
        {
            if (chkSocCellSize.Checked)
            {
                IRasterBandCollection rasterBands = m_pRaster.RasterDataset as IRasterBandCollection;
                if (rasterBands.Count < 1)
                {
                    return;
                }
                IRasterProps props = rasterBands.Item(0) as IRasterProps;

                //更改分辨率首先要修改图层范围
                if (SetLayerExtent(props.MeanCellSize().X, props.MeanCellSize().Y))
                {
                    txtCellSizeX.Text = props.MeanCellSize().X.ToString();
                    txtCellSizeY.Text = props.MeanCellSize().Y.ToString();
                }
            }
            else
            {
                if (SetLayerExtent(m_pRasterProps.MeanCellSize().X, m_pRasterProps.MeanCellSize().Y))
                {
                    txtCellSizeX.Text = m_pRasterProps.MeanCellSize().X.ToString();
                    txtCellSizeY.Text = m_pRasterProps.MeanCellSize().Y.ToString();
                }
            }
        }
예제 #18
0
        /// <summary>
        /// Validate the input value.
        /// </summary>
        /// <param name="value">The input value.</param>
        /// <param name="validValue">If validation successes, return the validated value. If not, return null.</param>
        /// <returns>A value indicating whether the validationg is successful.</returns>
        private bool ValueValidate(string value, out object validValue)
        {
            IRasterLayer rasterLayer = (IRasterLayer)Editor.ActiveLayer;
            IRasterProps rasterProp  = (IRasterProps)rasterLayer.Raster;

            return(Raster.CSharpValue2PixelValue(value, rasterProp.PixelType, out validValue));
        }
예제 #19
0
파일: GoToForm.cs 프로젝트: sishui198/ares
        /// <summary>
        /// Check the
        /// </summary>
        /// <returns></returns>
        private bool CheckRowColValue()
        {
            ILayer layer = ArcMapApp.GetRasterLayer();

            if (layer == null)
            {
                return(false);
            }

            int row = 0;
            int col = 0;

            if (!int.TryParse(rowIndexTextBox.Text, out row) ||
                !int.TryParse(colIndexTextBox.Text, out col))
            {
                return(false);
            }

            IRasterLayer rasterLayer = (IRasterLayer)layer;
            IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster;

            if (row < 1 || row > rasterProps.Height || col < 1 || col > rasterProps.Width)
            {
                return(false);
            }

            return(true);
        }
예제 #20
0
        //获取某个位置相对于栅格位置的坐标
        public RasterPositionValue Coordinate(IPoint point)
        {
            IRasterProps rasterProps = (IRasterProps)GetRaster();

            if (!Contains(rasterProps.Extent.Envelope, point))
            {
                return(null);
            }
            int    xIndex           = (int)((point.X - rasterProps.Extent.XMin) / rasterProps.MeanCellSize().X);
            int    yIndex           = (int)((rasterProps.Extent.YMax - point.Y) / rasterProps.MeanCellSize().Y);
            object readValue        = Read(xIndex, yIndex);
            RasterPositionValue res = new RasterPositionValue()
            {
                XIndex = xIndex, YIndex = yIndex
            };

            if (readValue != null)
            {
                res.HasValue    = true;
                res.RasterValue = Convert.ToSingle(readValue);
            }
            else
            {
                res.HasValue    = false;
                res.RasterValue = -1;
            }
            return(res);
        }
예제 #21
0
        /// <summary>
        /// 获取像元大小最小(分辨率最高)的栅格
        /// </summary>
        /// <param name="inRasters">输入栅格集合</param>
        /// <returns></returns>
        public static IRaster GetMinCellSizeRaster(IList <IRaster> inRasters)
        {
            if (inRasters.Count == 0)
            {
                return(null);
            }
            IRasterProps rasterProps = (IRasterProps)inRasters[0];

            rasterProps.SpatialReference = SpatialReferenceClass.GetRasterProjectedReference(inRasters[0]); //转换为投影坐标系
            double minSize  = (rasterProps.MeanCellSize().X + rasterProps.MeanCellSize().Y) / 2.0;          //栅格的平均像元大小
            int    minIndex = 0;

            for (int i = 1; i < inRasters.Count; i++)
            {
                rasterProps = (IRasterProps)inRasters[i];
                rasterProps.SpatialReference = SpatialReferenceClass.GetRasterProjectedReference(inRasters[i]);
                double cellSize = (rasterProps.MeanCellSize().X + rasterProps.MeanCellSize().Y) / 2.0;
                if (cellSize < minSize)
                {
                    minIndex = i;
                }
            }

            return(inRasters[minIndex]);
        }
예제 #22
0
        protected override void OnActivate()
        {
            try
            {
                UID dockWinID = new UIDClass();
                dockWinID.Value = ThisAddIn.IDs.EditForm;
                IDockableWindow dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID);
                if (!dockWindow.IsVisible())
                {
                    dockWindow.Show(true);
                }

                activeLayer = Editor.ActiveLayer;
                IRasterLayer rasterLayer = (IRasterLayer)activeLayer;
                IRasterProps rasterProp  = (IRasterProps)rasterLayer.Raster;
                maxIndex = new Position(rasterProp.Width - 1, rasterProp.Height - 1);

                EditForm editForm = AddIn.FromID <EditForm.AddinImpl>(ThisAddIn.IDs.EditForm).UI;
                editForm.SetLayer(activeLayer.Name);
                System.Array noDataValue = (System.Array)rasterProp.NoDataValue;
                editForm.RasterGridView.NoDataValue = Convert.ToDouble(noDataValue.GetValue(0));
                editForm.SetNoDataValue(editForm.RasterGridView.NoDataValue);
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Unfortunately, the application meets an error.\n\nSource: {0}\nSite: {1}\nMessage: {2}", ex.Source, ex.TargetSite, ex.Message), "Error");
            }

            base.OnActivate();
        }
예제 #23
0
        /// <summary>
        /// Occurs when this command is clicked
        /// </summary>
        public override void OnClick()
        {
            // TODO: Add CmdRasterRotate.OnClick implementation
            IMapControl2 pMapCtr = (((IToolbarControl)m_hookHelper.Hook).Buddy) as IMapControl2;

            if (pMapCtr != null)
            {
                //IPoint mapPoint = pMapCtr.ToMapPoint(X, Y);
                m_frmRasterRotate = new FrmRasterRotate();
                IRaster      pRaster      = pRasterLayer.Raster;
                IRasterProps pRasterProps = pRaster as IRasterProps;
                IEnvelope    pEnvelope    = pRasterProps.Extent;
                double       X            = (pEnvelope.XMax + pEnvelope.XMin) / 2;
                double       Y            = (pEnvelope.YMax + pEnvelope.YMin) / 2;
                m_frmRasterRotate.X = X;
                m_frmRasterRotate.Y = Y;
                if (m_frmRasterRotate.ShowDialog() == DialogResult.OK)
                {
                    if (m_frmRasterRotate.isture == true)
                    {
                        IGeoReference pGR    = pRasterLayer as IGeoReference;
                        IPoint        pPoint = new PointClass();
                        pPoint.X = m_frmRasterRotate.X;
                        pPoint.Y = m_frmRasterRotate.Y;
                        pGR.Rotate(pPoint, m_frmRasterRotate.angle);
                        pMapCtr.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null);
                    }
                }
            }
        }
예제 #24
0
        public void Oput(IRasterLayer rasterLayer)
        {
            IRaster            pRaster      = rasterLayer.Raster;
            IRasterProps       pRasterProps = (IRasterProps)pRaster;
            IRasterLayerExport rLayerExport = new RasterLayerExport();

            rLayerExport.RasterLayer      = rasterLayer;
            rLayerExport.Extent           = pRasterProps.Extent;           //设置提取栅格数据的范围即为Raster数据的范围
            rLayerExport.SpatialReference = pRasterProps.SpatialReference; // 设置当前栅格数据的投影信息
            IWorkspaceFactory pWF = new RasterWorkspaceFactory();

            string filePath = System.IO.Path.GetDirectoryName(ComboBoxInLayer.Text);
            //string fbs = System.IO.Path.GetFileName(ComboBoxInLayer.Text);
            string fileName = "";

            //Export file
            IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();

            //IWorkspace workspace = workspaceFactory.OpenFromFile(ws, 0);
            //string filePath = "", fileName = "", outputFormat = "";
            // filePath = saveDG.FileName;
            fileName = "wew.tif";


            //filePath = "";
            // IWorkspace pRasterWorkspace = pWF.OpenFromFile("C:\\", 0);

            // IRasterDataset outGeoDataset = rLayerExport.Export(pRasterWorkspace, fileName, "TIFF");
        }
예제 #25
0
        protected override void OnActivate()
        {
            base.OnActivate();

            try
            {
                if (Painter.ActiveLayer == null)
                {
                    return;
                }

                UID dockWinID = new UIDClass();
                dockWinID.Value = ThisAddIn.IDs.ValueSymbolForm;
                IDockableWindow dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID);
                if (!dockWindow.IsVisible())
                {
                    dockWindow.Show(true);
                }

                IRasterLayer rasterLayer = (IRasterLayer)Painter.ActiveLayer;
                IRasterProps rasterProp  = (IRasterProps)rasterLayer.Raster;
                layerExetent = new Envelope(0, rasterProp.Height - 1, 0, rasterProp.Width - 1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Unfortunately, the application meets an error.\n\nSource: {0}\nSite: {1}\nMessage: {2}", ex.Source, ex.TargetSite, ex.Message), "Error");
            }
        }
예제 #26
0
        public static void GetCurrentSurfaceMax(ILayer ilayer_0, out double double_0, out double double_1)
        {
            ISurface surfaceFromLayer = SurfaceInfo.GetSurfaceFromLayer(ilayer_0);

            if (surfaceFromLayer != null)
            {
                if (surfaceFromLayer is ITinAdvanced)
                {
                    ITinAdvanced tinAdvanced = surfaceFromLayer as ITinAdvanced;
                    IEnvelope    extent      = tinAdvanced.Extent;
                    double_0 = ((extent.Width > extent.Height) ? extent.Width : extent.Height);
                    double_1 = extent.ZMax;
                }
                else
                {
                    IRasterSurface rasterSurface = surfaceFromLayer as IRasterSurface;
                    IRasterProps   rasterProps   = rasterSurface.Raster as IRasterProps;
                    IEnvelope      extent        = rasterProps.Extent;
                    double_0 = ((extent.Width > extent.Height) ? extent.Width : extent.Height);
                    IRasterBandCollection rasterBandCollection = rasterProps as IRasterBandCollection;
                    IRasterBand           rasterBand           = rasterBandCollection.Item(0);
                    IRasterStatistics     statistics           = rasterBand.Statistics;
                    double_1 = statistics.Maximum;
                }
            }
            else
            {
                double_0 = 0.0;
                double_1 = 0.0;
            }
        }
예제 #27
0
        /// <summary>
        /// 配准 后面两个参数是保存的文件和类型
        /// </summary>
        /// <param name="pFromPoint"></param>
        /// <param name="pTPoint"></param>
        /// <param name="pRasterLayer"></param>
        /// <param name="pSaveFile"></param>
        /// <param name="pType"></param>
        public bool GeoReferencing(IPointCollection pFromPoint, IPointCollection pTPoint, IRasterLayer pRasterLayer, ISpatialReference pSr, string pSaveFile, string pType)
        {
            IGeoReference pGeoreference;

            pGeoreference = (IGeoReference)pRasterLayer;
            IRaster pRaster = pRasterLayer.Raster;

            //判断是否可以配准
            if (pGeoreference.CanGeoRef == true)
            {
                IRasterGeometryProc pRasterGProc = new RasterGeometryProcClass();
                pRasterGProc.Warp(pFromPoint, pTPoint, esriGeoTransTypeEnum.esriGeoTransPolyOrder2, pRaster);
                pRasterGProc.Register(pRaster);
                IRasterProps pRasterPro = pRaster as IRasterProps;
                pRasterPro.SpatialReference = pSr;//定义投影
                if (File.Exists(pSaveFile))
                {
                    File.Delete(pSaveFile);
                }
                pRasterGProc.Rectify(pSaveFile, pType, pRaster);//路径和格式(String)
                return(true);
            }

            else
            {
                return(false);
            }
        }
예제 #28
0
        public void Init()
        {
            try
            {
                //根据选择的矢量文件的路径打开工作空间
                string   fileN    = panImage;
                FileInfo fileInfo = new FileInfo(fileN);
                string   filePath = fileInfo.DirectoryName;
                string   fileName = fileInfo.Name;

                IWorkspaceFactory wsf        = new RasterWorkspaceFactory();
                IWorkspace        wp         = wsf.OpenFromFile(filePath, 0);
                IRasterWorkspace  rw         = (IRasterWorkspace)wp;
                IRasterDataset    panDataset = rw.OpenRasterDataset(fileName);

                IRaster2       multiRaster2 = m_raster as IRaster2;
                IRasterDataset multiDataset = multiRaster2.RasterDataset;
                //默认波段顺序,RGB和近红外
                //创建全色和多光谱栅格数据集的full栅格对象
                IRaster panRaster   = ((IRasterDataset2)panDataset).CreateFullRaster();
                IRaster multiRaster = ((IRasterDataset2)multiDataset).CreateFullRaster();
                //设置红外波段
                IRasterBandCollection rasterbandCol = (IRasterBandCollection)multiRaster;
                IRasterBandCollection infredRaster  = new RasterClass();
                infredRaster.AppendBand(rasterbandCol.Item(3));

                //设置全色波段的属性
                IRasterProps panSharpenRasterProps = (IRasterProps)multiRaster;
                IRasterProps panRasterProps        = (IRasterProps)panRaster;
                panSharpenRasterProps.Width  = panRasterProps.Width;
                panSharpenRasterProps.Height = panRasterProps.Height;
                panSharpenRasterProps.Extent = panRasterProps.Extent;
                multiRaster.ResampleMethod   = rstResamplingTypes.RSP_BilinearInterpolationPlus;

                //创建全色锐化过滤器和设置其参数
                IPansharpeningFilter pansharpenFilter = new PansharpeningFilterClass();
                pansharpenFilter.InfraredImage     = (IRaster)infredRaster;
                pansharpenFilter.PanImage          = (IRaster)panRaster;
                pansharpenFilter.PansharpeningType = esriPansharpeningType.esriPansharpeningESRI;
                pansharpenFilter.PutWeights(red, green, blue, infra);

                //将全色锐化过滤器设置于多光谱栅格对象上
                IPixelOperation pixeOperation = (IPixelOperation)multiRaster;
                pixeOperation.PixelFilter = (IPixelFilter)pansharpenFilter;

                //保存结果数据集,并加载显示
                //加载显示裁剪结果图像

                /*IRasterLayer panSharpenLayer = new RasterLayerClass();
                 * panSharpenLayer.CreateFromRaster(multiRaster);
                 * panSharpenLayer.Name = "panSharpen_Result";
                 * panSharpenLayer.SpatialReference = ((IGeoDataset)multiRaster).SpatialReference;
                 * return panSharpenLayer;*/
                m_raster = multiRaster;
            }
            catch (System.Exception ex)//异常处理,输出错误信息
            {
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
예제 #29
0
        /// <summary>
        /// 栅格分块
        /// </summary>
        /// <param name="pRasterDataset"></param>
        /// <param name="pOutputWorkspace"></param>
        /// <param name="pWidth"></param>
        /// <param name="pHeight"></param>
        public static void CreateTilesFromRasterDataset(IRasterDataset pRasterDataset, IWorkspace pOutputWorkspace, int pWidth, int pHeight)
        {
            IRasterProps pRasterProps = (IRasterProps)pRasterDataset.CreateDefaultRaster();// cast IRaster to IRasterProps
            double       xTileSize    = pRasterProps.MeanCellSize().X *pWidth;
            double       yTileSize    = pRasterProps.MeanCellSize().Y *pHeight;


            int xTileCount = (int)Math.Ceiling((double)pRasterProps.Width / pWidth);
            int yTileCount = (int)Math.Ceiling((double)pRasterProps.Height / pHeight);

            IEnvelope pExtent     = pRasterProps.Extent;
            IEnvelope pTileExtent = new EnvelopeClass();
            ISaveAs   pSaveAs     = null;

            for (int i = 0; i < xTileCount; i++)
            {
                for (int j = 0; j < yTileCount; j++)
                {
                    pRasterProps = (IRasterProps)pRasterDataset.CreateDefaultRaster();

                    pTileExtent.XMin = pExtent.XMin + i * xTileSize;
                    pTileExtent.XMax = pTileExtent.XMin + xTileSize;
                    pTileExtent.YMin = pExtent.YMin + j * yTileSize;
                    pTileExtent.YMax = pTileExtent.YMin + yTileSize;


                    pRasterProps.Height = pHeight;
                    pRasterProps.Width  = pWidth;

                    pRasterProps.Extent = pTileExtent;
                    pSaveAs             = (ISaveAs)pRasterProps;
                    pSaveAs.SaveAs("tile_" + i + "_" + j + ".tif", pOutputWorkspace, "TIFF");
                }
            }
        }
예제 #30
0
        /// <summary>
        /// 该函数获得栅格影像分辨率大小
        /// </summary>
        /// <param name="sLayerName"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        private double GetRasterCellSize(string sLayerName)
        {
            double       dCellSize   = 0;
            int          i           = 0;
            ILayer       pLyr        = default(ILayer);
            IRasterLayer pRlyr       = default(IRasterLayer);
            IRaster      pRaster     = default(IRaster);
            IRasterProps pRasterProp = default(IRasterProps);
            double       cellX;
            double       cellY;

            for (i = 0; i <= pCurMap.LayerCount - 1; i++)
            {
                pLyr = pCurMap.get_Layer(i);
                if ((pLyr != null))
                {
                    if (pLyr is IRasterLayer)
                    {
                        if (pLyr.Name == sLayerName)
                        {
                            pRlyr       = (IRasterLayer)pLyr;
                            pRaster     = pRlyr.Raster;
                            pRasterProp = (IRasterProps)pRaster;
                            cellX       = pRasterProp.MeanCellSize().X;
                            cellY       = pRasterProp.MeanCellSize().Y;

                            dCellSize = (cellX + cellY) / 2.0;
                        }
                    }
                }
            }
            return(dCellSize);
        }
 public void Bind(object pArgument)
 {
     if (pArgument is regionGroupFunctionArguments)
     {
         regionGroupFunctionArguments arg = (regionGroupFunctionArguments)pArgument;
         inrs = arg.InRaster;
         outrs = arg.OutRaster;
         //Console.WriteLine("Number of Bands in outrs = " + ((IRasterBandCollection)outrs).Count.ToString());
         rsProp = (IRasterProps)outrs;
         width = rsProp.Width;
         height = rsProp.Height;
         myFunctionHelper.Bind(outrs);
         myFunctionHelperInput.Bind(inrs);
         myRasterInfo = myFunctionHelper.RasterInfo;
         myPixeltype = myRasterInfo.PixelType;
         myValidFlag = true;
     }
     else
     {
         throw new System.Exception("Incorrect arguments object. Expected: randomForestArguments");
     }
 }
예제 #32
0
 public IPolygon GetBoundaryAsPolygon(IRasterProps props)
 {
     double left = props.Extent.XMin;
     double top = props.Extent.YMax;
     IPnt cellSize = props.MeanCellSize();
     PolygonClass result = new PolygonClass();
     object missing = Type.Missing;
     for (int x = 0; x <= m_Width; x += 1) {
         for (int y = 0; y <= m_Height; y += 1) {
             if ((!CellVisited(x, y)) && IsFilled(x, y) && (!IsFilled(x - 1, y))) {
                 List<IntPoint> bmRing = GetCurve(x, y);
                 RingClass ring = new RingClass();
                 foreach (IntPoint bmPt in bmRing) {
                     PointClass point = new PointClass();
                     point.PutCoords(left + bmPt.X * cellSize.X,
                                     top - bmPt.Y * cellSize.Y);
                     ring.AddPoint(point, ref missing, ref missing);
                 }
                 result.AddGeometry(ring, ref missing, ref missing);
             }
         }
     }
     return result;
 }
        private void createOutRaster()
        {
            OutRasterName = rsUtil.getSafeOutputName(wks, OutRasterName);
            outraster = rsUtil.returnRaster(rsUtil.createNewRaster(inRs, wks, OutRasterName,rasterUtil.rasterType.IMAGINE));
            rsProps2 = (IRasterProps)OutRaster;
            System.Array noDataValues2 = (System.Array)rsProps2.NoDataValue;
            noDataVl2 = System.Convert.ToInt32(noDataValues2.GetValue(0));
            if (noDataVl2 >= 0)
            {

                counter = Int32.MinValue + 2;
            }
            else
            {
                counter = Int32.MinValue + 2;
            }
            #region create VAT Table
            IFields flds = new FieldsClass();
            IField fld = new FieldClass();
            IFieldsEdit fldsE = (IFieldsEdit)flds;
            IFieldEdit fldE = (IFieldEdit)fld;
            fldE.Name_2 = "Value";
            fldE.Type_2 = esriFieldType.esriFieldTypeInteger;
            fldE.Precision_2 = 50;
            fldsE.AddField(fld);
            IField fld2 = new FieldClass();
            IFieldEdit fld2E = (IFieldEdit)fld2;
            fld2E.Name_2 = "Count";
            fld2E.Type_2 = esriFieldType.esriFieldTypeInteger;
            fldE.Precision_2 = 50;
            fldsE.AddField(fld2);
            IField fld3 = new FieldClass();
            IFieldEdit fld3E = (IFieldEdit)fld3;
            fld3E.Name_2 = "Perimeter";
            fld3E.Type_2 = esriFieldType.esriFieldTypeInteger;
            fld3E.Precision_2 = 50;
            fldsE.AddField(fld3);
            vatTable = geoUtil.createTable(vWks, OutRasterName + "_vat", flds);
            valueIndex = vatTable.FindField("Value");
            countIndex = vatTable.FindField("Count");
            permIndex = vatTable.FindField("Perimeter");
            #endregion
        }