/// <summary> /// 栅格保存为数据集(并创建金字塔) /// </summary> /// <param name="raster">栅格</param> /// <param name="outFile">输出文件</param> public static void SaveRasterAsDataset(IRaster raster, string outFile) { //文件已存在,则返回 if (File.Exists(outFile) || raster == null) { return; } IRasterBandCollection pRasBandCol = raster as IRasterBandCollection; if (pRasBandCol == null) { return; } string fileName = Path.GetFileName(outFile); IWorkspace workspace = RasterDataInfoClass.GetRasterWorkspace(outFile); //保存波段集合为数据集 IDataset dataset = pRasBandCol.SaveAs(fileName, workspace, "IMAGINE Image"); ITemporaryDataset pRsGeo = dataset as ITemporaryDataset; if (pRsGeo != null && pRsGeo.IsTemporary()) { pRsGeo.MakePermanent(); } RasterDataInfoClass.CreatePyramid(outFile); //创建金字塔 }
private void ConvertRasterToRsDataset(String sPath, ref IRaster pRaster, String sOutName) { try { IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); if (pWSF.IsWorkspace(sPath) == false) { return; } IWorkspace pRWS = pWSF.OpenFromFile(sPath, 0); if (System.IO.File.Exists(sPath + "\\" + sOutName + ".img") == true) { System.IO.File.Delete(sPath + "\\" + sOutName + ".img"); } IRasterBandCollection pRasBandCol = (IRasterBandCollection)pRaster; IDataset pDS = pRasBandCol.SaveAs(sOutName + ".img", pRWS, "IMAGINE Image"); ITemporaryDataset pRsGeo = (ITemporaryDataset)pDS; if (pRsGeo.IsTemporary()) { pRsGeo.MakePermanent(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void btnGO_Click(object sender, EventArgs e) { string strInFileName; string strOutFileName; int startX, endX; string strOutDir; try { if (bDataPath == true) { strInFileName = txtOutPath.Text; strOutDir = strInFileName.Substring(0, strInFileName.LastIndexOf("\\")); startX = strInFileName.LastIndexOf("\\"); endX = strInFileName.Length; strOutFileName = strInFileName.Substring(startX + 1, endX - startX - 1); } else { strOutDir = txtOutPath.Text; strOutFileName = "aspect"; } if (File.Exists(strOutDir + "\\" + strOutFileName + ".aux") == true) { MessageBox.Show("文件" + strOutFileName + "已经存在,请重新命名!"); return; } if (m_pRasterLyr != null) { double dCellSize = Convert.ToDouble(txtCellSize.Text); ISurfaceOp pRasterSurfaceOp = new RasterSurfaceOpClass(); IRaster pInRaster = m_pRasterLyr.Raster; IRaster pOutRaster = null; IRasterLayer pRasterLayer = new RasterLayerClass(); IGeoDataset pGeoDs = pRasterSurfaceOp.Aspect(pInRaster as IGeoDataset); pOutRaster = pGeoDs as IRaster; IRasterLayer pOutRasterLayer = new RasterLayerClass(); pOutRasterLayer.CreateFromRaster(pOutRaster); pOutRasterLayer.Name = strOutFileName; IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); IWorkspace pRWS = pWSF.OpenFromFile(strOutDir, 0); IRasterBandCollection pRasBandCol = (IRasterBandCollection)pGeoDs; pRasBandCol.SaveAs(strOutFileName, pRWS, "GRID");//"IMAGINE Image" pOutRasterLayer = UtilityFunction.SetStretchRenderer(pOutRasterLayer.Raster); pOutRasterLayer.Name = strOutFileName; pMap.AddLayer(pOutRasterLayer); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
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(); }
}//Open Feature Class private void IDWOperate(IFeatureClass inFC) { IFeatureClassDescriptor iFCDesc = new FeatureClassDescriptorClass(); //获取选中的字符串 string sFieldName = comboBox1.SelectedText; iFCDesc.Create(inFC, null, sFieldName); //创建RasterInterpolationOp对象 IInterpolationOp iIo = new RasterInterpolationOpClass(); //设置输出Raster网格大小,默认的Raster输出空间范围和输入数据相同 IRasterAnalysisEnvironment iRae = (IRasterAnalysisEnvironment)iIo; object oCellSize = (object)Convert.ToDouble(textBox2.Text); iRae.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref oCellSize); //搜索范围设置 IRasterRadius iRadius = new RasterRadiusClass(); //switch (comboBox2.SelectedIndex) //{ // case 0: object dis = (object)Convert.ToDouble(textBox3.Text); iRadius.SetVariable(Convert.ToInt32(textBox1.Text), ref dis); // break; // case 1: // object cou = (object)Convert.ToDouble(textBox3.Text); // iRadius.SetFixed(Convert.ToDouble(textBox1.Text), ref cou); // break; // default: // break; //} IGeoDataset iInputGeo = (IGeoDataset)iFCDesc; object barrier = Type.Missing; IGeoDataset iOutputGeo = iIo.IDW(iInputGeo, Convert.ToDouble(textBox2.Text), iRadius, ref barrier); IRaster iOutRaster = (IRaster)iOutputGeo; IRasterBandCollection iRasBnadC = (IRasterBandCollection)iOutRaster; IWorkspaceFactory iWSF = new RasterWorkspaceFactoryClass(); IWorkspace iWS = iWSF.OpenFromFile(textBox5.Text, 0); IDataset iDs = iRasBnadC.SaveAs("Raster_test", iWS, "GRID"); }
private void Btn_Slope_Click(object sender, EventArgs e) { IRasterLayer pFromRasterLayer = m_selectedLayer as IRasterLayer; if (pFromRasterLayer == null) { MessageBox.Show("非栅格图层"); return; } IRaster pFromRaster = pFromRasterLayer.Raster; IRasterBandCollection pFromRasterBandCollection = pFromRaster as IRasterBandCollection; IRasterBand pFromRasterBand = pFromRasterBandCollection.Item(0); IRasterDataset pFromRasterDataset = pFromRasterBand as IRasterDataset; IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass(); IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(@"DB", 0) as IRasterWorkspace; ISurfaceOp pSurfaceOp = new RasterSurfaceOpClass(); IRasterAnalysisEnvironment pRasterAnalysisEnvironment; pRasterAnalysisEnvironment = pSurfaceOp as IRasterAnalysisEnvironment; pRasterAnalysisEnvironment.OutWorkspace = pWorkspaceFactory as IWorkspace; object zFactor = new object(); IGeoDataset pGeoDataset, pRasterGetDataset; pRasterGetDataset = pFromRasterDataset as IGeoDataset; pGeoDataset = pSurfaceOp.Slope(pRasterGetDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopePercentrise, ref zFactor); IRasterBandCollection pOutRasterBandCollection = pGeoDataset as IRasterBandCollection; string strOutRasterName = pFromRasterLayer.Name.Split('.')[0] + "_slope.tif"; pOutRasterBandCollection.SaveAs(strOutRasterName, pRasterWorkspace as IWorkspace, "TIFF"); IRasterDataset pNewRasterDataset = pRasterWorkspace.OpenRasterDataset(strOutRasterName); IRasterLayer pNewRasterLayer = new RasterLayerClass(); pNewRasterLayer.CreateFromDataset(pNewRasterDataset); ILayer pNewLayer = pNewRasterLayer as ILayer; Ctrl_Map.AddLayer(pNewLayer); }
/// <summary> /// 执行地图代数运算 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks></remarks> private void Button_OK_Click(System.Object sender, System.EventArgs e) { IRasterLayer pRasLayer = default(IRasterLayer); IRaster pRaster = default(IRaster); IEnvelope layExtend = default(IEnvelope); double AnalysisExtentLeft = 0; double AnalysisExtentRight = 0; double AnalysisExtentTop = 0; double AnalysisExtentBottom = 0; string layerNameFir = null; try { if (LayerList.Count != 0) { if (textBox_Result.Text.ToString().Length != 0) { layerNameFir = LayerList[0].ToString(); layExtend = GetLayerExtend(layerNameFir); AnalysisExtentLeft = layExtend.XMin; AnalysisExtentRight = layExtend.XMax; AnalysisExtentTop = layExtend.YMax; AnalysisExtentBottom = layExtend.YMin; pMapAlgebraOp = new RasterMapAlgebraOp() as IMapAlgebraOp; //设置栅格计算分析环境 IRasterAnalysisEnvironment pRasAnaEnv = default(IRasterAnalysisEnvironment); pRasAnaEnv = (IRasterAnalysisEnvironment)pMapAlgebraOp; pRasAnaEnv.VerifyType = esriRasterVerifyEnum.esriRasterVerifyOn; object dddd; dddd = GetRasterCellSize(layerNameFir); pRasAnaEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dddd); //设置分析范围pAnaExtent IEnvelope pAnaExtent = default(IEnvelope); pAnaExtent = new Envelope() as IEnvelope; pAnaExtent.XMin = Convert.ToDouble(AnalysisExtentLeft); pAnaExtent.XMax = Convert.ToDouble(AnalysisExtentRight); pAnaExtent.YMax = Convert.ToDouble(AnalysisExtentTop); pAnaExtent.YMin = Convert.ToDouble(AnalysisExtentBottom); object dd1 = pAnaExtent; object dd2 = null; pRasAnaEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dd1, ref dd2); foreach (string LayerName in LayerList) { pRasLayer = (IRasterLayer)FindLayerByName(pCurMap, LayerName); //MsgBox(LayerName) pRaster = pRasLayer.Raster; RasterList.Add(pRaster); } //将容量设置为 ArrayList 中元素的实际数目 LayerList.TrimToSize(); RasterList.TrimToSize(); //绑定 int i = 0; if (LayerList.Count == RasterList.Count) { for (i = 0; i <= LayerList.Count - 1; i++) { pMapAlgebraOp.BindRaster((IGeoDataset)RasterList[i], LayerList[i].ToString()); } } //获取文本框中的运算表达式() string sCalExpression = null; sCalExpression = textBox_Calculate.Text; //执行地图代数运算 IRaster pOutRasterDS = default(IRaster); pOutRasterDS = (IRaster)pMapAlgebraOp.Execute(sCalExpression); //解除绑定 if (LayerList.Count == RasterList.Count) { for (i = 0; i <= LayerList.Count - 1; i++) { pMapAlgebraOp.UnbindRaster(LayerList[i].ToString()); } } //保存到工作空间 IWorkspaceFactory pWsFact = default(IWorkspaceFactory); IWorkspace pWS = default(IWorkspace); int hwnd = 0; pWsFact = new RasterWorkspaceFactory(); pWS = pWsFact.OpenFromFile(sOutRasPath, hwnd); IRasterBandCollection pRasterbandCollection = default(IRasterBandCollection); pRasterbandCollection = (IRasterBandCollection)pOutRasterDS; IDataset pDataset = default(IDataset); pDataset = pRasterbandCollection.SaveAs(sOutRasName, pWS, "IMAGINE Image"); //输出到mapcontrol中 IRasterDataset pOutResultDS = default(IRasterDataset); pOutResultDS = (IRasterDataset)pDataset; IRasterLayer pOutRasterLayer = default(IRasterLayer); pOutRasterLayer = new RasterLayer(); pOutRasterLayer.CreateFromDataset(pOutResultDS); //MapControlMain.AddLayer(pOutRasterLayer) pCurMap.AddLayer(pOutRasterLayer); this.Close(); } else { MessageBox.Show("保存计算结果为空,请输入结果文件名!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); //Interaction.MsgBox(ex.ToString); } }
private IRasterLayer SetViewShedRenderer(IRaster pInRaster, string sField, string sPath, double[,] dValue) { try { if (dValue == null) { return(null); } if (sField.Trim() == "") { return(null); } string path = ""; string fileName = ""; int iPath = sPath.LastIndexOf('\\'); path = sPath.Substring(0, iPath); fileName = sPath.Substring(iPath + 1, sPath.Length - iPath - 1); IRasterDescriptor pRD = new RasterDescriptorClass(); pRD.Create(pInRaster, null, sField); IReclassOp pReclassOp = new RasterReclassOpClass(); IGeoDataset pGeodataset = pInRaster as IGeoDataset; IRasterAnalysisEnvironment pEnv = pReclassOp as IRasterAnalysisEnvironment; IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); IWorkspace pWS = pWSF.OpenFromFile(path, 0); //pEnv.OutWorkspace = pWS; //object objSnap = null; //object objExtent = pGeodataset.Extent; //pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref objExtent, ref objSnap); //pEnv.OutSpatialReference = pGeodataset.SpatialReference; IRasterBandCollection pRsBandCol = pGeodataset as IRasterBandCollection; IRasterBand pRasterBand = pRsBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic = pRasterBand.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; INumberRemap pNumRemap = new NumberRemapClass(); for (int i = 0; i < (dValue.Length / 3); i++) { pNumRemap.MapRange(dValue[i, 0], dValue[i, 1], (Int32)dValue[i, 2]); } IRemap pRemap = pNumRemap as IRemap; IGeoDataset pGeoDs = new RasterDatasetClass(); pGeoDs = pReclassOp.ReclassByRemap(pGeodataset, pRemap, false); IRasterBandCollection pRasBandCol = (IRasterBandCollection)pGeoDs; pRasBandCol.SaveAs(fileName, pWS, "GRID");//"IMAGINE Image" IRaster pOutRaster = pGeoDs as IRaster; IRasterLayer pRLayer = new RasterLayerClass(); pRLayer.CreateFromRaster(pOutRaster); pRLayer.Name = fileName; return(pRLayer); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); return(null); } }