DATE:2018-4-17java
開發環境:json
MyEclipse 2014, JDK 1.8 32位(64位環境沒法運行arcobject程序,只限工程引用的jdk)、ArcGIS 10.5app
ArcGIS 軟件安裝完成後,還要安裝 ArcObject SDK for Java,安裝以後,才能進行 AO 的二次開發編輯器
開發步驟:函數
一、新建 esri templates 示例工程工具
新建esri templates工程目的是爲了省去對 arcgis 許可初始化和加載 arcobjects.jar 的步驟,見下圖:spa
選擇上圖中的ArcObject Samples,在彈出的對話框中選擇geoprocessing示例,隨便新建一個工程便可;調試
二、修改生成代碼中 initializeArcGISLicenses 初始化許可函數體(此步驟要注意)code
因爲每一個人機器上的安裝的ArcGIS 版本不一樣,獲取的許可也不相同,因此要初始化正確的許可orm
三、上代碼
public void produceFormattedJSONFileFromTiff() { LocalDateTime start = LocalDateTime.now(); String projectRoot = new File("").getAbsolutePath(); try { // Add the BestPath toolbox. gp.addToolbox(projectRoot + "/resource/customertoolbox/ZCustomer.tbx"); // Generate the array of parameters. VarArray parameters = new VarArray(); //輸入tif路徑 parameters.add(projectRoot + "/resource/data/rain_2016.flt"); //重採樣分類列表 parameters.add("0 0.013435 1;" + "0.013435 0.037422 2;0.037422 0.080247 3;" + "0.080247 0.156709 4;0.156709 0.293223 5;" + "0.293223 0.536956 6;0.536956 0.972118 7;" + "0.972118 1.749056 8;1.749056 3.136204 9;" + "3.136204 5.612822 10"); //輸出json路徑 parameters.add(projectRoot + "/resource/result/rain_2016.json"); // Execute the model tool by name. IGeoProcessorResult result = gp.execute("ProduceJsonFromFltWithNoProject", parameters, null); while (result.getStatus() == esriJobStatus.esriJobSucceeded){ System.out.println(result.getOutputCount()); String resultJsonPath = (String) result.getReturnValue(); System.out.println(resultJsonPath); //讀取json文件 BufferedReader reader = new BufferedReader(new FileReader(new File(resultJsonPath))); StringBuffer sb = new StringBuffer(); String line = reader.readLine(); while(line != null) { sb.append(line); line = reader.readLine(); } JSONObject jsonObject = JSONObject.parseObject(sb.toString()); System.out.println(result.getMessageCount()); break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } LocalDateTime end = LocalDateTime.now(); Duration duration = Duration.between(start, end); System.out.println("自定義gp運行耗時:" + duration.toMillis() + "毫秒"); }
尾註
上文截取的代碼片斷中的 ZCustomer.tbx 是我在 ArcMap 的模型編輯器中生成的,各位親在引用上文代碼時,必定要注意改爲本身的toolbox,併爲本身的toolbox輸入正確的參數。
注意
在調用自定義 toolbox 時,必定注意 2 點: 一是toolbox 工具的名稱;二是 toolbox 工具的參數順序
2018-10-29更新:
近幾日又有了使用該方式完成相關功能的需求,故爾從新對該內容進行的梳理,在使用該方法調用 arcgis 自建模型時,出現了異常,現將可能產生異常的緣由記錄下,便於之後查閱。
異常截圖:
產生上圖異常的緣由可能有多種:
一、程序調用傳參不正確,包括參數個數或類型;
二、模型自己有問題
這個緣由須要建模型時,格外當心,有時候雖然模型能夠在arcgis 軟件運行,但 java 代碼調用卻不成功,很讓人費解
三、建模型的 arcgis 版本不一樣
意思是,建 arcgis toolbox的模型是在arcgis 10.2版本上整的,拿到了裝有 arcgis 10.1或 10.3版本的機器上運行,可能會出現上圖所示結果;
也有可能在不一樣機器上相同版本的arcgis建的模型,不在同一臺機器上運行,也可能出現問題,因此在程序調試期間,最好在同一臺機器上建模型和代碼調用,若是能調用成功,再考慮,將建的模型,在其餘機器上運行
四、傳入模型的參數問題
若是模型須要輸入文件,該文件必定不能被其餘程序所佔用,如 java 讀寫,不然也會現上圖所示錯誤
再次祝各們親玩的愉快