Prototype and description of the function getntvgridarray()

(Function of the unlock requiring group "NTv2 Tools")

 

getntvgridarray()
Determination of parameters of one or all NTv2 subgrids in arrays.

Prototype of the DLL function in C++ syntax (attend lower case!):
__declspec(dllimport) unsigned long __stdcall getntvgridarray(
     char *pszFileNtv,
     unsigned long lAscii,
     unsigned short nGridNo,
     double aGridVal[][6],
     double aGridFrame[4],
     unsigned long aGridSize[],
     unsigned short nGridMax,
     unsigned short *nGridCount);

Prototype of the DLL function in Visual Objects syntax:
_DLL FUNCTION getntvgridarray;
     (pszFileNtv as psz,;                  // 4 Byte, char*
     lAscii as logic,;                     // 4 Byte
     nGridNo as word,;                     // 2 Byte
     aGridVal as real8 ptr,;               // 4 Byte
     aGridFrame as real8 ptr,;             // 4 Byte
     aGridSize as dword ptr,;              // 4 Byte
     nGridMax as word,;                    // 2 Byte
     nGridCount ref word);                 // 4 Byte
as logic pascal:geodll32.getntvgridarray


The function returns the numerical parameters of one or more subgrids from
an ASCII or binary formatted NTv2 file in arrays. The array aGridVal returns
the bounding rectangles and mesh sizes of the subgrids. The array aGridFrame
returns a full covering rectangle of all processed subgrids. The array
aGridSize returns the numbers of grid meshes contained in the subgrids.


The parameters are passed and/or returned as follows:
pszFileNtv  File name of the ASCII or binary formatted NTv2 file from which
            the numerical parameters are to be stored in arrays. The file
            name may contain a drive letter, a directory path and a file
            name extension.

lAscii      TRUE: The NTv2 file is ASCII formatted.
            FALSE: The NTv2 file is binary formatted.

nGridNo     n: Number of the subgrid in the NTv2 file for which the
               numerical parameters are to be determined.
            0: The numeric parameters of all subgrids contained in the NTv2
               file are determined.

aGridVal    Pointer to an array or structure with nGridMax * 6 elements of
[n][6]      type double. For the subgids following parameters are stored in
  or        the array:
NULL        1: South border of the grid in degree
            2: North border of the grid in degree
            3: East border of the grid in degree
            4: West border of the grid in degree
            5: Grid spacing on latitude of the grid meshes in degree
            6: Grid spacing on longitude of the grid meshes in degree
            If aGridVal is NULL, no Array will be returned.

aGridFrame  Pointer to an array or structure with 4 elements of type
[4]         double. The rectangle enclosing the subgrids is stored in the
  or        array as follows:
NULL        1: South border of the enclosing rectangle in degree
            2: North border of the enclosing rectangle in degree
            3: East border of the enclosing rectangle in degree
            4: West border of the enclosing rectangle in degree
            If aGridFrame or aGridVal is NULL, no Array will be returned.

aGridSize   Pointer to an array or structure with nGridMax unsigned long
[n]         elements. In the array, the numbers of grid meshes of the
  or        processed subgrids are registered.
NULL        If aGridSize is NULL, no Array will be returned.


nGridMax    The maximum size of the arrays or structures analogous to the
            definition in the calling program. The size depends on the
            number of subgrids expected in the NTv2 file. If necessary, the
            number of subgrids can be determined with the function
            getntvgridcount().

nGridCount  The number of subgrids actually processed. The number of the
(ref)       subgrids is returned by reference.

returnVal   In case of an error the function returns FALSE, otherwise TRUE.


Example with fix arrays in CAVO:
FUNCTION test
  LOCAL n,nGridMax,nGridCount AS WORD
  LOCAL DIM aGridVal[500,6],DIM aGridFrame[4] AS REAL8
  LOCAL DIM aGridSize[500] AS DWORD
  LOCAL pszFileName AS PSZ
  pszFileName := PSZ("C:\ntv2\ntv2_0.gsb")
  nGridMax := 500
  IF getntvgridarray(pszFileName,FALSE,0,@aGridVal,@aGridFrame,@aGridSize,;
  nGridMax,@nGridCount)
    ? nGridCount
    FOR n:=1 UPTO nGridCount
      ? aGridVal[n,1],aGridVal[n,2],aGridVal[n,3],aGridVal[n,4]
      ? aGridSize[n]
    NEXT n
    ? aGridFrame[1],aGridFrame[2],aGridFrame[3],aGridFrame[4]
  ELSE
    geterrorcode(@pszError)
    ? Psz2String(pszError)
  ENDIF
RETURN 0


Example with dynamic structures in CAVO:
STRUCTURE GRIDVAL
  MEMBER DIM a[1,6] AS REAL8

STRUCTURE GRIDSIZE
  MEMBER DIM a[1] AS DWORD

FUNCTION test   // Property "Range Checking" must be off!
  LOCAL n,nGridMax,nGridCount AS WORD
  LOCAL stGridVal AS GRIDVAL
  LOCAL DIM aGridFrame[4] AS REAL8
  LOCAL stGridSize AS GRIDSIZE
  LOCAL pszFileName AS PSZ
  pszFileName := PSZ("C:\ntv2\ntv2_0.gsb")
  IF .not. getntvgridcount(pszFileName,FALSE,@nGridMax)
    geterrorcode(@pszError)
    ? Psz2String(pszError)
  ELSE
    ? nGridMax
    stGridVal := MemAlloc(nGridMax * _sizeof(GRIDVAL))
    stGridSize := MemAlloc(nGridMax * _sizeof(GRIDSIZE))
    IF .not. getntvgridarray(pszFileName,FALSE,0,stGridVal,@aGridFrame,;
    stGridSize,nGridMax,@nGridCount)
      geterrorcode(@pszError)
      ? Psz2String(pszError)
    ELSE
      ? nGridCount
      FOR n:=1 UPTO nGridCount
        ? stGridVal.a[n,1],stGridVal.a[n,2],stGridVal.a[n,3],stGridVal.a[n,4]
        ? stGridSize.a[n]
      NEXT n
      ? aGridFrame[1],aGridFrame[2],aGridFrame[3],aGridFrame[4]
    ENDIF
    MemFree(stGridVal)
    MemFree(stGridSize)
  ENDIF
RETURN 0


Unlocking:
This function is a component of the unlock requiring function group "NTv2
tools". It is unlocked for unrestricted use together with the other functions
of the group by passing the unlock parameters, acquired from the software
distribution company, trough the function setunlockcode(). Without unlocking no
calls for test purposes (shareware principle) are possible with this function.