//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); }
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); }
/// <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; }
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); }
/// <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); } } }
/// <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 }; }
/// <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]); }
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(); } }
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); }
//裁剪 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); }
//行列号的三维坐标 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); } }
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); }
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); }
//这个版本虽然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); }
/// <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); }
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); } }
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(); } } }
/// <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)); }
/// <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); }
//获取某个位置相对于栅格位置的坐标 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); }
/// <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]); }
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(); }
/// <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); } } } }
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"); }
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"); } }
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; } }
/// <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); } }
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); } }
/// <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"); } } }
/// <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"); } }
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 }