LEADTOOLS Image File Support (Leadtools.Codecs assembly)
LEAD Technologies, Inc

EnumGeoKeysAsync Method

Example 





A Leadtools.ILeadStream containing the input image data.
1-based index of the page from which to enumerate the tags.
Enumerates all the GeoKeys in a Geo TIFF stream. .NET support WinRT support
Syntax
public IAsyncAction EnumGeoKeysAsync( 
   ILeadStream stream,
   int pageNumber
)
'Declaration
 
Public Function EnumGeoKeysAsync( _
   ByVal stream As ILeadStream, _
   ByVal pageNumber As Integer _
) As IAsyncAction
'Usage
 
Dim instance As RasterCodecs
Dim stream As ILeadStream
Dim pageNumber As Integer
Dim value As IAsyncAction
 
value = instance.EnumGeoKeysAsync(stream, pageNumber)
public IAsyncAction EnumGeoKeysAsync( 
   ILeadStream stream,
   int pageNumber
)
 function Leadtools.Codecs.RasterCodecs.EnumGeoKeysAsync( 
   stream ,
   pageNumber 
)
public:
IAsyncAction^ EnumGeoKeysAsync( 
   ILeadStream^ stream,
   int pageNumber
) 

Parameters

stream
A Leadtools.ILeadStream containing the input image data.
pageNumber
1-based index of the page from which to enumerate the tags.

Return Value

An asynchronous enumeration operation on a RasterCodecs object.
Remarks

To enumerate all the keys stored in a disk file, use EnumGeoKeys(String,Int32).

For multipage Geo TIFF files, you can enumerate the GeoKeys from a particular page. Specify the page number whose GeoKeys to enumerate.

The GeoKeyFound event is called for each GeoKey value stored in the three standard Geo TIFF tags (34735, 34736 and 34737). For enumerating the other standard Geo TIFF data stored as separate tags, you can use EnumTags(String,Int32). Or, you can call ReadTag(String,Int32,Int32) for each of these tags (since there are not that many of them to warrant the use of EnumTags(String,Int32)).

For more information, refer to Implementing GeoKeys (GeoTIFF tags).

Example
 
Private myGeoKeys As RasterCollection(Of RasterTagMetadata)
Private geoKeyFileName As String

Private Sub EnumGeoKeysExample(ByVal srcFileName As String, ByVal destFileName As String)
   Dim codecs As RasterCodecs = New RasterCodecs()

   geoKeyFileName = srcFileName
   myGeoKeys = New RasterCollection(Of RasterTagMetadata)()

   AddHandler codecs.GeoKeyFound, AddressOf codecs_GeyKeyFound
   codecs.EnumGeoKeys(srcFileName, 1)
   RemoveHandler codecs.GeoKeyFound, AddressOf codecs_GeyKeyFound

   ' We read all the tags now, save them to the file
   Console.WriteLine("{0} GeoKeys read, saving them to the destination file", myGeoKeys.Count)
   codecs.WriteGeoKeys(destFileName, 1, myGeoKeys)

   ' Clean up
   codecs.Dispose()
End Sub

Private Sub codecs_GeyKeyFound(ByVal sender As Object, ByVal e As CodecsEnumGeoKeysEventArgs)
   Console.Write("GeoKey: Id={0}, Count={1}, Type={2}, DataLength={3}, Data=", e.Id, e.Count, e.MetadataType, e.Buffer.Length)

   ' Load this GeoKey
   Dim codecs As RasterCodecs = TryCast(sender, RasterCodecs)
   Dim geoKey As RasterTagMetadata = codecs.ReadGeoKey(geoKeyFileName, 1, e.Id)
   Dim data As Byte() = geoKey.GetData()
   Dim i As Integer = 0
   Do While i < data.Length
      Console.Write("{0:X} ", data(i))
      i += 1
   Loop
   Console.WriteLine()

   ' Add it to our collection
   myGeoKeys.Add(geoKey)
End Sub
RasterCollection<RasterTagMetadata> myGeoKeys;
string geoKeyFileName;

void EnumGeoKeysExample(string srcFileName, string destFileName)
{
    RasterCodecs codecs = new RasterCodecs();

    geoKeyFileName = srcFileName;
    myGeoKeys = new RasterCollection<RasterTagMetadata>();

    codecs.GeoKeyFound += new EventHandler<CodecsEnumGeoKeysEventArgs>(codecs_GeyKeyFound);
    codecs.EnumGeoKeys(srcFileName, 1);
    codecs.GeoKeyFound -= new EventHandler<CodecsEnumGeoKeysEventArgs>(codecs_GeyKeyFound);

    // We read all the tags now, save them to the file
    Console.WriteLine("{0} GeoKeys read, saving them to the destination file", myGeoKeys.Count);
    codecs.WriteGeoKeys(destFileName, 1, myGeoKeys);

    // Clean up
    codecs.Dispose();
}

