/*变量: * 1、图层 * 2、距离 * 3、单位 * 4、保存路径 */ private void button1_Click(object sender, EventArgs e) { double bufferDistance, bufferDistance2, bufferDistance3; double.TryParse(txtBufferDistance.Text, out bufferDistance); double.TryParse(txtBufferDistance2.Text, out bufferDistance2); double.TryParse(txtBufferDistance3.Text, out bufferDistance3); if (CNunit.SelectedIndex == 0) DW= "Meters"; else if (CNunit.SelectedIndex == 1) DW= "Kilometers"; if (0.0 == bufferDistance) { MessageBox.Show("输入范围距离无效!"); return; } if (CNunit.SelectedItem == null) { MessageBox.Show("请选择单位", "提示"); return; } //判断输出路径是否合法 if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(txtOutputPath.Text)) ||".shp" != System.IO.Path.GetExtension(txtOutputPath.Text)) { MessageBox.Show("输出路径无效!"); return; } IFeatureLayer layer = GetFeatureLayer((string)cboLayers.SelectedItem); if (null == layer) { MessageBox.Show("选中图层无效!"); return; } Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; double[] dis = { 0, bufferDistance, bufferDistance2, bufferDistance3 }; double[]distance={bufferDistance,bufferDistance2,bufferDistance3}; string[] level = { "", "高级", "中级", "低级" }; int i = 1; txtOutputPath.Text = System.IO.Path.Combine(SystemSet.Base_Map + "\\处理数据库\\实验数据", (level[i] + "_" + (string)cboLayers.SelectedItem + "_范围.shp")); int l1 = txtOutputPath.Text.LastIndexOf("\\"); lab_message.Text = txtOutputPath.Text.Substring(l1 + 1) + "正在处理···"; ESRI.ArcGIS.AnalysisTools.MultipleRingBuffer mulBuffer = new MultipleRingBuffer(); mulBuffer.Input_Features = layer; mulBuffer.Output_Feature_class = txtOutputPath.Text; mulBuffer.Buffer_Unit = "Meters"; mulBuffer.Distances = distance;//[bufferDistance, bufferDistance2, bufferDistance3]; mulBuffer.Outside_Polygons_Only = "full"; mulBuffer.Field_Name = "分析半径"; gp.Execute(mulBuffer, null); MessageBox.Show("成功"); while (i < 4) { //修改当前指针样式 this.Cursor = Cursors.WaitCursor; //调用缓冲去区处理工具buffer txtOutputPath.Text = System.IO.Path.Combine(SystemSet.Base_Map+"\\处理数据库\\实验数据", (level[i] + "_" + (string)cboLayers.SelectedItem + "_buffer.shp")); int l = txtOutputPath.Text.LastIndexOf("\\"); lab_message.Text = txtOutputPath.Text.Substring(l+1) + "正在处理···"; ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(layer, txtOutputPath.Text, Convert.ToString(dis[i]) +" "+DW);//单级缓冲 //gp.Execute(buffer, null); try { IGeoProcessorResult results = (IGeoProcessorResult)gp.Execute(buffer, null); if (results.Status != esriJobStatus.esriJobSucceeded) { MessageBox.Show("缓冲区失败的图层: " + layer.Name, "提示!"); } this.Cursor = Cursors.Default; MessageBox.Show(level[i]+"_" +layer.Name + "分析统计完成!", "提示!"); //将统计分析完成的图层添加到mapcontrol IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();//定义工作空间工厂接口 IWorkspace pWorkSpace = pWorkspaceFactory.OpenFromFile(txtOutputPath.Text.Substring(0, txtOutputPath.Text.Length - (level[i]+"_" + (string)cboLayers.SelectedItem + "_buffer.shp").Length), 0);//实例化工作空间 IFeatureWorkspace pFeatureWorkspace = pWorkSpace as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(level[i]+"_" +(string)cboLayers.SelectedItem + "_buffer.shp");// //以上得到的是featureclass。 IDataset pDataset = pFeatureClass as IDataset; IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; pFeatureLayer.Name = pDataset.Name;//图层名称 ILayer pLayer = pFeatureLayer as ILayer; m_hookHelper.FocusMap.AddLayer(pLayer); m_hookHelper.FocusMap.MoveLayer(pLayer, cboLayers.SelectedIndex + i); i++; } catch(Exception ex) { MessageBox.Show(ex.Message); this.Cursor = Cursors.Default; this.Close(); return; } } //GISHandler.GISTools.QueryByBuffer(m_hookHelper); this.Close(); StasticResult SR = new StasticResult(this.mapContol); SR.Show(); SR.StartPosition = FormStartPosition.CenterScreen; SR.TopMost = true; //1、将结果图层添加到axmapcontrol中 //2、多级缓冲 -->方法递归调用。/for循环三次 distance+=distance(图层叠加在一起 不好进行统计。) //3、将各级缓冲区中所叠置基图中的属性信息 自定义提取 装入 gridcontrol中。完成! }
/*变量: * 1、图层 * 2、距离 * 3、单位 * 4、保存路径 */ private void button1_Click(object sender, EventArgs e) { double bufferDistance, bufferDistance2, bufferDistance3; double.TryParse(txtBufferDistance.Text, out bufferDistance); double.TryParse(txtBufferDistance2.Text, out bufferDistance2); double.TryParse(txtBufferDistance3.Text, out bufferDistance3); if (CNunit.SelectedIndex == 0) { DW = "Meters"; } else if (CNunit.SelectedIndex == 1) { DW = "Kilometers"; } if (0.0 == bufferDistance) { MessageBox.Show("输入范围距离无效!"); return; } if (CNunit.SelectedItem == null) { MessageBox.Show("请选择单位", "提示"); return; } //判断输出路径是否合法 if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(txtOutputPath.Text)) || ".shp" != System.IO.Path.GetExtension(txtOutputPath.Text)) { MessageBox.Show("输出路径无效!"); return; } IFeatureLayer layer = GetFeatureLayer((string)cboLayers.SelectedItem); if (null == layer) { MessageBox.Show("选中图层无效!"); return; } Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; double[] dis = { 0, bufferDistance, bufferDistance2, bufferDistance3 }; double[] distance = { bufferDistance, bufferDistance2, bufferDistance3 }; string[] level = { "", "高级", "中级", "低级" }; int i = 1; txtOutputPath.Text = System.IO.Path.Combine(SystemSet.Base_Map + "\\处理数据库\\实验数据", (level[i] + "_" + (string)cboLayers.SelectedItem + "_范围.shp")); int l1 = txtOutputPath.Text.LastIndexOf("\\"); lab_message.Text = txtOutputPath.Text.Substring(l1 + 1) + "正在处理···"; ESRI.ArcGIS.AnalysisTools.MultipleRingBuffer mulBuffer = new MultipleRingBuffer(); mulBuffer.Input_Features = layer; mulBuffer.Output_Feature_class = txtOutputPath.Text; mulBuffer.Buffer_Unit = "Meters"; mulBuffer.Distances = distance;//[bufferDistance, bufferDistance2, bufferDistance3]; mulBuffer.Outside_Polygons_Only = "full"; mulBuffer.Field_Name = "分析半径"; gp.Execute(mulBuffer, null); MessageBox.Show("成功"); while (i < 4) { //修改当前指针样式 this.Cursor = Cursors.WaitCursor; //调用缓冲去区处理工具buffer txtOutputPath.Text = System.IO.Path.Combine(SystemSet.Base_Map + "\\处理数据库\\实验数据", (level[i] + "_" + (string)cboLayers.SelectedItem + "_buffer.shp")); int l = txtOutputPath.Text.LastIndexOf("\\"); lab_message.Text = txtOutputPath.Text.Substring(l + 1) + "正在处理···"; ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(layer, txtOutputPath.Text, Convert.ToString(dis[i]) + " " + DW);//单级缓冲 //gp.Execute(buffer, null); try { IGeoProcessorResult results = (IGeoProcessorResult)gp.Execute(buffer, null); if (results.Status != esriJobStatus.esriJobSucceeded) { MessageBox.Show("缓冲区失败的图层: " + layer.Name, "提示!"); } this.Cursor = Cursors.Default; MessageBox.Show(level[i] + "_" + layer.Name + "分析统计完成!", "提示!"); //将统计分析完成的图层添加到mapcontrol IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); //定义工作空间工厂接口 IWorkspace pWorkSpace = pWorkspaceFactory.OpenFromFile(txtOutputPath.Text.Substring(0, txtOutputPath.Text.Length - (level[i] + "_" + (string)cboLayers.SelectedItem + "_buffer.shp").Length), 0); //实例化工作空间 IFeatureWorkspace pFeatureWorkspace = pWorkSpace as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(level[i] + "_" + (string)cboLayers.SelectedItem + "_buffer.shp"); // //以上得到的是featureclass。 IDataset pDataset = pFeatureClass as IDataset; IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; pFeatureLayer.Name = pDataset.Name;//图层名称 ILayer pLayer = pFeatureLayer as ILayer; m_hookHelper.FocusMap.AddLayer(pLayer); m_hookHelper.FocusMap.MoveLayer(pLayer, cboLayers.SelectedIndex + i); i++; } catch (Exception ex) { MessageBox.Show(ex.Message); this.Cursor = Cursors.Default; this.Close(); return; } } //GISHandler.GISTools.QueryByBuffer(m_hookHelper); this.Close(); StasticResult SR = new StasticResult(this.mapContol); SR.Show(); SR.StartPosition = FormStartPosition.CenterScreen; SR.TopMost = true; //1、将结果图层添加到axmapcontrol中 //2、多级缓冲 -->方法递归调用。/for循环三次 distance+=distance(图层叠加在一起 不好进行统计。) //3、将各级缓冲区中所叠置基图中的属性信息 自定义提取 装入 gridcontrol中。完成! }