2017-06-01 225 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(); 

因此,除了认为解决方案是正确的。该错误可能是平台特定的。