天天看點

ArcGIS Server地圖服務太多,下載下傳切片工具設定

        在應用ArcGIS Server 的 ExportTiles 功能的時候,System/CachingControllers,System/CachingTools 運作中執行個體數預設是0,需要設定成1,要不然服務執行個體啟動比較慢,下載下傳切片的時間就會比較長。

ArcGIS Server地圖服務太多,下載下傳切片工具設定
ArcGIS Server地圖服務太多,下載下傳切片工具設定

  這樣下載下傳切片的等待時間就會縮短。

  相關下載下傳java代碼:

String geometryRings=object.optString(("rings"));

        String wkid=((JSONObject)object.opt("spatialReference")).optString("wkid");

        String featuresParam="\"features\": [{\"geometry\":{\"rings\":"+geometryRings+",\"spatialReference\":{\"wkid\":"+wkid+"}}}]";

        String params="exportTiles?tilePackage=true&exportExtent=&optimizeTilesForSize=true&compressionQuality=60&exportBy=levelId&levels=10-16&areaOfInterest={"+featuresParam+"}&f=json";

        if(this.getDefaultCity().getBasemap().contains("China5Gather")){

           params="exportTiles?tilePackage=true&exportExtent=&optimizeTilesForSize=true&compressionQuality=60&exportBy=levelId&levels=10-17&areaOfInterest={"+featuresParam+"}&f=json";

        }

        //送出下載下傳任務

        Request request = new Request.Builder()

          .url(baseUrl+params)

          .build();

        Response response = client.newCall(request).execute();            

        if(response.isSuccessful()){

            String json=response.body().string();

            JSONObject jobok=new JSONObject(json);//{"jobId": "jeeb938cbb2774269a7ca9910df4ee700", "jobStatus": "esriJobSubmitted"}

            String jobIdEt=jobok.optString("jobId");

            //擷取下載下傳的進度,監聽完成

            //http://serverurl/arcgis/rest/services/World_Street_Map/MapServer/jobs/j1fb60facc9194208929f90a7fd64fc9d_et?f=json    

            String jobId = createTilesStatus(baseUrl, client, jobIdEt, 0);

            if(jobId==null){

                return false;

            }

            //擷取tpk的下載下傳路徑

            //http://serverurl/arcgis/rest/services/World_Street_Map/MapServer/exportTiles/jobs/j1fb60facc9194208929f90a7fd64fc9d/results/out_service_url?f=json

            Request request2 = new Request.Builder()

              .url(baseUrl+"exportTiles/jobs/"+jobId+"/results/out_service_url?f=json")

              .build();  

            Response response2 = client.newCall(request2).execute();

            String json2=response2.body().string();

            JSONObject jobok2=new JSONObject(json2);

            //下載下傳tpk到指定目錄

            Request request3 = new Request.Builder()

              .url(jobok2.optString("value")+"/Layers.tpk")

              .build();

            String dSt = DateUtils.getDateTime();

            System.out.println(jobId + " ------------------ downloading " + dSt);

            Response response3 = client.newCall(request3).execute();

            String root = System.getProperty("catalina.home")

                     + File.separator + "webapps" + File.separator + "addr_collect"; 

            File folderRoot=new File(root);

            // 如果檔案夾不存在則建立    

            if (!folderRoot.exists() && !folderRoot.isDirectory()) {       

                folderRoot.mkdir(); 

            } 

            String path = root + File.separator + areaId;

            File folder=new File(path);

            // 如果檔案夾不存在則建立    

            if (!folder.exists()  && !folder.isDirectory()) {       

                folder.mkdir(); 

            } 

            File file=new File(path+File.separator+uuid+".tpk");

            FileCopyUtils.copy(response3.body().bytes(), file);  

            System.out.println(jobId + " ------------------ "+ path+File.separator+uuid+".tpk");

            System.out.println(jobId + " ------------------ "+ FileSizeHelper.getHumanReadableFileSize(file.length()));

            String dEd = DateUtils.getDateTime();

            System.out.println(jobId + " ------------------ copy end, " + dEd + ",used "+ DateUtils.getTimeDiffSec(dSt, dEd) +" sec");

  //jobStatus

    //esriJobSucceeded

    private String createTilesStatus(String baseUrl, OkHttpClient client,

            String jobIdEt,int counts) throws IOException {

        Request request1 = new Request.Builder()

          .url(baseUrl+"/jobs/"+jobIdEt+"?f=json")

          .build();

        Response response1 = client.newCall(request1).execute();

        String json1=response1.body().string();

        JSONObject jobok1=new JSONObject(json1);

        String jobStatus=jobok1.optString("jobStatus");

        String jobId=jobok1.optString("jobId");

        System.out.println(jobId + " ------------------ " + jobStatus);

        String str = null;

        if("esriJobSucceeded".equals(jobStatus)){

            str = jobId.replace("_et", "");

        }else{

            try {

                Thread.sleep(1000);

                if(counts < 60){

                return createTilesStatus(baseUrl, client, jobIdEt,counts+1);

                }

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

                return null;

            }

        }

        return str;

    }