2017-06-01 81 views
0

我想使用爲Android編譯的GDAL重投一個地理空間圖像。我目前使用swig綁定,但正在考慮去jni/ndk。在Android版GDAL中使用WarpOptions(java通過swig綁定)

我已經用AutoCreateWarpedVRT函數成功地調整了圖像,但是我想使用更多的選項(例如裁剪輸出)。目前下面是我使用Warp進行翹曲的嘗試。它會生成一個完全沒有扭曲的輸出柵格,也不會應用-te選項。

GDAL swig綁定的文檔非常稀少(link),我懷疑我沒有得到WarpOptions的權利。

有關如何使WarpOptions(Vector)參數有效的任何建議(或爲此目的的任何???選項(向量)),我們感激不盡。

 Dataset src = gdal.Open("input_raster.jpg"); 
     src.SetProjection(src_wkt); 

     // Set reference points 
     double west = 451000; 
     double east = 501005; 
     double south = 6214995; 
     double north = 6257000; 
     int width = src.getRasterXSize(); 
     int height = src.getRasterYSize(); 
     GCP[] gcps = { new GCP(0, 0, west, north), 
         new GCP(0, height, west, south), 
         new GCP(width, 0, east, north), 
         new GCP(width, height, east, south)}; 
     src.SetGCPs(gcps, dst_wkt); 

     // Try to warp 
     Dataset[] src_array = {src}; 
     WarpOptions warpOptions = new WarpOptions(
      new Vector(Arrays.asList("s_srs EPSG:32632", "t_srs EPSG:3857", "te 1000 820")) 
     ); 

     Dataset warp = gdal.Warp("warp.vrt", src_array, warpOptions); 
     Dataset warp_png = driverPNG.CreateCopy("warp_raster.png", warp); 
     //Produces a raster output without errors, but does not apply the warp.    

     src.delete(); 
     warp.delete(); 
     warp_png.delete(); 

回答

0

根據this討論的語法應爲:

Vector<String> options = new Vector<>(); 
     options.add("-s_srs"); 
     options.add("EPSG:32632"); 
     options.add("-t_srs"); 
     options.add("EPSG:3857"); 

從錯誤中我似乎很大,但引發運行時錯誤WarpOptions.java:17

if (cPtr == 0) 
     throw new RuntimeException(); 

因此,除了認爲解決方案是正確的。該錯誤可能是平臺特定的。