[gdal-dev] Copy meta data from one JP2 to another JP2 C++

Dr. Joshua Jackson josh at nside.io
Wed Apr 22 09:23:17 PDT 2015


Thanks!  And since I’m developing on Mac and CentOS I’ll stick with compiling the source :-)


Joshua Jackson, PhD
Senior ResearchEngineer
 (800) 604-1822 Ext. 5109 <tel:8006041822,5109>   (256) 648-5109 <tel:2566485109>
 josh at nside.io <mailto:josh at nside.io>   www.nSide.io
 <http://www.nside.io/> 4031 Parkway Dr, Suite B, Florence, AL 35630
  <http://www.linkedin.com/company/nside/>  <http://twitter.com/nSide__Out>
> On Apr 22, 2015, at 11:15 AM, Even Rouault <even.rouault at spatialys.com> wrote:
> 
> Le mercredi 22 avril 2015 18:05:57, Dr. Joshua Jackson a écrit :
>> So I changed my C++ code to follow the basic path of gdalcopyproj.py
>> instead of copying the complete data set (see code below), and I am
>> getting a separate .aux.xml file generated instead of the data being
>> merged to the JP2 image file.
>> 
>> Someone mentioned testing against GDAL 2.0, but as I have 1.11.2 which
>> according to the GDAL web page is the latest release.
> 
> Yes, you definitely need the development version GDAL 2.0dev, unreleased yet, 
> and compile it from sources :
> http://trac.osgeo.org/gdal/wiki/DownloadSource#Developmentversionandsourcecontrol
> 
> or use Windows binaries for the development version :
> http://www.gisinternals.com/development.php
> 
>> 
>> const char *srcProjection = srcDataset->GetProjectionRef();
>>    double *srcTransform;
>>    srcDataset->GetGeoTransform(srcTransform);
>>    int gcpcount = srcDataset->GetGCPCount();
>>    const GDAL_GCP *gcps = srcDataset->GetGCPs();
>>    const char* gcpProj = srcDataset->GetGCPProjection();
>> 
>>    dstDataset = (GDALDataset *) GDALOpen(maskPath, GA_Update);
>> 
>>    dstDataset->SetGeoTransform(srcTransform);
>>    dstDataset->SetProjection(srcProjection);
>>    if (gcpcount > 0) {
>>        dstDataset->SetGCPs( gcpcount, gcps, gcpProj);
>>    }
>> 
>>    if(dstDataset != NULL)
>>    {
>>        GDALClose((GDALDatasetH)dstDataset);
>>    }
>> 
>> 
>> 
>> 
>> Joshua Jackson, PhD
>> Senior ResearchEngineer
>> (800) 604-1822 Ext. 5109 <tel:8006041822,5109>   (256) 648-5109
>> <tel:2566485109> josh at nside.io <mailto:josh at nside.io>   www.nSide.io
>> <http://www.nside.io/> 4031 Parkway Dr, Suite B, Florence, AL 35630
>>  <http://www.linkedin.com/company/nside/>  <http://twitter.com/nSide__Out>
>> 
>>> On Apr 15, 2015, at 4:06 PM, Dr. Joshua Jackson <josh at nside.io> wrote:
>>> 
>>> Yes.  For example original file is middle.jp2  New file is
>>> middle_mask.jp2.
>>> 
>>> gdalcopyproj.py middle.jp2 middle_mask.jp2
>>> 
>>> Result is middle_mask.jp2 isn’t even modified according to OS time stamp,
>>> but new file is created middle_mask.jp2.aux.xml.
>>> 
>>> 
>>> 
>>> 
>>> Joshua Jackson, PhD
>>> Senior ResearchEngineer
>>> 
>>> (800) 604-1822 Ext. 5109 <tel:8006041822,5109>   (256) 648-5109
>>> <tel:2566485109> josh at nside.io <mailto:josh at nside.io>   www.nSide.io
>>> <http://www.nside.io/> <http://www.nside.io/> 4031 Parkway Dr, Suite B,
>>> Florence, AL 35630
>>> 
>>>  <http://www.linkedin.com/company/nside/> 
>>>  <http://twitter.com/nSide__Out>
>>>> 
>>>> On Apr 15, 2015, at 4:02 PM, Even Rouault <even.rouault at spatialys.com
>>>> <mailto:even.rouault at spatialys.com>> wrote:
>>>> 
>>>> Le mercredi 15 avril 2015 22:58:07, Dr. Joshua Jackson a écrit :
>>>>> gdalcopyproj does not work for me because it outputs a separate xml
>>>>> file instead of overlaying the data into the new image file.
>>>> 
>>>> Weird. I've just tested it works properly with the latest GDAL trunk
>>>> (2.0dev).
>>>> 
>>>>> Joshua Jackson, PhD
>>>>> Senior ResearchEngineer
>>>>> (800) 604-1822 Ext. 5109 <tel:8006041822,5109>   (256) 648-5109
>>>>> <tel:2566485109> josh at nside.io <mailto:josh at nside.io>
>>>>> <mailto:josh at nside.io <mailto:josh at nside.io>>   www.nSide.io
>>>>> <http://www.nside.io/> <http://www.nside.io/ <http://www.nside.io/>>
>>>>> 4031 Parkway Dr, Suite B, Florence, AL 35630
>>>>> 
>>>>> <http://www.linkedin.com/company/nside/
>>>>> <http://www.linkedin.com/company/nside/>> 
>>>>> <http://twitter.com/nSide__Out <http://twitter.com/nSide__Out>>
>>>>> 
>>>>>> On Apr 15, 2015, at 3:06 PM, Even Rouault <even.rouault at spatialys.com
>>>>>> <mailto:even.rouault at spatialys.com>> wrote:
>>>>>> 
>>>>>> Le mercredi 15 avril 2015 21:46:26, Dr. Joshua Jackson a écrit :
>>>>>>> I’m looking for a good solution to copy the image meta data from one
>>>>>>> JP2 to another JP2 in C++.  I have a folder full of 4096x4096
>>>>>>> JPEG2000 images that I am processing with OpenCV.  On some of them I
>>>>>>> create a copy of the image and do some manipulations to.  As
>>>>>>> expected the new image file is missing all the metadata.
>>>>>>> 
>>>>>>> I have tried using CreateCopy() with the OpenJPEG library; and while
>>>>>>> this does work it takes a really long time per image ~40sec.  (My
>>>>>>> image manipulations take only ~10sec).
>>>>>>> 
>>>>>>> Is there some way to use the GetGDALDataSet() on the source file and
>>>>>>> then call SetMetaData() on the destination file for each meta data
>>>>>>> item?  How would one iterate through the metadata items?
>>>>>> 
>>>>>> The "metadata" you're talking about are more the georeferencing info,
>>>>>> right ? (In GDAL "metadata" is about all other metadata, excluding the
>>>>>> georeferencing)
>>>>>> 
>>>>>> If you use trunk, you could likely try the new USE_SRC_CODESTREAM=YES
>>>>>> creation open of the jp2openjpeg driver
>>>>>> 
>>>>>> Something like:
>>>>>> 
>>>>>> gdal_translate your_jp2_without_georef.jp2 out.jp2 -co
>>>>>> USE_SRC_CODESTREAM=YES -a_srs EPSG:4326 -a_ullr  -96.9653320 
>>>>>> 32.4645996 -96.9598389 32.4591064
>>>>>> 
>>>>>> The SetGeoTransform() and SetProjection() API also do something
>>>>>> similar internally, so you could also do :
>>>>>> 
>>>>>> gdal_edit.py your_jp2_without_georef.jp2 -a_srs EPSG:4326 -a_ullr
>>>>>> -96.9653320 32.4645996  -96.9598389 32.4591064
>>>>>> 
>>>>>> or more conveniently:
>>>>>> 
>>>>>> gdalcopyproj.py middle_mask.jp2 out.jp2
>>>>>> 
>>>>>> (http://svn.osgeo.org/gdal/trunk/gdal/swig/python/samples/gdalcopyproj
>>>>>> .py
>>>>>> <http://svn.osgeo.org/gdal/trunk/gdal/swig/python/samples/gdalcopypro
>>>>>> j.py>
>>>>>> <http://svn.osgeo.org/gdal/trunk/gdal/swig/python/samples/gdalcopypro
>>>>>> j.p
>>>>>> <http://svn.osgeo.org/gdal/trunk/gdal/swig/python/samples/gdalcopypro
>>>>>> j.p> y>)
>>>>>> 
>>>>>> Even
>>>>>> 
>>>>>>> Here is a sample GDALInfo printout for a source image:
>>>>>>> 
>>>>>>> Driver: JP2OpenJPEG/JPEG-2000 driver based on OpenJPEG library
>>>>>>> Files: middle_mask.jp2
>>>>>>> Size is 4096, 4096
>>>>>>> Coordinate System is:
>>>>>>> GEOGCS["WGS 84",
>>>>>>> 
>>>>>>>  DATUM["WGS_1984",
>>>>>>> 
>>>>>>>      SPHEROID["WGS 84",6378137,298.257223563,
>>>>>>> 
>>>>>>>          AUTHORITY["EPSG","7030"]],
>>>>>>> 
>>>>>>>      AUTHORITY["EPSG","6326"]],
>>>>>>> 
>>>>>>>  PRIMEM["Greenwich",0],
>>>>>>>  UNIT["degree",0.0174532925199433],
>>>>>>>  AUTHORITY["EPSG","4326"]]
>>>>>>> 
>>>>>>> Origin = (-96.965332031250000,32.464599609375000)
>>>>>>> Pixel Size = (0.000001341104507,-0.000001341104507)
>>>>>>> 
>>>>>>> Image Structure Metadata:
>>>>>>> INTERLEAVE=PIXEL
>>>>>>> 
>>>>>>> Corner Coordinates:
>>>>>>> Upper Left  ( -96.9653320,  32.4645996) ( 96d57'55.20"W,
>>>>>>> 32d27'52.56"N) Lower Left  ( -96.9653320,  32.4591064) (
>>>>>>> 96d57'55.20"W, 32d27'32.78"N) Upper Right ( -96.9598389, 
>>>>>>> 32.4645996) ( 96d57'35.42"W, 32d27'52.56"N) Lower Right (
>>>>>>> -96.9598389,  32.4591064) ( 96d57'35.42"W, 32d27'32.78"N) Center    
>>>>>>> ( -96.9625854,  32.4618530) ( 96d57'45.31"W, 32d27'42.67"N) Band 1
>>>>>>> Block=1024x1024 Type=Byte, ColorInterp=Red
>>>>>>> 
>>>>>>> Overviews: 2048x2048, 1024x1024, 512x512, 256x256
>>>>>>> Overviews: arbitrary
>>>>>>> 
>>>>>>> Band 2 Block=1024x1024 Type=Byte, ColorInterp=Green
>>>>>>> 
>>>>>>> Overviews: 2048x2048, 1024x1024, 512x512, 256x256
>>>>>>> Overviews: arbitrary
>>>>>>> 
>>>>>>> Band 3 Block=1024x1024 Type=Byte, ColorInterp=Blue
>>>>>>> 
>>>>>>> Overviews: 2048x2048, 1024x1024, 512x512, 256x256
>>>>>>> Overviews: arbitrary
>>>>>>> 
>>>>>>> Joshua Jackson, PhD
>>>>>>> Senior ResearchEngineer
>>>>>>> (800) 604-1822 Ext. 5109 <tel:8006041822,5109>   (256) 648-5109
>>>>>>> <tel:2566485109> josh at nside.io <mailto:josh at nside.io>
>>>>>>> <mailto:josh at nside.io <mailto:josh at nside.io>> <mailto:josh at nside.io
>>>>>>> <mailto:josh at nside.io> <mailto:josh at nside.io
>>>>>>> <mailto:josh at nside.io>>>   www.nSide.io <http://www.nside.io/>
>>>>>>> <http://www.nside.io/ <http://www.nside.io/>> <http://www.nside.io/
>>>>>>> <http://www.nside.io/> <http://www.nside.io/
>>>>>>> <http://www.nside.io/>>> 4031 Parkway Dr, Suite B, Florence, AL
>>>>>>> 35630
>>>>>>> 
>>>>>>> <http://www.linkedin.com/company/nside/
>>>>>>> <http://www.linkedin.com/company/nside/>
>>>>>>> <http://www.linkedin.com/company/nside/
>>>>>>> <http://www.linkedin.com/company/nside/>>>
>>>>>>> <http://twitter.com/nSide__Out <http://twitter.com/nSide__Out>
>>>>>>> <http://twitter.com/nSide__Out <http://twitter.com/nSide__Out>>>
> 
> -- 
> Spatialys - Geospatial professional services
> http://www.spatialys.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20150422/fa443c79/attachment-0001.html>


More information about the gdal-dev mailing list