public bool AddRasterDatesetToMD(IMosaicDataset pMosaicDataset, IRasterDataset pRasteDataset, IRasterType pRasterType) { try { IRasterDatasetCrawler pRasterDatasetCrawler = new RasterDatasetCrawlerClass(); pRasterDatasetCrawler.RasterDataset = pRasteDataset; IDataset pDataset = pRasteDataset as IDataset; ESRI.ArcGIS.esriSystem.IName pName = pDataset.FullName; pRasterDatasetCrawler.DatasetName = pName; IMosaicDatasetOperation pMosaicDatasetOperation = (IMosaicDatasetOperation)pMosaicDataset; IAddRastersParameters AddRastersArgs = new AddRastersParametersClass(); AddRastersArgs.Crawler = pRasterDatasetCrawler as IDataSourceCrawler; AddRastersArgs.RasterType = pRasterType; pMosaicDatasetOperation.AddRasters(AddRastersArgs, null); return true; } catch (System.Exception ex) { return false; } }
public static bool CreateSignaturefile(IRasterDataset pRasterDataset, int classCount, string gsgPath) { IGeoDataset pGeo = pRasterDataset as IGeoDataset; IMultivariateOp pMultivarateOp = new RasterMultivariateOpClass(); // string gsgPath = "e:\\222.gsg"; pMultivarateOp.IsoCluster(pGeo, gsgPath, classCount); return true; }
private void btnSave_Click(object sender, EventArgs e) { string rstNm = cmbRaster.Text; string wksNm = txtWorkspace.Text; string outNm = txtOutName.Text; string outType = cmbType.Text; int blSize = System.Convert.ToInt32(nudBS.Value); if (outWks == null || wksNm == "" || wksNm == null || rstNm == "" || rstNm == null || outNm == "" || outNm == null) { MessageBox.Show("Raster, Workspace, or Output Name are not specified!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } object noDataVl = null; if (rsUtil.isNumeric(txtNoDataVl.Text) && txtNoDataVl.Visible) { noDataVl = System.Convert.ToDouble(txtNoDataVl.Text); } rasterUtil.rasterType rType = (rasterUtil.rasterType)Enum.Parse(typeof(rasterUtil.rasterType), outType); this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); rp.addMessage("Saving raster"); rp.addMessage("This may take a while..."); rp.stepPGBar(20); rp.Show(); rp.Refresh(); DateTime dt1 = DateTime.Now; try { IRaster rs = rstDic[rstNm]; IRasterDataset rsDset = rsUtil.saveRasterToDatasetM(rs, outNm, outWks, rType, noDataVl, blSize, blSize); DateTime dt2 = DateTime.Now; IRasterLayer rsLyr = new RasterLayerClass(); rsLyr.CreateFromDataset(rsDset); rsLyr.Name = outNm; rsLyr.Visible = false; mp.AddLayer((ILayer)rsLyr); TimeSpan ts = dt2.Subtract(dt1); string prcTime = "Time to complete process:\n" + ts.Days.ToString() + " Days " + ts.Hours.ToString() + " Hours " + ts.Minutes.ToString() + " Minutes " + ts.Seconds.ToString() + " Seconds "; rp.addMessage(prcTime); this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { rp.stepPGBar(100); rp.enableClose(); this.Close(); } }
private void OpenRaster(string rasterFileName) { //文件名处理 string ws = System.IO.Path.GetDirectoryName(rasterFileName); string fbs = System.IO.Path.GetFileName(rasterFileName); //创建工作空间 IWorkspaceFactory pWork = new RasterWorkspaceFactoryClass(); //打开工作空间路径,工作空间的参数是目录,不是具体的文件名 IRasterWorkspace pRasterWS = (IRasterWorkspace)pWork.OpenFromFile(ws, 0); //打开工作空间下的文件, IRasterDataset pRasterDataset = pRasterWS.OpenRasterDataset(fbs); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); //添加到图层控制中 IRaster pRaster = pRasterLayer.Raster; IGeoDataset pGeodataset = pRaster as IGeoDataset; IRasterBandCollection pRsBandCol = pGeodataset as IRasterBandCollection; int bandCount; bandCount = pRsBandCol.Count; if (bandCount == 1) { IRasterBand pRasterBand1 = pRsBandCol.Item(0); pRasterBand1.ComputeStatsAndHist(); } if (bandCount > 1) { IRasterBand pRasterBand1 = pRsBandCol.Item(0); pRasterBand1.ComputeStatsAndHist(); IRasterBand pRasterBand2 = pRsBandCol.Item(1); pRasterBand2.ComputeStatsAndHist(); IRasterBand pRasterBand3 = pRsBandCol.Item(2); pRasterBand3.ComputeStatsAndHist(); } IRasterDataset pRasterDataset2 = pRasterWS.OpenRasterDataset(fbs); IRasterLayer pRasterLayer2 = new RasterLayerClass(); pRasterLayer2.CreateFromDataset(pRasterDataset2); //添加到图层控制中 pMap.AddLayer(pRasterLayer2 as ILayer); }
/// <summary> /// 创建影像金字塔 /// </summary> public static void CreateRasterPyramid(this IRasterDataset rasterDataset) { if (rasterDataset is IRasterPyramid3 rasterPyrmid) { if (!rasterPyrmid.Present) { rasterPyrmid.Create();//创建金字塔 } } }
public IRawPixels GetRawPixels(IRasterDataset pRDS, int band) { IRawPixels pRP; IRasterBandCollection pBandCollection = pRDS as IRasterBandCollection; IRasterBand pRasterBand = pBandCollection.Item(band); pRP = pRasterBand as IRawPixels; return(pRP); }
/// <summary> /// 创建RasterDataset文件 张琪 20110614 /// </summary> /// <param name="sDir">保存路径</param> /// <param name="sName">文件名</param> /// <param name="sFormat"></param> /// <param name="pOrigin">点</param> /// <param name="nCol"></param> /// <param name="nRow"></param> /// <param name="cellsizeX"></param> /// <param name="cellsizeY"></param> /// <param name="ePixelType"></param> /// <param name="pSR"></param> /// <param name="bPerm"></param> /// <returns></returns> public IRasterDataset CreateRasterSurf(String sDir, String sName, String sFormat, ESRI.ArcGIS.Geometry.IPoint pOrigin, int nCol, int nRow, Double cellsizeX, Double cellsizeY, rstPixelType ePixelType, ISpatialReference2 pSR, bool bPerm) { IWorkspaceFactory prWksFac = new RasterWorkspaceFactoryClass(); IWorkspace pWorkspace = prWksFac.OpenFromFile(sDir, 0); IRasterWorkspace2 pRasterWorkspace2 = pWorkspace as IRasterWorkspace2; int numbands = 1; IRasterDataset pRasterDataset = pRasterWorkspace2.CreateRasterDataset(sName, sFormat, pOrigin, nCol, nRow, cellsizeX, cellsizeY, numbands, ePixelType, pSR, bPerm); return(pRasterDataset); }
public IRasterDataset OpenFileRasterDataset(string pFolderName, string pDatasetName) { IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass(); IRasterWorkspace pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(pFolderName, 0); IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pDatasetName); return(pRasterDataset); }
public static IRasterRenderer CreateSlopePrecentRiseColorRamp(Raster gRaster) { try { // Open file raster dataset and ensure that statistics and histograms are present (absence of histograms will cause Renderer.Update() to crash) IRasterDataset rasterDataset = ArcMapUtilities.GetRasterDataset(gRaster); ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection pRastBands = (ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection)rasterDataset; ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand enumRasterBand = (ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand)pRastBands.Bands; rasterDataset.PrecalculateStats(0); ESRI.ArcGIS.DataSourcesRaster.IRasterBand pRastBand = enumRasterBand.Next(); pRastBand.ComputeStatsAndHist(); IRasterClassifyColorRampRenderer classifyRenderer = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)classifyRenderer; IRaster raster = rasterDataset.CreateDefaultRaster(); rasterRenderer.Raster = raster; classifyRenderer.ClassCount = 10; rasterRenderer.Update(); classifyRenderer.Break[0] = 0; classifyRenderer.Label[0] = "0 to 3.5%"; classifyRenderer.Break[1] = 3.5; classifyRenderer.Label[1] = "3.5% to 8.75%"; classifyRenderer.Break[2] = 8.75; classifyRenderer.Label[2] = "8.75% to 15%"; classifyRenderer.Break[3] = 15; classifyRenderer.Label[3] = "15% to 25%"; classifyRenderer.Break[4] = 25; classifyRenderer.Label[4] = "25% to 45%"; classifyRenderer.Break[5] = 45; classifyRenderer.Label[5] = "45% to 70%"; classifyRenderer.Break[6] = 70; classifyRenderer.Label[6] = "70% to 100%"; classifyRenderer.Break[7] = 100; classifyRenderer.Label[7] = "100% to 175%"; classifyRenderer.Break[8] = 175; classifyRenderer.Label[8] = "175% to 565%"; classifyRenderer.Break[9] = 565; classifyRenderer.Label[9] = "> 565%"; List <RgbColor> lColors = CreateSlopeColorRamp(); IFillSymbol fillSymbol = new SimpleFillSymbolClass(); for (int i = 0; i < classifyRenderer.ClassCount; i++) { fillSymbol.Color = lColors[i]; classifyRenderer.Symbol[i] = (ISymbol)fillSymbol; } return(rasterRenderer); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
private void button2_Click(object sender, EventArgs e) { if (this.listBox1.SelectedItems == null) { MessageBox.Show("请选择图幅名!"); return; } string sqlText = ""; for (int i = 0; i < this.listBox1.SelectedItems.Count; i++) { sqlText = "select name,DATASTRUCTURE from sheetmetadata where NAME='" + listBox1.SelectedItems[i] + "'"; m_oraCmd.CommandText = sqlText; OracleDataReader dr = m_oraCmd.ExecuteReader(); if (!dr.HasRows) { MessageBox.Show("图幅不存在!"); return; } while (dr.Read()) { // this.listBox1.Items.Add(dr.GetValue(0).ToString()); if (dr.GetValue(1).ToString() == "矢量") { IFeatureLayer feaLyr; feaLyr = m_gdata.AddFeatureClassToMap(dr.GetValue(0).ToString()); this.m_mapControl.Map.AddLayer(feaLyr); } if (dr.GetValue(1).ToString() == "影像") { IRasterWorkspaceEx rasterWS = m_workSpace as IRasterWorkspaceEx; IRasterCatalog rasterCatalog = rasterWS.OpenRasterCatalog("COASTALGIS." + dr.GetValue(1).ToString()); ITable table = rasterCatalog as ITable; ICursor cursor = table.Search(null, false); IRow row = cursor.NextRow(); IRasterDataset rasterDS = null; while (row != null) { IRasterCatalogItem rasterCatalogItem = row as IRasterCatalogItem; if (dr.GetValue(0).ToString() == row.get_Value(cursor.FindField("NAME")).ToString()) { rasterDS = rasterCatalogItem.RasterDataset; break; } row = cursor.NextRow(); } IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromDataset(rasterDS); this.m_mapControl.Map.AddLayer(rasterLayer); } } } }
protected override void OnClick() { String path = @"c:\temp"; String fileName = "testRasterFileCreated_NoDataEquals15.tif"; IRasterDataset rasterDataset = CreateRasterDataset(path, fileName); setNoDataValueForASpecificBand(rasterDataset); ArcMap.Application.CurrentTool = null; }
/// <summary> /// Opens the raster file. /// </summary> /// <param name="sPath">The s path.</param> /// <param name="sName">Name of the s.</param> /// <returns>IRasterDataset.</returns> public static IRasterDataset OpenRasterFile(string sPath, string sName) { IRasterDataset result; if (!System.IO.Directory.Exists(sPath)) { result = null; } else { IWorkspace workspace = EngineAPI.OpenWorkspace(sPath, DataType.raster); if (workspace == null) { result = null; } else { IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTRasterDataset); try { enumDatasetName.Reset(); IDatasetName datasetName; while ((datasetName = enumDatasetName.Next()) != null) { if (string.Equals(datasetName.Name, sName, System.StringComparison.OrdinalIgnoreCase)) { break; } } if (datasetName == null) { result = null; } else { IRasterDataset rasterDataset = (datasetName as IName).Open() as IRasterDataset; result = rasterDataset; } } finally { if (enumDatasetName != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(enumDatasetName); } if (workspace != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(workspace); } } } } return(result); }
async private Task <bool> ImportFiles(string[] data, bool refreshList, Dictionary <string, Guid> providers) { IRasterClass rc = await _exObject.GetInstanceAsync() as IRasterClass; if (rc == null) { return(false); } IRasterDataset rDS = rc.Dataset as IRasterDataset; if (rDS == null || rDS.Database == null) { return(false); } FDBImageDataset operations = new FDBImageDataset(rDS.Database as IImageDB, rDS.DatasetName); // refreshList = false wenn ganzen Verzeichnis durchsucht wird... // dann sollen auch keine Fehler verursacht werden wenn ein bild nicht gereferenziert ist, // in diesem fall bild einfach ignorieren operations.handleNonGeorefAsError = refreshList; ImageImportProgressReporter reporter = new ImageImportProgressReporter(operations, data.Length); ImportArguments args = new ImportArguments(operations, rDS, data, providers); FormTaskProgress progress = new FormTaskProgress(); progress.Text = "Import Images: " + rDS.DatasetName; progress.Mode = ProgressMode.ProgressDisk; progress.ShowProgressDialog(reporter, Import(args)); if (refreshList) { await RefreshList(); } if (!reporter.CancelTracker.Continue) { MessageBox.Show("Cancel..."); return(false); } if (operations.lastErrorMessage != String.Empty) { MessageBox.Show("ERROR: " + operations.lastErrorMessage); return(false); } await rDS.RefreshClasses(); return(true); }
/// <summary> /// 建立栅格图层属性表 /// </summary> /// <param name="rasterDataset">栅格数据集</param> public static void BuildRasterAttributeTable(IRasterDataset rasterDataset) { //建立默认属性表 IRasterDatasetEdit2 rasterDatasetEdit = (IRasterDatasetEdit2)rasterDataset; if (rasterDatasetEdit == null) { return; } rasterDatasetEdit.BuildAttributeTable(); }
//执行山体阴影操作 public void Init() { //遍历子节点读取参数 foreach (XmlNode xnl1 in m_xmlnode.ChildNodes) { if (xnl1 is XmlComment) { continue; } XmlElement xe = (XmlElement)xnl1; //找到Azimuth节点,读取其参数 if (xe.Name == "Azimuth") { m_azimuth = double.Parse(xe.InnerText); } //找到ZFactor节点,读取其参数 if (xe.Name == "ZFactor") { m_zfactor = double.Parse(xe.InnerText); } } //山体阴影的实现 try { //将m_raster转为IRaster接口实行栅格相关操作 IRaster2 raster2 = m_raster as IRaster2; //使用IHillshadeFunctionArguments接口进行山体阴影操作 IHillshadeFunctionArguments hillshadeFunctionArugments = (IHillshadeFunctionArguments) new HillshadeFunctionArguments(); //设置生成山体阴影所需要的参数Azimuth和ZFactor的值 hillshadeFunctionArugments.Azimuth = m_azimuth; hillshadeFunctionArugments.ZFactor = m_zfactor; //设置数据源为该raster hillshadeFunctionArugments.DEM = raster2; //创建一个IRasterFunction IRasterFunction rasterFunction = new HillshadeFunction(); //创建IFunctionRasterDataset以调用Init方法执行函数 IFunctionRasterDataset functionRasterDataset = new FunctionRasterDataset(); //设置IFunctionRasterDataset的相关参数 IFunctionRasterDatasetName functionRasterDatasetName = (IFunctionRasterDatasetName) new FunctionRasterDatasetNameClass(); functionRasterDatasetName.FullName = @"D:\RDB"; functionRasterDataset.FullName = (IName)functionRasterDatasetName; //调用Init执行 functionRasterDataset.Init(rasterFunction, hillshadeFunctionArugments); //所得结果转为IRasterDataset IRasterDataset rasData = functionRasterDataset as IRasterDataset; //修改m_raster m_raster = rasData.CreateDefaultRaster(); } catch (System.Exception ex)//捕获异常,输出异常信息 { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
// 从地理数据库中加载栅格数据 private void AddRasterFromGDB(string rastername) { FileGDBWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(DATADIR + "Database.gdb", 0); IRasterWorkspaceEx pRasterWorkspace = pWorkspace as IRasterWorkspaceEx; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(rastername); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); m_pMapC2.AddLayer(pRasterLayer); }
private void btnSure_Click(object sender, EventArgs e) { SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条"); try { if (txtSave.Text == "" || comboBoxFortraster.Text == "" || comboBoxToraster.Text == "") { MessageBox.Show("参数未设置完全!", "提示"); return; } vProgress.EnableCancel = false;//设置进度条 vProgress.ShowDescription = true; vProgress.FakeProgress = true; vProgress.TopMost = true; vProgress.ShowProgress(); vProgress.SetProgress("正在进行填挖方分析"); double Z = Convert.ToDouble(txtZFactor.Text.ToString()); string SavName = System.IO.Path.GetDirectoryName(txtSave.Text); ClsGPTool pClsGPTool = new ClsGPTool(); pClsGPTool.CutFillGP(fortraster_Path, toraster_Path, txtSave.Text, Z);//进行填挖方分析 vProgress.Close(); if (MessageBox.Show("填挖方分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { if (this.WriteLog) { Plugin.LogTable.Writelog("填挖方分析,填挖前表面集:" + comboBoxFortraster.Text + ",填挖后表面集:" + comboBoxToraster.Text); Plugin.LogTable.Writelog("输出栅格路径为:" + txtSave.Text); } vProgress.ShowProgress(); vProgress.SetProgress("正在进行加载结果数据"); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass(); // 张琪 20110627 IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(SavName, 0) as IRasterWorkspace; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(txtSave.Text)); //包含扩展名的表面数据集 IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); ILayer pLayer = pRasterLayer as ILayer; m_pCurrentSceneControl.Scene.AddLayer(pLayer, true); m_pCurrentSceneControl.SceneGraph.RefreshViewers(); vProgress.Close(); } this.Close(); } catch { vProgress.Close(); this.Close(); MessageBox.Show("很抱歉,操作失败!", "提示!"); return; } }
//获取所有波段的最大像元数的函数 private int GetMaxBandCount() { int[] max = new int[m_selband.Length]; for (int i = 0; i < m_selband.Length; i++) { //遍历地计算和获取每个波段的直方图信息 IRaster2 raster2 = m_rstlayer.Raster as IRaster2; IRasterDataset rstDataset = raster2.RasterDataset; IRasterBandCollection rstBandColl = rstDataset as IRasterBandCollection; IRasterBand rasterBand = rstBandColl.Item(i); //计算该波段的histogram(tips:类似于计算statistics) bool hasStat = false; rasterBand.HasStatistics(out hasStat); if (null == rasterBand.Statistics || !hasStat || rasterBand.Histogram == null) { rasterBand.ComputeStatsAndHist(); } //计算过直方图和统计,但是计算失败,仍然为null if (null == rasterBand.Statistics || rasterBand.Histogram == null) { max[i] = 0; continue; } //获取每个像元值的统计个数 double[] histo = rasterBand.Histogram.Counts as double[]; //计算最大像元数 int maxCount = (int)histo[0]; for (int j = 0; j < histo.Length; j++) { if (maxCount < histo[j]) { maxCount = (int)histo[j]; } } //记录下该波段的最大像元数 max[i] = maxCount; } //计算所有波段的最大像元数 int maxst = max[0]; for (int k = 0; k < max.Length; k++) { if (maxst < max[k]) { maxst = (int)max[k]; } } //返回所有波段的最大像元数 return(maxst); }
/// <summary> /// 根据坐标返回影像对应的像元值 /// </summary> /// <param name="point"></param> /// <param name="pRasterDataset"></param> /// <returns></returns> public string GetCellValueByCoordinate(IPoint point, IRasterDataset pRasterDataset) { GetCellValue getCellValue = new GetCellValue(); getCellValue.in_raster = pRasterDataset; getCellValue.location_point = string.Format("{0} {1}", point.X, point.Y); //结果 Runtool(this._gp, getCellValue); string result = getCellValue.out_string; return(result); }
public static IRaster ClassifyMethod(IRasterDataset pRasterDataset, int classCount, string gsgPath) { IGeoDataset pGeoDatasetResult=null; if (CreateSignaturefile(pRasterDataset, classCount, gsgPath)) { IGeoDataset pGeo = pRasterDataset as IGeoDataset; IMultivariateOp pMultivarateOp = new RasterMultivariateOpClass(); pGeoDatasetResult = pMultivarateOp.MLClassify(pGeo, gsgPath, false, esriGeoAnalysisAPrioriEnum.esriGeoAnalysisAPrioriEqual, Type.Missing, Type.Missing); } return (IRaster)pGeoDatasetResult; }
/// <summary> /// 执行栅格转矢量 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RtoF_backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; //设置CancellationPending可以退出任务线程 if (worker.CancellationPending == true) { e.Cancel = true; } else { try { FileInfo inputfinfo = new FileInfo(rastertofeature_input.Text); FileInfo outputinfo = new FileInfo(rastertofeature_output.Text); IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromFile(outputinfo.DirectoryName, 0);//创建输出工作空间 IWorkspaceFactory workspacefactory = new RasterWorkspaceFactoryClass(); IRasterWorkspace rasterworkspace = workspacefactory.OpenFromFile(inputfinfo.DirectoryName, 0) as IRasterWorkspace; IRasterDataset rasterdataset = rasterworkspace.OpenRasterDataset(inputfinfo.Name); IGeoDataset geodataset = rasterdataset as IGeoDataset; watch = new Stopwatch(); watch.Start(); //执行转换 IConversionOp conversionOp = new RasterConversionOpClass(); IGeoDataset geodatasetresult = null; if (rastertofeature_geometry.Text == "POINT") { geodatasetresult = conversionOp.ToFeatureData(geodataset, esriGeometryType.esriGeometryPoint, workspace, outputinfo.Name); } else { if (rastertofeature_geometry.Text == "POLYLINE") { geodatasetresult = conversionOp.ToFeatureData(geodataset, esriGeometryType.esriGeometryPolyline, workspace, outputinfo.Name); } else { geodatasetresult = conversionOp.ToFeatureData(geodataset, esriGeometryType.esriGeometryPolygon, workspace, outputinfo.Name); } } } catch (Exception erro) { MessageBox.Show(erro.Message, "错误"); } } }
/// <summary> /// 是否存在金字塔 /// </summary> /// <param name="rasterFilePath">栅格文件路径</param> /// <returns></returns> public static bool IsExistRasterPyramid(string rasterFilePath) { IRasterDataset pRasterDataset = GetRasterDataset(rasterFilePath); //影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid = pRasterDataset as IRasterPyramid3; if (pRasPyrmid == null) { return(false); } return(pRasPyrmid.Present); }
private void button2_Click(object sender, EventArgs e) { //打开矢量文件 OpenFileDialog openfiledialog = new OpenFileDialog(); openfiledialog.CheckFileExists = true; openfiledialog.Title = "打开文件"; openfiledialog.Filter = "文件(*.*)|*.bmp;*.tif;*jpg;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img|(*.shp)|*.shp"; openfiledialog.ShowDialog(); String fullpath = openfiledialog.FileName; if (fullpath == "") { return; } String path = System.IO.Path.GetDirectoryName(fullpath); //获取文件名 String filename = System.IO.Path.GetFileName(fullpath); //文件名之前的路径名 int index = fullpath.LastIndexOf("\\"); string filePathName = fullpath.Substring(0, index); //获取后缀名 string aLastName = fullpath.Substring(fullpath.LastIndexOf(".") + 1, (fullpath.Length - fullpath.LastIndexOf(".") - 1)); if (aLastName == "shp") { axMapControl1.AddShapeFile(filePathName, filename); axMapControl1.ActiveView.Refresh(); } else { //打开栅格文件 IWorkspaceFactory pWorkspacefactory = new RasterWorkspaceFactory(); //创建工作空间工厂 IWorkspace pWorkspace = pWorkspacefactory.OpenFromFile(path, 0); //打开工作空间 IRasterWorkspace pRasterworkspace = pWorkspace as IRasterWorkspace; //创建栅格工作空间 IRasterDataset pRasterdataset = pRasterworkspace.OpenRasterDataset(filename); //创建Dataset //影像金字塔的判断与创建 IRasterPyramid3 pRaspyrmid = pRasterdataset as IRasterPyramid3; if (pRaspyrmid != null) { if (!(pRaspyrmid.Present)) { pRaspyrmid.Create(); } } IRaster pRaster = pRasterdataset.CreateDefaultRaster(); IRasterLayer pRasterlayer = new RasterLayerClass(); pRasterlayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterlayer as ILayer; axMapControl1.AddLayer(pLayer, 0); } }
/// <summary> /// Calultes std using spatial analyst focal statistics for each raster band within a specified neighborhood (square). Naming convention is std_bandNumber /// </summary> /// <param name="inputRstPath">can be a IRaster IRasterDataset or string path to a raster</param> /// <param name="numCellsWide"> number of cells wide</param> /// <returns>a string of all geoprocessing messages</returns> public string calcBandSpatialVariation(object inputRstPath, int numCellsWide) { StringBuilder sb = new StringBuilder(); try { gp.OverwriteOutput = true; IRasterDataset rsDset = null; string rsPath = null; if (inputRstPath is string) { rsPath = inputRstPath.ToString(); string bnd = ""; rsDset = rsUtil.openRasterDataset(rsPath, out bnd); } else if (inputRstPath is IRasterDataset) { rsDset = (IRasterDataset)inputRstPath; IDataset dSet = (IDataset)rsDset; rsPath = dSet.Workspace.PathName + "\\" + dSet.BrowseName; } else if (inputRstPath is IRaster2) { rsDset = ((IRaster2)inputRstPath).RasterDataset; IDataset dSet = (IDataset)rsDset; rsPath = dSet.Workspace.PathName + "\\" + dSet.BrowseName; } else { string x = "Not a string, RasterDataset, or Raster"; Console.WriteLine(x); return(x); } IRasterBandCollection rsBndColl = (IRasterBandCollection)rsDset; int bndCnt = rsBndColl.Count; for (int cnt = 0; cnt < bndCnt; cnt++) { IRaster rst = rsUtil.returnRaster(rsUtil.getBand(inputRstPath, cnt)); string outRstPath = System.IO.Path.GetDirectoryName(rsPath) + "\\std_" + (cnt + 1).ToString(); IGPSANeighborhood nbr = new GPSANeighborhoodClass(); double cells = System.Convert.ToDouble(numCellsWide); nbr.SetRectangle(cells, cells, esriGeoAnalysisUnitsEnum.esriUnitsCells); IGeoProcessorResult rslt = focalRaster(rst, nbr, statType.STD, "std_" + cnt.ToString()); sb.Append(getMessages(rslt)); } } catch (Exception e) { sb.Append(e.ToString()); Console.WriteLine(e.ToString()); } return(sb.ToString()); }
private void btnQuery_Click(object sender, EventArgs e) { string year = cbxYear.SelectedItem.ToString(); string month = cbxMonth.SelectedItem.ToString(); IWorkspaceFactory pFileGDBWorkspaceFactory; pFileGDBWorkspaceFactory = new FileGDBWorkspaceFactory(); IWorkspace pWorkspace = pFileGDBWorkspaceFactory.OpenFromFile(rasterPath, 0); IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny); pEnumDataset.Reset(); IDataset pDataset = pEnumDataset.Next(); DataTable SpatialRefTable = new DataTable(); SpatialRefTable.Columns.Add(new DataColumn("影像名称", typeof(string))); SpatialRefTable.Columns.Add(new DataColumn("影像拍摄时间", typeof(string))); //判断数据集是否有数据 while (pDataset != null) { if (pDataset is IRasterDataset) //栅格数据集 { IRasterWorkspaceEx pRasterWorkspace = (IRasterWorkspaceEx)pWorkspace; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pDataset.Name); //影像金字塔判断与创建 ISpatialReference pSpatialRef = (pRasterDataset as IGeoDataset).SpatialReference; string spatialref = pSpatialRef.Name.ToString(); string rastername = pDataset.Name.ToString(); string[] strArray = rastername.Split('_'); DataRow dr = SpatialRefTable.NewRow(); dr["影像名称"] = pDataset.Name.ToString(); dr["影像拍摄时间"] = strArray[1].Substring(0, 8); IRasterLayer pRasterLayer = new RasterLayer(); pRasterLayer.CreateFromDataset(pRasterDataset); if (strArray[1].Substring(0, 6) == year + month) { SpatialRefTable.Rows.Add(dr); } } pDataset = pEnumDataset.Next(); } // ExportExcel(SpatialRefTable); //弹出显示框 FormQueryShowResult timeQuery = new FormQueryShowResult(); timeQuery.Text = "时间查询"; timeQuery.dgvQueryResult.DataSource = SpatialRefTable; timeQuery.dgvQueryResult.Columns[1].Width = 200; timeQuery.Show(); }
public static IRasterRenderer CreateGrainSizeStatisticColorRamp(GCDConsoleLib.Raster gRaster, UnitsNet.Units.LengthUnit eUnits) { try { // Open file raster dataset and ensure that statistics and histograms are present (absence of histograms will cause Renderer.Update() to crash) IRasterDataset rasterDataset = ArcMapUtilities.GetRasterDataset(gRaster); ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection pRastBands = (ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection)rasterDataset; ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand enumRasterBand = (ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand)pRastBands.Bands; rasterDataset.PrecalculateStats(0); ESRI.ArcGIS.DataSourcesRaster.IRasterBand pRastBand = enumRasterBand.Next(); pRastBand.ComputeStatsAndHist(); IRasterClassifyColorRampRenderer classifyRenderer = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)classifyRenderer; IRaster raster = rasterDataset.CreateDefaultRaster(); rasterRenderer.Raster = raster; classifyRenderer.ClassCount = 5; rasterRenderer.Update(); classifyRenderer.Break[0] = 0; classifyRenderer.Label[0] = "Fines, Sand (0 to 2 mm)"; classifyRenderer.Break[1] = UnitsNet.Length.From(2, UnitsNet.Units.LengthUnit.Millimeter).As(eUnits); classifyRenderer.Label[1] = "Fine Gravel (2 mm to 16 mm)"; classifyRenderer.Break[2] = UnitsNet.Length.From(16, UnitsNet.Units.LengthUnit.Millimeter).As(eUnits); classifyRenderer.Label[2] = "Coarse Gravel (16 mm to 64 mm)"; classifyRenderer.Break[3] = UnitsNet.Length.From(64, UnitsNet.Units.LengthUnit.Millimeter).As(eUnits); classifyRenderer.Label[3] = "Cobbles (64 mm to 256 mm)"; classifyRenderer.Break[4] = UnitsNet.Length.From(256, UnitsNet.Units.LengthUnit.Millimeter).As(eUnits); classifyRenderer.Label[4] = "Boulders (> 256 mm)"; List <RgbColor> lColors = new List <RgbColor>(); lColors.Add(CreateRGBColor(194, 82, 60)); lColors.Add(CreateRGBColor(240, 180, 17)); lColors.Add(CreateRGBColor(123, 237, 0)); lColors.Add(CreateRGBColor(27, 168, 124)); lColors.Add(CreateRGBColor(11, 44, 122)); IFillSymbol fillSymbol = new SimpleFillSymbol(); for (int i = 0; i < classifyRenderer.ClassCount; i++) { fillSymbol.Color = lColors[i]; classifyRenderer.Symbol[i] = (ISymbol)fillSymbol; } return(rasterRenderer); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
public void ToRasterCatalog(IList ilist_0, IFeatureClass ifeatureClass_0) { IFeatureCursor featureCursor = ifeatureClass_0.Insert(false); IRasterCatalog ifeatureClass0 = ifeatureClass_0 as IRasterCatalog; for (int i = 0; i < ilist_0.Count; i++) { IRasterDataset rasterDataset = (ilist_0[i] as IName).Open() as IRasterDataset; IFeatureBuffer featureBuffer = ifeatureClass_0.CreateFeatureBuffer(); featureBuffer.Value[ifeatureClass0.RasterFieldIndex] = this.createRasterValue(rasterDataset); featureCursor.InsertFeature(featureBuffer); } }
public IRaster2 MapXY2RowCol(double x, double y, string rasname) { string filepath = @"D:\study\ao\MortonCode\slopedata"; IRasterDataset rasds = OpenRaterDS(filepath, rasname); IRaster2 ras = rasds.CreateDefaultRaster() as IRaster2; IRasterLayer rasterlayer = new RasterLayerClass(); rasterlayer.CreateFromDataset(rasds); bitsize = rasterlayer.RowCount; col = ras.ToPixelColumn(x); row = ras.ToPixelRow(y); return(ras); }
public static IRasterValue createRasterValue(IRasterDataset irasterDataset_0) { IRasterStorageDef def = new RasterStorageDef { CompressionType = esriRasterCompressionType.esriRasterCompressionLZ77, PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation, PyramidLevel = -1 }; return(new RasterValue { RasterDataset = irasterDataset_0, RasterStorageDef = def }); }
/// <summary> /// 获取高程信息ITable /// </summary> /// <param name="strFolderPath">DEM文件夹</param> /// <param name="strFileName">DEM文件名称</param> /// <param name="myIFeatureClass">过滤面状数据集</param> /// <returns>高程信息ITable</returns> public ITable CalculateValueFromFile(string strFolderPath, string strFileName, IFeatureClass myIFeatureClass) { IWorkspaceFactory myIWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace myIWorkspace = myIWorkspaceFactory.OpenFromFile(strFolderPath, 0); IRasterWorkspace myIRasterWorkspace = myIWorkspace as IRasterWorkspace; IRasterDataset myIRasterDataset = myIRasterWorkspace.OpenRasterDataset(strFileName);//创建影像数据集 IGeoDataset rasterIGeoDataset = myIRasterDataset as IGeoDataset; IGeoDataset myIFeatureClassGeoDataset = myIFeatureClass as IGeoDataset; IZonalOp myIZonalOp = new RasterZonalOpClass(); ITable myITable = myIZonalOp.ZonalStatisticsAsTable(myIFeatureClassGeoDataset, rasterIGeoDataset, true); return(myITable); }
/// <summary> /// Runs the Calculate Statistics tool from ArcMap. /// </summary> /// <param name="pRDS"></param> private void CalcStats(IRasterDataset pRDS) { IGeoProcessorResult result = null; ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(); gp.OverwriteOutput = true; gp.AddOutputsToMap = false; ESRI.ArcGIS.DataManagementTools.CalculateStatistics statTool = new ESRI.ArcGIS.DataManagementTools.CalculateStatistics(); statTool.in_raster_dataset = pRDS; result = (IGeoProcessorResult)gp.Execute(statTool, null); }
/// <summary> /// Creates a random raster given a template raster (defined extent and cell size) /// </summary> /// <param name="templateRasterPath">full path location of the template raster</param> /// <param name="outRasterPath">the full path location of the output random raster</param> /// <returns>geoprocessing messages</returns> public string createRandomRaster(string templateRasterPath, string outRasterPath) { ESRI.ArcGIS.SpatialAnalystTools.CreateRandomRaster cRndRst = new CreateRandomRaster(); string bnd = ""; IRasterDataset rDset = rsUtil.openRasterDataset(templateRasterPath, out bnd); IRaster rst = rsUtil.createRaster(rDset); IRasterProps rstProp = (IRasterProps)rst; IPnt pnt = rstProp.MeanCellSize(); cRndRst.cell_size = pnt.X; cRndRst.out_raster = outRasterPath; return(getMessages(gpExecute(cRndRst))); }
public IRasterBand GetBand(IRasterLayer rasterlayer) { string fullpath = rasterlayer.FilePath; string filePath = System.IO.Path.GetDirectoryName(fullpath); string fileName = System.IO.Path.GetFileName(fullpath); IWorkspaceFactory wsf = new RasterWorkspaceFactoryClass(); IWorkspace ws = wsf.OpenFromFile(filePath, 0); IRasterWorkspace rasterws = ws as IRasterWorkspace; IRasterDataset rastdataset = rasterws.OpenRasterDataset(fileName); IRasterBandCollection bandcoll = rastdataset as IRasterBandCollection; return(bandcoll.Item(0)); }
/// <summary> /// 波段计算和金字塔构建 /// </summary> /// <param name="pRasterDataset"></param> public static void CalculateStatsAndPyramids(IRasterDataset pRasterDataset) { IRasterBandCollection pBandColl=(IRasterBandCollection)pRasterDataset; //波段统计 for (int i=0;i<pBandColl.Count;i++) { IRasterBand pRasterBand=pBandColl.Item(i); pRasterBand.ComputeStatsAndHist(); //IRasterStatistics pRasterStatistics= pRasterBand.Statistics; //double Maximum=pRasterStatistics.Maximum; //IRasterHistogram pRasterHistogram=pRasterBand.Histogram; } IRasterPyramid pRasterPyramids=(IRasterPyramid)pRasterDataset; if (pRasterPyramids.Present==false) { pRasterPyramids.Create(); } }
/// <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 }; }
//������ţ�Raster-08 //��������createRasterValue //�������ܣ���RasterDataset�洢Ϊijһ����¼���Ա�����RasterCatalog�д洢 //������pRasterDs����Ҫ�洢��RasterDataset //��ע��ͨ���ú�����������RasterStorageDef������ѹ�����������Ľ����� public IRasterValue createRasterValue(IRasterDataset pRasterDs) { IRasterValue pRasterVal; IRasterStorageDef pRasStoreDef; // ++ storage parameter pRasStoreDef = new RasterStorageDef(); //createRasterStorageDef pRasStoreDef.CompressionType = esriRasterCompressionType.esriRasterCompressionJPEG2000; //esriRasterSdeCompressionTypeEnum.esriRasterSdeCompressionTypeJPEG2000; pRasStoreDef.PyramidResampleType = rstResamplingTypes.RSP_CubicConvolution; //���PyramidLevel=-1����ȫ�������� pRasStoreDef.PyramidLevel = -1; // ++ raster value to raster field pRasterVal = new RasterValueClass(); pRasterVal.RasterDataset = pRasterDs; pRasterVal.RasterStorageDef = pRasStoreDef; return (pRasterVal); // ++ cleanup //�����⣬�Ѿ�return�������Ƿ����ã� //pRasterVal = null; //pRasStoreDef = null; }
public static IRasterRenderer StretchRender(IRasterDataset pRasterDataset) { try { //Define the from and to colors for the color ramp IRgbColor pFromColor=new RgbColorClass(); pFromColor.Red=255; pFromColor.Green=0; pFromColor.Blue=0; IRgbColor pToColor=new RgbColorClass(); pToColor.Red=0; pToColor.Green=255; pToColor.Blue=0; IAlgorithmicColorRamp pRamp=new AlgorithmicColorRampClass(); pRamp.Size=10; pRamp.FromColor=pFromColor; pRamp.ToColor=pToColor; bool createColorRamp; pRamp.CreateRamp(out createColorRamp); //create a stretch renderer IRasterStretchColorRampRenderer pStrechRenderer=new RasterStretchColorRampRendererClass(); IRasterRenderer pRasterRenderer=(IRasterRenderer)pStrechRenderer; //set the renderer properties IRaster pRaster =pRasterDataset.CreateDefaultRaster(); pRasterRenderer.Raster=pRaster; pRasterRenderer.Update(); // pStrechRenderer.BandIndex=0; pStrechRenderer.ColorRamp=pRamp; IRasterStretch pStretchType=(IRasterStretch)pRasterRenderer; pStretchType.StretchType=esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; pStretchType.StandardDeviationsParam=2; return pRasterRenderer; } catch (System.Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return null; } }
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; }
public static bool AddWatermarkToRD(IRasterDataset RasterDataset, string OutputFolder, string OutputName, string watermarkImagePath, double blendPercentage, esriWatermarkLocation watermarklocation) { try { // Create Watermark Function IRasterFunction rasterFunction = new CustomFunction.WatermarkFunction(); // Create the Watermark Function Arguments object IWatermarkFunctionArguments rasterFunctionArguments = new WatermarkFunctionArguments(); // Set the WatermarkImagePath rasterFunctionArguments.WatermarkImagePath = watermarkImagePath; // the blending percentage, rasterFunctionArguments.BlendPercentage = blendPercentage; // and the watermark location. rasterFunctionArguments.WatermarkLocation = watermarklocation; // Set the Raster Dataset as the input raster rasterFunctionArguments.Raster = RasterDataset; // Create Function Dataset IFunctionRasterDataset functionRasterDataset = new FunctionRasterDataset(); // Create a Function Raster Dataset Name object IFunctionRasterDatasetName functionRasterDatasetName = (IFunctionRasterDatasetName)new FunctionRasterDatasetName(); // Set the path for the output Function Raster Dataset functionRasterDatasetName.FullName = System.IO.Path.Combine(OutputFolder, OutputName); functionRasterDataset.FullName = (IName)functionRasterDatasetName; // Initialize the Function Raster Dataset with the function and // its arguments object functionRasterDataset.Init(rasterFunction, rasterFunctionArguments); // Save as Function Raster Dataset as an .afr file ITemporaryDataset myTempDset = (ITemporaryDataset)functionRasterDataset; myTempDset.MakePermanent(); Console.WriteLine("Generated " + OutputName + "."); Console.WriteLine("Success."); return true; } catch (Exception exc) { Console.WriteLine("Exception Caught while adding watermark to Raster Dataset: " + exc.Message); Console.WriteLine("Failed."); return false; } }
public static bool AddNDVICustomToRD(IRasterDataset RasterDataset, string OutputFolder, string OutputName, string bandIndices) { try { // Create NDVI Custom Function IRasterFunction rasterFunction = new CustomFunction.NDVICustomFunction(); // Create the NDVI Custom Function Arguments object INDVICustomFunctionArguments rasterFunctionArguments = new NDVICustomFunctionArguments(); // Set the Band Indices rasterFunctionArguments.BandIndices = bandIndices; // Set the RasterDataset as the input raster rasterFunctionArguments.Raster = RasterDataset; // Create Function Dataset IFunctionRasterDataset functionRasterDataset = new FunctionRasterDataset(); // Create a Function Raster Dataset Name object IFunctionRasterDatasetName functionRasterDatasetName = (IFunctionRasterDatasetName)new FunctionRasterDatasetName(); // Set the path for the output Function Raster Dataset functionRasterDatasetName.FullName = System.IO.Path.Combine(OutputFolder, OutputName); functionRasterDataset.FullName = (IName)functionRasterDatasetName; // Initialize the Function Raster Dataset with the function and // its arguments object functionRasterDataset.Init(rasterFunction, rasterFunctionArguments); // Save as Function Raster Dataset as an .afr file ITemporaryDataset myTempDset = (ITemporaryDataset)functionRasterDataset; myTempDset.MakePermanent(); Console.WriteLine("Generated " + OutputName + "."); Console.WriteLine("Success."); return true; } catch (Exception exc) { Console.WriteLine("Exception Caught while adding NDVI Custom Function to Raster Dataset: " + exc.Message); Console.WriteLine("Failed."); return false; } }
public IRaster convertFeatureClassToRaster(IFeatureClass featureClass, rasterUtil.rasterType rasterType, IWorkspace outWorkSpace, string outName, double cellSize, IRasterDataset snapRaster) { return convertFeatureClassToRaster(featureClass, rasterType, outWorkSpace, outName, cellSize, snapRaster, null); }
public IRaster calcStatsAndHist(IRasterDataset rsDset) { IRaster rs = returnRaster(rsDset); rs = calcStatsAndHist(rs); return rs; }
public void appendVatToRasterDataset(ITable inTable, IRasterDataset rsDset) { IRasterDatasetEdit3 rsDsetE3 = (IRasterDatasetEdit3)rsDset; rsDsetE3.AlterAttributeTable(inTable); }
public IRaster convertFeatureClassToRaster(IFeatureClass featureClass, rasterUtil.rasterType rasterType, IWorkspace outWorkSpace, string outName, double cellSize, IRasterDataset snapRaster, IEnvelope extent) { ESRI.ArcGIS.GeoAnalyst.IConversionOp convOp = new ESRI.ArcGIS.GeoAnalyst.RasterConversionOpClass(); ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment rasterAnalysisEnvironment = (ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment)convOp; rasterAnalysisEnvironment.OutSpatialReference = ((IGeoDataset)featureClass).SpatialReference; rasterAnalysisEnvironment.OutWorkspace = outWorkSpace; object cellS = cellSize; object ext = ((IGeoDataset)featureClass).Extent; object snap = Type.Missing; if(snapRaster!=null) { snap = snapRaster; } if (extent != null) { ext = extent; } rasterAnalysisEnvironment.SetCellSize(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellS); rasterAnalysisEnvironment.SetExtent(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ref ext,ref snap); string fmt = rasterType.ToString(); if (fmt == "IMAGINE") { fmt = "IMAGINE image"; if (!outName.ToLower().EndsWith(".img")) outName = outName + ".img"; } IRasterDataset geoDset = convOp.ToRasterDataset((IGeoDataset)featureClass, fmt, outWorkSpace, outName); IGeoDatasetSchemaEdit2 geoSch = (IGeoDatasetSchemaEdit2)geoDset; if (geoSch.CanAlterSpatialReference) geoSch.AlterSpatialReference(rasterAnalysisEnvironment.OutSpatialReference); return returnRaster(geoDset); }
/// <summary> /// Parse the RPC parameters file associated with the image and create an RPCXform /// to bea applied to the inputDataset as a geomtric function. /// </summary> /// <param name="rpcPath">Path to the rpc parameters file.</param> /// <param name="inputDataset">Input dataset to apply the xform on.</param> /// <returns>Function raster dataset created.</returns> private IFunctionRasterDataset ApplyRPC(string rpcPath, IRasterDataset inputDataset) { IFunctionRasterDataset opFrd = null; try { // Open the RPC file and create Geometric transform IGeodataXform finalXForm = null; IRPCXform rpcXForm = GetRPCXForm(rpcPath); IFunctionRasterDataset idFrd = null; if (!(inputDataset is IFunctionRasterDataset)) { IRasterFunction identityFunction = new IdentityFunctionClass(); idFrd = new FunctionRasterDatasetClass(); idFrd.Init(identityFunction, inputDataset); } else idFrd = (IFunctionRasterDataset)inputDataset; IRasterInfo datasetRasterInfo = idFrd.RasterInfo; IEnvelope datasetExtent = datasetRasterInfo.Extent; ISpatialReference datasetSrs = ((IGeoDataset)idFrd).SpatialReference; long dRows = datasetRasterInfo.Height; long dCols = datasetRasterInfo.Width; IEnvelope pixelExtent = new EnvelopeClass(); pixelExtent.PutCoords(-0.5, 0.5 - dRows, -0.5 + dCols, 0.5); bool noAffineNeeded = ((IClone)pixelExtent).IsEqual((IClone)datasetExtent); if (!noAffineNeeded) { // Tranform ground space to pixel space. IAffineTransformation2D affineXform = new AffineTransformation2DClass(); affineXform.DefineFromEnvelopes(datasetExtent, pixelExtent); IGeometricXform geoXform = new GeometricXformClass(); geoXform.Transformation = affineXform; finalXForm = geoXform; } // Transform from pixel space back to ground space to set as the forward transform. IEnvelope groundExtent = ((IGeoDataset)idFrd).Extent; groundExtent.Project(datasetSrs); IAffineTransformation2D affineXform2 = new AffineTransformation2DClass(); affineXform2.DefineFromEnvelopes(pixelExtent, groundExtent); IGeometricXform forwardXForm = new GeometricXformClass(); forwardXForm.Transformation = affineXform2; rpcXForm.ForwardXform = forwardXForm; // Create the composite transform that changes ground values to pixel space // then applies the rpc transform which will transform them back to ground space. ICompositeXform compositeXForm = new CompositeXformClass(); compositeXForm.Add(finalXForm); compositeXForm.Add(rpcXForm); finalXForm = (IGeodataXform)compositeXForm; // Then apply the transform on the raster using the geometric function. if (finalXForm != null) { IRasterFunction geometricFunction = new GeometricFunctionClass(); IGeometricFunctionArguments geometricFunctionArgs = null; // Get the geomtric function arguments if supplied by the user (in the UI). if (myRasterTypeOperation != null && ((IRasterTypeProperties)myRasterTypeOperation).OrthorectificationParameters != null) geometricFunctionArgs = ((IRasterTypeProperties)myRasterTypeOperation).OrthorectificationParameters; else geometricFunctionArgs = new GeometricFunctionArgumentsClass(); // Append the xform to the existing ones from the image. geometricFunctionArgs.AppendGeodataXform = true; geometricFunctionArgs.GeodataXform = finalXForm; geometricFunctionArgs.Raster = inputDataset; opFrd = new FunctionRasterDatasetClass(); opFrd.Init(geometricFunction, geometricFunctionArgs); } return opFrd; } catch (Exception exc) { string error = exc.Message; return opFrd; } }
//RasterDataset to RasterCatalog public void RasDSToCatalog(IRasterDataset pRasterDs, IFeatureClass pCatalog) { //IRasterCatalogItem pCatalogFeature; IFeatureCursor pCursor; IFeatureBuffer pRow; pCursor = pCatalog.Insert(false); IRasterCatalog pCat = pCatalog as IRasterCatalog; IDataset pDs; // loop through all the datasets and load if (pRasterDs != null) { pDs = pRasterDs as IDataset; pRow = pCatalog.CreateFeatureBuffer(); pRow.set_Value(pCat.RasterFieldIndex, createRasterValue(pRasterDs)); /*try { pCursor.InsertFeature(pRow); } catch { }*/ pCursor.InsertFeature(pRow); } //pCursor.Flush(); pRasterDs = null; }
public IRasterValue createRasterValue(IRasterDataset pRasterDs, IRasterStorageDef pRasStoreDef) { IRasterValue pRasterVal; pRasterVal = new RasterValueClass(); pRasterVal.RasterDataset = pRasterDs; pRasterVal.RasterStorageDef = pRasStoreDef; return (pRasterVal); // ++ cleanup //�����⣬�Ѿ�return�������Ƿ����ã� //pRasterVal = null; //pRasStoreDef = null; }
//#######################���º��������ʹ��######################## //**************************Load Raster Begin**************************** //������ţ�RasterLoad-01 //��������DirToMosaic //�������ܣ����ļ����е�Raster�ļ��ϲ����µ�Raster�ļ���ȥ //������sDir��դ���ļ��� // pDataset�����ϲ���RasterDataset //��ע��pDataset����ʹGeodataset�еIJ�����������������ú������� public void DirToMosaic(string sDir, IRasterDataset pDataset) { //load all raster datasets in the input directory to the raster dataset //the geodatabase raster dataset has to exist, //if not create it first with proper storage parameters. IWorkspaceFactory pWsFact = new RasterWorkspaceFactoryClass(); ; IWorkspace pFileWs = pWsFact.OpenFromFile(sDir, 0); IRasterDatasetEdit pSDEDs = pDataset as IRasterDatasetEdit; IRasterDataset2 pRasterDs; // load raster datasets from the dir IEnumDataset pEunmDatasets = pFileWs.get_Datasets(esriDatasetType.esriDTRasterDataset); pEunmDatasets.Reset(); pRasterDs = pEunmDatasets.Next() as IRasterDataset2; while (!(pRasterDs == null)) { //!!!pRasterDs.CompleteName; pSDEDs.Mosaic(pRasterDs.CreateFullRaster(), 0.5); //!!!ע��IRasterDataset2::CreateFullRaster()�������Լ�ʵ�ִ�RasterDataset��Raster��ת�� pRasterDs = pEunmDatasets.Next() as IRasterDataset2; } //cleanup pEunmDatasets = null; pRasterDs = null; pWsFact = null; pSDEDs = null; pFileWs = null; }
//�����ţ� //��������LoadRasterToCatalogDatabase //�������ܣ�Raster����Database //������pWorkspace�����ݿ⣬pWorkspace������Access ����SDE // strCata��Catalog���� // pRasterDs����Ҫ����Rasterdataset //��ע��insert a raster dataset with given path and file name to an existing raster catalog public void LoadRasterToCatalogDatabase(IWorkspace pWorkspace, string strCata, IRasterDataset pRasterDs,string name) { //QI IRasterWorkspaceEx to IWorkspace IRasterWorkspaceEx pRasWKS = pWorkspace as IRasterWorkspaceEx; //Open raster catalog //IRasterCatalog�൱��һ��FeatureClass����������е�ÿһ����¼���Դ��Raster IRasterCatalog pInCatalog = pRasWKS.OpenRasterCatalog(strCata); // get raster field index int iRaster = pInCatalog.RasterFieldIndex; // QI IFeatureClass for inserting IFeatureClass pFeatureClass = pInCatalog as IFeatureClass; // get insert cursor IFeatureCursor pCursor = pFeatureClass.Insert(false); // create raster value from raster dataset with default storagedef IRasterValue pRasterValue = new RasterValueClass(); pRasterValue.RasterDataset = pRasterDs; pRasterValue.RasterStorageDef = new RasterStorageDefClass(); pRasterValue.RasterDatasetName.NameString = name; //������������µ�RasterStorageDef // insert the rastervalue ' it will update name, metadata and geometry field IFeatureBuffer pRow = pFeatureClass.CreateFeatureBuffer(); pRow.set_Value(iRaster, pRasterValue); pCursor.InsertFeature(pRow); }
/// <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"); } } }
public void ExportRaster(IRasterDataset rasterDataset, string path, string sFormat, string sName) { IWorkspaceFactory wsF = new RasterWorkspaceFactoryClass(); IWorkspace ws = wsF.OpenFromFile(path,0); ISaveAs saveAs = rasterDataset as ISaveAs; saveAs.SaveAs(sName, ws, sFormat); }
/// <summary> /// Creates an in Memory Raster given a raster dataset /// </summary> /// <param name="rsDset">IRasterDataset</param> /// <returns>IRaster</returns> public IRaster createRaster(IRasterDataset rsDset) { if (rsDset == null) { return null; } else { string cNm = rsDset.Format.ToLower(); if (cNm.EndsWith("hdf4") || cNm.EndsWith("ntif")) { IRasterBandCollection rsBc = new RasterClass(); IRasterDatasetJukebox rsDsetJu = (IRasterDatasetJukebox)rsDset; List<IRaster> rsLst = new List<IRaster>(); int subCnt = rsDsetJu.SubdatasetCount; for (int i = 0; i < subCnt; i++) { rsDsetJu.Subdataset = i; IRasterDataset3 subDset = (IRasterDataset3)rsDsetJu; rsLst.Add(subDset.CreateFullRaster()); } IFunctionRasterDataset fDset = compositeBandFunction(rsLst.ToArray()); return createRaster(fDset); } else { IRasterDataset3 rDset3 = (IRasterDataset3)rsDset; return rDset3.CreateFullRaster(); } } }
public void ImportRas(IRasterDataset rasDS,string name) { IRasterDataset rasdsSDE = this.CreateRasterDataset(ref rasDS, name, ref this.m_workSpace, new UnknownCoordinateSystemClass()); if (rasdsSDE != null) { this.MosaicRasterToGDBRaster(rasDS, (IRasterDatasetEdit)rasdsSDE); } }
/// <summary> /// Open Raster Dataset /// </summary> /// <param name="path">path of the dataset</param> /// <param name="rasterDSName">name of the dataset</param> private static void OpenRasterDataset(String path, String rasterDSName) { //this is why the utility user needs access to data source. image service configurations varies among data sources. IWorkspaceFactory workspaceFactory = null; IWorkspace workspace = null; IRasterWorkspaceEx rasterWorkspaceEx = null; Type factoryType = null; try { switch (path.Substring(path.Length - 4, 4).ToLower()) // a path can never be shorter than 4 characters, isn't it? c:\a { case ".gdb": factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory"); workspaceFactory = Activator.CreateInstance(factoryType) as IWorkspaceFactory; workspace = workspaceFactory.OpenFromFile(path, 1); rasterWorkspaceEx = (IRasterWorkspaceEx)workspace; rasterDataset = rasterWorkspaceEx.OpenRasterDataset(rasterDSName); break; case ".sde": factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory"); workspaceFactory = Activator.CreateInstance(factoryType) as IWorkspaceFactory; workspace = workspaceFactory.OpenFromFile(path, 1); rasterWorkspaceEx = (IRasterWorkspaceEx)workspace; rasterDataset = rasterWorkspaceEx.OpenRasterDataset(rasterDSName); break; default: factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory"); workspaceFactory = Activator.CreateInstance(factoryType) as IWorkspaceFactory; workspace = workspaceFactory.OpenFromFile(path, 1); IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspace; rasterDataset = rasterWorkspace.OpenRasterDataset(rasterDSName); break; } } catch (Exception) { throw new ArgumentException("Failed to open source data"); } }
private IRasterDataset CreateRasterDataset(ref IRasterDataset pRasterDataset, string name, ref IWorkspace pWorkspace, ISpatialReference pSpatialReference) { IRasterWorkspaceEx pRasterWorkspaceEx = (IRasterWorkspaceEx)pWorkspace; IRasterDataset newRasterDataset = null; IRaster pRaster = pRasterDataset.CreateDefaultRaster(); IRasterBandCollection pRasterBandCollection = (IRasterBandCollection)pRaster; int numbands = pRasterBandCollection.Count; IRasterProps pRasterProps = (IRasterProps)pRaster; rstPixelType pPixelType = pRasterProps.PixelType; IRasterStorageDef pRasterStorageDef = null; if (pRasterStorageDef == null) { pRasterStorageDef = new RasterStorageDefClass(); pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionLZ77; pRasterStorageDef.PyramidLevel = 2; pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation; pRasterStorageDef.TileHeight = 128; pRasterStorageDef.TileWidth = 128; } IRasterDef pRasterDef = new RasterDefClass(); pRasterDef.SpatialReference = pSpatialReference; pRasterDef.IsRasterDataset = true; pRasterDef.Description = "rasterdataset"; try { newRasterDataset = pRasterWorkspaceEx.CreateRasterDataset(name, numbands, pPixelType, pRasterStorageDef, "", pRasterDef, this.createGeometryDef(pSpatialReference)); return newRasterDataset; } catch (Exception ex) { MessageBox.Show(ex.Message); return null; } }
private void MosaicRasterToGDBRaster(IRasterDataset pRasterFile, IRasterDatasetEdit pGDBRasterDs) { try { IRaster pRaster; IRasterDataset2 pRasterDs = pRasterFile as IRasterDataset2; //IDataset pDs; pRaster = pRasterDs.CreateFullRaster();//CreateFullRaster()方法只有IRasterDataset2有 pGDBRasterDs.Mosaic(pRaster, 0.5); //no resample pRasterDs = null; pRaster = null; //pDs = null; } catch (Exception e) { if (e is StackOverflowException || e is OutOfMemoryException) throw; } }
public void RasDSToCatalogWithTime(IRasterDataset pRasterDs, IFeatureClass pCatalog, string DataField, string strData, IRasterStorageDef pRasStoreDef) { //IRasterCatalogItem pCatalogFeature; IFeatureCursor pCursor; IFeatureBuffer pRow; pCursor = pCatalog.Insert(false); IRasterCatalog pCat = pCatalog as IRasterCatalog; IDataset pDs; // loop through all the datasets and load if (pRasterDs != null) { pDs = pRasterDs as IDataset; pRow = pCatalog.CreateFeatureBuffer(); pRow.set_Value(pCat.RasterFieldIndex, createRasterValue(pRasterDs, pRasStoreDef)); pRow.set_Value(pCatalog.FindField(DataField), Convert.ToDateTime(strData)); pCursor.InsertFeature(pRow); } pRasterDs = null; }
public static void setNoDataValueForASpecificBand(IRasterDataset rasterDataset) { IRasterBandCollection rasterBandCollection = (IRasterBandCollection)rasterDataset; IRasterBand rasterBand = rasterBandCollection.Item(0); IRasterProps rasterProps = (IRasterProps)rasterBand; rasterProps.NoDataValue = 15; }
public void calcSatatsAndHistFast(IRasterDataset rsDset, int skipFactor = 1) { }