void codecs_GeyKeyFound(object sender, CodecsEnumGeoKeysEventArgs e)
{
    Console.Write("GeoKey: Id={0}, Count={1}, Type={2}, Data Length={3}, Data=", e.Id, e.Count, e.MetadataType, e.Buffer.Length);

    // Load this GeoKey
    RasterCodecs codecs = sender as RasterCodecs;
    RasterTagMetadata geoKey = codecs.ReadGeoKey(geoKeyFileName, 1, e.Id);
    byte[] data = geoKey.GetData();
    for (int i = 0; i < data.Length; i++)
        Console.Write("{0:X} ", data[i]);
    Console.WriteLine();

    // Add it to our collection
    myGeoKeys.Add(geoKey);
}
var myGeoKeys;
var geoKeyFileName;

function EnumGeoKeysExample(srcFileName, destFileName) {
   Tools.SetLicense();
   with (Leadtools) {
      with (Leadtools.Codecs) {
         var codecs = new RasterCodecs();
         Leadtools.RasterSupport.initialize();
         codecs.eventsDispatchMode = Leadtools.LeadEventsDispatchMode.useCoreDispatcher;
         geoKeyFileName = srcFileName;
         myGeoKeys = new Array();

         return Tools.AppInstallFolder().getFileAsync(srcFileName).then(function (loadFile) {

            codecs.addEventListener("geokeyfound", codecs_GeyKeyFound);
            return codecs.enumGeoKeysAsync(LeadStreamFactory.create(loadFile), 1)
         })
               .then(function () {
                  codecs.removeEventListener("geokeyfound", codecs_GeyKeyFound);

                  // We read all the tags now, save them to the file
                  console.info(myGeoKeys.length, " GeoKeys read, saving them to the destination file");
                  return Tools.AppLocalFolder().createFileAsync(destFileName, Windows.Storage.CreationCollisionOption.openIfExists)
               })
               .then(function (saveFile) {
                  return codecs.writeGeoKeysAsync(LeadStreamFactory.create(saveFile), 1, myGeoKeys)
               })
               .then(function () {
                  // Clean up
                  codecs.close();
               });
      }
   }
}

function codecs_GeyKeyFound(e) {
   console.info("GeoKey: Id=", e.id, ", Count=", e.count, ", Type=", e.metadataType, ", Data Length=", e.buffer.length), ", Data=";
   Tools.SetLicense();
   with (Leadtools) {
      with (Leadtools.Codecs) {
         // Load this GeoKey
         var codecs = e.target;
         return Tools.AppInstallFolder().getFileAsync(geoKeyFileName).then(function (loadFile) {
            return codecs.readGeoKeyAsync(LeadStreamFactory.create(loadFile), 1, e.id)
         })
                     .then(function (geoKey) {
                        var data = geoKey.getData();
                        for (var i = 0; i < data.length; i++)
                           console.info("{0:X} ", data[i]);
                        console.info("");

                        // Add it to our collection
                        myGeoKeys.push(geoKey);
                     });
      }
   }

}
List<RasterTagMetadata> myGeoKeys;
string geoKeyFileName;

async Task EnumGeoKeysExample(string srcFileName, string destFileName)
{
   RasterCodecs codecs = new RasterCodecs();

   geoKeyFileName = srcFileName;
   myGeoKeys = new List<RasterTagMetadata>();

   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName);

   codecs.GeoKeyFound += new EventHandler<CodecsEnumGeoKeysEventArgs>(codecs_GeyKeyFound);
   await codecs.EnumGeoKeysAsync(LeadStreamFactory.Create(loadFile), 1);
   codecs.GeoKeyFound -= new EventHandler<CodecsEnumGeoKeysEventArgs>(codecs_GeyKeyFound);

   // We read all the tags now, save them to the file
   Debug.WriteLine("{0} GeoKeys read, saving them to the destination file", myGeoKeys.Count);
   StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(destFileName, CreationCollisionOption.OpenIfExists);
   try
   {
      await codecs.WriteGeoKeysAsync(LeadStreamFactory.Create(saveFile), 1, myGeoKeys);
   }
   catch (Exception ex)
   {
      string error = "";
      RasterException rasterException = RasterException.FromHResult(ex.HResult);
      if (rasterException != null)
         error = rasterException.Message;
      else
         error = ex.Message;
      Debug.WriteLine(error);
      Assert.Fail(error);
   }

   // Clean up
   codecs.Dispose();
}

