|
我們知道,可以通過ArcGIS提供的Geoprocessing工具調(diào)用ArcToolbox中提供的各類工具,然而,如果是調(diào)用自定義的模型該如何設(shè)置? 示例:根據(jù)高程點(diǎn)插值為面,然后進(jìn)行坡度分析,最后以15度為界限進(jìn)行重分類。 在ArcGIS中ArcToolbox中新建模型,然后使用C#調(diào)用該模型。 開發(fā)環(huán)境:VS2010,ArcGIS10.1,ArcObject10.1 1.在ArcGIS中新建模型 首先,在ArcToolbox中新建工具箱,然后在該工具箱下新建模型,如圖1所示。
圖1 新建模型 然后,添加工具到該模型中,搜索IDW,Slope,Reclassify到該模型中,然后進(jìn)行連接及參數(shù)設(shè)置,IDW右鍵,Make Variable,F(xiàn)rom Parammeter,Input point features,即完成添加輸入?yún)?shù)。雙擊Reclassify,在Reclassification中設(shè)置重分類的屬性,如圖2所示。
圖2 Reclassify中Reclassification的設(shè)置 需要注意的事,在輸入Old values時(shí),”-”前后需添加空格,而且最后一行NoData也是要添加的,否則會(huì)出現(xiàn)如圖3所示錯(cuò)誤。
圖3 輸入Old values時(shí)未輸入空格顯示的錯(cuò)誤提示 最后,在Input point features和Output raster(3)分別右鍵選擇Model Parameter命令,右上角出現(xiàn)“p”即為設(shè)置成功。 至此,自定義建模完成,在ArcGIS中運(yùn)行成功無誤后便可進(jìn)入下一步,調(diào)用自定義模型。
2.調(diào)用自定義模型 VS2010中,設(shè)計(jì)界面如圖4所示。
引用命名空間: ESRI.ArcGIS.AnalysisTools ESRI.ArcGIS.Geoprocessor ESRI.ArcGIS.System ESRI.ArcGIS.Version 代碼中加入: using ESRI.ArcGIS.Geoprocessor; using ESRI.ArcGIS.esriSystem;
圖5 錯(cuò)誤一 當(dāng)出現(xiàn)如圖5所示錯(cuò)誤時(shí),解決辦法如下: 1 static class Program 2 { 3 /// <summary> 4 /// 應(yīng)用程序的主入口點(diǎn)。 5 /// </summary> 6 [STAThread] 7 static void Main() 8 { 9 Application.EnableVisualStyles(); 10 Application.SetCompatibleTextRenderingDefault(false); 11 ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); 12 Application.Run(new Form1()); 13 } 14 } 即在Program.cs中添加ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
圖6 錯(cuò)誤二 解決辦法為:Form1中添加License授權(quán)代碼 1 IAoInitialize pAoInitialize = new AoInitializeClass(); 2 esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable; 3 licenseStatus = pAoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced); 4 pAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst); 至此,整個(gè)應(yīng)用程序運(yùn)行成功!效果如圖7所示。
圖7 運(yùn)行結(jié)果圖 最后,附上整個(gè)應(yīng)用程序的代碼: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 using ESRI.ArcGIS.Geoprocessor; 11 using ESRI.ArcGIS.esriSystem; 12 13 namespace CallModel 14 { 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 IAoInitialize pAoInitialize = new AoInitializeClass(); 20 esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable; 21 licenseStatus = pAoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced); 22 pAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst); 23 24 InitializeComponent(); 25 } 26 27 private void Form1_Load(object sender, EventArgs e) 28 { 29 30 } 31 32 private void button1_Click(object sender, EventArgs e) 33 { 34 OpenFileDialog openFileDialog = new OpenFileDialog(); 35 openFileDialog.Title = "打開文件"; 36 openFileDialog.Filter = "(shp文件)*.shp|*.shp"; 37 if (openFileDialog.ShowDialog() == DialogResult.OK) 38 { 39 textBox1.Text = openFileDialog.FileName; 40 } 41 } 42 43 private void button2_Click(object sender, EventArgs e) 44 { 45 SaveFileDialog saveDialog = new SaveFileDialog(); 46 saveDialog.Title = "保存文件"; 47 saveDialog.Filter = "(tif文件)*.tif|*.tif|(img文件)*.img|*.img"; 48 if (saveDialog.ShowDialog() == DialogResult.OK) 49 { 50 textBox2.Text = saveDialog.FileName; 51 } 52 } 53 54 private void button3_Click(object sender, EventArgs e) 55 { 56 Geoprocessor gp = new Geoprocessor(); 57 gp.OverwriteOutput = true; 58 59 gp.AddToolbox(@"D:\Program Files\ArcGIS\Desktop10.1\ArcToolbox\Toolboxes\MyToolbar.tbx"); 60 IVariantArray parameters = new VarArrayClass(); 61 parameters.Add(textBox1.Text.ToString().Trim()); 62 parameters.Add(textBox2.Text.ToString().Trim()); 63 gp.Execute("Model", parameters, null); 64 MessageBox.Show("調(diào)用成功!", "提示"); 65 } 66 67 private void button4_Click(object sender, EventArgs e) 68 { 69 this.Close(); 70 //System.Environment.Exit(System.Environment.ExitCode);終止程序方式二 71 //Application.Exit();終止程序方式三 72 } 73 } 74 }
|
|
|