private void btnGO_Click(object sender, EventArgs e) { IFeatureClass pInPointFClass = null;//������������������ IFeatureClass pLineBarrierFClass = null;//�����������ϰ��� IWorkspace pWorkspace; string fileName; string rasterPath; string shpFile; int startX, endX; string sFieldName;//ѡ��Ҫ���з������ֶ� if (bDataPath == true) { fileName = comboBoxInPoint.Text; string shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); pInPointFClass = Utility.OpenFeatureClassFromShapefile(shpDir, shpFile); } else { pInPointFClass = GetFeatureFromMapLyr(comboBoxInPoint.Text); } if (bDataLinePath == true) { fileName = comboBoxBarrier.Text; string shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); pLineBarrierFClass = Utility.OpenFeatureClassFromShapefile(shpDir, shpFile); } else { pLineBarrierFClass = GetFeatureFromMapLyr(comboBoxBarrier.Text); } IFeatureLayer pFeatLayer = new FeatureLayerClass(); pFeatLayer.FeatureClass = pInPointFClass; rasterPath = txtOutputRasterPath.Text; IFeatureClassDescriptor pFeatClsDes = new FeatureClassDescriptorClass(); if (comboBoxZValueField.Text != "��") pFeatClsDes.Create(pInPointFClass, null, comboBoxZValueField.Text); else pFeatClsDes.Create(pInPointFClass, null, ""); try { IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); string sCellSize = txtCellSize.Text; double dCellSize = Convert.ToDouble(sCellSize); IRasterRadius pRsRadius = new RasterRadiusClass(); string sPower=txtWeightValue.Text; double dPower=Convert.ToDouble(sPower); if(comboBoxSearchRadius.Text == "�仯") { string sPointNums=txtPointNumbers.Text; int iPointNums=Convert.ToInt32(sPointNums); double maxDis=Convert.ToDouble(txtDisMaxValue.Text); object objMaxDis=maxDis; pRsRadius.SetVariable(iPointNums,ref objMaxDis); } else { string sDistance=txtDisValue.Text; double dDistance=Convert.ToDouble(sDistance); double maxPointNums=Convert.ToDouble(txtMaxPointNums.Text); object objMinPointNums=maxPointNums; pRsRadius.SetFixed(dDistance,ref objMinPointNums); } pInterpolationOp = Utility.SetRasterInterpolationAnalysisEnv(rasterPath, dCellSize, pFeatLayer); object objLineBarrier=null; if (chkBarrier.Checked == true) { objLineBarrier=comboBoxBarrier; } else { objLineBarrier = Type.Missing; } IRaster pOutRaster = null; pOutRaster = pInterpolationOp.IDW(pFeatClsDes as IGeoDataset, dPower, pRsRadius, ref objLineBarrier) as IRaster; //��ɫ IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.Name = "������դ��"; Utility.ConvertRasterToRsDataset(rasterPath, pOutRaster, "������դ��"); pRasterLayer = Utility.SetRsLayerClassifiedColor(pOutRaster); pMainFrm.getMapControl().AddLayer(pRasterLayer, 0); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void iDW空间差值ToolStripMenuItem_Click(object sender, EventArgs e) { //用反距离IDW插值生成的栅格图像 IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); // 输入点图层 IFeatureClass pFeatureClass; IFeatureLayer pFeaturelayer; int indexLayer = Convert.ToInt32(Interaction.InputBox("请输入IDW空间插值点图层下标", "字符串", "", 500, 250)); pFeaturelayer = this.axMapControl1.Map.get_Layer(indexLayer) as IFeatureLayer; pFeatureClass = pFeaturelayer.FeatureClass; // Define the search radius IRasterRadius pRadius = new RasterRadiusClass(); object maxDistance = Type.Missing; pRadius.SetVariable(12, ref maxDistance); //Create FeatureClassDescriptor using a value field IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptorClass(); string zValue = Interaction.InputBox("请输入特征字段(yelvsuA/FYyelvsuA)", "字符串", "", 500, 250); pFCDescriptor.Create(pFeatureClass, null, zValue); //set { cellsize for output raster in the environment object dCellSize = 113.039027413432; IRasterAnalysisEnvironment pEnv = new RasterAnalysis(); pEnv = pInterpolationOp as IRasterAnalysisEnvironment; pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dCellSize); object objectbarrier = Type.Missing; //Perform the interpolation IGeoDataset rasDataset = pInterpolationOp.IDW((IGeoDataset)pFCDescriptor, 2, pRadius, ref objectbarrier); IRaster pOutRaster = rasDataset as IRaster; //Add output into ArcMap as a raster layer IRasterLayer pOutRasLayer = new RasterLayerClass(); pOutRasLayer.CreateFromRaster(pOutRaster); this.axMapControl1.AddLayer(pOutRasLayer, 0); axMapControl1.ActiveView.Refresh(); DialogResult dr = MessageBox.Show("插值成功,请选择是否进行分级渲染", "分级渲染选择", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (dr == DialogResult.OK) { //用户选择确认的操作(分级渲染) IRasterLayer pRasterLayer = null; for (int i = 0; i < axMapControl1.LayerCount; i++) { if (axMapControl1.get_Layer(i) is IRasterLayer) { pRasterLayer = axMapControl1.get_Layer(i) as IRasterLayer; } } if (pRasterLayer == null) { MessageBox.Show("当前图层不存在栅格图层"); return; } int number = Convert.ToInt32(Interaction.InputBox("请输入栅格影像分类数量(默认为10)", "字符串", "", 500, 250)); if (number == 0) { number = 10; } funColorForRaster_Classify(pRasterLayer, number); axMapControl1.ActiveView.Refresh(); } else if (dr == DialogResult.Cancel) { //用户选择取消的操作 return; } }
public static void Mlayer_IDW_Click() { // 用反距离IDW插值生成的栅格图像。如下: IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); string pPath = Application.StartupPath + @"\MakeContours\Cont.shp"; string pFolder = System.IO.Path.GetDirectoryName(pPath); string pFileName = System.IO.Path.GetFileName(pPath); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass oFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName); IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptorClass(); pFCDescriptor.Create(oFeatureClass, null, "shape.z"); IRasterRadius pRadius = new RasterRadiusClass(); object objectMaxDistance = null; object objectbarrier = null; object missing = Type.Missing; pRadius.SetVariable(12, ref objectMaxDistance); object dCellSize =1; object snapRasterData = Type.Missing; IEnvelope pExtent; pExtent = new EnvelopeClass(); Double xmin = 27202; Double xmax = 31550; Double ymin = 19104; Double ymax = 22947; pExtent.PutCoords(xmin, ymin, xmax, ymax); object extentProvider = pExtent; IRasterAnalysisEnvironment pEnv = pInterpolationOp as IRasterAnalysisEnvironment; pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dCellSize); pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData); IGeoDataset poutGeoDataset = pInterpolationOp.IDW((IGeoDataset)pFCDescriptor, 2, pRadius, ref objectbarrier); ISurfaceOp surOp = new RasterSurfaceOpClass(); IRaster pOutRaster = poutGeoDataset as IRaster; IRasterLayer pOutRasLayer = new RasterLayer(); pOutRasLayer.CreateFromRaster(pOutRaster); IMap pMap = Common.DataEditCommon.g_pMap; pMap.AddLayer(pOutRasLayer); Common.DataEditCommon.g_axTocControl.Refresh(); Common.DataEditCommon.g_pAxMapControl.ActiveView.Refresh(); }
private void btnGO_Click(object sender, EventArgs e) { IFeatureClass pInPointFClass; //获得输入点特征数据类 IFeatureClass pLineBarrierFClass; //获得输入的线障碍类 String fileName; String rasterPath; String shpFile; int startX, endX; //选择要进行分析的字段 if (bDataPath == true) { fileName = comboBoxInPoint.Text; String shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new ShapefileWorkspaceFactory(); IFeatureWorkspace pFWS; pFWS = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(shpDir, 0); pInPointFClass = pFWS.OpenFeatureClass(shpFile); } else { pInPointFClass = GetFeatureFromMapLyr(comboBoxInPoint.Text); } if (bDataLinePath == true && chkBarrier.Checked) { fileName = comboBoxBarrier.Text; String shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new ShapefileWorkspaceFactory(); IFeatureWorkspace pFWS; pFWS = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(shpDir, 0); pLineBarrierFClass = pFWS.OpenFeatureClass(shpFile); } else if (chkBarrier.Checked) { pLineBarrierFClass = GetFeatureFromMapLyr(comboBoxBarrier.Text); } IFeatureLayer pFeatLayer = new FeatureLayerClass(); pFeatLayer.FeatureClass = pInPointFClass; rasterPath = txtOutputRasterPath.Text; //查询过滤器 //'FeatureClassDescriptor //这个对象主要用于提供访问控制FeatureClass descriptor的成员;例如,定义FeatureClass的那个属性作为分析操作。 IFeatureClassDescriptor pFeatClsDes = new FeatureClassDescriptorClass(); if (comboBoxZValueField.Text != "无") { pFeatClsDes.Create(pInPointFClass, null, comboBoxZValueField.Text); } else { pFeatClsDes.Create(pInPointFClass, null, ""); } try { IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); String sCellSize = txtCellSize.Text; String sPower = txtWeightValue.Text; if (Convert.ToDouble(sCellSize) <= 0 || sPower == "") { MessageBox.Show("还没输入权重值或栅格单元!请输入后在进行插值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } double dCellSize = Convert.ToDouble(sCellSize); double dPower = Convert.ToDouble(sPower); IRasterRadius pRsRadius = new RasterRadiusClass(); if (comboBoxSearchRadius.Text == "变化") { String sPointNums = txtPointNumbers.Text; if (sPointNums != "") { int iPointNums = Convert.ToInt32(sPointNums); if (txtDisMaxValue.Text != "") { double maxDis = Convert.ToDouble(txtDisMaxValue.Text); object objMaxDis = maxDis as object; pRsRadius.SetVariable(iPointNums, ref objMaxDis); } else { object objMaxDis = null; pRsRadius.SetVariable(iPointNums, ref objMaxDis); } } else { MessageBox.Show("还没输入点的数目!请输入后在进行插值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } else { String sDistance = txtDisValue.Text; if (sDistance != "") { double dDistance = Convert.ToDouble(sDistance); if (txtMaxPointNums.Text != "") { double maxPointNums = Convert.ToDouble(txtMaxPointNums.Text); object objMinPointNums = maxPointNums as object; pRsRadius.SetFixed(dDistance, ref objMinPointNums); } else { object objMinPointNums = null; pRsRadius.SetFixed(dDistance, ref objMinPointNums); } } else { MessageBox.Show("还没输入距离的值!请输入后在进行插值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } pInterpolationOp = SetRasterInterpolationAnalysisEnv(rasterPath, dCellSize, pFeatLayer); object objLineBarrier = null; if (chkBarrier.Checked == true) { objLineBarrier = comboBoxBarrier; } else { objLineBarrier = Type.Missing; } IRaster pOutRaster; pOutRaster = (IRaster)pInterpolationOp.IDW((IGeoDataset)pFeatClsDes, dPower, pRsRadius, ref objLineBarrier); //着色 IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.Name = "反距离栅格"; ConvertRasterToRsDataset(rasterPath, ref pOutRaster, "反距离栅格"); pRasterLayer = SetRsLayerClassifiedColor(pOutRaster); frm.mainMapControl.AddLayer(pRasterLayer, 0); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void CreateRasterFromPoints(IMap pMap, IFeatureLayer pp,String Path, String Name, String Field) { //1.��Shape�ļ���ȡ��FeatureClass //2.����FeatureClass����IFeatureClassDescriptor //3.����IRasterRaduis ���� //����Cell //4.��ֵ�����ɱ��� object obj = null; IWorkspaceFactory pShapSpace; pShapSpace = new ShapefileWorkspaceFactory(); IWorkspace pW; pW = pShapSpace.OpenFromFile(Path, 0); IFeatureWorkspace pFeatureWork; pFeatureWork = pW as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureWork.OpenFeatureClass("Name"); IGeoDataset Geo = pFeatureClass as IGeoDataset; object extend = Geo.Extent; object o = null; IFeatureClassDescriptor pFeatureClassDes = new FeatureClassDescriptorClass(); pFeatureClassDes.Create(pFeatureClass, null, Field); IRasterRadius pRasterrad = new RasterRadiusClass(); pRasterrad.SetVariable(10, ref obj); object dCell = 0.5;//���Ը��ݲ�ͬ�ĵ�ͼ��������� IInterpolationOp Pinterpla = new RasterInterpolationOpClass(); IRasterAnalysisEnvironment pRasterAnaEn = Pinterpla as IRasterAnalysisEnvironment; pRasterAnaEn.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dCell); pRasterAnaEn.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extend, ref o); IGeoDataset pGRaster; object hh = 3; pGRaster = Pinterpla.IDW((IGeoDataset)pFeatureClassDes , 2, pRasterrad, ref hh); ISurfaceOp pSurF; pSurF = new RasterSurfaceOpClass(); IGeoDataset pCour; object o1 = 0; pCour = pSurF.Contour(pGRaster, 5, ref o1); IFeatureLayer pLa; pLa = new FeatureLayerClass(); IFeatureClass pClass = pCour as IFeatureClass; pLa.FeatureClass = pClass; pLa.Name = pClass.AliasName; pMap.AddLayer(pLa as ILayer); }
public IGeoDataset GetIDW(IFeatureClass _pFeatureClass, string _pFieldName, double _pDistance, double _pCell, int _pPower) { IGeoDataset Geo = _pFeatureClass as IGeoDataset; object pExtent = Geo.Extent; object o = Type.Missing; IFeatureClassDescriptor pFeatureClassDes = new FeatureClassDescriptorClass(); pFeatureClassDes.Create(_pFeatureClass, null, _pFieldName); IInterpolationOp pInterOp = new RasterInterpolationOpClass(); IRasterAnalysisEnvironment pRasterAEnv = pInterOp as IRasterAnalysisEnvironment; // pRasterAEnv.Mask = Geo; pRasterAEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref pExtent, ref o); object pCellSize = _pCell;//���Ը��ݲ�ͬ�ĵ�ͼ��������� pRasterAEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref pCellSize); IRasterRadius pRasterrad = new RasterRadiusClass(); object obj = Type.Missing; // pRasterrad.SetFixed(_pDistance, ref obj); pRasterrad.SetVariable(12); object pBar = Type.Missing; IGeoDataset pGeoIDW = pInterOp.IDW(pFeatureClassDes as IGeoDataset, _pPower, pRasterrad, ref pBar); return pGeoIDW; }
private void btnGO_Click(object sender, EventArgs e) { IFeatureClass pInPointFClass;// '获得输入点特征数据类 String fileName; String rasterPath; String shpFile; int startX, endX; if (bDataPath == true) { fileName = comboBoxInPoint.Text; String shpDir = fileName.Substring(0, fileName.LastIndexOf("\\")); startX = fileName.LastIndexOf("\\"); endX = fileName.Length; shpFile = fileName.Substring(startX + 1, endX - startX - 1); IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new ShapefileWorkspaceFactory(); IFeatureWorkspace pFWS; pFWS = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(shpDir, 0); pInPointFClass = pFWS.OpenFeatureClass(shpFile); } else { pInPointFClass = GetFeatureFromMapLyr(comboBoxInPoint.Text); } IFeatureLayer pFeatLayer = new FeatureLayerClass(); pFeatLayer.FeatureClass = pInPointFClass; rasterPath = txtOutputRasterPath.Text; //'FeatureClassDescriptor //这个对象主要用于提供访问控制FeatureClass descriptor的成员;例如,定义FeatureClass的那个属性作为分析操作。 IFeatureClassDescriptor pFeatClsDes = new FeatureClassDescriptorClass(); if (comboBoxZValueField.Text != "无") { pFeatClsDes.Create(pInPointFClass, null, comboBoxZValueField.Text); } else { pFeatClsDes.Create(pInPointFClass, null, ""); } try { IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); String sCellSize = txtCellSize.Text; if (Convert.ToDouble(sCellSize) <= 0) { MessageBox.Show("还没输入栅格单元!请输入后在进行插值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } double dCellSize = Convert.ToDouble(sCellSize); IRasterRadius pRsRadius = new RasterRadiusClass(); if (comboBoxSearchRadius.Text == "变化") { String sPointNums = txtPointNumbers.Text; if (sPointNums != "") { int iPointNums = Convert.ToInt32(sPointNums); if (txtDisMaxValue.Text != "") { double maxDis = Convert.ToDouble(txtDisMaxValue.Text); object objMaxDis = maxDis; pRsRadius.SetVariable(iPointNums, ref objMaxDis); } else { object objMaxDis = null; pRsRadius.SetVariable(iPointNums, ref objMaxDis); } } else { MessageBox.Show("还没输入点的数目!请输入后在进行插值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } else { String sDistance = txtDisValue.Text; if (sDistance != "") { double dDistance = Convert.ToDouble(sDistance); if (txtMaxPointNums.Text != "") { double maxPointNums = Convert.ToDouble(txtMaxPointNums.Text); object objMinPointNums = maxPointNums; pRsRadius.SetFixed(dDistance, ref objMinPointNums); } else { object objMinPointNums = null; pRsRadius.SetFixed(dDistance, ref objMinPointNums); } } else { MessageBox.Show("还没输入距离的值!请输入后在进行插值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } pInterpolationOp = SetRasterInterpolationAnalysisEnv(rasterPath, dCellSize, pFeatLayer); esriGeoAnalysisSemiVariogramEnum semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisNoneVariogram; if (RadioOrdinary.Checked) { switch (ComboBoxMethod.SelectedIndex) { case 0: semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisSphericalSemiVariogram; break; case 1: semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisCircularSemiVariogram; break; case 2: semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisExponentialSemiVariogram; break; case 3: semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisGaussianSemiVariogram; break; } } else { switch (ComboBoxMethod.SelectedIndex) { case 0: semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisUniversal1SemiVariogram; break; case 1: semi = esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisUniversal2SemiVariogram; break; } } IRaster pOutRaster; object barrier = null; pOutRaster = (IRaster)pInterpolationOp.Krige((IGeoDataset)pFeatClsDes, semi, pRsRadius, true, ref barrier); //着色 IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.Name = "反距离栅格"; ConvertRasterToRsDataset(rasterPath, ref pOutRaster, "反距离栅格"); pRasterLayer = SetRsLayerClassifiedColor(pOutRaster); frm.mainMapControl.AddLayer(pRasterLayer, 0); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void kriging(IFeatureClass pFeatureClass) { // FeatureClassDescriptor 对象用于控制和描述插值的参数 IFeatureClassDescriptor pFDescr = new FeatureClassDescriptorClass(); pFDescr.Create(pFeatureClass, null, "Ozone"); // 栅格半径辅助对象用于控制插值的参数 IRasterRadius pRasRadius = new RasterRadiusClass(); object object_Missing = System.Type.Missing; pRasRadius.SetVariable(12, ref object_Missing); IInterpolationOp pInterpOp = new RasterInterpolationOpClass(); IRaster pRasterOut = (IRaster)pInterpOp.Krige((IGeoDataset)pFDescr, esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisExponentialSemiVariogram, pRasRadius, false, ref object_Missing); }