[GIS] JP2 fails to open in QGIS and GDAL

gdaljpeg 2000qgis

I am trying to open a JP2 file in QGIS and it fails, and I'd appreciate any advice to try and track down the cause of the issue, be it with my system or with the file itself.

The file is a HiRISE image of Gale Crater on Mars, and is available here: http://hirise-pds.lpl.arizona.edu/download/PDS/RDR/ESP/ORB_032400_032499/ESP_032436_1755/ESP_032436_1755_COLOR.JP2

On my ageing MacBook running QGIS 1.8.0 and GDAL 1.9.2 on Mac OS 10.7.5 the file does open in QGIS, but gdal can't deal with it…

$ gdalinfo ESP_032436_1755_COLOR.JP2
ERROR 4: `ESP_032436_1755_COLOR.JP2' not recognized as a supported file format.

I could use the file using QGIS on that machine, but I'd rather use my new laptop which runs GDAL 1.9.0 and QGIS 2.1.0-Master on Ubuntu 13.04 (I installed the Master version because of difficulties installing QGIS 1.8 on Ubuntu 13.04, perhaps the release of 2.0 will have fixed those issues).

On this machine if I try to open the file in QGIS it freezes for 2-3 minutes, then QGIS crashes and closes with no error messages. gdalinfo works a little…

$ gdalinfo ESP_032436_1755_COLOR.JP2
Driver: JPEG2000/JPEG-2000 part 1 (ISO/IEC 15444-1)
Files: ESP_032436_1755_COLOR.JP2
       ESP_032436_1755_COLOR.JP2.aux.xml
Size is 9679, 44908
Coordinate System is:
PROJCS["Equirectangular MARS",
    GEOGCS["GCS_MARS",
        DATUM["unknown",
            SPHEROID["unnamed",3396190,0]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]],
    PROJECTION["Equirectangular"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",180],
    PARAMETER["standard_parallel_1",0],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]]]
Origin = (-2523306.125000000000000,-268608.875000000000000)
Pixel Size = (0.250000000000000,-0.250000000000000)
Corner Coordinates:
Upper Left  (-2523306.125, -268608.875) (137d25'49.08"E,  4d31'53.74"S)
Lower Left  (-2523306.125, -279835.875) (137d25'49.08"E,  4d43'15.60"S)
Upper Right (-2520886.375, -268608.875) (137d28'16.04"E,  4d31'53.74"S)
Lower Right (-2520886.375, -279835.875) (137d28'16.04"E,  4d43'15.60"S)
Center      (-2522096.250, -274222.375) (137d27' 2.56"E,  4d37'34.67"S)
Killed

The system freezes for 2-3 minutes between the "Center" line and the "Killed" line. I've also tried using gdal_translate to convert the JP2 to a tif image, but with similar results.

Any ideas?

Best Answer

$ gdalinfo ESP_032436_1755_COLOR.JP2
ERROR 4: `ESP_032436_1755_COLOR.JP2' not recognized as a supported file format.

For your older QGIS 1.8.0 install, it looks like you do not have a JPEG 2000 GDAL 1.9 driver installed. I could not get the noted .JP2 file to load at all in QGIS 1.8.0 with GDAL 1.9, but you may try by downloading and installing the ECW plugin v1.9.2-1 from Kyngchaos.com, and possibly have better luck.

Once installed, turn off other JPEG 2000 drivers under Options-> GDAL (like JP2OpenJPEG and JPEG2000), so that JP2ECW is the only driver trying to load the .JP2 file. You can also use the environment variable GDAL_SKIP in Terminal, e.g.:

export GDAL_SKIP=JP2OpenJPEG,JPEG2000

when testing the gdalinfo command. Note that the linked-to page even discusses how the GDAL_SKIP variable helps with the spurious JPEG 2000 drivers issue.

$ gdalinfo ESP_032436_1755_COLOR.JP2
Driver: JPEG2000/JPEG-2000 part 1 (ISO/IEC 15444-1)
...

In the above attempt, the JPEG2000 driver is being used. I did not have any luck with that driver and your .JP2 file (regardless of GDAL version). However, I did get the file to load (and very quickly) using the Kyngchaos ECW plugin v1.10.1-1 driver:

enter image description here

However, the odd thing here is that I could not do so with the Kyngchaos GDAL binary, only when I used a QGIS compiled from a custom homebrew GDAL and the Kyngchaos ECW plugin v1.10.1-1 driver (statically built) used as a GDAL plugin.

When using just the Kyngchaos GDAL, I got the following error:

dyld: lazy symbol binding failed: Symbol not found: _GDALIsInGlobalDestructor
  Referenced from: /Library/Application Support/GDAL/1.10/PlugIns/gdal_ECW_JP2ECW.dylib
  Expected in: flat namespace

Which was found in the hombrew GDAL, but not Kyngchaos's.

$ nm -g /usr/local/lib/libgdal.dylib | grep 'GDALIsInGlobalDestructor'
0000000000264376 T _GDALIsInGlobalDestructor

So, it looks like maybe a bug in Kyngchaos GDAL binary. I have reported this. Please post whether you have better luck.

UPDATE: So, I completely missed the fact that your new machine was running Ubuntu.

If you are using the UbuntuGIS repository for your QGIS install supporting packages, you can install the following:

libgdal-ecw - 1.10.0-1~raring4

That should install the proprietary ECW GDAL plugin. Not entirely sure if the JP2 support is included.

Meanwhile on Mac, I also had success reading your JP2 file using the JP2OpenJPEG driver, it just took a very long time, which made it fairly unusable in QGIS, since each pan/zoom was painfully slow. If you can't get the JP2ECW driver to open the file, maybe you can use GDAL from the command line to convert the JP2 image to a more useable format using the JP2OpenJPEG driver. Just expect it might take a very long time.

Related Question