Hi Even, Thanks a lot for your reply. Your answer makes things much clearer for this problem.
I thought the gdal.ReporjectImage would calculate the new geoTransform coefficients automatically. And the answer I found in this post, http://osgeo-org.1803224.n2.nabble.com/python-gdal-gdal-ReprojectImage-produces-no-data-td3348305.html, confused me more. I will try the method you suggested and let you know the rest. Thanks a lot. William On Sun, May 8, 2011 at 4:44 AM, Even Rouault <[email protected]> wrote: > William, > > Using ReprojectImage() requires some involved preliminary steps. It is > generally not appropriate to reuse the dimensions of the in_ds for the out_ds, > because the shape of the reprojected image is generally not the same as the in > image. But the real error is to reuse the in geotransform as the out > geotransform. It doesn't make any sense when the in and out projections are > not the same. Unfortunately there's no easy way of guessing the out > geotransform. > > A simple approximation would be to compute the coordinates of the 4 corners of > the in image, reproject them to the dstRef and compute from them the out > geotransform. > > What you would need is the GDALSuggestedWarpOutput2() function of > http://trac.osgeo.org/gdal/browser/trunk/gdal/alg/gdaltransformer.cpp, which > is used by the gdalwarp utility, but it is not available from Java. It is > generally called with pfnTransformer = GDALGenImgProjTransform and > hTransformArg = GDALCreateGenImgProjTransformer2( hSrcDS, NULL, papszOptions ) > for your use case. > > But I'm thinking of an easier way. You could use gdal.AutoCreateWarpedVRT() > that will create a in-memory VRT dataset using the above methods to guess the > appropriate dimensions and geotransform. Then, you can CreateCopy() into a > "real" dataset. > > See > http://gdal.org/java/org/gdal/gdal/gdal.html#AutoCreateWarpedVRT(org.gdal.gdal.Dataset, > %20java.lang.String,%20java.lang.String) > > Something like : > > Dataset vrt_ds = gdal.AutoCreateWarpedVRT(in_ds, null, dstRef.ExportToWkt()); > Dataset out_ds = gdal.GetDriverByName("GTiff").CreateCopy(outPath, vrt_ds); > vrt_ds.delete(); > out_ds.delete(); > > This will be a bit slower than ReprojectImage() but this should work. > > Best regards, > > Even > > >> Hi folks, >> I am new to this mailing list. Thanks all for your great job on GDAL/OGR. >> >> I have a problem with the gdal.ReprojectImage from gdal1.8 Java >> bindings. When I perform the reprojection, the projected image is >> totally black. And the origin of the projected image is wrong too. >> There were no error popping up at all. The code is as following: >> >> Dataset in_ds = gdal.Open(inPath, gdalconst.GA_ReadOnly); >> Dataset out_ds = in_ds.GetDriver().Create(outPath, >> in_ds.getRasterXSize(), in_ds.getRasterYSize(), >> in_ds.getRasterCount()); >> >> try { >> SpatialReference dstRef = new SpatialReference(""); >> dstRef.ImportFromEPSG(26919); >> >> out_ds.SetProjection(dstRef.ExportToWkt()); >> out_ds.SetGeoTransform(in_ds.GetGeoTransform()); >> >> if (gdal.ReprojectImage(in_ds, out_ds) == >> gdalconst.CE_Failure) >> System.out.println("something is wrong"); >> } finally { >> in_ds.delete(); >> out_ds.delete(); >> } >> >> Does anybody know what's going on here? Thanks a lot. >> >> >> William >> _______________________________________________ >> gdal-dev mailing list >> [email protected] >> http://lists.osgeo.org/mailman/listinfo/gdal-dev > _______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
