GeoJSON轉EsriJSON,Java調用js庫實現

對於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();
        }
    }
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章