對於arcgis對象與geojson的轉換,Esri官方有現成的實現,不過是基於js的,對應的github如下:
https://github.com/Esri/arcgis-to-geojson-utils
本教程旨在教會大家使用java調用其對應的js庫實現geojson轉爲esrijson對象。需要注意的一點是:js中所對應的geojson爲json對象,所以在js中增加了如果是字符串則轉爲json的方法,即JSON.parse(geojson),代碼中的EsriGeoJsonUtil.js即從上面的github地址中下載的index.js文件,不過需要先去掉export相關代碼轉換爲普通的js,效果如圖:
相關代碼如下:
package piesat.geo; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import java.io.File; import java.io.FileReader; public class EsriGeoJsonJsUtil { public static void main(String[] args) throws Exception{ // 獲取JS執行引擎 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");//1.得到腳本引擎 try { //2.引擎讀取 腳本字符串 engine.eval(new FileReader(new File("D://EsriGeoJsonUtil.js"))); //3.將引擎轉換爲Invocable,這樣纔可以掉用js的方法 Invocable invocable = (Invocable) engine; String geoJson = "{ \"type\": \"Polygon\", \"coordinates\": [ [ [ 109.94486471584752, 35.429556374917432 ], [ 109.94522323335443, 35.429855330604774 ], [ 109.94568184515326, 35.429450671331082 ], [ 109.9453744174092, 35.429126628573997 ], [ 109.94509457762099, 35.429265825730333 ], [ 109.94517293071921, 35.429427351839927 ], [ 109.94486471584752, 35.429556374917432 ] ] ] }"; //4.使用 invocable.invokeFunction掉用js腳本里的方法,第一個參數爲方法名,後面的參數爲被調用的js方法的入參 Object obj = invocable.invokeFunction("geojsonToArcGIS", geoJson); System.out.println(obj); }catch(Exception e){ e.printStackTrace(); } } }