1

Currently I am writing a crop function for georeferenced TIFF files. I use Free.Ports.LibGeoTiff which seems to work quite well to read the TIFF, also the geo references.

It is also possible to write a copy of the TIFF file to a new file, but I can't find a solution to write the geo references as well. The copy is a non-referenced TIFF.

I use the following code to read the geokeys according to the rare example codes and write them back in the copy file:

foreach (Free.Ports.LibGeoTiff.geokey_t geotag in Enum.GetValues(typeof(Free.Ports.LibGeoTiff.geokey_t)))
    {
        try
        {    
            if (Free.Ports.LibGeoTiff.libgeotiff.GTIFKeyInfo(geotiff, geotag, out Free.Ports.LibGeoTiff.tagtype_t tagtype) > 0)
            {    
                switch (tagtype)
                {
                    case Free.Ports.LibGeoTiff.tagtype_t.TYPE_ASCII:
                        if (Free.Ports.LibGeoTiff.libgeotiff.GTIFKeyGet(geotiff, geotag, out string geovaluestr) > 0) { Free.Ports.LibGeoTiff.libgeotiff.GTIFKeySet(geoouttiff, geotag, geovaluestr); }
                        break;
                    case Free.Ports.LibGeoTiff.tagtype_t.TYPE_DOUBLE:
                        if (Free.Ports.LibGeoTiff.libgeotiff.GTIFKeyGet(geotiff, geotag, out double geovaluedbl, 0) > 0) { Free.Ports.LibGeoTiff.libgeotiff.GTIFKeySet(geoouttiff, geotag, geovaluedbl); }
                        break;
                    case Free.Ports.LibGeoTiff.tagtype_t.TYPE_SHORT:
                        if (Free.Ports.LibGeoTiff.libgeotiff.GTIFKeyGet(geotiff, geotag, out ushort geovaluesht, 0) > 0) { Free.Ports.LibGeoTiff.libgeotiff.GTIFKeySet(geoouttiff, geotag, geovaluesht); }
                        break;
                }    
            }    
        }
        catch (System.Exception)
        {
            Console.WriteLine(geotag.ToString());
        }
    }

    bool saved = Free.Ports.LibGeoTiff.libgeotiff.GTIFWriteKeys(geoouttiff);

Debugging tells me the GTIFKeyGet() will read the data. Also, after setting the values I need to write the values into the file with the function GTIFWriteKeys() which returns true, but it does not actually do that.

Does anyone have a brilliant thought about this (I prefer this library and not look at GDAL)?

Vince
  • 20,017
  • 15
  • 45
  • 64

0 Answers0