public static void LoadGeoData(AxMapControl axMapControl1, AxMapControl axMapControl2, string strFileN) { string strFExtenN = System.IO.Path.GetExtension(strFileN); switch (strFExtenN) { case ".shp": { string strPath = System.IO.Path.GetDirectoryName(strFileN); string strFile = System.IO.Path.GetFileNameWithoutExtension(strFileN); axMapControl1.AddShapeFile(strPath, strFile); axMapControl2.ClearLayers(); axMapControl2.AddShapeFile(strPath, strFile); axMapControl2.Extent = axMapControl2.FullExtent; break; } case ".bmp": case ".tif": case ".jpg": case ".img": { IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); string pathName = System.IO.Path.GetDirectoryName(strFileN); string fileName = System.IO.Path.GetFileName(strFileN); IWorkspace pWS = pWSF.OpenFromFile(pathName, 0); IRasterWorkspace pRWS = pWS as IRasterWorkspace; IRasterDataset pRasterDataSet = pRWS.OpenRasterDataset(fileName); IRasterPyramid pRasPyramid = pRasterDataSet as IRasterPyramid; if (pRasPyramid != null) { if (!(pRasPyramid.Present)) { pRasPyramid.Create(); } } IRaster pRaster = pRasterDataSet.CreateDefaultRaster(); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; axMapControl1.AddLayer(pLayer, 0); axMapControl2.ClearLayers(); axMapControl2.AddLayer(pLayer, 0); axMapControl2.Extent = axMapControl2.FullExtent; break; } case ".mxd": { if (axMapControl1.CheckMxFile(strFExtenN)) { axMapControl1.LoadMxFile(strFExtenN); } else MessageBox.Show("所选择的文件不是Mxd文件!", "提示信息"); break; } default: break; } }
public static string ExportLayerImage(IRaster pRaster, string[] bbox, string[] size,string outputUrl,string serveroutDir) { //判断栅格文件是否已经存在,存在删除,原因是如果存在,不删除的话,保存图片出错 //创建rasterlayer IRasterLayer pRasterLayer = new RasterLayerClass(); //获取mapServer中所有的图层 IMap pMap = new MapClass(); pRasterLayer.CreateFromRaster(pRaster); pMap.AddLayer(pRasterLayer as ILayer); // // Size pSize = new Size(); pSize.Width = Convert.ToInt32(size[0]); pSize.Height = Convert.ToInt32(size[1]); // IEnvelope pEnvelop = new EnvelopeClass(); pEnvelop.PutCoords(Convert.ToDouble(bbox[0]), Convert.ToDouble(bbox[1]), Convert.ToDouble(bbox[2]), Convert.ToDouble(bbox[3])); Image pImage = SaveCurrentToImage(pMap, pSize, pEnvelop); string imageName = System.DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + ".png"; //outputUrl="http://localhost:6080/arcgis/rest/directories/arcgisoutput/imageserver/miyunspot_ImageServer/" // serveroutDir="D:\arcgisserver\directories\arcgisoutput\imageserver\miyunspot_ImageServer"; string url = outputUrl + imageName; string path = System.IO.Path.Combine(serveroutDir, imageName); pImage.Save(path); return url; }
/// <summary> /// 计算DEM坡向 /// </summary> /// <param name="rasterLayer">输入DEM图层</param> /// <param name="outputFullPath">输出坡度图路径,类型为IMAGE,文件名为img</param> public void CreateRasterAspect(ILayer rasterLayer, string outputFullPath) { if (File.Exists(outputFullPath)) { MessageBox.Show(outputFullPath + "已经存在,请重命名"); return; } IRasterLayer rasterLyr = rasterLayer as IRasterLayer; IRaster raster = rasterLyr.Raster; RasterSurfaceOpClass rasterOpCls = new RasterSurfaceOpClass(); IGeoDataset geoDataset = raster as IGeoDataset; IGeoDataset outGeodataset = rasterOpCls.Aspect(geoDataset); IRaster pRaster = outGeodataset as IRaster; FileInfo fi = new FileInfo(outputFullPath); string fileDir = fi.Directory.FullName; string name = fi.Name; if (!Directory.Exists(fileDir)) Directory.CreateDirectory(fileDir); IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); IWorkspace pWS = pWSF.OpenFromFile(fileDir, 0); ISaveAs pSaveAs = pRaster as ISaveAs; pSaveAs.SaveAs(name, pWS, "IMAGINE Image"); IRasterLayer rasterLyr2 = new RasterLayerClass(); rasterLyr2.CreateFromRaster(pRaster); rasterLyr2.Name = name; m_mapControl.Map.AddLayer(rasterLyr2 as ILayer); }
private void button1_Click(object sender, EventArgs e) { try { //create raster dataset from the JPIP service url Type factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory"); IWorkspaceFactory wsFact = Activator.CreateInstance(factoryType) as IWorkspaceFactory; string tempPath = Path.GetTempPath(); IRasterWorkspace2 ws = wsFact.OpenFromFile(tempPath, 0) as IRasterWorkspace2; IRasterDataset rds = ws.OpenRasterDataset(txtJPIPUrl.Text); //create a layer from the raster dataset IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromDataset(rds); string layerName = txtLayerName.Text; if (layerName == "") layerName = txtJPIPUrl.Text.Substring(txtJPIPUrl.Text.LastIndexOf("/") + 1, txtJPIPUrl.Text.Length - txtJPIPUrl.Text.LastIndexOf("/") - 1); rasterLayer.Name = layerName; //add the JPIP layer to the current data frame of ArcMap ArcMap.Document.FocusMap.AddLayer(rasterLayer); this.Close(); } catch { MessageBox.Show("Couldn't connect to the specified URL, sample url: jpip://myserver:8080/JP2Server/imagealias"); } }
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); } }
private void btnGO_Click(object sender, EventArgs e) { string fileName; string shpFile; int startX, endX; string shpDir; try { if (bDataPath == true) { fileName = txtOutPath.Text; shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); } else { shpDir = txtOutPath.Text; shpFile = "�¶�"; } if (m_pRasterLyr != null) { double dCellSize = Convert.ToDouble(txtCellSize.Text); ISurfaceOp pRasterSurfaceOp = Utility.SetRasterSurfaceAnalysisEnv(shpDir, dCellSize); double dZFactor = Convert.ToDouble(txtZFactor.Text); object objZFactor = dZFactor; IRaster pInRaster = m_pRasterLyr.Raster; IRaster pOutRaster = null; IRasterLayer pRasterLayer = new RasterLayerClass(); if (radioDegree.Checked == true) { pOutRaster = pRasterSurfaceOp.Slope(pInRaster as IGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees, ref objZFactor) as IRaster; } else { pOutRaster = pRasterSurfaceOp.Slope(pInRaster as IGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopePercentrise , ref objZFactor) as IRaster; } pRasterLayer.Name = "�¶�դ��"; Utility.ConvertRasterToRsDataset(shpDir, pOutRaster, "�¶�դ��"); pRasterLayer = Utility.SetStretchRenderer(pOutRaster); pMainFrm.getMapControl().AddLayer(pRasterLayer, 0); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
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);//rsUtil.saveRasterToDataset(rs, outNm, outWks); 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 button1_Click(object sender, EventArgs e) { if (this.comboBox1.SelectedIndex == -1) { MessageBox.Show("��ѡ������!"); return; } IRasterBand rb = m_rc.Item(m_rc.get_BandIndex(this.comboBox1.SelectedItem.ToString().Trim())); IRasterDataset rasterDS = rb as IRasterDataset; IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromDataset(rasterDS); this.m_mapCon.Map.AddLayer(rasterLayer); }
private void btnGO_Click(object sender, EventArgs e) { string fileName; string shpFile; int startX, endX; string shpDir; try { if (bDataPath == true) { fileName = txtOutPath.Text; shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); } else { shpDir = txtOutPath.Text; shpFile = "ɽ����Ӱ"; } if (m_pRasterLyr != null) { double dCellSize = Convert.ToDouble(txtCellSize.Text); double dAzimuth=Convert.ToDouble(txtAzimuth.Text); double dAltitude=Convert.ToDouble(txtAltitude.Text); bool bModel=chkModelShadow.Checked; double dZFactor=Convert.ToDouble(txtZFactor.Text); object objZFactor=dZFactor; ISurfaceOp pRasterSurfaceOp = Utility.SetRasterSurfaceAnalysisEnv(shpDir, dCellSize); IRaster pInRaster = m_pRasterLyr.Raster; IRaster pOutRaster = null; IRasterLayer pRasterLayer = new RasterLayerClass(); pOutRaster = pRasterSurfaceOp.HillShade(pInRaster as IGeoDataset,dAzimuth,dAltitude,bModel,ref objZFactor) as IRaster; pRasterLayer.Name = shpFile; Utility.ConvertRasterToRsDataset(shpDir, pOutRaster, shpFile); pRasterLayer = Utility.SetStretchRenderer(pOutRaster); pMainFrm.getMapControl().AddLayer(pRasterLayer, 0); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void btnGO_Click(object sender, EventArgs e) { string fileName; string shpFile; int startX, endX; string shpDir; try { if (bOutDataPath == true) { fileName = txtOutPath.Text; shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); } else { shpDir = txtOutPath.Text; shpFile = "ͨ�ӷ���"; } if ((m_pRasterLyr != null) && (m_pFeatLyr !=null)) { double dCellSize = Convert.ToDouble(txtCellSize.Text); ISurfaceOp pRasterSurfaceOp = Utility.SetRasterSurfaceAnalysisEnv(shpDir, dCellSize); IRaster pInRaster = m_pRasterLyr.Raster; IFeatureClass pInFeatCls=m_pFeatLyr.FeatureClass; IRaster pOutRaster = null; IRasterLayer pRasterLayer = new RasterLayerClass(); if(chkEarthCurve.Checked==false) pOutRaster = pRasterSurfaceOp.Visibility(pInRaster as IGeoDataset, pInFeatCls as IGeoDataset,esriGeoAnalysisVisibilityEnum.esriGeoAnalysisVisibilityObservers) as IRaster; else pOutRaster = pRasterSurfaceOp.Visibility(pInRaster as IGeoDataset, pInFeatCls as IGeoDataset, esriGeoAnalysisVisibilityEnum.esriGeoAnalysisVisibilityObserversUseCurvature) as IRaster; pRasterLayer.Name = shpFile; Utility.ConvertRasterToRsDataset(shpDir, pOutRaster, shpFile); pRasterLayer = Utility.SetViewShedRenderer(pOutRaster, "Value", shpDir); pMainFrm.getMapControl().AddLayer(pRasterLayer, 0); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void btnGO_Click(object sender, EventArgs e) { string fileName; string shpFile; int startX, endX; string shpDir; try { if (bDataPath == true) { fileName = txtOutPath.Text; shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); } else { shpDir = txtOutPath.Text; shpFile = "����դ��"; } if (m_pInFeatLyr != null) { double dCellSize = Convert.ToDouble(txtCellSize.Text); double dMaxDis = Convert.ToDouble(txtMaxValue.Text); object objMaxDis=dMaxDis; object Missing = Type.Missing; IDistanceOp pDistanceOp = Utility.SetRasterDisAnalysisEnv(shpDir, dCellSize, m_pInFeatLyr); IFeatureClass pInFeatCls = m_pInFeatLyr.FeatureClass; IRaster pOutRaster = null; IRasterLayer pRasterLayer = new RasterLayerClass(); pOutRaster = pDistanceOp.EucAllocation(pInFeatCls as IGeoDataset, ref objMaxDis,ref Missing ) as IRaster; pRasterLayer.Name = shpFile; Utility.ConvertRasterToRsDataset(shpDir, pOutRaster, shpFile); pRasterLayer = Utility.SetRsLayerClassifiedColor(pOutRaster); pMainFrm.getMapControl().AddLayer(pRasterLayer, 0); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void btnGO_Click(object sender, EventArgs e) { string fileName; string shpFile; int startX, endX; string shpDir; try { if (bDataPath == true) { fileName = txtOutPath.Text; shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); } else { shpDir = txtOutPath.Text; shpFile = "���ڷ���"; } if ((m_pInBRsLyr != null) && (m_pInARsLyr!=null)) { double dCellSize = Convert.ToDouble(txtCellSize.Text); ISurfaceOp pRasterSurfaceOp = Utility.SetRasterSurfaceAnalysisEnv(shpDir, dCellSize); double dZFactor=Convert.ToDouble(txtZFactor.Text); object objZFactor=dZFactor; IRaster pInBRaster = m_pInBRsLyr.Raster; IRaster pInARaster = m_pInARsLyr.Raster; IRaster pOutRaster = null; IRasterLayer pRasterLayer = new RasterLayerClass(); pOutRaster = pRasterSurfaceOp.CutFill(pInBRaster as IGeoDataset , pInARaster as IGeoDataset , ref objZFactor) as IRaster; pRasterLayer.Name = shpFile; Utility.ConvertRasterToRsDataset(shpDir, pOutRaster, shpFile); pRasterLayer = Utility.SetCutFillRenderer(pOutRaster,"Value",shpDir); pMainFrm.getMapControl().AddLayer(pRasterLayer, 0); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public static string CreateJPEGFromActiveView(IRaster pRaster,IEnvelope pEnv,string outurl, System.String pathFileName) { //创建rasterlayer IRasterLayer pRasterLayer = new RasterLayerClass(); //获取mapServer中所有的图层 IMap pMap = new MapClass(); pRasterLayer.CreateFromRaster(pRaster); pMap.AddLayer(pRasterLayer as ILayer); IActiveView activeView = pMap as IActiveView; activeView.Extent = pEnv; //parameter check if (activeView == null) { return null; } string imageName = System.DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + ".png"; pathFileName = System.IO.Path.Combine(pathFileName, imageName); ESRI.ArcGIS.Output.IExport export = new ESRI.ArcGIS.Output.ExportPNGClass(); export.ExportFileName = pathFileName; // Microsoft Windows default DPI resolution ESRI.ArcGIS.esriSystem.tagRECT exportRECT = new ESRI.ArcGIS.esriSystem.tagRECT(); exportRECT.top = 0; exportRECT.left = 0; exportRECT.right = 800; exportRECT.bottom = 600; ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass(); envelope.PutCoords(exportRECT.top,exportRECT.left,exportRECT.right,exportRECT.bottom); export.PixelBounds = envelope; System.Int32 hDC = export.StartExporting(); activeView.Output(hDC, (System.Int16)export.Resolution, ref exportRECT, null, null); // Finish writing the export file and cleanup any intermediate files export.FinishExporting(); export.Cleanup(); return outurl + "/" + imageName; }
private void btnDownload_Click(object sender, EventArgs e) { if (!checkInputs()) { MessageBox.Show("You must have a value for all inputs"); return; } mapserviceutility msUtil = new mapserviceutility(); geoDatabaseUtility geoUtil = new geoDatabaseUtility(); IImageServerLayer svLyr = getServerLayer(); ESRI.ArcGIS.Geometry.IEnvelope ext = new ESRI.ArcGIS.Geometry.EnvelopeClass(); if(cmbExtent.Text.ToLower()=="display") { ext = av.Extent; } else { IFeatureLayer ftrLyr = getFeatureLayer(); ext = ((ESRI.ArcGIS.Geodatabase.IGeoDataset)ftrLyr).Extent; } if(svLyr==null) { MessageBox.Show("You must select a Image server layer"); return; } this.Visible = false; ESRI.ArcGIS.Geodatabase.IWorkspace wks = geoUtil.OpenWorkSpace(txtGeoDb.Text); ESRI.ArcGIS.Geodatabase.IRaster rs = null; string msg = msUtil.fillDbRaster(svLyr,wks,ext,svLyr.ServiceInfo.SpatialReference,out rs); IMap mp = (IMap)av; if (rs != null) { IRasterLayer rsLyr = new RasterLayerClass(); rsLyr.CreateFromRaster(rs); rsLyr.Name = svLyr.ServiceInfo.Name; rsLyr.Visible = false; mp.AddLayer((ILayer)rsLyr); } this.Close(); //MessageBox.Show(msg); }
/// <summary> /// 从文件获取栅格图层 /// </summary> /// <param name="strFile"></param> /// <returns></returns> public static ILayer GetRasterLayer(string strFile) { if (string.IsNullOrEmpty(strFile) || !File.Exists(strFile)) return null; //IWorkspaceFactory wsfRaster = new RasterWorkspaceFactoryClass(); //IRasterWorkspace rwsSource = wsfRaster.OpenFromFile(Path.GetDirectoryName(strFile), 0) as IRasterWorkspace; //if (rwsSource == null) // return null; //IRasterDataset rDataset = rwsSource.OpenRasterDataset(Path.GetFileName(strFile)); //IRasterLayer rasterLayer = new RasterLayerClass(); //rasterLayer.CreateFromDataset(rDataset); //return rasterLayer; IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromFilePath(strFile); return rasterLayer; }
/// <summary> /// ������ʾ��ԭֵ--��ֵ /// </summary> /// <param name="pInRaster"></param> /// <param name="sField"></param> /// <returns></returns> public void setViewValue(IRaster pInRaster, string sField) { try { IRasterDescriptor pRD = new RasterDescriptorClass(); pRD.Create(pInRaster, new QueryFilterClass(), sField); IGeoDataset pGeodataset = pInRaster as IGeoDataset; IRasterLayer pRLayer = new RasterLayerClass(); IRasterBandCollection pRsBandCol = pGeodataset as IRasterBandCollection; IRasterBand pRasterBand = pRsBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic = pRasterBand.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; if ((dMaxValue - dMinValue) / iReClassCount >= 1) { double dItemInterval = (dMaxValue - dMinValue) / iReClassCount; double dMinTemp = dMinValue; if (this.cmbFieldsName.Items.Count > 0) this.lsvValue.Items.Clear(); for (int i = 0; i < iReClassCount; i++) { ListViewItem li = new ListViewItem(); li.SubItems.Clear(); li.SubItems[0].Text = dMinTemp.ToString() + " - " + (dMinTemp + dItemInterval).ToString("N4"); li.SubItems.Add(i.ToString()); this.lsvValue.Items.Add(li); dMinTemp = dMinTemp + dItemInterval; } } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
/// <summary> /// 加载栅格文件到主地图控件 /// </summary> /// <param name="rasterPath">The raster path.</param> public static void AddRasterFileToMap(string rasterPath) { try { IRasterLayer rasterLayer = new RasterLayerClass(); string directoryName = System.IO.Path.GetDirectoryName(rasterPath); string fileName = System.IO.Path.GetFileName(rasterPath); IRasterWorkspace rasterWorkspace = EngineAPI.OpenWorkspace(directoryName, DataType.raster) as IRasterWorkspace; IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(fileName); rasterLayer.CreateFromDataset(rasterDataset); IRasterPyramid3 rasterPyramid = rasterDataset as IRasterPyramid3; if (rasterPyramid != null && !rasterPyramid.Present) { //new frmCreatePyramid(new List<string> //{ // rasterLayer.FilePath //}) //{ // Owner = EnviVars.instance.MainForm //}.ShowDialog(); //using (GPExecutor gp = new GPExecutor()) { EnviVars.instance.GpExecutor.CreatePyramid(new List <string> { rasterLayer.FilePath }); } } EnviVars.instance.MapControl.AddLayer(rasterLayer, 0); } catch (Exception ex) { //XtraMessageBox.Show("加载数据失败!", "提示信息", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Asterisk); Log.WriteLog(typeof(MAP), ex); throw ex; } }
/// <summary> /// Opens a file dialog and select the reference raster file. /// </summary> private void openOutputExtentButton_Click(object sender, EventArgs e) { RasterFileDialog openFileDialog = new RasterFileDialog(FileDialogType.Open); openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == DialogResult.OK) { outputExtentComboBox.Text = openFileDialog.FileName; try { IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromFilePath(openFileDialog.FileName); ShowExtent(rasterLayer); } 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"); outputExtentComboBox.Text = ""; } } this.BringToFront(); }
//定义栅格打开函数 public static void OpenRaster(string rasterFileName, AxMapControl _MapControl) { if (!File.Exists(rasterFileName)) { return; } try { //文件名处理 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); //添加到图层控制中 _MapControl.Map.AddLayer(pRasterLayer as ILayer); } catch { } }
/// <summary> /// Gets raster band count. /// </summary> /// <param name="rasterFile">The raster file.</param> /// <returns>System.Int32.</returns> public static int GetBandCount(string rasterFile) { IRasterLayer pRasterLayer = null; try { pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromFilePath(rasterFile); return(pRasterLayer.BandCount); } catch (Exception ex) { XtraMessageBox.Show("读取栅格波段失败!请检查文件是否损坏:" + rasterFile, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); Log.WriteLog(typeof(MapAPI), ex); return(-1); } finally { if (pRasterLayer != null) { Marshal.ReleaseComObject(pRasterLayer); } } }
private void buttton_tiff_Click(object sender, EventArgs e) { axMapControl1.ClearLayers(); //string tiffPath = "tiff文件/未命名.tiff";D://users//lenovo//documents//visual studio 2015//Projects//Teamwork//Teamwork//tiff文件 if (tiffPath == "") { return; } int Index = tiffPath.LastIndexOf("\\"); string fileName = tiffPath.Substring(Index + 1); string filePath = tiffPath.Substring(0, Index); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass(); //利用工厂对象去生成一个raster文件的工作空间 IRasterWorkspace pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0); //到指定路径下 IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName); //利用要素集去接收对应的raster文件 IRasterLayer pRasterLayer = new RasterLayerClass(); //生成一个矢量图层对象 pRasterLayer.CreateFromDataset(pRasterDataset); //利用矢量图层对象去创建对应的raster文件 axMapControl1.Map.AddLayer(pRasterLayer); //添加对应的图层 axMapControl1.Update(); axMapControl1.ActiveView.Refresh(); }
/// <summary> /// add raster or featureclass to map as layer /// </summary> public static void AddDataToMapAsLayer(IGeoDataset RasterDSOrFeatureClass, string LayerName) { ILayer ThisLayer = null; if (RasterDSOrFeatureClass is IRasterDataset) { //add rasterdataset as raster layer ThisLayer = new RasterLayerClass() as ILayer; ((IRasterLayer)ThisLayer).CreateFromDataset(RasterDSOrFeatureClass as IRasterDataset); } if (RasterDSOrFeatureClass is IFeatureClass) { //add feature class to a feature layer ThisLayer = new FeatureLayerClass() as ILayer; ((IFeatureLayer)ThisLayer).FeatureClass = RasterDSOrFeatureClass as IFeatureClass; } ThisLayer.Name = LayerName; //Add the raster layer to ArcMap NPSGlobal.Instance.Document.FocusMap.AddLayer(ThisLayer); NPSGlobal.Instance.Document.ActiveView.Refresh(); }
public static IRasterLayer xjShpPointToRaster(IFeatureClass xjFeatureClass, string RasterPath, double CellSize, string SecletctedField) { IFeatureClassDescriptor xjFeatureClassDescriptor = new FeatureClassDescriptorClass();//using ESRI.ArcGIS.GeoAnalyst; xjFeatureClassDescriptor.Create(xjFeatureClass, null, SecletctedField); IGeoDataset xjGeoDataset = xjFeatureClassDescriptor as IGeoDataset; IWorkspaceFactory xjwsf = new RasterWorkspaceFactoryClass();//using ESRI.ArcGIS.DataSourcesRaster; string xjRasterFolder = System.IO.Path.GetDirectoryName(RasterPath); IWorkspace xjws = xjwsf.OpenFromFile(xjRasterFolder, 0); IConversionOp xjConversionOp = new RasterConversionOpClass(); IRasterAnalysisEnvironment xjRasteren = xjConversionOp as IRasterAnalysisEnvironment; object xjCellSize = CellSize as object; xjRasteren.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref xjCellSize); string xjFileName = System.IO.Path.GetFileName(RasterPath); IRasterDataset xjdaset2 = xjConversionOp.ToRasterDataset(xjGeoDataset, "TIFF", xjws, xjFileName); IRasterLayer xjRasterLayer = new RasterLayerClass(); xjRasterLayer.CreateFromDataset(xjdaset2); return(xjRasterLayer); }
/// <summary> /// 加载栅格数据文件 /// </summary> /// <param name="axMapControl">地图控件引用</param> /// <param name="strFilePath">文件路径</param> /// <returns>正常:“”,异常:异常字符;</returns> private SystemErrorType LoadRasterFile(ref AxMapControl axMapControl, string strFilePath) { if (strFilePath == "") { return(SystemErrorType.enumFilePathIsNull); } try { IWorkspaceFactory pWorkspaceFactory = null; IRasterWorkspace pRasterWorkspace = null; IRasterDataset pRasterDataset = null; IRasterLayer pRasterLayer = null; String WorkspacePath = strFilePath.Substring(0, strFilePath.LastIndexOf('\\'));//e.g. c:/data/a.shp pWorkspaceFactory = new RasterWorkspaceFactoryClass() as IWorkspaceFactory; //如果符合要求 , 打开栅格数据文件并加载到地图控件中。 if (pWorkspaceFactory.IsWorkspace(WorkspacePath)) { pRasterWorkspace = pWorkspaceFactory.OpenFromFile(WorkspacePath, 0) as IRasterWorkspace; pRasterDataset = pRasterWorkspace.OpenRasterDataset(strFilePath.Substring(strFilePath.LastIndexOf('\\') + 1)); pRasterLayer = new RasterLayerClass() as IRasterLayer; pRasterLayer.CreateFromDataset(pRasterDataset); axMapControl.ClearLayers(); axMapControl.AddLayer(pRasterLayer); axMapControl.ActiveView.Refresh(); //axMapControl.Extent = axMapControl.FullExtent; } else { return(SystemErrorType.enumDataIsIllegal); } } catch (Exception) { return(SystemErrorType.enumArcObjectHandleError); } return(SystemErrorType.enumOK); }
//Ϊդ��ͼ�����ݽ���ͨ�ӷ�����ɫ public static IRasterLayer SetViewShedRenderer(IRaster pInRaster, string sField, string sPath) { IRasterDescriptor pRD = new RasterDescriptorClass(); pRD.Create(pInRaster, new QueryFilterClass(), sField); IReclassOp pReclassOp = new RasterReclassOpClass(); IGeoDataset pGeodataset = pInRaster as IGeoDataset; IRasterAnalysisEnvironment pEnv = pReclassOp as IRasterAnalysisEnvironment; IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); IWorkspace pWS = pWSF.OpenFromFile(sPath, 0); pEnv.OutWorkspace = pWS; object objSnap = null; object objExtent = pGeodataset.Extent; pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref objExtent, ref objSnap); pEnv.OutSpatialReference = pGeodataset.SpatialReference; IRasterLayer pRLayer = new RasterLayerClass(); 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(); pNumRemap.MapRange(dMinValue, 0, 0); pNumRemap.MapRange(0, dMaxValue, 1); IRemap pRemap = pNumRemap as IRemap; IRaster pOutRaster = pReclassOp.ReclassByRemap(pGeodataset, pRemap, false) as IRaster; pRLayer.CreateFromRaster(pOutRaster); return pRLayer; }
//Ϊդ��ͼ�����ݽ���������ɫ public static IRasterLayer SetStretchRenderer(IRaster pRaster) { try { //������ɫ���QIդ����ɫ IRasterStretchColorRampRenderer pStretchRen = new RasterStretchColorRampRendererClass(); IRasterRenderer pRasRen = pStretchRen as IRasterRenderer; //Ϊ��ɫ��������դ������ pRasRen.Raster = pRaster; pRasRen.Update(); //���������յ���ɫ IColor pFromColor = new RgbColorClass(); IRgbColor pRgbColor = pFromColor as IRgbColor; pRgbColor.Red = 255; pRgbColor.Green = 0; pRgbColor.Blue = 0; IColor pToColor = new RgbColorClass(); pRgbColor = pToColor as IRgbColor; pRgbColor.Red = 0; pRgbColor.Green = 255; pRgbColor.Blue = 0; //������ɫ�ּ� IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass(); pRamp.Size = 255; pRamp.FromColor = pFromColor; pRamp.ToColor = pToColor; bool ok = true; pRamp.CreateRamp(out ok); //����ɫ�ּ�������ɫ�в�ѡ��һ������ pStretchRen.BandIndex = 0; pStretchRen.ColorRamp = pRamp; pRasRen.Update(); IRasterLayer pRLayer = new RasterLayerClass(); pRLayer.CreateFromRaster(pRaster); pRLayer.Renderer = pStretchRen as IRasterRenderer; return pRLayer; } catch (Exception ex) { Console.WriteLine(ex.Message); return null; } }
/// <summary> /// 加载工作空间的方法进行封装,以便在空间数据库中调用(Personal Geodatabase、文件地理数据库、ArcSDE空间数据库) /// </summary> /// <param name="pWorkspace"></param> /// <param name="pMapControl"></param> private void AddAllDataset(IWorkspace pWorkspace, AxMapControl pMapControl) { IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny); pEnumDataset.Reset(); // 将Enum数据集中的数据一个一个地读到DataSet中 IDataset pDataset = pEnumDataset.Next(); // 判断数据集是否有数据 while (pDataset != null) { // 要素数据集 if (pDataset is IFeatureDataset) { IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name); IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets; pEnumDataset1.Reset(); IGroupLayer pGroupLayer = new GroupLayerClass(); pGroupLayer.Name = pFeatureDataset.Name; IDataset pDataset1 = pEnumDataset1.Next(); while (pDataset1 != null) { // 要素类 if (pDataset1 is IFeatureClass) { IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset1.Name); if (pFeatureLayer.FeatureClass != null) { pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; pGroupLayer.Add(pFeatureLayer); pMapControl.Map.AddLayer(pFeatureLayer); } } pDataset1 = pEnumDataset1.Next(); } } else if (pDataset is IFeatureClass) //要素类 { IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset.Name); pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; pMapControl.Map.AddLayer(pFeatureLayer); } else if (pDataset is IRasterDataset) //栅格数据集 { IRasterWorkspaceEx pRasterWorkspace = (IRasterWorkspaceEx)pWorkspace; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pDataset.Name); //影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid; pRasPyrmid = pRasterDataset as IRasterPyramid3; if (pRasPyrmid != null) { if (!(pRasPyrmid.Present)) { pRasPyrmid.Create(); //创建金字塔 } } IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); ILayer pLayer = pRasterLayer as ILayer; pMapControl.AddLayer(pLayer, 0); } pDataset = pEnumDataset.Next(); } pMapControl.ActiveView.Refresh(); // 同步鹰眼 SynchronizeEagleEye(); }
/// <summary> ///对Raster根据数据行进行渲染,可以渲染成单通道灰度显示和RGB合成显示 /// </summary> /// <param name="renderType">渲染方式调节</param> /// <returns></returns> public IRasterLayer RasterRenderedLayer(IRasterLayer pRL, bool renderType, int grayBandIndex, int[] rgbBandIndex) { //实例新的栅格图层 IRasterLayer rlayer = new RasterLayerClass(); string fullPath = pRL.FilePath; IRasterDataset rasterDataset = OpenFileRasterDataset(fullPath); //单波段 if (rgbBandIndex == null) { //如果grayBandIndex=-1 try { IRasterRenderer render = null; render = BandCombinationShow.StretchRenderer(rasterDataset, grayBandIndex); rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; return(rlayer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } } else//多波段显示 { try { if (!renderType) { IRasterRenderer render = BandCombinationShow.StretchRenderer(rasterDataset, grayPos); rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; } else { //设置彩色合成顺序 生成新的渲染模式 IRasterRGBRenderer render = new RasterRGBRendererClass(); render.RedBandIndex = rgbBandIndex[0]; render.GreenBandIndex = rgbBandIndex[1]; render.BlueBandIndex = rgbBandIndex[2]; IRasterStretch stretchType = (IRasterStretch)render; stretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; stretchType.StandardDeviationsParam = 2; rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; } return(rlayer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } } }
private void btnExecute_Click(object sender, EventArgs e) { string rstNm = txtOutNm.Text; string funNm = cmbFunction.Text; int before = System.Convert.ToInt32(nudBefore.Value); int after = System.Convert.ToInt32(nudAfter.Value); if (rstNm == null || rstNm == "") { MessageBox.Show("You must specify a output name", "No Output", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (lsbRaster.Items.Count < 1) { MessageBox.Show("You must select at least on Raster", "No Rasters", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (funNm == null || funNm == "") { MessageBox.Show("You must select at least on function", "No Function Selected", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } IRasterBandCollection rsBc = new RasterClass(); for (int i = 0; i < lsbRaster.Items.Count; i++) { rsBc.AppendBands((IRasterBandCollection)rstDic[lsbRaster.Items[i].ToString()]); } IFunctionRasterDataset fdset = rsUtil.compositeBandFunction(rsBc); rasterUtil.localType op = (rasterUtil.localType)Enum.Parse(typeof(rasterUtil.localType), funNm); this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Calculating raster values. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; rp.Show(); try { outraster = rsUtil.focalBandfunction(fdset, op, before, after); //rp.addMessage("Number of bands = " + ((IRasterBandCollection)outraster).Count); if (mp != null && addToMap) { rp.addMessage("Calculating Statistics..."); rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); //rsUtil.calcStatsAndHist(((IRaster2)outraster).RasterDataset); rstLyr.CreateFromDataset((IRasterDataset)outraster); rstLyr.Name = rstNm; rstLyr.Visible = false; mp.AddLayer(rstLyr); } outrastername = rstNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Creating Rasters" + t); rp.enableClose(); this.Close(); } }
public void btnExecute_Click(object sender, EventArgs e) { string rstNm = txtOutNm.Text; if (rstNm == null || rstNm == "") { MessageBox.Show("You must specify a output name", "No Output", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (lsbRaster.Items.Count < 1) { MessageBox.Show("You must select at least on Raster", "No Rasters", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } IRasterBandCollection rsBc = new RasterClass(); for (int i = 0; i < lsbRaster.Items.Count; i++) { rsBc.AppendBands((IRasterBandCollection)rstDic[lsbRaster.Items[i].ToString()]); } this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Building " + mStr + " Raster. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; rp.Show(); try { if (this.Text == "Create Composite Raster") { outraster = rsUtil.createRaster(rsUtil.compositeBandFunction(rsBc)); } else { outraster = rsUtil.createRaster(rsUtil.calcCombineRasterFunction(rsBc)); } if (mp != null && addToMap) { rp.addMessage("Calculating Statistics..."); rp.Show(); rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); //rsUtil.calcStatsAndHist(((IRaster2)outraster).RasterDataset); rstLyr.CreateFromRaster(outraster); rstLyr.Name = rstNm; rstLyr.Visible = false; mp.AddLayer(rstLyr); } outrastername = rstNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished " + mStr + " Raster" + t); rp.enableClose(); this.Close(); } }
public bool GetLayerFormDataset(IDataset pDataset, Collection pLayersColl) { try { if (pDataset == null) { return(false); } if (pLayersColl == null) { return(false); } if (pDataset.Type == esriDatasetType.esriDTFeatureDataset) { IFeatureLayer item = null; IFeatureClassContainer container = pDataset as IFeatureClassContainer; if (container.ClassCount > 0) { int classIndex = 0; IFeatureClass class2 = null; for (classIndex = 0; classIndex <= (container.ClassCount - 1); classIndex++) { class2 = container.get_Class(classIndex); if (class2.FeatureType == esriFeatureType.esriFTAnnotation) { item = new FDOGraphicsLayerClass() as IFeatureLayer; } else if (class2.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { item = new CoverageAnnotationLayerClass() as IFeatureLayer; } else if (class2.FeatureType == esriFeatureType.esriFTDimension) { item = new DimensionLayerClass() as IFeatureLayer; } else { item = new FeatureLayerClass(); } item.FeatureClass = class2; item.Name = pDataset.Name + " " + class2.AliasName; pLayersColl.Add(item, item.Name, null, null); } } } else if (pDataset.Type == esriDatasetType.esriDTFeatureClass) { IFeatureLayer layer2 = null; IFeatureClass class3 = pDataset as IFeatureClass; if (class3.FeatureType == esriFeatureType.esriFTAnnotation) { layer2 = new FDOGraphicsLayerClass() as IFeatureLayer; } else if (class3.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { layer2 = new CoverageAnnotationLayerClass() as IFeatureLayer; } else if (class3.FeatureType == esriFeatureType.esriFTDimension) { layer2 = new DimensionLayerClass() as IFeatureLayer; } else { layer2 = new FeatureLayerClass(); } layer2.FeatureClass = class3; layer2.Name = class3.AliasName; pLayersColl.Add(layer2, layer2.Name, null, null); } else if (pDataset.Type == esriDatasetType.esriDTPlanarGraph) { Interaction.MsgBox("暂时不支持 Planar Graph 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTGeometricNetwork) { Interaction.MsgBox("暂时不支持 Geometric Network 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTTopology) { Interaction.MsgBox("暂时不支持 Topology 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTText) { Interaction.MsgBox("暂时不支持 Text Dataset 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTTable) { Interaction.MsgBox("暂时不支持 Table Dataset 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTRelationshipClass) { Interaction.MsgBox("暂时不支持 Relationship Class 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTRasterDataset) { IRasterDataset rasterDataset = pDataset as IRasterDataset; IRasterLayer layer3 = new RasterLayerClass(); layer3.CreateFromDataset(rasterDataset); layer3.Name = pDataset.Name; pLayersColl.Add(layer3, layer3.Name, null, null); } else if (pDataset.Type == esriDatasetType.esriDTRasterBand) { Interaction.MsgBox("暂时不支持 Raster Band 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTTin) { ITinLayer layer4 = new TinLayerClass { Dataset = pDataset as ITin, Name = pDataset.Name }; pLayersColl.Add(layer4, layer4.Name, null, null); } else if (pDataset.Type == esriDatasetType.esriDTCadDrawing) { Interaction.MsgBox("暂时不支持 Cad Drawing 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else if (pDataset.Type == esriDatasetType.esriDTRasterCatalog) { Interaction.MsgBox("暂时不支持 Raster Catalog 格式的数据。", MsgBoxStyle.Information, "数据格式不支持"); } else { Interaction.MsgBox("无法识别的数据格式。", MsgBoxStyle.Information, "数据格式错误"); } return(true); } catch (Exception exception) { this.mErrOpt.ErrorOperate(this.mSubSysName, "FunFactory.LayerFun", "GetLayerFormDataset", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", ""); return(false); } }
private void btnExecute_Click(object sender, EventArgs e) { string rstNm = txtOutNm.Text; string mdPath = txtOutputPath.Text; if (rstNm == null || rstNm == "") { MessageBox.Show("You must specify a output name", "No Output", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (mdPath == null || mdPath == "") { MessageBox.Show("You must specify a model path", "No Output", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (lsbRaster.Items.Count < 1) { MessageBox.Show("You must select at least on Raster", "No Rasters", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } IRasterBandCollection rsBc = new RasterClass(); for (int i = 0; i < lsbRaster.Items.Count; i++) { rsBc.AppendBands((IRasterBandCollection)rstDic[lsbRaster.Items[i].ToString()]); } IFunctionRasterDataset frDset = rsUtil.compositeBandFunction(rsBc); this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Building Model Raster. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; rp.Show(); try { Statistics.ModelHelper br = new Statistics.ModelHelper(mdPath, rsUtil.createRaster(frDset), rsUtil); outraster = br.getRaster(); if (mp != null && addToMap) { rp.Show(); rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); rstLyr.CreateFromRaster(outraster); rstLyr.Name = rstNm; rstLyr.Visible = false; mp.AddLayer(rstLyr); } outrastername = rstNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Building Raster" + t); rp.enableClose(); this.Close(); } }
/// <summary> /// Where all of the work is done. Override from TabBaseViewModel /// </summary> internal override void CreateMapElement() { try { IsRunning = true; if (!CanCreateElement || ArcMap.Document == null || ArcMap.Document.FocusMap == null || string.IsNullOrWhiteSpace(SelectedSurfaceName)) { return; } //base.CreateMapElement(); var surface = GetSurfaceFromMapByName(ArcMap.Document.FocusMap, SelectedSurfaceName); if (surface == null) { return; } // Determine if selected surface is projected or geographic ILayer surfaceLayer = GetLayerFromMapByName(ArcMap.Document.FocusMap, SelectedSurfaceName); var geoDataset = surfaceLayer as IGeoDataset; SelectedSurfaceSpatialRef = geoDataset.SpatialReference; if (SelectedSurfaceSpatialRef is IGeographicCoordinateSystem) { MessageBox.Show(VisibilityLibrary.Properties.Resources.RLOSUserPrompt, VisibilityLibrary.Properties.Resources.RLOSUserPromptCaption); return; } if (geoDataset != null && ArcMap.Document.FocusMap.SpatialReference.FactoryCode != geoDataset.SpatialReference.FactoryCode) { MessageBox.Show(VisibilityLibrary.Properties.Resources.LOSDataFrameMatch, VisibilityLibrary.Properties.Resources.LOSSpatialReferenceCaption); return; } using (ComReleaser oComReleaser = new ComReleaser()) { // Create feature workspace IFeatureWorkspace workspace = CreateFeatureWorkspace("tempWorkspace"); StartEditOperation((IWorkspace)workspace); // Create feature class IFeatureClass pointFc = CreateObserversFeatureClass(workspace, SelectedSurfaceSpatialRef, "Output" + RunCount.ToString()); double finalObserverOffset = GetOffsetInZUnits(ObserverOffset.Value, surface.ZFactor, OffsetUnitType); double finalSurfaceOffset = GetOffsetInZUnits(SurfaceOffset, surface.ZFactor, OffsetUnitType); double conversionFactor = GetConversionFactor(SelectedSurfaceSpatialRef); double convertedMinDistance = MinDistance * conversionFactor; double convertedMaxDistance = MaxDistance * conversionFactor; double finalMinDistance = GetLinearDistance(ArcMap.Document.FocusMap, convertedMinDistance, OffsetUnitType); double finalMaxDistance = GetLinearDistance(ArcMap.Document.FocusMap, convertedMaxDistance, OffsetUnitType); double finalLeftHorizontalFOV = GetAngularDistance(ArcMap.Document.FocusMap, LeftHorizontalFOV, AngularUnitType); double finalRightHorizontalFOV = GetAngularDistance(ArcMap.Document.FocusMap, RightHorizontalFOV, AngularUnitType); double finalBottomVerticalFOV = GetAngularDistance(ArcMap.Document.FocusMap, BottomVerticalFOV, AngularUnitType); double finalTopVerticalFOV = GetAngularDistance(ArcMap.Document.FocusMap, TopVerticalFOV, AngularUnitType); // Out radius geometries List <IGeometry> radius2GeomList = new List <IGeometry>(); List <IGeometry> radius1_2GeomList = new List <IGeometry>(); List <IGeometry> donutGeomList = new List <IGeometry>(); foreach (var observerPoint in ObserverAddInPoints) { // Create buffer geometries for final Min/Max distance ITopologicalOperator topologicalOperator = observerPoint.Point as ITopologicalOperator; IGeometry geom = topologicalOperator.Buffer(finalMaxDistance); radius2GeomList.Add(geom); radius1_2GeomList.Add(geom); if (finalMinDistance > 0) { IGeometry geom2 = topologicalOperator.Buffer(finalMinDistance); ITopologicalOperator eraseTopo = geom as ITopologicalOperator; IGeometry erasedGeom = eraseTopo.Difference(geom2); donutGeomList.Add(erasedGeom); } else { radius1_2GeomList.Add(geom); } double z1 = surface.GetElevation(observerPoint.Point) + finalObserverOffset; //create a new point feature IFeature ipFeature = pointFc.CreateFeature(); // Set the field values for the feature SetFieldValues(finalObserverOffset, finalSurfaceOffset, finalMinDistance, finalMaxDistance, finalLeftHorizontalFOV, finalRightHorizontalFOV, finalBottomVerticalFOV, finalTopVerticalFOV, ipFeature); if (double.IsNaN(z1)) { System.Windows.MessageBox.Show(VisibilityLibrary.Properties.Resources.RLOSPointsOutsideOfSurfaceExtent, VisibilityLibrary.Properties.Resources.MsgCalcCancelled); return; } //Create shape IPoint point = new PointClass() { Z = z1, X = observerPoint.Point.X, Y = observerPoint.Point.Y, ZAware = true }; ipFeature.Shape = point; ipFeature.Store(); } IFeatureClassDescriptor fd = new FeatureClassDescriptorClass(); fd.Create(pointFc, null, "OBJECTID"); StopEditOperation((IWorkspace)workspace); try { ILayer layer = GetLayerFromMapByName(ArcMap.Document.FocusMap, SelectedSurfaceName); string layerPath = GetLayerPath(layer); IFeatureLayer ipFeatureLayer = new FeatureLayerClass(); ipFeatureLayer.FeatureClass = pointFc; IDataset ipDataset = (IDataset)pointFc; string outputFcName = ipDataset.BrowseName + "_output"; string strPath = ipDataset.Workspace.PathName + "\\" + ipDataset.BrowseName; string outPath = ipDataset.Workspace.PathName + "\\" + outputFcName; IVariantArray parameters = new VarArrayClass(); parameters.Add(layerPath); parameters.Add(strPath); parameters.Add(outPath); esriLicenseStatus status = GetSpatialAnalystLicense(); if (status == esriLicenseStatus.esriLicenseUnavailable || status == esriLicenseStatus.esriLicenseFailure || status == esriLicenseStatus.esriLicenseNotInitialized || status == esriLicenseStatus.esriLicenseNotLicensed || status == esriLicenseStatus.esriLicenseUnavailable) { System.Windows.MessageBox.Show(VisibilityLibrary.Properties.Resources.LOSSpatialAnalystLicenseInvalid, VisibilityLibrary.Properties.Resources.MsgCalcCancelled); return; } IGeoProcessor2 gp = new GeoProcessorClass(); gp.AddOutputsToMap = false; // Add a mask to buffer the output to selected distance SetGPMask(workspace, radius2GeomList, gp, "radiusMask"); object oResult = gp.Execute("Visibility_sa", parameters, null); IGeoProcessorResult ipResult = (IGeoProcessorResult)oResult; ComReleaser.ReleaseCOMObject(gp); gp = null; GC.Collect(); // Add buffer geometries to the map foreach (IGeometry geom in radius1_2GeomList) { var color = new RgbColorClass() { Blue = 255 } as IColor; AddGraphicToMap(geom, color, true); } IRasterLayer outputRasterLayer = new RasterLayerClass(); outputRasterLayer.CreateFromFilePath(outPath); string fcName = IntersectOutput(outputRasterLayer, ipDataset, workspace, donutGeomList); IFeatureClass finalFc = workspace.OpenFeatureClass(fcName); IFeatureLayer outputFeatureLayer = new FeatureLayerClass(); outputFeatureLayer.FeatureClass = finalFc; //Add it to a map if the layer is valid. if (outputFeatureLayer != null) { // set the renderer IFeatureRenderer featRend = UniqueValueRenderer(workspace, finalFc); IGeoFeatureLayer geoLayer = outputFeatureLayer as IGeoFeatureLayer; geoLayer.Renderer = featRend; geoLayer.Name = "RLOS_Visibility_" + RunCount.ToString(); // Set the layer transparency IDisplayFilterManager filterManager = (IDisplayFilterManager)outputFeatureLayer; ITransparencyDisplayFilter filter = new TransparencyDisplayFilter(); filter.Transparency = 80; filterManager.DisplayFilter = filter; ESRI.ArcGIS.Carto.IMap map = ArcMap.Document.FocusMap; map.AddLayer((ILayer)outputFeatureLayer); IEnvelope envelope = outputFeatureLayer.AreaOfInterest.Envelope; ZoomToExtent(envelope); } RunCount += 1; } catch (Exception ex) { System.Windows.MessageBox.Show(VisibilityLibrary.Properties.Resources.MsgTryAgain, VisibilityLibrary.Properties.Resources.MsgCalcCancelled); } //Reset(true); } } catch (Exception ex) { System.Windows.MessageBox.Show(VisibilityLibrary.Properties.Resources.MsgTryAgain, VisibilityLibrary.Properties.Resources.MsgCalcCancelled); } finally { IsRunning = false; } }
public bool RasterSubsetByPolygon(IRasterDataset pRasterDataset, IPolygon clipGeo, string FileName) { try { IRasterBandCollection rasterBands = pRasterDataset as IRasterBandCollection; int nBandCount = rasterBands.Count; //设置输出栅格参数 IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromDataset(pRasterDataset); IRaster pRaster = rasterLayer.Raster;//此处只得到前3个波段 IRasterBandCollection bandsNew = pRaster as IRasterBandCollection; IRasterBand pBand = null; for (int i = 3; i < nBandCount; i++) { pBand = rasterBands.Item(i); bandsNew.AppendBand(pBand); } IRasterProps pProps = pRaster as IRasterProps; object cellSizeProvider = pProps.MeanCellSize().X; IGeoDataset pInputDataset = pRaster as IGeoDataset; //IGeoDataset pInputDataset = pRasterDataset as IGeoDataset;//此种方式也只是得到前3个波段 //设置格格处理环境 IExtractionOp2 pExtractionOp = new RasterExtractionOpClass(); IRasterAnalysisEnvironment pRasterAnaEnvir = pExtractionOp as IRasterAnalysisEnvironment; pRasterAnaEnvir.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider); object extentProvider = clipGeo.Envelope; object snapRasterData = Type.Missing; pRasterAnaEnvir.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData); IGeoDataset pOutputDataset = pExtractionOp.Polygon(pInputDataset, clipGeo as IPolygon, true); //裁切操作 IRaster clipRaster; //裁切后得到的IRaster if (pOutputDataset is IRasterLayer) { IRasterLayer rasterLayer2 = pOutputDataset as IRasterLayer; clipRaster = rasterLayer.Raster; } else if (pOutputDataset is IRasterDataset) { IRasterDataset rasterDataset = pOutputDataset as IRasterDataset; clipRaster = rasterDataset.CreateDefaultRaster(); } else if (pOutputDataset is IRaster) { clipRaster = pOutputDataset as IRaster; IRasterProps temRastPro = clipRaster as IRasterProps; temRastPro.NoDataValue = pProps.NoDataValue; temRastPro.PixelType = rstPixelType.PT_UCHAR; } else { return(false); } //保存裁切后得到的clipRaster //如果直接保存为img影像文件 //判断保存类型 string strFileType = System.IO.Path.GetExtension(FileName); switch (strFileType.ToUpper()) { case "TIF": strFileType = "TIFF"; break; case "IMG": strFileType = "IMAGINE Image"; break; default: strFileType = "TIFF"; break; } IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass(); IWorkspace pWorkspace = pWKSF.OpenFromFile(System.IO.Path.GetDirectoryName(FileName), 0); ISaveAs pSaveAs = clipRaster as ISaveAs; IDataset pDataset = pSaveAs.SaveAs(FileName, pWorkspace, strFileType);//以TIF格式保存 System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataset); MessageBox.Show("\"" + FileName + "\"成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return(true); //MessageBox.Show("成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception exp) { MessageBox.Show(exp.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } }
private void btnCalculator_Click(object sender, EventArgs e) { if (this.lstLayer.Items.Count == 0) { MessageBox.Show("请先在地图中加载要操作的栅格图像."); } try { string strOutFileName=""; if (this.txtExpression.Text.IndexOf(" = ")>0) strOutFileName = this.txtExpression.Text.Substring(0, this.txtExpression.Text.IndexOf(" = ")); IGeoDataset pGeoDs = pMapAlgebraOp.Execute(this.txtExpression.Text.Trim()); IRaster pOutRaster = pGeoDs as IRaster; IRasterLayer pOutRasterLayer = new RasterLayerClass(); if(strOutFileName.Trim()!="") { IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); IWorkspace pRWS = pWSF.OpenFromFile(strAnalysisPath, 0); IRasterBandCollection pRasBandCol = (IRasterBandCollection)pGeoDs; pRasBandCol.SaveAs(strOutFileName, pRWS, "GRID");//"IMAGINE Image" pOutRasterLayer = UtilityFunction.SetStretchRenderer(pOutRaster); pOutRasterLayer.Name = strOutFileName; pMap.AddLayer(pOutRasterLayer); } else { pOutRasterLayer = UtilityFunction.SetStretchRenderer(pOutRaster); pMap.AddLayer(pOutRaster as IRasterLayer); } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
private void DrawRaster(string file, IDisplay display) { try { var rl = new RasterLayerClass(); rl.CreateFromFilePath(file); var props = (IRasterProps)rl.Raster; props.SpatialReference = _dataSpatialReference; // Fix for issue "Each 256x256 tile rendering differently causing blockly effect." // In 10.1 the StrecthType for rasters seems to have changed from esriRasterStretch_NONE to "Percent Clip", // giving color problems with 24 or 32 bits tiles. // http://arcbrutile.codeplex.com/workitem/11207 var image = new Bitmap(file, true); var format = image.PixelFormat; if (format == PixelFormat.Format24bppRgb || format == PixelFormat.Format32bppArgb || format == PixelFormat.Format32bppRgb) { var rasterRGBRenderer = new RasterRGBRendererClass(); ((IRasterStretch2)rasterRGBRenderer).StretchType = esriRasterStretchTypesEnum.esriRasterStretch_NONE; rl.Renderer = rasterRGBRenderer; } rl.Renderer.ResamplingType = rstResamplingTypes.RSP_BilinearInterpolation; // Now set the spatial reference to the dataframe spatial reference! // Do not remove this line... rl.SpatialReference = SpatialReference; //rl.Draw(ESRI.ArcGIS.esriSystem.esriDrawPhase.esriDPGeography, (IDisplay)activeView.ScreenDisplay, null); rl.Draw(esriDrawPhase.esriDPGeography, display, null); //Logger.Debug("End drawing tile."); } // ReSharper disable once EmptyGeneralCatchClause catch (Exception) { // what to do now... // just try to load next tile... } }
private IRasterLayer IntersectRaster(IRasterLayer rsterLayer, IPolygon polygon2) { // 获得与组合成的面相叠加的栅格 if (radioBtnKJ.Checked && polygon2 != null) { IExtractionOp op = new RasterExtractionOpClass(); IGeoDataset dataset = op.Polygon((IGeoDataset)rsterLayer.Raster, polygon2, true); IRasterLayer layer = new RasterLayerClass(); layer.CreateFromRaster((IRaster)dataset); rsterLayer = layer; } return rsterLayer; }
private void btnClip_Click(object sender, EventArgs e) { string rstNm = cmbInRaster1.Text; string outNm = txtOutName.Text; string visStr = cmbVis.Text; string irStr = cmbIr.Text; if (visStr == "" || visStr == null || rstNm == "" || rstNm == null||irStr==""||irStr==null) { MessageBox.Show("You must have a raster layer selected and a valid visual and ir band index value", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (outNm == "" || outNm == null) { MessageBox.Show("You must specify an output raster name", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } this.Visible = false; int visVl = System.Convert.ToInt32(visStr)-1; int irVl = System.Convert.ToInt32(irStr)-1; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Making Raster. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; try { IRaster rst = rstDic[rstNm]; outraster = rsUtil.returnRaster(rsUtil.calcNDVIFunction(rst, visVl, irVl)); if (mp != null && addToMap) { rp.addMessage("Calculating Statistics..."); rp.Show(); rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); //rsUtil.calcStatsAndHist(((IRaster2)outraster).RasterDataset); rstLyr.CreateFromRaster(outraster); rstLyr.Name = outNm; rstLyr.Visible = false; mp.AddLayer(rstLyr); } outrastername = outNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Making Raster" + t); rp.enableClose(); this.Close(); } }
//Ϊդ��ͼ�����ݽ��з�����ɫ public static IRasterLayer GetRLayerClassifyColor(IRaster pRaster, double dMaxDis) { IRasterClassifyColorRampRenderer pClassRen = new RasterClassifyColorRampRendererClass(); IRasterRenderer pRasRen = pClassRen as RasterClassifyColorRampRendererClass; //Set raster for the render and update pRasRen.Raster = pRaster; pClassRen.ClassCount = 10; pRasRen.Update(); //Create a color ramp to use //���������յ���ɫ IColor pFromColor = new RgbColorClass(); IRgbColor pRgbColor = pFromColor as IRgbColor; pRgbColor.Red = 255; pRgbColor.Green = 0; pRgbColor.Blue = 0; IColor pToColor = new RgbColorClass(); pRgbColor = pToColor as IRgbColor; pRgbColor.Red = 0; pRgbColor.Green = 255; pRgbColor.Blue = 0; //������ɫ�ּ� IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass(); pRamp.Size = 10; pRamp.FromColor = pFromColor; pRamp.ToColor = pToColor; bool ok = true; pRamp.CreateRamp(out ok); //Create symbol for the classes IFillSymbol pFSymbol = new SimpleFillSymbolClass(); double LabelValue = Convert.ToDouble(dMaxDis / 6); for (int i = 0; i <= pClassRen.ClassCount - 1; i++) { pFSymbol.Color = pRamp.get_Color(i); pClassRen.set_Symbol(i, pFSymbol as ISymbol); double h1 = LabelValue * i; double h2 = LabelValue * (i + 1); pClassRen.set_Label(i, h1.ToString() + "��" + h2.ToString()); } //Update the renderer and plug into layer pRasRen.Update(); IRasterLayer pRLayer = new RasterLayerClass(); pRLayer.CreateFromRaster(pRaster); pRLayer.Renderer = pClassRen as IRasterRenderer; return pRLayer; }
//Ϊդ��ͼ�����ݽ���Ψһֵ��ɫ public static IRasterLayer GetRLayerUniqueColor(IRaster pRaster, double dMaxDis) { try { IRasterBandCollection pBandCol = pRaster as IRasterBandCollection; IRasterBand pBand = pBandCol.Item(0) as IRasterBand; bool ExistTable; ITable pTable = null; pBand.HasTable(out ExistTable); if (ExistTable == false) { pTable = pBand.AttributeTable as ITable; } int iNumOfValues = pTable.RowCount(null); string sFieldName = "Value"; int iFieldIndex = pTable.FindField(sFieldName); IRandomColorRamp pRamp = new RandomColorRampClass(); pRamp.Size = iNumOfValues; pRamp.Seed = 100; bool a = true; pRamp.CreateRamp(out a); IFillSymbol pFSymbol = new SimpleFillSymbolClass(); IRasterUniqueValueRenderer pUVRen = new RasterUniqueValueRendererClass(); IRasterRenderer pRasRen = pUVRen as IRasterRenderer; pRasRen.Raster = pRaster; pRasRen.Update(); pUVRen.HeadingCount = 1; pUVRen.set_Heading(0, "�ȼ�"); pUVRen.set_ClassCount(0, iNumOfValues); pUVRen.Field = sFieldName; //��ʼѭ��������ɫ double LabelValue; double s = Convert.ToDouble(dMaxDis / 5); IRgbColor pRGBColor = new RgbColorClass(); for (int i = 0; i < iNumOfValues - 1; i++) { IColor pColor = pRamp.get_Color(i); IRow pRow = pTable.GetRow(i); string sLabel = ""; LabelValue = Convert.ToDouble(pRow.get_Value(iFieldIndex)); if (LabelValue >= 0 || LabelValue <= s) { sLabel = "0" + "��" + s.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h1 = s * 2; if (LabelValue >= s || LabelValue <= s * 2) { sLabel = s.ToString() + "��" + h1.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h2 = s * 3; if (LabelValue >= s * 2 || LabelValue <= s * 3) { sLabel = h1.ToString() + "��" + h2.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h3 = s * 4; if (LabelValue >= s * 3 || LabelValue <= s * 4) { sLabel = h2.ToString() + "��" + h3.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h4 = s * 5; if (LabelValue >= s * 4 || LabelValue <= s * 5) { sLabel = h3.ToString() + "��" + h4.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } pUVRen.AddValue(0, i, LabelValue); pUVRen.set_Label(0, i, sLabel); pFSymbol.Color = pColor; pUVRen.set_Symbol(0, i, pFSymbol as ISymbol); } pRasRen.Update(); IRasterLayer pRLayer = new RasterLayerClass(); pRLayer.CreateFromRaster(pRaster); pRLayer.Renderer = pUVRen as IRasterRenderer; return pRLayer; } catch (Exception ex) { Console.WriteLine(ex.Message); return null; } }
public static void AddDataset(IBasicMap pMap, IDataset pDataset, string dsName) { IFeatureLayer fDOGraphicsLayerClass; IFeatureClass j; IFeatureLayer featureLayerClass; if (dsName == null) { dsName = ""; } switch (pDataset.Type) { case esriDatasetType.esriDTFeatureDataset: { IEnumDataset subsets = pDataset.Subsets; subsets.Reset(); for (IDataset i = subsets.Next(); i != null; i = subsets.Next()) { MapHelper.AddDataset(pMap, i, dsName); } return; } case esriDatasetType.esriDTFeatureClass: { IFeatureClass idataset0 = (IFeatureClass)pDataset; if (idataset0.FeatureType == esriFeatureType.esriFTAnnotation) { fDOGraphicsLayerClass = new FDOGraphicsLayerClass(); try { fDOGraphicsLayerClass.FeatureClass = idataset0; fDOGraphicsLayerClass.Name = string.Concat(dsName, idataset0.AliasName); pMap.AddLayer(fDOGraphicsLayerClass); return; } catch (Exception exception) { exception.ToString(); return; } } else if (idataset0.FeatureType != esriFeatureType.esriFTDimension) { fDOGraphicsLayerClass = new FeatureLayerClass() { FeatureClass = idataset0, Name = string.Concat(dsName, idataset0.AliasName) }; pMap.AddLayer(fDOGraphicsLayerClass); return; } else { fDOGraphicsLayerClass = new DimensionLayerClass() { FeatureClass = idataset0, Name = string.Concat(dsName, idataset0.AliasName) }; pMap.AddLayer(fDOGraphicsLayerClass); return; } break; } case esriDatasetType.esriDTPlanarGraph: case esriDatasetType.esriDTText: case esriDatasetType.esriDTRelationshipClass: { return; } case esriDatasetType.esriDTGeometricNetwork: { IGeometricNetwork geometricNetwork = pDataset as IGeometricNetwork; if (geometricNetwork == null) { return; } IEnumFeatureClass classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTSimpleJunction]; classesByType.Reset(); for (j = classesByType.Next(); j != null; j = classesByType.Next()) { featureLayerClass = new FeatureLayerClass() { FeatureClass = j, Name = string.Concat(dsName, (j as IDataset).Name) }; pMap.AddLayer(featureLayerClass); } classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTComplexJunction]; classesByType.Reset(); for (j = classesByType.Next(); j != null; j = classesByType.Next()) { featureLayerClass = new FeatureLayerClass() { FeatureClass = j, Name = string.Concat(dsName, (j as IDataset).Name) }; pMap.AddLayer(featureLayerClass); } classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTSimpleEdge]; classesByType.Reset(); for (j = classesByType.Next(); j != null; j = classesByType.Next()) { featureLayerClass = new FeatureLayerClass() { FeatureClass = j, Name = string.Concat(dsName, (j as IDataset).Name) }; pMap.AddLayer(featureLayerClass); } classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTComplexEdge]; classesByType.Reset(); for (j = classesByType.Next(); j != null; j = classesByType.Next()) { featureLayerClass = new FeatureLayerClass() { FeatureClass = j, Name = string.Concat(dsName, (j as IDataset).Name) }; pMap.AddLayer(featureLayerClass); } return; } case esriDatasetType.esriDTTopology: { ITopologyLayer topologyLayerClass = new TopologyLayerClass() { Topology = pDataset as ITopology }; (topologyLayerClass as ILayer).Name = string.Concat(dsName, pDataset.Name); pMap.AddLayer(topologyLayerClass as ILayer); return; } case esriDatasetType.esriDTTable: { try { IRasterCatalogTable rasterCatalogTableClass = new RasterCatalogTable() { Table = (ITable)pDataset }; rasterCatalogTableClass.Update(); IRasterCatalogLayer rasterCatalogLayerClass = new RasterCatalogLayerClass(); rasterCatalogLayerClass.Create(rasterCatalogTableClass); rasterCatalogLayerClass.Name = string.Concat(dsName, pDataset.BrowseName); pMap.AddLayer(rasterCatalogLayerClass); return; } catch { try { IStandaloneTableCollection ibasicMap0 = pMap as IStandaloneTableCollection; IPropertySet connectionProperties = pDataset.Workspace.ConnectionProperties; bool flag = false; int num = 0; while (true) { if (num < ibasicMap0.StandaloneTableCount) { ITable table = ibasicMap0.StandaloneTable[num].Table; if ( !connectionProperties.IsEqual((table as IDataset).Workspace.ConnectionProperties) || !((table as IDataset).Name == pDataset.Name)) { num++; } else { flag = true; break; } } else { break; } } if (!flag) { ibasicMap0.AddStandaloneTable(new StandaloneTableClass() { Table = pDataset as ITable }); } } catch (Exception exception1) { Logger.Current.Write(exception1.Message, LogLevel.Error, null); } return; } break; } case esriDatasetType.esriDTRasterDataset: case esriDatasetType.esriDTRasterBand: { IRasterLayer rasterLayerClass = new RasterLayerClass(); rasterLayerClass.CreateFromDataset((IRasterDataset)pDataset); rasterLayerClass.Name = string.Concat(dsName, pDataset.Name); pMap.AddLayer(rasterLayerClass); return; } case esriDatasetType.esriDTTin: { ITinLayer tinLayerClass = new TinLayerClass() { Dataset = (ITin)pDataset, Name = string.Concat(dsName, pDataset.Name) }; pMap.AddLayer(tinLayerClass); return; } case esriDatasetType.esriDTCadDrawing: { ICadLayer cadLayerClass = new CadLayerClass() { CadDrawingDataset = pDataset as ICadDrawingDataset, Name = pDataset.Name }; pMap.AddLayer(cadLayerClass); return; } default: { return; } } }
private void btnExecute_Click(object sender, EventArgs e) { string rstNm = txtOutNm.Text; float intercept = System.Convert.ToSingle(nudIntercept.Value); if (rstNm == null || rstNm == "") { MessageBox.Show("You must specify a output name", "No Output", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (dgvRasterSlopes.Rows.Count < 1) { MessageBox.Show("You must select at least one Raster", "No Rasters", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } IRasterBandCollection rsBc = new RasterClass(); List <float> slopes = new List <float>(); slopes.Add(intercept); for (int i = 0; i < dgvRasterSlopes.Rows.Count; i++) { rsBc.AppendBands((IRasterBandCollection)rstDic[dgvRasterSlopes[0, i].Value.ToString()]); object vl = dgvRasterSlopes[1, i].Value; if (Convert.IsDBNull(vl)) { vl = 0; } slopes.Add(System.Convert.ToSingle(vl)); } IFunctionRasterDataset comp = rsUtil.compositeBandFunction(rsBc); List <float[]> fslopes = new List <float[]>(); fslopes.Add(slopes.ToArray()); this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Transforming Rasters. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; rp.Show(); try { outraster = rsUtil.returnRaster(rsUtil.calcRegressFunction(comp, fslopes)); if (mp != null && addToMap) { rp.addMessage("Calculating Statistics..."); rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); //rsUtil.calcStatsAndHist(((IRaster2)outraster).RasterDataset); rstLyr.CreateFromRaster(outraster); rstLyr.Name = rstNm; rstLyr.Visible = false; mp.AddLayer(rstLyr); } outrastername = rstNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Transforming Rasters" + t); rp.enableClose(); this.Close(); } }
private static void DrawRaster(string file) { try{ Stopwatch timer = new Stopwatch(); timer.Start(); IRasterLayer rl; if (!layers.ContainsKey(file)) { Logger.Debug("Start drawing tile" + file + "..."); rl = new RasterLayerClass(); rl.CreateFromFilePath(file); var props = (IRasterProps)rl.Raster; props.SpatialReference = _dataSpatialReference; if (_needReproject) { IRasterGeometryProc rasterGeometryProc = new RasterGeometryProcClass(); var missing = Type.Missing; rasterGeometryProc.ProjectFast(_layerSpatialReference, rstResamplingTypes.RSP_NearestNeighbor, ref missing, rl.Raster); } // Fix for issue "Each 256x256 tile rendering differently causing blockly effect." // In 10.1 the StrecthType for rasters seems to have changed from esriRasterStretch_NONE to "Percent Clip", // giving color problems with 24 or 32 bits tiles. // http://arcbrutile.codeplex.com/workitem/11207 var image = new Bitmap(file, true); var format = image.PixelFormat; if (format == PixelFormat.Format24bppRgb || format == PixelFormat.Format32bppRgb) { var rasterRGBRenderer = new RasterRGBRendererClass(); ((IRasterStretch2)rasterRGBRenderer).StretchType = esriRasterStretchTypesEnum.esriRasterStretch_NONE; rl.Renderer = rasterRGBRenderer; } rl.Renderer.ResamplingType = rstResamplingTypes.RSP_BilinearInterpolation; // Now set the spatial reference to the dataframe spatial reference! // Do not remove this line... rl.SpatialReference = _layerSpatialReference; timer.Stop(); Logger.Debug(file + "读取花费时间:" + timer.Elapsed.Milliseconds); layers.Add(file, rl); layerNames.Enqueue(file); if (layerNames.Count > 100) { string tempname = layerNames.Dequeue(); layers.Remove(tempname); } } else { layers.TryGetValue(file, out rl); timer.Stop(); Logger.Debug(file + "查询花费时间:" + timer.Elapsed.Milliseconds); } timer.Reset(); //rl.Draw(ESRI.ArcGIS.esriSystem.esriDrawPhase.esriDPGeography, (IDisplay)activeView.ScreenDisplay, null); rl.Draw(esriDrawPhase.esriDPGeography, _display, null); //activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, trackCancel, env); timer.Stop(); Logger.Debug(file + "绘制花费时间:" + timer.Elapsed.Milliseconds); //Logger.Debug("End drawing tile."); } // ReSharper disable once EmptyGeneralCatchClause catch (Exception) { // what to do now... // just try to load next tile... } }
private void btnExecute_Click(object sender, EventArgs e) { string rstNm = txtOutNm.Text; string mtypStr = cmbMergeType.Text; if (rstNm == null || rstNm == "") { MessageBox.Show("You must specify a output name","No Output",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } if (lsbRaster.Items.Count < 1) { MessageBox.Show("You must select at least on Raster", "No Rasters", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } IRaster[] rsArr = new IRaster[lsbRaster.Items.Count]; for (int i = 0; i < lsbRaster.Items.Count; i++) { rsArr[i]=rstDic[lsbRaster.Items[i].ToString()]; } if (mtypStr == null || mtypStr == "") { MessageBox.Show("You must specify a merge type","No merge type",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } rasterUtil.mergeType mType = (rasterUtil.mergeType)Enum.Parse(typeof(rasterUtil.mergeType),mtypStr); this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Merging Rasters. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; rp.Show(); try { outraster = rsUtil.createRaster(rsUtil.calcMosaicFunction(rsArr,mType));//rsUtil.mergeRasterFunction(rsArr, mType, rstNm);// if (mp != null&&addToMap) { rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); rstLyr.CreateFromRaster(outraster); rstLyr.Visible = false; rstLyr.Name = rstNm; mp.AddLayer((ILayer)rstLyr); } outrastername = rstNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Mosaic Raster" + t); rp.enableClose(); this.Close(); } }
//cyf 2011065 modify public override void OnClick() { Exception err = null; /////获取工程项目名称 DevComponents.AdvTree.Node ProjectNode = new DevComponents.AdvTree.Node(); ProjectNode = m_Hook.ProjectTree.SelectedNode; while (ProjectNode.Parent != null) { ProjectNode = ProjectNode.Parent; } //cyf 20110625 add: DevComponents.AdvTree.Node DBNode = new DevComponents.AdvTree.Node(); //数据库树节点 //获取数据库节点 DBNode = m_Hook.ProjectTree.SelectedNode; while (DBNode.Parent != null && DBNode.DataKeyString != "DB") { DBNode = DBNode.Parent; } if (DBNode.DataKeyString != "DB") { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据库节点失败!"); return; } DevComponents.AdvTree.Node DtSetNode = new DevComponents.AdvTree.Node(); //数据集树节点 #region 获取数据集节点 if (DBNode.Text == "现势库" || DBNode.Text == "历史库" || DBNode.Text == "临时库") //.DataKeyString == "现势库" { //获取数据集节点 DtSetNode = m_Hook.ProjectTree.SelectedNode; while (DtSetNode.Parent != null && DtSetNode.DataKeyString != "FD") { DtSetNode = DtSetNode.Parent; } if (DtSetNode.DataKeyString != "FD") { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据集节点失败!"); return; } } else if (DBNode.Text == "栅格数据库") { //cyf 20110626 add:获取栅格数据库图层节点 DtSetNode = m_Hook.ProjectTree.SelectedNode; if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "RC") { while (DtSetNode.Parent != null && DtSetNode.DataKeyString != "RC") { DtSetNode = DtSetNode.Parent; } if (DtSetNode.DataKeyString != "RC") { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据集节点失败!"); return; } } else if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "RD") { while (DtSetNode.Parent != null && DtSetNode.DataKeyString != "RD") { DtSetNode = DtSetNode.Parent; } if (DtSetNode.DataKeyString != "RD") { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据集节点失败!"); return; } } //end } #endregion XmlElement elementTemp = (DBNode.Tag as XmlElement).SelectSingleNode(".//连接信息") as XmlElement; IWorkspace TempWorkSpace = ModDBOperator.GetDBInfoByXMLNode(elementTemp, "") as IWorkspace; if (TempWorkSpace == null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接数据库失败!"); return; } //cyf 20110625 modify ILayer player = null; //ILayer player = ModDBOperator.GetGroupLayer(m_Hook.MapControl, m_Hook.ProjectTree.SelectedNode.DataKeyString + "_" + ProjectNode.Text); if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "FD") { player = ModDBOperator.GetGroupLayer(m_Hook.MapControl, m_Hook.ProjectTree.SelectedNode.Text + "_" + ProjectNode.Text); } else if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "FC") { player = ModDBOperator.GetGroupLayer(m_Hook.MapControl, DtSetNode.Text + "_" + ProjectNode.Text); } //cyf 20110626 add:添加获取栅格数据图层 else if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "RC" || m_Hook.ProjectTree.SelectedNode.DataKeyString == "RD") { //获取栅格数据图层 player = ModDBOperator.GetGroupLayer(m_Hook.MapControl, DtSetNode.Text + "_" + ProjectNode.Text); } //end if (player != null) { m_Hook.MapControl.Map.DeleteLayer(player); m_Hook.TOCControl.Update(); } //end IGroupLayer pGroupLayer = new GroupLayerClass(); //cyf 20110625 if (DBNode.Text == "现势库" || DBNode.Text == "历史库" || DBNode.Text == "临时库") //.DataKeyString == "现势库" { /////////若为历史库管理状态退出该状态,加载现势库 m_Hook.MapControl.Map.ClearLayers(); Plugin.Interface.ICommandRef HisBaseCommand = null; bool GetSeccess = Plugin.ModuleCommon.DicCommands.TryGetValue("GeoDBATool.ControlsDBHistoryManage", out HisBaseCommand); if (GetSeccess) { HisCommand = HisBaseCommand as ControlsDBHistoryManage; if (HisCommand.Checked) { HisCommand.IsHistory = false;//判断是不是历史库点的加载,若是现势库就卸载掉历史库,若是历史库就不操作 HisCommand.OnClick(); } } #region 加载数据 SysCommon.Gis.SysGisDataSet sysGisDataset = new SysCommon.Gis.SysGisDataSet(TempWorkSpace); //cyf 20110625 modify IFeatureDataset featureDataset = null; //数据集 if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "FD") { featureDataset = sysGisDataset.GetFeatureDataset(m_Hook.ProjectTree.SelectedNode.Text, out err); if (err != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据集失败,请检查该数据集是否存在!"); return; } pGroupLayer.Name = m_Hook.ProjectTree.SelectedNode.Text + "_" + ProjectNode.Text; } else if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "FC") { featureDataset = sysGisDataset.GetFeatureDataset(DtSetNode.Text, out err); if (err != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据集失败!"); return; } pGroupLayer.Name = DtSetNode.Text + "_" + ProjectNode.Text; } //end List <IDataset> lstDataset = sysGisDataset.GetFeatureClass(featureDataset); //遍历要素类,加载图层 string dbType = ""; string userName = "";//用户名 userName = elementTemp.GetAttribute("用户"); dbType = elementTemp.GetAttribute("类型"); foreach (IDataset dataset in lstDataset) { IFeatureClass pFeatureClass = dataset as IFeatureClass; if (pFeatureClass == null) { continue; } IFeatureLayer pFeatureLayer = new FeatureLayerClass(); if (pFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation) { pFeatureLayer = new FDOGraphicsLayerClass(); } pFeatureLayer.FeatureClass = pFeatureClass; if (dbType.Trim().ToUpper() == "SDE") { //cyf 20110706 modify:修改为不去掉用户名 changed by xisheng 0906 去掉用户名 if (dataset.Name.ToUpper().Contains(userName.Trim().ToUpper())) { //SDE用户图层名去掉用户名 pFeatureLayer.Name = dataset.Name.Substring(userName.Trim().Length + 1); } else { pFeatureLayer.Name = dataset.Name; } //end } else { pFeatureLayer.Name = dataset.Name; } //cyf 20110625 modify if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "FC") { //加载指定的图层 if (m_Hook.ProjectTree.SelectedNode.Text != pFeatureLayer.Name) { continue; } } else if (m_Hook.ProjectTree.SelectedNode.DataKeyString == "FD") { //加载具备权限的图层 XmlElement feaclsElem = null; try { feaclsElem = (m_Hook.ProjectTree.SelectedNode.Tag as XmlElement).SelectSingleNode(".//图层名") as XmlElement; } catch { } if (feaclsElem != null) { if (!feaclsElem.GetAttribute("名称").Contains(pFeatureLayer.Name)) { //若不具备数据权限,则不进行加载 continue; } } } //end pGroupLayer.Add(pFeatureLayer as ILayer); } m_Hook.MapControl.Map.AddLayer(pGroupLayer); #endregion } //else if (DBNode.Text == "历史库") //{ // //历史库加载 // //ModDBOperator.WriteLog("GetCommand"); // Plugin.Interface.ICommandRef HisBaseCommand = null; // bool GetSeccess = Plugin.ModuleCommon.DicCommands.TryGetValue("GeoDBATool.ControlsDBHistoryManage", out HisBaseCommand); // if (GetSeccess) // { // HisCommand = HisBaseCommand as ControlsDBHistoryManage; // //判断是不是历史库点的加载,若是现势库就卸载掉历史库,若是历史库就不操作 // HisCommand.IsHistory = true; // HisCommand.OnClick(); // if (HisCommand.MyControlHistoryBar != null) // { // string HisDBType = elementTemp.GetAttribute("类型"); // string[] strTemp = new string[] { elementTemp.GetAttribute("服务器"), elementTemp.GetAttribute("服务名"), elementTemp.GetAttribute("数据库"), elementTemp.GetAttribute("用户"), elementTemp.GetAttribute("密码"), elementTemp.GetAttribute("版本") }; // HisCommand.MyControlHistoryBar.AddHistoryData(strTemp, HisDBType); // } // } //} //加载sde数据后,注册版本 //if (dbType.Trim().ToUpper() == "SDE") //{ // IDataset pFeaDt = featureDataset as IDataset; // if (pFeaDt != null) // { // IVersionedObject pVerObj = pFeaDt as IVersionedObject; // if (!pVerObj.IsRegisteredAsVersioned) // { // //注册版本 // pVerObj.RegisterAsVersioned(true); // } // else // { // pVerObj.RegisterAsVersioned(false); // } // } //} else if (DBNode.Text == "栅格数据库") { //栅格数据加载,分为两种情况:栅格数据集、栅格编目 //cyf 20110625 modify pGroupLayer.Name = m_Hook.ProjectTree.SelectedNode.Text + "_" + ProjectNode.Text; //end string rasterDBType = (m_Hook.ProjectTree.SelectedNode.Tag as XmlElement).GetAttribute("存储类型"); elementTemp = (DBNode.Tag as XmlElement).SelectSingleNode(".//连接信息") as XmlElement; //cyf 20110626 TempWorkSpace = ModDBOperator.GetDBInfoByXMLNode(elementTemp, "") as IWorkspace; if (TempWorkSpace == null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接数据库失败!"); return; } IRasterWorkspaceEx pRasterWS = TempWorkSpace as IRasterWorkspaceEx; if (pRasterWS == null) { return; } //string feaclsName = (elementTemp.FirstChild as XmlElement).GetAttribute("名称"); string feaclsName = m_Hook.ProjectTree.SelectedNode.Text; try { if (rasterDBType.Trim() == "栅格编目") { //栅格编目数据加载 IRasterCatalog pRasterCatalog = pRasterWS.OpenRasterCatalog(feaclsName); IGdbRasterCatalogLayer pGDBRCLayer = new GdbRasterCatalogLayerClass(); if (!pGDBRCLayer.Setup(pRasterCatalog as ITable)) { return; } IFeatureLayer mFeaLayer = pGDBRCLayer as IFeatureLayer; pGroupLayer.Add(mFeaLayer as ILayer); //IFeatureClass pFeaCls = pRasterCatalog as IFeatureClass; //if (pFeaCls == null) return; //IFeatureCursor pFeaCursor=pFeaCls.Search(null,false); //if(pFeaCursor==null) return; //IFeature pFea=pFeaCursor.NextFeature(); //while (pFea != null) //{ // IRasterCatalogItem pRCItem = pFea as IRasterCatalogItem; // IRasterDataset pRasterDt = pRCItem.RasterDataset; // IRasterLayer mRasterLayer = new RasterLayerClass(); // mRasterLayer.CreateFromDataset(pRasterDt); // if (mRasterLayer == null) return; // pGroupLayer.Add(mRasterLayer as ILayer); // pFea = pFeaCursor.NextFeature(); // //IFeatureLayer pFeaLayer = new FeatureLayerClass(); // //pFeaLayer.FeatureClass = pFeaCls as IFeatureClass; // //pFeaLayer.Name = feaclsName; // //pGroupLayer.Add(pFeaLayer as ILayer); //} } else if (rasterDBType.Trim() == "栅格数据集") { //栅格数据集加载 IRasterDataset pRasterDataset = pRasterWS.OpenRasterDataset(feaclsName); //IRasterPyramid pRasterPyramid = pRasterDataset as IRasterPyramid; //if(!pRasterPyramid.Present) //{ // if (SysCommon.Error.ErrorHandle.ShowFrmInformation("是", "否", "未构建金字塔,是否构建金字塔?")) // { // pRasterPyramid.Create(); // } //} IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); if (pRasterLayer == null) { return; } pGroupLayer.Add(pRasterLayer as ILayer); } m_Hook.MapControl.Map.AddLayer(pGroupLayer); } catch (Exception e) { //******************************************************************* //guozheng added if (ModData.SysLog != null) { ModData.SysLog.Write(e, null, DateTime.Now); } else { ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog(); ModData.SysLog.Write(e, null, DateTime.Now); } //******************************************************************** return; } } //对图层进行排序 SysCommon.Gis.ModGisPub.LayersCompose(m_Hook.MapControl); //符号化 去掉加载的符号化 20111025 席胜 //GeoUtilities.ControlsRenderLayerByMxd RenderLayerByMxd = new GeoUtilities.ControlsRenderLayerByMxd(); //RenderLayerByMxd.OnCreate(m_Hook); //RenderLayerByMxd.OnClick(); }
//波段合成影像 private void drawImage(string file, IEnvelope extent) { IRasterLayer pSelectedRasterLayer = new RasterLayerClass(); ILayer pLayer; foreach (IRasterLayer pR in pRasterLayerList) { if (pR.Name.ToString() == file) { pSelectedRasterLayer = pR; } } IRasterBandCollection pRBCollection = pSelectedRasterLayer.Raster as IRasterBandCollection; //判断所选择是渲染方式是否是彩色通道 if (radioGroup1.SelectedIndex == 1 && pSelectedRasterLayer.BandCount >= 2) { pLayer = RasterRenderedLayer(pSelectedRasterLayer, true, 0, rgbPos); if (axMapControl1.LayerCount == 0) { this.axMapControl1.AddLayer(pLayer); } else { bool flag = false; for (int i = 0; i < axMapControl1.LayerCount; i++) { if (pLayer.Name.ToString() == axMapControl1.get_Layer(i).Name.ToString()) { flag = true; break; } } if (!flag) { this.axMapControl1.AddLayer(pLayer); } else { for (int i = 0; i < axMapControl1.LayerCount; i++) { if (pLayer.Name == axMapControl1.get_Layer(i).Name) { this.axMapControl1.DeleteLayer(i); this.axMapControl1.AddLayer(pLayer); } } } } //if (extent == null) //{ this.axMapControl1.Extent = ((pLayer as IRasterLayer).Raster as IGeoDataset).Extent; //} //else //{ // this.axMapControl1.Extent = extent; //} } else { pLayer = RasterRenderedLayer(pSelectedRasterLayer, false, grayPos, null); if (axMapControl1.LayerCount == 0) { this.axMapControl1.AddLayer(pLayer); } else { bool flag = false; for (int i = 0; i < axMapControl1.LayerCount; i++) { if (pLayer.Name.ToString() == axMapControl1.get_Layer(i).Name.ToString()) { flag = true; break; } } if (!flag) { this.axMapControl1.AddLayer(pLayer); } else { for (int i = 0; i < axMapControl1.LayerCount; i++) { if (pLayer.Name == axMapControl1.get_Layer(i).Name) { this.axMapControl1.DeleteLayer(i); this.axMapControl1.AddLayer(pLayer); } } } } //this.mainMap.AddLayer(layer); //if (extent == null) //{ this.axMapControl1.Extent = ((pLayer as IRasterLayer).Raster as IGeoDataset).Extent; //} //else //{ // this.axMapControl1.Extent = extent; //} } }
private void btnOK_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(cmbSource.Text) || string.IsNullOrEmpty(cmbRegion.Text) || string.IsNullOrEmpty(txtTarget.Text)) { return; } try { //得到图层 ILayer pSourceLayer = ClsGDBDataCommon.GetLayerFromName(m_mapControl.Map, cmbSource.Text); ILayer pRegionLayer = ClsGDBDataCommon.GetLayerFromName(m_mapControl.Map, cmbRegion.Text); if (pSourceLayer == null || pRegionLayer == null) { return; } if (!(pSourceLayer is IRasterLayer)) { return; } IRaster raster = ((IRasterLayer)pSourceLayer).Raster; IRaster2 raster2 = raster as IRaster2; IRasterDataset rasterDatasetSource = raster2.RasterDataset; //得到裁切范围 IGeometry pGeometryRegion = null; if (pRegionLayer is IRasterLayer) { IRaster rasterRegion = ((IRasterLayer)pRegionLayer).Raster; IGeoDataset geoDatasetRegion = rasterRegion as IGeoDataset; IEnvelope pEnvelope = geoDatasetRegion.Extent; pGeometryRegion = pEnvelope as IGeometry; } else if (pRegionLayer is IFeatureLayer) { IFeatureLayer featureLayer = pRegionLayer as IFeatureLayer; if (featureLayer.FeatureClass != null) { if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { IFeatureCursor pFeatureCursor = featureLayer.FeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); //只裁切出第一个多边形 if (pFeature != null) { pGeometryRegion = pFeature.Shape; } } } } //裁切栅格 ClsGDBDataCommon cls = new ClsGDBDataCommon(); cls.RasterSubsetByPolygon(rasterDatasetSource, pGeometryRegion, txtTarget.Text); //加到地图中 IRasterLayer rasterLayerNew = new RasterLayerClass(); rasterLayerNew.CreateFromFilePath(txtTarget.Text); m_mapControl.AddLayer(rasterLayerNew); m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } #region 原代码 //if (cmbSource.SelectedItem != null) //{ // string itemName = cmbSource.SelectedItem.ToString(); // for (int i=0;i<m_mapControl.Map.LayerCount;i++) // { // ILayer pLayer = m_mapControl.Map.get_Layer(i); // if (pLayer.Name==itemName) // { // if(pLayer is IRasterLayer) // { // IDataLayer pDatalayer = pLayer as IDataLayer; // IDatasetName pDname = (IDatasetName)pDatalayer.DataSourceName; // string layername = pDname.WorkspaceName.PathName + "\\" + pDname.Name; // if (!layername.Contains("\\\\")) // { // m_RasterPath=pDname.WorkspaceName.PathName + "\\" + pDname.Name; // } // else // { // layername = pDname.WorkspaceName.PathName + pDname.Name; // m_RasterPath=layername; // } // break; // } // } // } //} //else //{ // MessageBox.Show("请选择原始栅格数据", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); // return; //} //if (m_ResultPath == null) //{ // MessageBox.Show("请选择输出路径及文件名", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); // return; //} //if (cmbRegion.SelectedItem != null) //{ // //m_ShpPath = comboBoxEx1.SelectedItem.ToString(); // string itemName = cmbRegion.SelectedItem.ToString(); // for (int i = 0; i < m_mapControl.Map.LayerCount; i++) // { // ILayer pLayer = m_mapControl.Map.get_Layer(i); // if (pLayer.Name == itemName) // { // if(pLayer is IFeatureLayer) // { // IDataLayer pDatalayer = pLayer as IDataLayer; // IDatasetName pDname = (IDatasetName)pDatalayer.DataSourceName; // m_ShpPath=pDname.WorkspaceName.PathName + "\\" + pDname.Name + ".shp"; // break; // } // } // } //} //else //{ // MessageBox.Show("请选择矢量文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); // return; //} //RasterLayerClass rasterlayer = new RasterLayerClass(); //rasterlayer.CreateFromFilePath(m_RasterPath); //string str = m_ShpPath; //string str2 = str.Substring(str.LastIndexOf(@"\") + 1); //文件名 //string str3 = str.Substring(0, (str.Length - str2.Length) - 1); //路径 //IWorkspaceFactory PWorkSpaceFactory = new ShapefileWorkspaceFactory(); //IFeatureWorkspace pFeatureWorkSpace = (IFeatureWorkspace)PWorkSpaceFactory.OpenFromFile(str3, 0) ; //IFeatureLayer pFeatureLayer = new FeatureLayerClass(); //pFeatureLayer.FeatureClass = pFeatureWorkSpace.OpenFeatureClass(str2); //esriGeometryType pType = pFeatureLayer.FeatureClass.ShapeType; //if (pType != esriGeometryType.esriGeometryPolygon) //{ // MessageBox.Show("矢量文件必须是多边形图层!请重新输入!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); // return; //} //IFeatureCursor pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false); //IFeature pFeature = pFeatureCursor.NextFeature(); //IGeometry pGeometry = pFeature.Shape; //IPolygon pPolygon = pGeometry as IPolygon; //bool result = RasterClip(rasterlayer, pPolygon, m_ResultPath); //if (result == true) //{ // RasterLayerClass prasterlayer = new RasterLayerClass(); // rasterlayer.CreateFromFilePath(m_ResultPath + ".tif"); // m_mapControl.AddLayer(rasterlayer as ILayer); // m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); //} //else //{ // return; //} #endregion }
private void button2_Click(object sender, EventArgs e) { //通过IDW插值生成栅格图层 #region label2.Text = "正在进行IDW插值"; IFeatureLayer pFeatureLayer_point = axMapControl1.Map.Layer[0] as IFeatureLayer;//获取点图层 IRasterRadius pRadius = new RasterRadiusClass(); object missing = Type.Missing; pRadius.SetVariable(12, ref missing); IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptorClass(); pFCDescriptor.Create(pFeatureLayer_point.FeatureClass, null, "高程"); object cellSizeProvider = 185.244192; IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); IRasterAnalysisEnvironment pEnv = pInterpolationOp as IRasterAnalysisEnvironment; pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider); IRaster pOutRaster; try { pOutRaster = pInterpolationOp.IDW(pFCDescriptor as IGeoDataset, 2, pRadius, ref missing) as IRaster; } catch { pOutRaster = pInterpolationOp.IDW(pFCDescriptor as IGeoDataset, 2, pRadius, ref missing) as IRaster; } //Add output into ArcMap as a raster layer RasterLayer pOutRasLayer = new RasterLayerClass(); pOutRasLayer.CreateFromRaster(pOutRaster); pOutRasLayer.Name = "栅格"; axMapControl1.Map.AddLayer(pOutRasLayer); #endregion //提取等值线 #region label2.Text = "正在生成等值线..."; IGeoDataset pGeoDataSet = pOutRaster as IGeoDataset; IWorkspaceFactory pWorkspaceFactory1 = new ShapefileWorkspaceFactory(); string file_path = System.IO.Path.GetDirectoryName(database_path); IWorkspace pShpWorkspace = pWorkspaceFactory1.OpenFromFile(file_path, 0); ISurfaceOp2 pSurfaceOp2 = new RasterSurfaceOpClass(); IRasterAnalysisEnvironment pRasterAnalysisEnvironment = pSurfaceOp2 as IRasterAnalysisEnvironment; pRasterAnalysisEnvironment.Reset(); pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider); pRasterAnalysisEnvironment.OutWorkspace = pShpWorkspace; double dInterval = 0.8; //间距 IGeoDataset pOutputDataSet = pSurfaceOp2.Contour(pGeoDataSet, dInterval, ref missing, ref missing); IFeatureClass pFeatureClass1 = pOutputDataSet as IFeatureClass; IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass1; IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer; pGeoFeatureLayer.DisplayAnnotation = true; pGeoFeatureLayer.DisplayField = "Contour"; pGeoFeatureLayer.Name = "高程等值线"; axMapControl1.Map.AddLayer(pGeoFeatureLayer); label2.Text = "完毕"; #endregion }
public static bool AddDataset(ref IBasicMap pBasicMap, IDatasetName pDatasetName, List <IDataset> m_DatasetCol, bool blnAddData) { bool functionReturnValue = false; functionReturnValue = false; ////如果是特征数据集,则添加里边的所有要素类 IFeatureDataset pFeatDS = default(IFeatureDataset); IEnumDataset pEnumDataSet = default(IEnumDataset); IDataset pDataset = default(IDataset); IFeatureClass pFeatCls = default(IFeatureClass); IFeatureLayer pFeatLayer = default(IFeatureLayer); IName pName = default(IName); ILayer pLayer = default(ILayer); ITopologyLayer pTopoLayer = default(ITopologyLayer); //Dim pEnumLyr As IEnumLayer ITinWorkspace pTinWS = default(ITinWorkspace); IEnumFeatureClass pEnumFeatCls = null; IRasterCatalogDisplayProps pRasterCatalogPro = default(IRasterCatalogDisplayProps); //WHFErrorHandle.clsErrorHandle pfrmError = new WHFErrorHandle.clsErrorHandle(); if (pDatasetName is IFeatureDatasetName) { pName = (IName)pDatasetName; pFeatDS = (IFeatureDataset)pName.Open(); pEnumDataSet = pFeatDS.Subsets; pDataset = pEnumDataSet.Next(); m_DatasetCol.Add(pDataset); if (pDataset == null) { return(functionReturnValue); } ////根据数据集的类型,添加特征数据集中的所有要素类(拓扑,一般的,栅格目录,网络) while ((pDataset != null)) { if (pDataset.Type == esriDatasetType.esriDTFeatureClass) { pFeatLayer = null; if (pFeatLayer == null) { pFeatLayer = new FeatureLayer(); pFeatCls = (IFeatureClass)pDataset; pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = pFeatCls; } if (pDataset.Type == esriDatasetType.esriDTRasterCatalog) { // Dim pRaster } // pSelectedCln.Add(pFeatLayer) } else if (pDataset.Type == esriDatasetType.esriDTTopology) { pTopoLayer = new TopologyLayerClass(); pTopoLayer.Topology = (ITopology)pDataset; pLayer = (ILayer)pTopoLayer; pLayer.Name = pDataset.Name; //pSelectedCln.Add(pFeatLayer) } pDataset = pEnumDataSet.Next(); } functionReturnValue = true; ////添加拓扑图层 } else if (pDatasetName is ITopologyName) { ITopology pTopo = null; pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); pTopoLayer = new TopologyLayerClass(); pTopoLayer.Topology = (ITopology)pDataset; pLayer = (ILayer)pTopoLayer; pLayer.Name = pDataset.Name; m_DatasetCol.Add(pDataset); if (blnAddData == true) { //pMap.AddLayer pLayer AddLyrToBasicMap(ref pBasicMap, pLayer); //SortLayer(pBasicMap, pLayer) } //pSelectedCln.Add(pLayer) //if (pfrmError.DisplayInformation("要把拓扑里边的所有要素类也添加到当前地图中吗?") == true) if (MessageBoxEx.Show("要把拓扑里边的所有要素类也添加到当前地图中吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) { IFeatureClassContainer pFeatClsContainer = default(IFeatureClassContainer); pFeatClsContainer = (IFeatureClassContainer)pTopo; pEnumFeatCls = pFeatClsContainer.Classes; pFeatCls = pEnumFeatCls.Next(); pFeatLayer = new FeatureLayer(); ////循环拓扑中的每个要素类,并添加到当前地图中 while ((pFeatCls != null)) { pFeatLayer.FeatureClass = pFeatCls; pFeatLayer.Name = pFeatCls.AliasName; if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) pFeatCls = pEnumFeatCls.Next(); } } functionReturnValue = true; ////添加网络数据 } else if (pDatasetName is IGeometricNetworkName) { INetworkCollection pNetworkCollection = default(INetworkCollection); IGeometricNetwork pGeometricNetwork = default(IGeometricNetwork); int i = 0; int j = 0; IDataset pGeoDataset = default(IDataset); pName = (IName)pDatasetName; pGeoDataset = (IDataset)pName.Open(); m_DatasetCol.Add(pGeoDataset); if (pGeoDataset.Type == esriDatasetType.esriDTGeometricNetwork) { ////这里对网络数据进行处理 IFeatureClassContainer pFeatureClassContainer = default(IFeatureClassContainer); pGeometricNetwork = (IGeometricNetwork)pGeoDataset; pFeatureClassContainer = (IFeatureClassContainer)pGeometricNetwork; for (i = 0; i <= pFeatureClassContainer.ClassCount - 1; i++) { pFeatCls = pFeatureClassContainer.get_Class(i); pFeatLayer = new FeatureLayer(); pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = pFeatCls; if (blnAddData == true) { // pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) } } else { pFeatDS = (IFeatureDataset)pGeoDataset; pNetworkCollection = (INetworkCollection)pFeatDS; ////如果是用户选择一个网络技术打开的话,肯定只有一个网络在里边,其实 ////可以不需要循环,而用GeometricNetwork(0)代替循环 for (j = 0; j <= pNetworkCollection.GeometricNetworkCount - 1; j++) { pGeometricNetwork = pNetworkCollection.get_GeometricNetwork(j); for (i = 0; i <= 3; i++) { switch (i) { case 0: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleJunction); break; case 1: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleEdge); break; case 2: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexJunction); break; case 3: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexEdge); break; } pFeatCls = pEnumFeatCls.Next(); while ((pFeatCls != null)) { pFeatLayer = new FeatureLayer(); pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = pFeatCls; pFeatCls = pEnumFeatCls.Next(); if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } // pSelectedCln.Add(pFeatLayer) functionReturnValue = true; } } } } ////添加栅格目录,并设置为显示最新时相 } else if (pDatasetName is IRasterCatalogName) { pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); m_DatasetCol.Add(pDataset); pFeatLayer = new GdbRasterCatalogLayerClass(); pFeatLayer.FeatureClass = (IFeatureClass)pDataset; pFeatLayer.Name = pDataset.Name; //'//如果是SDE的栅格目录 //If pFeatLayer.DataSourceType = "SDE Raster Catalog" Then // Dim pFeatLayerDef As IFeatureLayerDefinition // pFeatLayerDef = pFeatLayer // '//设置最初显示地图范围内最近时相的数据 // pFeatLayerDef.DefinitionExpression = "objectid in (select objectid from" & vbNewLine & _ // "(select a.objectid, b.receive_date,rank()" & vbNewLine & _ // "over(partition by a.name,a.resolution order by b.receive_date desc) as cid" & vbNewLine & _ // "from " & pFeatLayer.Name & " a, sj_t_tense b" & vbNewLine & _ // "where a.tense = b.tense" & vbNewLine & "and b.online_state = 1) t2" & vbNewLine & _ // "where " & pFeatLayer.Name & ".objectid=t2.objectid and t2.cid = 1)" //End If ////设置当栅格目录中的图幅在地图上超过16个的时候,以格网来显示,而不显示栅格本身 pRasterCatalogPro = (IRasterCatalogDisplayProps)pFeatLayer; ////不用数量来控制了,而以比例尺来控制 pRasterCatalogPro.DisplayRasters = 16; pRasterCatalogPro.UseScale = true; ////设置一个比例,在此临界栅格数据将会在框架显示与实际栅格显示之间转换 pRasterCatalogPro.TransitionScale = 50000; if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //'SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) functionReturnValue = true; // 陈昉 2009-3-22 添加单一的RasterDataset } else if (pDatasetName is IRasterDatasetName) { IRasterLayer pRasterLayer = default(IRasterLayer); pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); m_DatasetCol.Add(pDataset); pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pDataset as IRasterDataset); pRasterLayer.Name = pDataset.Name; AddLyrToBasicMap(ref pBasicMap, pRasterLayer); functionReturnValue = true; ////添加TIN图层 } else if (pDatasetName is ITinWorkspace) { pTinWS = (ITinWorkspace)pDatasetName; ITinLayer pTinLyr = default(ITinLayer); pTinLyr = new TinLayer(); pTinLyr.Dataset = pTinWS.OpenTin(pDatasetName.Name); pTinLyr.Name = pDatasetName.Name; if (blnAddData == true) { //pMap.AddLayer pTinLyr AddLyrToBasicMap(ref pBasicMap, pTinLyr); //SortLayer(pBasicMap, pTinLyr) } //pSelectedCln.Add(pTinLyr) functionReturnValue = true; ////添加一般的要素类,未写完。。。。。。 } else { pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); pFeatCls = (IFeatureClass)pDataset; m_DatasetCol.Add(pDataset); if (pFeatCls.FeatureType == esriFeatureType.esriFTAnnotation) { pFeatLayer = new FDOGraphicsLayerClass(); } else if (pFeatCls.FeatureType == esriFeatureType.esriFTDimension) { pFeatLayer = new DimensionLayerClass(); } else { pFeatLayer = new FeatureLayer(); } //印骅 20081205 添加"Not" if ((pFeatLayer != null)) { //pFeatLayer.Name = pDataset.Name pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = (IFeatureClass)pDataset; } if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) functionReturnValue = true; } return(functionReturnValue); //'//添加Coverage图层 //ElseIf vItem.SmallIcon = "Coverage" Then //AddSelectedLayer = ADDCoverageLayer(pMap, pCurrentFilePath.Path, _ //vItem.Text, pSelectedCln, blnAddData) }
private void btnClip_Click(object sender, EventArgs e) { string rstNm = cmbInRaster1.Text; string outNm = txtOutName.Text; string pixelNm = cmbPixel.Text; if (pixelNm == "" || pixelNm == null || rstNm == "" || rstNm == null) { MessageBox.Show("You must have a raster layer selected and a pixel type selected", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if(outNm==""||outNm==null) { MessageBox.Show("You must specify an output raster name", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Transforming Raster. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; rp.Show(); try { IRaster rst = rstDic[rstNm]; rasterUtil.transType pType = (rasterUtil.transType)Enum.Parse(typeof(rasterUtil.transType),pixelNm); outraster = rsUtil.returnRaster(rsUtil.calcMathRasterFunction(rst,pType)); if (mp != null&&addToMap) { rp.addMessage("Calculating Statistics..."); rp.Show(); rp.Refresh(); IRasterLayer rstLyr = new RasterLayerClass(); //rsUtil.calcStatsAndHist(((IRaster2)outraster).RasterDataset); rstLyr.CreateFromRaster(outraster); rstLyr.Name = outNm; rstLyr.Visible = false; mp.AddLayer(rstLyr); } outrastername = outNm; this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Transforming Raster" + t); rp.enableClose(); this.Close(); } }
//添加矢量和栅格数据 private void barButtonItem28_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.CheckFileExists = true; openFileDialog.Title = "打开Shape和Raster文件"; openFileDialog.Filter = "ESRI Shapefile(*.shp)|*.shp|栅格文件 (*.*)|*.bmp;*.tif;*.jpg;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img"; if (openFileDialog.ShowDialog() == DialogResult.OK) { string pFullPath = openFileDialog.FileName; if (pFullPath == "") { return; } int pIndex = pFullPath.LastIndexOf("\\"); string pFilePath = pFullPath.Substring(0, pIndex); //文件路径 string pFileName = pFullPath.Substring(pIndex + 1); //文件名 if (pFileName.Contains("shp")) { IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; //实例化ShapefileWorkspaceFactory工作空间,打开Shape文件 pWorkspaceFactory = new ShapefileWorkspaceFactory(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0); //创建并实例化要素集 IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName); pFeatureLayer = new FeatureLayer(); pFeatureLayer.FeatureClass = pFeatureClass; pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; //ClearAllData(); //新增删除数据 Variable.pMapFrm.mainMapControl.Map.AddLayer(pFeatureLayer); Variable.pMapFrm.mainMapControl.ActiveView.Refresh(); } else { IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFilePath, 0); IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pFileName); //影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid; pRasPyrmid = pRasterDataset as IRasterPyramid3; if (pRasPyrmid != null) { if (!(pRasPyrmid.Present)) { pRasPyrmid.Create(); //创建金字塔 } } IRaster pRaster; pRaster = pRasterDataset.CreateDefaultRaster(); IRasterLayer pRasterLayer; pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; Variable.pMapFrm.mainMapControl.AddLayer(pLayer, 0); } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\n" + ex.ToString(), "异常"); } }
/// <summary> /// 生成等值线 /// </summary> /// <params name="targetworkspace"></params> /// <params name="nameOftargetFeatureClass"></params> /// <params name="sLayerAliasName"></params> private bool CreateContours(IWorkspace targetworkspace, string nameOftargetFeatureClass, string sLayerAliasName, string extent, ref string failInfo) { double douElevation; //设置一个最小值 progressBarControl1.Properties.Minimum = 0; //设置一个最大值 progressBarControl1.Properties.Maximum = 6; //设置步长,即每次增加的数 progressBarControl1.Properties.Step = 1; //设置进度条的样式 progressBarControl1.Properties.ProgressViewStyle = ProgressViewStyle.Solid; progressBarControl1.Position = 0; try { Geoprocessor GP = new Geoprocessor(); if (withIn(m_strDataFilePath) == false) return false; if (TB_Interval.Text == "") { MessageBox.Show("请输入正确的等高距!", "提示!"); return false; } if (double.TryParse(TB_Interval.Text.Trim(), out douElevation)) { } else { TB_Interval.Text = null; MessageBox.Show("请输入正确的等高距!", "提示!"); return false; } string featurOut = m_MakeContoursFolder + "\\Cont.shp"; int k = 0; while (File.Exists(featurOut)) { k++; featurOut = m_MakeContoursFolder + "\\Cont" + k.ToString() + ".shp"; } int countCont = Directory.GetFiles(m_MakeContoursFolder, "Cont*").Length; if (countCont > 0) { featurOut = m_MakeContoursFolder + "\\Cont" + countCont.ToString() + ".shp"; } if (DrawContours.ConvertASCIIDescretePoint2FeatureClass(GP, m_strDataFilePath, featurOut) == false) return false; //执行步长 this.progressBarControl1.PerformStep(); string ContourRaster = m_MakeContoursFolder + "\\Spline"; //string ContourRaster = m_MakeContoursFolder + "\\" + nameOftargetFeatureClass + "_Render"; if (extent != "")//右上左下 xmax ymax xmin ymin GP.SetEnvironmentValue("Extent", extent); bool suc = false; string sRasterLayerAliasName = sLayerAliasName + "渲染图"; ILayer rsLayer = DataEditCommon.GetLayerByName(DataEditCommon.g_pMap, sRasterLayerAliasName); if (rsLayer != null) { DataEditCommon.g_pMap.DeleteLayer(rsLayer); } if (Directory.Exists(ContourRaster)) { try { Directory.Delete(ContourRaster, true); } catch { k = 1; while (Directory.Exists(ContourRaster)) { ContourRaster = m_MakeContoursFolder + "\\Spline" + k.ToString(); k++; } } } switch (CB_InterpolationMethod.Text) { case "样条函数插值法": suc = DrawContours.Interpolate2RasterSpline(GP, featurOut, ContourRaster, CB_SplineType.Text); break; case "自然邻域插值法": suc = DrawContours.Interpolate2RasterNN(GP, featurOut, ContourRaster); break; case "克里格插值法": suc = DrawContours.Interpolate2RasterKriging(GP, featurOut, ContourRaster, CB_semiVariogramProp.Text, CB_searchRadiusProp.Text); break; case "反距离权重插值法": suc = DrawContours.Interpolate2RasterIDW(GP, featurOut, ContourRaster); break; case "趋势面插值法": suc = DrawContours.TrendToRaster(GP, featurOut, ContourRaster); break; } if (suc == false) return false; this.progressBarControl1.PerformStep(); GP = new Geoprocessor(); string R2Contour = m_MakeContoursFolder + "\\Contour.shp"; k = 1; while (File.Exists(R2Contour)) { R2Contour = m_MakeContoursFolder + "\\Contour" + k.ToString() + ".shp"; k++; } int countContour = Directory.GetFiles(m_MakeContoursFolder, "Contour*").Length; if (countContour > 0) { R2Contour = m_MakeContoursFolder + "\\Contour" + countContour.ToString() + ".shp"; } if (DrawContours.SplineRasterToContour(GP, ContourRaster, R2Contour, douElevation) == false) return false; this.progressBarControl1.PerformStep(); string EvEContour = m_MakeContoursFolder + "\\EvEContour.shp"; k = 1; while (File.Exists(EvEContour)) { EvEContour = m_MakeContoursFolder + "\\EvEContour" + k.ToString() + ".shp"; k++; } int countEvEContour = Directory.GetFiles(m_MakeContoursFolder, "EvEContour*").Length; if (countEvEContour > 0) { EvEContour = m_MakeContoursFolder + "\\EvEContour" + countEvEContour.ToString() + ".shp"; } if (DrawContours.FeaturesTo3D(GP, R2Contour, EvEContour) == false) return false; this.progressBarControl1.PerformStep(); //获得等值线Shp文件所在的工作空间 IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace sourceworkspace = workspaceFactory.OpenFromFile(m_MakeContoursFolder, 0); //裁切 IPolygon bianjie = GetPolygon(); //导入等值线Shp文件到数据库中 DrawSpecialCommon drawspecial = new DrawSpecialCommon(); string nameOfsourceFeatureClass = EvEContour.Substring(EvEContour.LastIndexOf("\\") + 1); nameOfsourceFeatureClass = nameOfsourceFeatureClass.Substring(0, nameOfsourceFeatureClass.LastIndexOf(".")); bool Import = false; List<ziduan> list = new List<ziduan> { new ziduan("BID", ""), new ziduan("mingcheng", sLayerAliasName), new ziduan("mcid", "0"), new ziduan("date", DateTime.Now.ToString()), new ziduan("type", CB_InterpolationMethod.Text) }; list.Add(new ziduan("BID", "")); list.Add(new ziduan("mingcheng", sLayerAliasName)); list.Add(new ziduan("mcid", "0")); list.Add(new ziduan("date", DateTime.Now.ToString())); list.Add(new ziduan("type", CB_InterpolationMethod.Text)); IFeatureLayer pFeatureLayer = DataEditCommon.GetLayerByName(DataEditCommon.g_pMap, EditLayerName) as IFeatureLayer; string WhereClause = "mcid='" + "0" + "'"; DataEditCommon.DeleteFeatureByWhereClause(pFeatureLayer, WhereClause); if (radioBtnKJ.Checked && bianjie != null) Import = IntersectAll(DataEditCommon.GetFeatureClassByName(sourceworkspace, nameOfsourceFeatureClass), bianjie, list); else Import = drawspecial.ShapeImportGDB(sourceworkspace, targetworkspace, nameOfsourceFeatureClass, nameOftargetFeatureClass, list); this.progressBarControl1.PerformStep(); if (Import == false) { MessageBox.Show(sLayerAliasName + "导入数据库失败!"); DataEditCommon.g_axTocControl.Update(); DataEditCommon.g_pAxMapControl.Refresh(); failInfo = sLayerAliasName; return false; } //添加相应的渲染图 IRasterLayer newRasterLayer = new RasterLayerClass(); newRasterLayer.CreateFromFilePath(ContourRaster); newRasterLayer = IntersectRaster(newRasterLayer, bianjie); //newRasterLayer.CreateFromDataset(newRasterDs); newRasterLayer.Name = sRasterLayerAliasName; UsingRasterStretchColorRampRender(newRasterLayer); //groupLayer.Add(newRasterLayer as ILayer); int indexPosition = DataEditCommon.g_pAxMapControl.LayerCount;//GroupLayer序号 //判断MapControl中是否存在该图层 ILayer mLayer = DataEditCommon.GetLayerByName(DataEditCommon.g_pMap, sRasterLayerAliasName); if (mLayer != null) { DataEditCommon.g_pMyMapCtrl.Map.DeleteLayer(mLayer); indexPosition--; } DataEditCommon.g_pAxMapControl.AddLayer(newRasterLayer as ILayer, indexPosition);//添加到最下面 DataEditCommon.g_pAxMapControl.ActiveView.Extent = newRasterLayer.AreaOfInterest; DataEditCommon.g_axTocControl.Update(); DataEditCommon.g_pAxMapControl.Refresh(); this.progressBarControl1.PerformStep(); return true; } catch (Exception ex) { MessageBox.Show(ex.Message); return false; } }
private void button1_Click(object sender, EventArgs e) { string myListBoxContent; double myCellSize; myCellSize = System.Convert.ToDouble(textBox4.Text); //try { myListBoxContent = "正在转换所选ShpFile到栅格数据..."; textBox3.Text += myListBoxContent; ILayer selectedLayer = mainForm.axMapControl1.get_Layer(comboBox1.SelectedIndex); IFeatureLayer selectedFeatureLayer = selectedLayer as IFeatureLayer; IFeatureClass selectedFeatureClass = selectedFeatureLayer.FeatureClass; Geoprocessor pGeoprocessor = new Geoprocessor(); pGeoprocessor.OverwriteOutput = true; if (selectedFeatureClass.ShapeType == esriGeometryType.esriGeometryPoint) { ESRI.ArcGIS.ConversionTools.PointToRaster pPointToRaster = new ESRI.ArcGIS.ConversionTools.PointToRaster(); pGeoprocessor.SetEnvironmentValue("workspace", myFilePath); pPointToRaster.cellsize = myCellSize; pPointToRaster.in_features = selectedFeatureLayer; pPointToRaster.value_field = selectedFeatureClass.Fields.get_Field(comboBox2.SelectedIndex); pPointToRaster.out_rasterdataset = textBox2.Text + ".tif"; pGeoprocessor.Execute(pPointToRaster, null); myListBoxContent = "转换成功!"; textBox3.Text += Environment.NewLine + Environment.NewLine + myListBoxContent; } else if (selectedFeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline) { ESRI.ArcGIS.ConversionTools.PolylineToRaster pPolylineToRaster = new ESRI.ArcGIS.ConversionTools.PolylineToRaster(); pGeoprocessor.SetEnvironmentValue("workspace", myFilePath); pPolylineToRaster.cellsize = myCellSize; pPolylineToRaster.in_features = selectedFeatureLayer; pPolylineToRaster.value_field = selectedFeatureClass.Fields.get_Field(comboBox2.SelectedIndex); pPolylineToRaster.out_rasterdataset = textBox2.Text + ".tif"; pGeoprocessor.Execute(pPolylineToRaster, null); myListBoxContent = "转换成功!"; textBox3.Text += Environment.NewLine + Environment.NewLine + myListBoxContent; } else if (selectedFeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { ESRI.ArcGIS.ConversionTools.PolygonToRaster pPolygonToRaster = new ESRI.ArcGIS.ConversionTools.PolygonToRaster(); pGeoprocessor.SetEnvironmentValue("workspace", myFilePath); pPolygonToRaster.cellsize = myCellSize; pPolygonToRaster.in_features = selectedFeatureLayer; pPolygonToRaster.value_field = selectedFeatureClass.Fields.get_Field(comboBox2.SelectedIndex); pPolygonToRaster.out_rasterdataset = textBox2.Text + ".tif"; pGeoprocessor.Execute(pPolygonToRaster, null); myListBoxContent = "转换成功!"; textBox3.Text += Environment.NewLine + Environment.NewLine + myListBoxContent; } else { MessageBox.Show("请选择正确的ShapeFile文件"); } if (MessageBox.Show("是否将生成的新Raster文件添加到图层", "Confirm Message", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { IRasterLayer myRasterLayer = new RasterLayerClass(); try { myRasterLayer.CreateFromFilePath(myFilePath + "\\" + textBox2.Text + ".tif"); mainForm.axMapControl1.AddLayer(myRasterLayer, 0); } catch { MessageBox.Show("打开文件错误!"); } } } }
/// <summary> /// 最终版-------视域分析------ /// </summary> /// <returns></returns> public void ViewAnalyze() { Geoprocessor g = new Geoprocessor(); //实例化一个GP对象 g.OverwriteOutput = true; try { var filename1 = ApplicationV.Data_MonitorPath + "\\va_original"; Visibility v = new Visibility(); v.in_raster = (BuildingLayer as IRasterLayer).Raster; v.in_observer_features = (CameraLayer as IFeatureLayer).FeatureClass; v.out_raster = filename1; //创建Visibility分析工具 v.z_factor = 1; v.outer_radius = buffersize.ToString(); g.Execute(v, null); object sev = ""; Console.WriteLine(g.GetMessages(ref sev)); } catch (Exception e) { object sev = ""; MessageBox.Show(g.GetMessages(ref sev)); return; } //添加第一步处理后的数据 这里还要进行【条件函数】 //新建工作空间 IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromFile(ApplicationV.Data_MonitorPath, 0); IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspace; IRasterDataset firstDataset = rasterWorkspace.OpenRasterDataset("va_original"); IRaster firstraster = firstDataset.CreateDefaultRaster(); var pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(firstraster); ILayer pLayer = pRasterLayer as ILayer; pLayer.Visible = false; mainMapControl.AddLayer(pLayer, mainMapControl.LayerCount - 1); try { var filename2 = ApplicationV.Data_MonitorPath + "\\va_result"; var con = new Con(); con.in_conditional_raster = firstraster; con.where_clause = "value=0"; con.in_true_raster_or_constant = 0; con.in_false_raster_or_constant = 120; con.out_raster = filename2; g.Execute(con, null); } catch (Exception e) { object sev = ""; MessageBox.Show(g.GetMessages(ref sev)); return; } //最终导入图层 IRasterDataset SecondDataset = rasterWorkspace.OpenRasterDataset("va_result"); IRaster secondraster = SecondDataset.CreateDefaultRaster(); var ppRasterLayer = new RasterLayerClass(); ppRasterLayer.CreateFromRaster(secondraster); ILayer ppLayer = ppRasterLayer as ILayer; mainMapControl.AddLayer(ppLayer, MapUtils.GetLayerIndex("建筑") + 1); }
private void AddAllDataset(IWorkspace pWorkspace, AxMapControl mapControl) { IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny); pEnumDataset.Reset(); //将Enum数据集中的数据一个个读到DataSet中 IDataset pDataset = pEnumDataset.Next(); //判断数据集是否有数据 while (pDataset != null) { TreeNode node = new TreeNode(); node.Name = pDataset.Name; node.Text = pDataset.Name; //treeView1.Nodes.Add(node); if (pDataset is IFeatureDataset) //要素数据集 { IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name); IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets; pEnumDataset1.Reset(); IGroupLayer pGroupLayer = new GroupLayerClass(); pGroupLayer.Name = pFeatureDataset.Name; IDataset pDataset1 = pEnumDataset1.Next(); while (pDataset1 != null) { if (pDataset1 is IFeatureClass) //要素类 { IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset1.Name); if (pFeatureLayer.FeatureClass != null) { pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; CheckBox checkbox = new CheckBox(); checkbox.Text = pFeatureLayer.Name; checkbox.Name = pFeatureLayer.Name; node.Nodes.Add(checkbox.Name); pGroupLayer.Add(pFeatureLayer); mapControl.Map.AddLayer(pFeatureLayer); } } pDataset1 = pEnumDataset1.Next(); } } else if (pDataset is IFeatureClass) //要素类 { IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset.Name); pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; mapControl.Map.AddLayer(pFeatureLayer); } else if (pDataset is IRasterDataset) //栅格数据集 { IRasterWorkspaceEx pRasterWorkspace = (IRasterWorkspaceEx)pWorkspace; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pDataset.Name); //影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid; pRasPyrmid = pRasterDataset as IRasterPyramid3; if (pRasPyrmid != null) { if (!(pRasPyrmid.Present)) { pRasPyrmid.Create(); //创建金字塔 } } IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); ILayer pLayer = pRasterLayer as ILayer; mapControl.AddLayer(pLayer, 0); } pDataset = pEnumDataset.Next(); } mapControl.ActiveView.Refresh(); }
private void btnExecute_Click(object sender, EventArgs e) { string inRst1Nm = cmbInRaster1.Text; string inRst2Nm = cmbInRaster2.Text; string inRst3Nm = cmbInRaster3.Text; string outNmRst = txtOutName.Text; if (inRst1Nm == "" || inRst1Nm == null) { MessageBox.Show("You must specify an input raster for In Raster 1", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (inRst2Nm == "" || inRst2Nm == null) { MessageBox.Show("You must specify an input raster for In Raster 2 or type in a number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (inRst3Nm == "" || inRst3Nm == null) { MessageBox.Show("You must specify an input raster for In Raster 3 or type in a number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (outNmRst == "" || outNmRst == null) { MessageBox.Show("You must specify an output raster name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } object rs1, rs2, rs3; if (rstDic.ContainsKey(inRst1Nm)) { rs1 = rstDic[inRst1Nm]; } else { MessageBox.Show("You must specify an input raster for In Raster 1", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (rstDic.ContainsKey(inRst2Nm)) { rs2 = rstDic[inRst2Nm]; } else if (rsUtil.isNumeric(inRst2Nm)) { rs2 = inRst2Nm; } else { MessageBox.Show("You must specify an input raster for In Raster 2 or type in a number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (rstDic.ContainsKey(inRst3Nm)) { rs3 = rstDic[inRst3Nm]; } else if (rsUtil.isNumeric(inRst3Nm)) { rs3 = inRst3Nm; } else { MessageBox.Show("You must specify an input raster for In Raster 3 or type in a number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } this.Visible = false; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new RunningProcess.frmRunningProcessDialog(false); DateTime dt = DateTime.Now; rp.addMessage("Creating Raster. This may take a while..."); rp.stepPGBar(10); rp.TopMost = true; try { outraster = rsUtil.createRaster(rsUtil.conditionalRasterFunction(rs1, rs2, rs3)); outrastername = outNmRst; if (mp != null && aM) { rp.addMessage("Calculating Statistics..."); rp.Show(); rp.Refresh(); //rsUtil.calcStatsAndHist(outraster); IRasterLayer rsLyr = new RasterLayerClass(); rsLyr.CreateFromRaster(outraster); rsLyr.Name = outrastername; rsLyr.Visible = false; mp.AddLayer((ILayer)rsLyr); } this.DialogResult = DialogResult.OK; } catch (Exception ex) { rp.addMessage(ex.ToString()); } finally { DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt); string t = " in " + ts.Days.ToString() + " days " + ts.Hours.ToString() + " hours " + ts.Minutes.ToString() + " minutes and " + ts.Seconds.ToString() + " seconds ."; rp.stepPGBar(100); rp.addMessage("Finished Conditional Analysis" + t); rp.enableClose(); this.Close(); } }
private void 影像质量检查ToolStripMenuItem_Click(object sender, EventArgs e) { IWorkspaceFactory pFileGDBWorkspaceFactory; pFileGDBWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); //using ESRI.ArcGIS.DataSourcesGDB; //获取工作空间 IWorkspace pWorkspace = pFileGDBWorkspaceFactory.OpenFromFile(Path, 0); // AddAllDataset(pWorkspace, axMapControl1); IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny); pEnumDataset.Reset(); //将Enum数据集中的数据一个个读到DataSet中 IDataset pDataset = pEnumDataset.Next(); DataTable SpatialRefTable = new DataTable(); SpatialRefTable.Columns.Add(new DataColumn("影像名称", typeof(string))); 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(); DataRow dr = SpatialRefTable.NewRow(); dr["影像名称"] = pDataset.Name.ToString(); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); IRasterProps rasterProps = (IRasterProps)pRasterLayer.Raster; double dX = rasterProps.MeanCellSize().X; double dY = rasterProps.MeanCellSize().Y; dr["影像分辨率"] = "(" + dX.ToString() + "*" + dX.ToString() + ")"; //string rasterformat = pRasterDataset.Format.ToString(); if (dX == 20 && dY == 20) { dr["影像分辨率检查"] = "√"; } else { dr["影像分辨率检查"] = "×"; } SpatialRefTable.Rows.Add(dr); } pDataset = pEnumDataset.Next(); } // ExportExcel(SpatialRefTable); //弹出显示框 TimeCheck tc = new TimeCheck(); tc.Text = "影像质量检查"; tc.dataGridView1.DataSource = SpatialRefTable; tc.dataGridView1.Columns[1].Width = 200; tc.dataGridView1.Columns[2].Width = 300; tc.Show(); }
private void button1_Click(object sender, EventArgs e) { string ftrNm = cmbSampleFeatureClass.Text; if (ftrNm == "" || ftrNm == null) { MessageBox.Show("You must have a sampling layer selected"); return; } if (!System.IO.File.Exists(plrR.SasOutputFile)) { MessageBox.Show("Could not find the sas estimate file. You either needed to first create the classificaiton model or select a feature dataset that has been used to create the model!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } int paramLength = plrR.OutParameters.Length; int rsBndsCnt = lstRasterBands.Items.Count; int bCnt = 0; for (int i = 0; i < rsBndsCnt; i++) { bCnt = bCnt + ((IRasterBandCollection)rstDic[lstRasterBands.Items[i].ToString()]).Count; } if (bCnt < 1 || (paramLength - 1) != bCnt) { MessageBox.Show("Param = " + (paramLength - 1).ToString() + " BandCount = " + bCnt.ToString() + "\nYou must have the same number of rasters selected in the same order as parameter estimates", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); btnViewOrder.PerformClick(); return; } IRasterBandCollection rsBc = new RasterClass(); for (int i = 0; i < rsBndsCnt; i++) { IRaster rs = rstDic[lstRasterBands.Items[i].ToString()]; rsBc.AppendBands((IRasterBandCollection)rs); } this.Visible = false; plrR.InRaster = (IRaster)rsBc; esriUtil.Forms.RunningProcess.frmRunningProcessDialog rp = new esriUtil.Forms.RunningProcess.frmRunningProcessDialog(false); System.DateTime dt1 = System.DateTime.Now; rp.addMessage("Creating PLR Classification Raster."); rp.addMessage("Bands are organized as follows:\n\tBand1=MLC\n\tBand2=BaseCategory"); int bcCnt = 3; foreach (string c in plrR.Categories) { rp.addMessage("\tBand" + bcCnt.ToString() + "=" + c); bcCnt += 1; } rp.addMessage("This may take some time..."); rp.Show(); rp.TopMost = true; rp.stepPGBar(20); rp.Refresh(); IRaster rst = plrR.createModelRaster(seed); if (mp != null) { rp.addMessage("Adding Raster to map"); rp.Refresh(); IRasterLayer rsLyr1 = new RasterLayerClass(); rsLyr1.CreateFromRaster(rst); rsLyr1.Name = "PLR_OUT"; rsLyr1.Visible = false; mp.AddLayer(rsLyr1); } rp.stepPGBar(50); rp.addMessage("Finished creating raster"); rp.Refresh(); System.DateTime dt2 = System.DateTime.Now; System.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); rp.stepPGBar(100); rp.Refresh(); rp.enableClose(); this.Close(); return; }
private void 格式一致性检查ToolStripMenuItem_Click(object sender, EventArgs e) { IWorkspaceFactory pFileGDBWorkspaceFactory; pFileGDBWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); //using ESRI.ArcGIS.DataSourcesGDB; //获取工作空间 IWorkspace pWorkspace = pFileGDBWorkspaceFactory.OpenFromFile(Path, 0); IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny); pEnumDataset.Reset(); //将Enum数据集中的数据一个个读到DataSet中 IDataset pDataset = pEnumDataset.Next(); DataTable SpatialRefTable = new DataTable(); SpatialRefTable.Columns.Add(new DataColumn("影像名称", typeof(string))); SpatialRefTable.Columns.Add(new DataColumn("数据类型", typeof(string))); 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(); DataRow dr = SpatialRefTable.NewRow(); dr["影像名称"] = pDataset.Name.ToString(); dr["数据类型"] = "File GeoDatabase Raster Dataset"; dr["所在数据库"] = Path; string rastername = pDataset.Name.ToString(); string[] strArray = rastername.Split('_'); if (strArray[0] == "GF1" && strArray[1].Length == 10) { dr["名称格式检查"] = "√"; } else { dr["名称格式检查"] = "×"; } SpatialRefTable.Rows.Add(dr); //IRasterPyramid3 pRasPyrmid; //pRasPyrmid = pRasterDataset as IRasterPyramid3; //if (pRasPyrmid != null) //{ // if (!(pRasPyrmid.Present)) // { // pRasPyrmid.Create(); //创建金字塔 // } //} IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); ILayer pLayer = pRasterLayer as ILayer; //axMapControl1.AddLayer(pLayer, 0); } pDataset = pEnumDataset.Next(); } // ExportExcel(SpatialRefTable); //弹出显示框 TimeCheck tc = new TimeCheck(); tc.Text = "格式一致性"; tc.dataGridView1.DataSource = SpatialRefTable; tc.dataGridView1.Columns[1].Width = 200; tc.dataGridView1.Columns[2].Width = 300; tc.Show(); }