async void codecs_GeyKeyFound(object sender, CodecsEnumGeoKeysEventArgs e)
{
   Debug.WriteLine("GeoKey: Id={0}, Count={1}, Type={2}, Data Length={3}, Data=", e.Id, e.Count, e.MetadataType, e.Buffer.Length);

   // Load this GeoKey
   RasterCodecs codecs = sender as RasterCodecs;
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(geoKeyFileName);
   RasterTagMetadata geoKey = await codecs.ReadGeoKeyAsync(LeadStreamFactory.Create(loadFile), 1, e.Id);
   byte[] data = geoKey.GetData();
   for (int i = 0; i < data.Length; i++)
      Debug.WriteLine("{0:X} ", data[i]);
   Debug.WriteLine("");

   // Add it to our collection
   myGeoKeys.Add(geoKey);
}
RasterCollection<RasterTagMetadata> myGeoKeys;
Stream geoKeyStream;
void EnumGeoKeysExample(Stream inStreamGeyKey, Stream outStreamGeyKey)
{
   RasterCodecs codecs = new RasterCodecs();

   geoKeyStream = inStreamGeyKey;
   myGeoKeys = new RasterCollection<RasterTagMetadata>();

   codecs.GeoKeyFound += new EventHandler<CodecsEnumGeoKeysEventArgs>(codecs_GeyKeyFound);
   codecs.EnumGeoKeys(inStreamGeyKey, 1);
   codecs.GeoKeyFound -= new EventHandler<CodecsEnumGeoKeysEventArgs>(codecs_GeyKeyFound);

   // We read all the tags now, save them to the file
   Debug.WriteLine("{0} GeoKeys read, saving them to the destination file", myGeoKeys.Count);
   codecs.WriteGeoKeys(outStreamGeyKey, 1, myGeoKeys);
}

void codecs_GeyKeyFound(object sender, CodecsEnumGeoKeysEventArgs e)
{
   Debug.WriteLine("GeoKey: Id={0}, Count={1}, Type={2}, DataLength={3}, Data=", e.Id, e.Count, e.MetadataType, e.Buffer.Length);

   // Load this GeoKey
   RasterCodecs codecs = sender as RasterCodecs;
   RasterTagMetadata geoKey = codecs.ReadGeoKey(geoKeyStream, 1, e.Id);
   byte[] data = geoKey.GetData();
   for(int i = 0; i < data.Length; i++)
      Debug.WriteLine("{0:X} ", data[i]);
   Debug.WriteLine("");

   // Add it to our collection
   myGeoKeys.Add(geoKey);
}
Private myGeoKeys As RasterCollection(Of RasterTagMetadata)
Private geoKeyStream As Stream
Private Sub EnumGeoKeysExample(ByVal inStreamGeyKey As Stream, ByVal outStreamGeyKey As Stream)
   Dim codecs As RasterCodecs = New RasterCodecs()

   geoKeyStream = inStreamGeyKey
   myGeoKeys = New RasterCollection(Of RasterTagMetadata)()

   AddHandler codecs.GeoKeyFound, AddressOf codecs_GeyKeyFound
   codecs.EnumGeoKeys(inStreamGeyKey, 1)
   RemoveHandler codecs.GeoKeyFound, AddressOf codecs_GeyKeyFound

   ' We read all the tags now, save them to the file
   Debug.WriteLine("{0} GeoKeys read, saving them to the destination file", myGeoKeys.Count)
   codecs.WriteGeoKeys(outStreamGeyKey, 1, myGeoKeys)
End Sub

Private Sub codecs_GeyKeyFound(ByVal sender As Object, ByVal e As CodecsEnumGeoKeysEventArgs)
   Debug.WriteLine("GeoKey: Id={0}, Count={1}, Type={2}, DataLength={3}, Data=", e.Id, e.Count, e.MetadataType, e.Buffer.Length)

   ' Load this GeoKey
   Dim codecs As RasterCodecs = TryCast(sender, RasterCodecs)
   Dim geoKey As RasterTagMetadata = codecs.ReadGeoKey(geoKeyStream, 1, e.Id)
   Dim data As Byte() = geoKey.GetData()
   Dim i As Integer = 0
   Do While i < data.Length
      Debug.WriteLine("{0:X} ", data(i))
      i += 1
   Loop
   Debug.WriteLine("")

   ' Add it to our collection
   myGeoKeys.Add(geoKey)
End Sub
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

RasterCodecs Class
RasterCodecs Members

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.