对于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(); } } }