This is an automated email from the git hooks/post-receive script. ross-guest pushed a commit to branch master in repository liblas.
commit f1d740863685c766704fe5d785c7eb4873f980a4 Author: Ross Gammon <rossgam...@mail.dk> Date: Thu Jul 31 21:32:43 2014 +0200 Update to build against latest gdal (1.11.0) Commit cherry picked from upstream (from what will become liblas 1.8). --- debian/patches/series | 1 + debian/patches/update_gdal_geotiff.patch | 1796 ++++++++++++++++++++++++++++++ 2 files changed, 1797 insertions(+) diff --git a/debian/patches/series b/debian/patches/series index f58753b..f7f8bed 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -2,3 +2,4 @@ boost soversion fix_library_search separator-typo +update_gdal_geotiff.patch diff --git a/debian/patches/update_gdal_geotiff.patch b/debian/patches/update_gdal_geotiff.patch new file mode 100644 index 0000000..1e1026f --- /dev/null +++ b/debian/patches/update_gdal_geotiff.patch @@ -0,0 +1,1796 @@ +From: Howard Butler <hobu....@gmail.com> +Subject: [PATCH] update GDAL's GeoTIFF stuff to something more current +Date: Tue, 10 Jun 2014 13:48:51 -0500 + +Patch cherry-picked from upstream to prepare the way for the GDAL transition to 1.11.0. +This commit will be part of LibLAS 1.8, but it may not be ready for a while, so it is +being backported to LibLAS 1.7. +Relevant Debian GIS Team discussion here: +https://lists.debian.org/debian-gis/2014/07/msg00049.html + +Origin: upstream, https://github.com/libLAS/libLAS/commit/5a3361ea12ad8c946c6675b6f3e7370dd426a408 +Origin: upstream, https://github.com/libLAS/libLAS/commit/43e841f21fe90b1a35aa127c62e0ea1a96eb2df9 + +--- + src/gt_wkt_srs.cpp | 813 ++++++++++++++++++++++++++++++---------------- + src/gt_wkt_srs.h | 4 +- + src/gt_wkt_srs_for_gdal.h | 18 +- + src/tifvsi.cpp | 55 ++-- + src/tifvsi.h | 5 +- + 5 files changed, 590 insertions(+), 305 deletions(-) + +--- liblas.orig/src/gt_wkt_srs.cpp ++++ liblas/src/gt_wkt_srs.cpp +@@ -1,15 +1,15 @@ + /****************************************************************************** +- * $Id: gt_wkt_srs.cpp 21928 2011-03-11 03:31:28Z warmerdam $ ++ * $Id$ + * + * Project: GeoTIFF Driver + * Purpose: Implements translation between GeoTIFF normalized projection +- * definitions and OpenGIS WKT SRS format. This code is +- * deliberately GDAL free, and it is intended to be moved into +- * libgeotiff someday if possible. ++ * definitions and OpenGIS WKT SRS format. This code is intended to ++ * be moved into libgeotiff someday if possible. + * Author: Frank Warmerdam, warmer...@pobox.com + * + ****************************************************************************** + * Copyright (c) 1999, Frank Warmerdam ++ * Copyright (c) 2008-2014, Even Rouault <even dot rouault at mines-paris dot org> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), +@@ -30,9 +30,10 @@ + * DEALINGS IN THE SOFTWARE. + ****************************************************************************/ + +-#include "cpl_serv.h" +-#include "geo_tiffp.h" +-#define CPL_ERROR_H_INCLUDED ++#include "cpl_error.h" ++#include "cpl_conv.h" ++#include "cpl_csv.h" ++#include "gdal_csv.h" + + #include "geovalues.h" + #include "ogr_spatialref.h" +@@ -44,60 +45,27 @@ + #include "gt_wkt_srs_for_gdal.h" + #include "gt_citation.h" + +-CPL_CVSID("$Id: gt_wkt_srs.cpp 21928 2011-03-11 03:31:28Z warmerdam $") ++CPL_CVSID("$Id$") + +-CPL_C_START +-#ifndef CPL_SERV_H_INTERNAL +-/* Make VSIL_STRICT_ENFORCE active in DEBUG builds */ +-#ifdef DEBUG +-#define VSIL_STRICT_ENFORCE +-#endif ++#define ProjLinearUnitsInterpCorrectGeoKey 3059 + +-#ifdef VSIL_STRICT_ENFORCE +-typedef struct _VSILFILE VSILFILE; +-#else +-typedef FILE VSILFILE; ++#ifndef CT_HotineObliqueMercatorAzimuthCenter ++# define CT_HotineObliqueMercatorAzimuthCenter 9815 + #endif + +-// ensure compatability with older libgeotiffs. + #if !defined(GTIFAtof) +-# define GTIFAtof atof ++# define GTIFAtof CPLAtof + #endif + +-int CPL_DLL VSIFCloseL( VSILFILE * ); +-int CPL_DLL VSIUnlink( const char * ); +-VSILFILE CPL_DLL *VSIFileFromMemBuffer( const char *pszFilename, +- GByte *pabyData, +- GUIntBig nDataLength, +- int bTakeOwnership ); +-GByte CPL_DLL *VSIGetMemFileBuffer( const char *pszFilename, +- GUIntBig *pnDataLength, +- int bUnlinkAndSeize ); +- +-/* Those stuff are redefined in external libgeotiff cpl_serv.h */ +-/* as macros. Let's use GDAL functions instead */ +-/* E.Rouault : I'm wondering why we just don't #define CPL_SERV_H_INCLUDED */ +-/* at the beginning of this file to avoid cpl_serv.h to be used at all ??? */ +- +-#undef CSVReadParseLine +-char CPL_DLL **CSVReadParseLine( FILE *fp); +-#undef CSLDestroy +-void CPL_DLL CPL_STDCALL CSLDestroy(char **papszStrList); +-#undef VSIFree +-void CPL_DLL VSIFree( void * ); +-#undef CPLFree +-#define CPLFree VSIFree +-#undef CPLMalloc +-void CPL_DLL *CPLMalloc( size_t ); +-#undef CPLCalloc +-void CPL_DLL *CPLCalloc( size_t, size_t ); +-#undef CPLStrdup +-char CPL_DLL *CPLStrdup( const char * ); +- +-#endif /* CPL_SERV_H_INTERNAL */ ++CPL_C_START ++void CPL_DLL LibgeotiffOneTimeInit(); ++void LibgeotiffOneTimeCleanupMutex(); + + CPL_C_END + ++// To remind myself not to use CPLString in this file! ++#define CPLString Please_do_not_use_CPLString_in_this_file ++ + static const char *papszDatumEquiv[] = + { + "Militar_Geographische_Institut", +@@ -119,6 +87,40 @@ + #endif + + /************************************************************************/ ++/* LibgeotiffOneTimeInit() */ ++/************************************************************************/ ++ ++static void* hMutex = NULL; ++ ++void LibgeotiffOneTimeInit() ++{ ++ static int bOneTimeInitDone = FALSE; ++ CPLMutexHolder oHolder( &hMutex); ++ ++ if (bOneTimeInitDone) ++ return; ++ ++ bOneTimeInitDone = TRUE; ++ ++ // If linking with an external libgeotiff we hope this will call the ++ // SetCSVFilenameHook() in libgeotiff, not the one in gdal/port! ++ // SetCSVFilenameHook( GDALDefaultCSVFilename ); ++} ++ ++/************************************************************************/ ++/* LibgeotiffOneTimeCleanupMutex() */ ++/************************************************************************/ ++ ++void LibgeotiffOneTimeCleanupMutex() ++{ ++ if( hMutex != NULL ) ++ { ++ CPLDestroyMutex(hMutex); ++ hMutex = NULL; ++ } ++} ++ ++/************************************************************************/ + /* GTIFToCPLRecyleString() */ + /* */ + /* This changes a string from the libgeotiff heap to the GDAL */ +@@ -207,11 +209,11 @@ + /************************************************************************/ + + /* For example: +- GTCitationGeoKey (Ascii,215): "IMAGINE GeoTIFF Support\nCopyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved\n@(#)$RCSfile$ $Revision: 21928 $ $Date: 2011-03-10 22:31:28 -0500 (Thu, 10 Mar 2011) $\nProjection Name = UTM\nUnits = meters\nGeoTIFF Units = meters" ++ GTCitationGeoKey (Ascii,215): "IMAGINE GeoTIFF Support\nCopyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved\n@(#)$RCSfile$ $Revision$ $Date$\nProjection Name = UTM\nUnits = meters\nGeoTIFF Units = meters" + +- GeogCitationGeoKey (Ascii,267): "IMAGINE GeoTIFF Support\nCopyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved\n@(#)$RCSfile$ $Revision: 21928 $ $Date: 2011-03-10 22:31:28 -0500 (Thu, 10 Mar 2011) $\nUnable to match Ellipsoid (Datum) to a GeographicTypeGeoKey value\nEllipsoid = Clarke 1866\nDatum = NAD27 (CONUS)" ++ GeogCitationGeoKey (Ascii,267): "IMAGINE GeoTIFF Support\nCopyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved\n@(#)$RCSfile$ $Revision$ $Date$\nUnable to match Ellipsoid (Datum) to a GeographicTypeGeoKey value\nEllipsoid = Clarke 1866\nDatum = NAD27 (CONUS)" + +- PCSCitationGeoKey (Ascii,214): "IMAGINE GeoTIFF Support\nCopyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved\n@(#)$RCSfile$ $Revision: 21928 $ $Date: 2011-03-10 22:31:28 -0500 (Thu, 10 Mar 2011) $\nUTM Zone 10N\nEllipsoid = Clarke 1866\nDatum = NAD27 (CONUS)" ++ PCSCitationGeoKey (Ascii,214): "IMAGINE GeoTIFF Support\nCopyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved\n@(#)$RCSfile$ $Revision$ $Date$\nUTM Zone 10N\nEllipsoid = Clarke 1866\nDatum = NAD27 (CONUS)" + + */ + +@@ -259,6 +261,11 @@ + OGRSpatialReference oSRS; + + /* -------------------------------------------------------------------- */ ++/* Make sure we have hooked CSVFilename(). */ ++/* -------------------------------------------------------------------- */ ++ LibgeotiffOneTimeInit(); ++ ++/* -------------------------------------------------------------------- */ + /* Handle non-standard coordinate systems where GTModelTypeGeoKey */ + /* is not defined, but ProjectedCSTypeGeoKey is defined (ticket #3019) */ + /* -------------------------------------------------------------------- */ +@@ -338,9 +345,8 @@ + GTIFKeyGet( hGTIF, GeogCitationGeoKey, szName, + 0, sizeof(szName) ); + +-#if GDAL_VERSION_NUM >=1900 + oSRS.SetGeocCS( szName ); +-#endif ++ + char *pszUnitsName = NULL; + + GTIFGetUOMLengthInfo( psDefn->UOMLength, &pszUnitsName, NULL ); +@@ -357,6 +363,87 @@ + } + + /* -------------------------------------------------------------------- */ ++/* #3901: In libgeotiff 1.3.0 and earlier we incorrectly */ ++/* interpreted linear projection parameter geokeys (false */ ++/* easting/northing) as being in meters instead of the */ ++/* coordinate system of the file. The following code attempts */ ++/* to provide mechanisms for fixing the issue if we are linked */ ++/* with an older version of libgeotiff. */ ++/* -------------------------------------------------------------------- */ ++ int iParm; ++ const char *pszLinearUnits = ++ CPLGetConfigOption( "GTIFF_LINEAR_UNITS", "DEFAULT" ); ++ ++#if LIBGEOTIFF_VERSION <= 1300 ++ if( EQUAL(pszLinearUnits,"DEFAULT") && psDefn->Projection == KvUserDefined ) ++ { ++ for( iParm = 0; iParm < psDefn->nParms; iParm++ ) ++ { ++ switch( psDefn->ProjParmId[iParm] ) ++ { ++ case ProjFalseEastingGeoKey: ++ case ProjFalseNorthingGeoKey: ++ case ProjFalseOriginEastingGeoKey: ++ case ProjFalseOriginNorthingGeoKey: ++ case ProjCenterEastingGeoKey: ++ case ProjCenterNorthingGeoKey: ++ if( psDefn->UOMLengthInMeters != 0 ++ && psDefn->UOMLengthInMeters != 1.0 ) ++ { ++ psDefn->ProjParm[iParm] *= psDefn->UOMLengthInMeters; ++ CPLDebug( "GTIFF", "converting geokey to meters to fix bug in old libgeotiff" ); ++ } ++ break; ++ ++ default: ++ break; ++ } ++ } ++ } ++#endif /* LIBGEOTIFF_VERSION <= 1300 */ ++ ++/* -------------------------------------------------------------------- */ ++/* #3901: If folks have broken GeoTIFF files generated with */ ++/* older versions of GDAL+libgeotiff, then they may need a */ ++/* hack to allow them to be read properly. This is that */ ++/* hack. We basically try to undue the conversion applied by */ ++/* libgeotiff to meters (or above) to simulate the old */ ++/* behavior. */ ++/* -------------------------------------------------------------------- */ ++ short bLinearUnitsMarkedCorrect = FALSE; ++ ++ GTIFKeyGet(hGTIF, (geokey_t) ProjLinearUnitsInterpCorrectGeoKey, ++ &bLinearUnitsMarkedCorrect, 0, 1); ++ ++ if( EQUAL(pszLinearUnits,"BROKEN") ++ && psDefn->Projection == KvUserDefined ++ && !bLinearUnitsMarkedCorrect ) ++ { ++ for( iParm = 0; iParm < psDefn->nParms; iParm++ ) ++ { ++ switch( psDefn->ProjParmId[iParm] ) ++ { ++ case ProjFalseEastingGeoKey: ++ case ProjFalseNorthingGeoKey: ++ case ProjFalseOriginEastingGeoKey: ++ case ProjFalseOriginNorthingGeoKey: ++ case ProjCenterEastingGeoKey: ++ case ProjCenterNorthingGeoKey: ++ if( psDefn->UOMLengthInMeters != 0 ++ && psDefn->UOMLengthInMeters != 1.0 ) ++ { ++ psDefn->ProjParm[iParm] /= psDefn->UOMLengthInMeters; ++ CPLDebug( "GTIFF", "converting geokey to accomodate old broken file due to GTIFF_LINEAR_UNITS=BROKEN setting." ); ++ } ++ break; ++ ++ default: ++ break; ++ } ++ } ++ } ++ ++/* -------------------------------------------------------------------- */ + /* If this is a projected SRS we set the PROJCS keyword first */ + /* to ensure that the GEOGCS will be a child. */ + /* -------------------------------------------------------------------- */ +@@ -482,6 +569,7 @@ + dfSemiMajor = psDefn->SemiMajor; + if( dfSemiMajor == 0.0 ) + { ++ CPLFree(pszSpheroidName); + pszSpheroidName = CPLStrdup("unretrievable - using WGS84"); + dfSemiMajor = SRS_WGS84_SEMIMAJOR; + dfInvFlattening = SRS_WGS84_INVFLATTENING; +@@ -499,7 +587,7 @@ + if(!pszGeogName || strlen(pszGeogName) == 0) + { + CPLFree(pszGeogName); +- pszGeogName = CPLStrdup( pszDatumName ); ++ pszGeogName = CPLStrdup( pszDatumName ? pszDatumName : "unknown" ); + } + + if(aUnitGot) +@@ -613,7 +701,7 @@ + break; + + case CT_Stereographic: +- oSRS.SetOS( adfParm[0], adfParm[1], ++ oSRS.SetStereographic( adfParm[0], adfParm[1], + adfParm[4], + adfParm[5], adfParm[6] ); + break; +@@ -625,6 +713,13 @@ + adfParm[5], adfParm[6] ); + break; + ++ case CT_HotineObliqueMercatorAzimuthCenter: ++ oSRS.SetHOMAC( adfParm[0], adfParm[1], ++ adfParm[2], adfParm[3], ++ adfParm[4], ++ adfParm[5], adfParm[6] ); ++ break; ++ + case CT_EquidistantConic: + oSRS.SetEC( adfParm[0], adfParm[1], + adfParm[2], adfParm[3], +@@ -788,6 +883,16 @@ + } + + /* -------------------------------------------------------------------- */ ++/* This addresses another case where the EGM96 Vertical Datum code */ ++/* is mis-used as a Vertical CS code (#4922) */ ++/* -------------------------------------------------------------------- */ ++ if( verticalCSType == 5171 ) ++ { ++ verticalDatum = 5171; ++ verticalCSType = 5773; ++ } ++ ++/* -------------------------------------------------------------------- */ + /* Somewhat similarly, codes 5001 to 5033 were treated as */ + /* vertical coordinate systems based on ellipsoidal heights. */ + /* We use the corresponding 2d geodetic datum as the vertical */ +@@ -948,7 +1053,7 @@ + dfFactorC = GTIFAtof( + CSVGetField( pszFilename, + "uom_code", szSearchKey, CC_Integer, +- "factor_b" )); ++ "factor_c" )); + if( dfFactorB != 0.0 && dfFactorC != 0.0 ) + sprintf( szInMeters, "%.16g", dfFactorB / dfFactorC ); + else +@@ -1147,7 +1252,11 @@ + double dfLinearUOM = poSRS->GetLinearUnits( &pszLinearUOMName ); + int nUOMLengthCode = 9001; /* meters */ + +- if( (pszLinearUOMName != NULL ++ if( poSRS->GetAuthorityName("PROJCS|UNIT") != NULL ++ && EQUAL(poSRS->GetAuthorityName("PROJCS|UNIT"),"EPSG") ++ && poSRS->GetAttrNode( "PROJCS|UNIT" ) != poSRS->GetAttrNode("GEOGCS|UNIT") ) ++ nUOMLengthCode = atoi(poSRS->GetAuthorityCode("PROJCS|UNIT")); ++ else if( (pszLinearUOMName != NULL + && EQUAL(pszLinearUOMName,SRS_UL_FOOT)) + || fabs(dfLinearUOM-GTIFAtof(SRS_UL_FOOT_CONV)) < 0.0000001 ) + nUOMLengthCode = 9002; /* international foot */ +@@ -1181,13 +1290,11 @@ + ModelTypeProjected); + GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, nPCS ); + } +-#if GDAL_VERSION_NUM >=1900 + else if( poSRS->IsGeocentric() ) + { + GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeGeocentric ); + } +-#endif + else if( pszProjection == NULL ) + { + if( poSRS->IsGeographic() ) +@@ -1197,15 +1304,15 @@ + } + else if( EQUAL(pszProjection,SRS_PT_ALBERS_CONIC_EQUAL_AREA) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_AlbersEqualArea ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_AlbersEqualArea ); + + GTIFKeySet(psGTIF, ProjStdParallelGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_1, 0.0 ) ); +@@ -1220,17 +1327,17 @@ + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( poSRS->GetUTMZone() != 0 ) + { + int bNorth, nZone, nProjection; + +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); + + nZone = poSRS->GetUTMZone( &bNorth ); +@@ -1275,15 +1382,15 @@ + + else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_TransverseMercator ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_TransverseMercator ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1295,23 +1402,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR_SOUTH_ORIENTED) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_TransvMercator_SouthOriented ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_TransvMercator_SouthOriented ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1323,25 +1430,25 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_MERCATOR_2SP) + || EQUAL(pszProjection,SRS_PT_MERCATOR_1SP) ) + + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Mercator ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Mercator ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1353,23 +1460,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_OBLIQUE_STEREOGRAPHIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_ObliqueStereographic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_ObliqueStereographic ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1381,23 +1488,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_STEREOGRAPHIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Stereographic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Stereographic ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1409,23 +1516,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_POLAR_STEREOGRAPHIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_PolarStereographic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_PolarStereographic ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1437,23 +1544,57 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_HOTINE_OBLIQUE_MERCATOR) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ ModelTypeProjected); ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ KvUserDefined ); ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ KvUserDefined ); ++ ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_ObliqueMercator ); ++ ++ GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_CENTER, 0.0 ) ); ++ ++ GTIFKeySet(psGTIF, ProjCenterLongGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); ++ ++ GTIFKeySet(psGTIF, ProjAzimuthAngleGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetNormProjParm( SRS_PP_AZIMUTH, 0.0 ) ); ++ ++ GTIFKeySet(psGTIF, ProjRectifiedGridAngleGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetNormProjParm( SRS_PP_RECTIFIED_GRID_ANGLE, 0.0 ) ); ++ ++ GTIFKeySet(psGTIF, ProjScaleAtCenterGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); ++ ++ GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ ++ GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ } ++ ++ else if( EQUAL(pszProjection,SRS_PT_HOTINE_OBLIQUE_MERCATOR_AZIMUTH_CENTER) ) ++ { ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_ObliqueMercator ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_HotineObliqueMercatorAzimuthCenter ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_CENTER, 0.0 ) ); +@@ -1471,23 +1612,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_CASSINI_SOLDNER) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_CassiniSoldner ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_CassiniSoldner ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1496,23 +1637,23 @@ + poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_EQUIDISTANT_CONIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_EquidistantConic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_EquidistantConic ); + + GTIFKeySet(psGTIF, ProjStdParallel1GeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_1, 0.0 ) ); +@@ -1527,23 +1668,23 @@ + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_POLYCONIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Polyconic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Polyconic ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1555,23 +1696,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_AZIMUTHAL_EQUIDISTANT) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_AzimuthalEquidistant ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_AzimuthalEquidistant ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_CENTER, 0.0 ) ); +@@ -1580,23 +1721,23 @@ + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_MILLER_CYLINDRICAL) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_MillerCylindrical ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_MillerCylindrical ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_CENTER, 0.0 ) ); +@@ -1605,23 +1746,23 @@ + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_EQUIRECTANGULAR) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Equirectangular ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Equirectangular ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1633,23 +1774,23 @@ + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_1, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_GNOMONIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Gnomonic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Gnomonic ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1658,23 +1799,23 @@ + poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_LAMBERT_AZIMUTHAL_EQUAL_AREA) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_LambertAzimEqualArea ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_LambertAzimEqualArea ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_CENTER, 0.0 ) ); +@@ -1683,23 +1824,23 @@ + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_ORTHOGRAPHIC) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Orthographic ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Orthographic ); + + GTIFKeySet(psGTIF, ProjCenterLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1708,23 +1849,23 @@ + poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_NEW_ZEALAND_MAP_GRID) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_NewZealandMapGrid ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_NewZealandMapGrid ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1733,89 +1874,89 @@ + poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_ROBINSON) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Robinson ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Robinson ); + + GTIFKeySet(psGTIF, ProjCenterLongGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_SINUSOIDAL) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_Sinusoidal ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_Sinusoidal ); + + GTIFKeySet(psGTIF, ProjCenterLongGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LONGITUDE_OF_CENTER, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_VANDERGRINTEN) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_VanDerGrinten ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_VanDerGrinten ); + + GTIFKeySet(psGTIF, ProjCenterLongGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_ALBERS_CONIC_EQUAL_AREA) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_AlbersEqualArea ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_AlbersEqualArea ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_CENTER, 0.0 ) ); +@@ -1830,23 +1971,23 @@ + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_2, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_LambertConfConic_2SP ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_LambertConfConic_2SP ); + + GTIFKeySet(psGTIF, ProjFalseOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1861,23 +2002,23 @@ + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_2, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseOriginEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseOriginNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_LAMBERT_CONFORMAL_CONIC_1SP) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_LambertConfConic_1SP ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_LambertConfConic_1SP ); + + GTIFKeySet(psGTIF, ProjNatOriginLatGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_LATITUDE_OF_ORIGIN, 0.0 ) ); +@@ -1889,23 +2030,23 @@ + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else if( EQUAL(pszProjection,SRS_PT_CYLINDRICAL_EQUAL_AREA) ) + { +- GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, GTModelTypeGeoKey, TYPE_SHORT, 1, + ModelTypeProjected); +- GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectedCSTypeGeoKey, TYPE_SHORT, 1, + KvUserDefined ); +- GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, ++ GTIFKeySet(psGTIF, ProjectionGeoKey, TYPE_SHORT, 1, + KvUserDefined ); + +- GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, +- CT_CylindricalEqualArea ); ++ GTIFKeySet(psGTIF, ProjCoordTransGeoKey, TYPE_SHORT, 1, ++ CT_CylindricalEqualArea ); + + GTIFKeySet(psGTIF, ProjNatOriginLongGeoKey, TYPE_DOUBLE, 1, + poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); +@@ -1914,10 +2055,10 @@ + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_1, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); + + GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, +- poSRS->GetNormProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); ++ poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); + } + + else +@@ -1927,7 +2068,11 @@ + + // Note that VERTCS is an ESRI "spelling" of VERT_CS so we assume if + // we find it that we should try to treat this as a PE string. +- if( bWritePEString || poSRS->GetAttrValue("VERTCS") != NULL ) ++ bWritePEString |= (poSRS->GetAttrValue("VERTCS") != NULL); ++ ++ if( bWritePEString ++ && CSLTestBoolean( CPLGetConfigOption("GTIFF_ESRI_CITATION", ++ "YES") ) ) + { + /* Anyhing we can't map, we store as an ESRI PE string with a citation key */ + char *pszPEString = NULL; +@@ -1950,10 +2095,26 @@ + } + + /* -------------------------------------------------------------------- */ ++/* Is there a false easting/northing set? If so, write out a */ ++/* special geokey tag to indicate that GDAL has written these */ ++/* with the proper interpretation of the linear units. */ ++/* -------------------------------------------------------------------- */ ++ double dfFE = 0.0, dfFN = 0.0; ++ ++ if( (GTIFKeyGet(psGTIF, ProjFalseEastingGeoKey, &dfFE, 0, 1) ++ || GTIFKeyGet(psGTIF, ProjFalseNorthingGeoKey, &dfFN, 0, 1) ++ || GTIFKeyGet(psGTIF, ProjFalseOriginEastingGeoKey, &dfFE, 0, 1) ++ || GTIFKeyGet(psGTIF, ProjFalseOriginNorthingGeoKey, &dfFN, 0, 1)) ++ && (dfFE != 0.0 || dfFN != 0.0) ++ && nUOMLengthCode != 9001 ) ++ { ++ GTIFKeySet(psGTIF, (geokey_t) ProjLinearUnitsInterpCorrectGeoKey, ++ TYPE_SHORT, 1, (short) 1 ); ++ } ++ ++/* -------------------------------------------------------------------- */ + /* Write linear units information. */ + /* -------------------------------------------------------------------- */ +-#if GDAL_VERSION_NUM >=1900 +- + if( poSRS->IsGeocentric() ) + { + GTIFKeySet(psGTIF, GeogLinearUnitsGeoKey, TYPE_SHORT, 1, +@@ -1962,9 +2123,7 @@ + GTIFKeySet( psGTIF, GeogLinearUnitSizeGeoKey, TYPE_DOUBLE, 1, + dfLinearUOM); + } +- else +-#endif +- if( !poSRS->IsGeographic() ) ++ else if( !poSRS->IsGeographic() ) + { + GTIFKeySet(psGTIF, ProjLinearUnitsGeoKey, TYPE_SHORT, 1, + nUOMLengthCode ); +@@ -1973,8 +2132,15 @@ + dfLinearUOM); + + /* if linear units name is available and user defined, store it as citation */ +- if(!peStrStored && nUOMLengthCode == KvUserDefined && pszLinearUOMName && strlen(pszLinearUOMName)>0) ++ if(!peStrStored ++ && nUOMLengthCode == KvUserDefined ++ && pszLinearUOMName ++ && strlen(pszLinearUOMName)>0 ++ && CSLTestBoolean( CPLGetConfigOption("GTIFF_ESRI_CITATION", ++ "YES") ) ) ++ { + SetLinearUnitCitation(psGTIF, pszLinearUOMName); ++ } + } + + /* -------------------------------------------------------------------- */ +@@ -2001,12 +2167,7 @@ + /* -------------------------------------------------------------------- */ + if( poSRS->GetRoot() != NULL + && poSRS->GetRoot()->GetChild(0) != NULL +- && (poSRS->IsProjected() || poSRS->IsLocal() +- +-#if GDAL_VERSION_NUM >=1900 +- || poSRS->IsGeocentric() +-#endif +- ) ) ++ && (poSRS->IsProjected() || poSRS->IsLocal() || poSRS->IsGeocentric()) ) + { + GTIFKeySet( psGTIF, GTCitationGeoKey, TYPE_ASCII, 0, + poSRS->GetRoot()->GetChild(0)->GetValue() ); +@@ -2097,7 +2258,9 @@ + GTIFKeySet( psGTIF, GeogSemiMajorAxisGeoKey, TYPE_DOUBLE, 1, + dfSemiMajor ); + +- if( nGCS == KvUserDefined ) ++ if( nGCS == KvUserDefined ++ && CSLTestBoolean( CPLGetConfigOption("GTIFF_ESRI_CITATION", ++ "YES") ) ) + SetGeogCSCitation(psGTIF, poSRS, angUnitName, nDatum, nSpheroid); + } + +@@ -2105,15 +2268,23 @@ + /* Do we have TOWGS84 parameters? */ + /* -------------------------------------------------------------------- */ + +-#if LIBGEOTIFF_VERSION >= 1310 ++#if LIBGEOTIFF_VERSION >= 1310 && !defined(GEO_NORMALIZE_DISABLE_TOWGS84) + double adfTOWGS84[7]; + + if( poSRS->GetTOWGS84( adfTOWGS84 ) == OGRERR_NONE ) + { + if( adfTOWGS84[3] == 0.0 && adfTOWGS84[4] == 0.0 + && adfTOWGS84[5] == 0.0 && adfTOWGS84[6] == 0.0 ) +- GTIFKeySet( psGTIF, GeogTOWGS84GeoKey, TYPE_DOUBLE, 3, +- adfTOWGS84 ); ++ { ++ if( nGCS == GCS_WGS_84 && adfTOWGS84[0] == 0.0 ++ && adfTOWGS84[1] == 0.0 && adfTOWGS84[2] == 0.0 ) ++ { ++ ; /* do nothing */ ++ } ++ else ++ GTIFKeySet( psGTIF, GeogTOWGS84GeoKey, TYPE_DOUBLE, 3, ++ adfTOWGS84 ); ++ } + else + GTIFKeySet( psGTIF, GeogTOWGS84GeoKey, TYPE_DOUBLE, 7, + adfTOWGS84 ); +@@ -2160,49 +2331,93 @@ + CPLErr GTIFWktFromMemBuf( int nSize, unsigned char *pabyBuffer, + char **ppszWKT, double *padfGeoTransform, + int *pnGCPCount, GDAL_GCP **ppasGCPList ) ++{ ++ return GTIFWktFromMemBufEx(nSize, pabyBuffer, ppszWKT, padfGeoTransform, ++ pnGCPCount, ppasGCPList, NULL); ++} ++ ++CPLErr GTIFWktFromMemBufEx( int nSize, unsigned char *pabyBuffer, ++ char **ppszWKT, double *padfGeoTransform, ++ int *pnGCPCount, GDAL_GCP **ppasGCPList, ++ int *pbPixelIsPoint ) + + { +- TIFF *hTIFF; +- GTIF *hGTIF; +- GTIFDefn sGTIFDefn; +- char szFilename[100]; ++ bool bPixelIsPoint = false; ++ int bPointGeoIgnore = FALSE; ++ short nRasterType; ++ char szFilename[100]; + +- sprintf( szFilename, "/vsimem/wkt_from_mem_buf_%ld.tif", ++ sprintf( szFilename, "/vsimem/wkt_from_mem_buf_%ld.tif", + (long) CPLGetPID() ); + + /* -------------------------------------------------------------------- */ ++/* Make sure we have hooked CSVFilename(). */ ++/* -------------------------------------------------------------------- */ ++ LibgeotiffOneTimeInit(); ++ ++/* -------------------------------------------------------------------- */ + /* Create a memory file from the buffer. */ + /* -------------------------------------------------------------------- */ + VSILFILE *fp = VSIFileFromMemBuffer( szFilename, pabyBuffer, nSize, FALSE ); + if( fp == NULL ) + return CE_Failure; +- VSIFCloseL( fp ); + + /* -------------------------------------------------------------------- */ + /* Initialize access to the memory geotiff structure. */ + /* -------------------------------------------------------------------- */ +- hTIFF = VSI_TIFFOpen( szFilename, "r" ); ++ TIFF *hTIFF; ++ ++ hTIFF = VSI_TIFFOpen( szFilename, "rc", fp ); + + if( hTIFF == NULL ) + { + CPLError( CE_Failure, CPLE_AppDefined, + "TIFF/GeoTIFF structure is corrupt." ); + VSIUnlink( szFilename ); ++ VSIFCloseL( fp ); + return CE_Failure; + } + + /* -------------------------------------------------------------------- */ + /* Get the projection definition. */ + /* -------------------------------------------------------------------- */ ++ GTIF *hGTIF; ++ GTIFDefn *psGTIFDefn; ++ + hGTIF = GTIFNew(hTIFF); + +- if( hGTIF != NULL && GTIFGetDefn( hGTIF, &sGTIFDefn ) ) +- *ppszWKT = GTIFGetOGISDefn( hGTIF, &sGTIFDefn ); ++ if( hGTIF != NULL && GTIFKeyGet(hGTIF, GTRasterTypeGeoKey, &nRasterType, ++ 0, 1 ) == 1 ++ && nRasterType == (short) RasterPixelIsPoint ) ++ { ++ bPixelIsPoint = true; ++ bPointGeoIgnore = ++ CSLTestBoolean( CPLGetConfigOption("GTIFF_POINT_GEO_IGNORE", ++ "FALSE") ); ++ } ++ if( pbPixelIsPoint ) ++ *pbPixelIsPoint = bPixelIsPoint; ++ ++#if LIBGEOTIFF_VERSION >= 1410 ++ psGTIFDefn = GTIFAllocDefn(); ++#else ++ psGTIFDefn = (GTIFDefn *) CPLCalloc(1,sizeof(GTIFDefn)); ++#endif ++ ++ ++ if( hGTIF != NULL && GTIFGetDefn( hGTIF, psGTIFDefn ) ) ++ *ppszWKT = GTIFGetOGISDefn( hGTIF, psGTIFDefn ); + else + *ppszWKT = NULL; + + if( hGTIF ) + GTIFFree( hGTIF ); ++ ++#if LIBGEOTIFF_VERSION >= 1410 ++ GTIFFreeDefn(psGTIFDefn); ++#else ++ CPLFree(psGTIFDefn); ++#endif + + /* -------------------------------------------------------------------- */ + /* Get geotransform or tiepoints. */ +@@ -2233,6 +2448,13 @@ + padfTiePoints[3] - padfTiePoints[0] * padfGeoTransform[1]; + padfGeoTransform[3] = + padfTiePoints[4] - padfTiePoints[1] * padfGeoTransform[5]; ++ ++ // adjust for pixel is point in transform ++ if( bPixelIsPoint && !bPointGeoIgnore ) ++ { ++ padfGeoTransform[0] -= (padfGeoTransform[1] * 0.5 + padfGeoTransform[2] * 0.5); ++ padfGeoTransform[3] -= (padfGeoTransform[4] * 0.5 + padfGeoTransform[5] * 0.5); ++ } + } + } + +@@ -2273,6 +2495,7 @@ + /* Cleanup. */ + /* -------------------------------------------------------------------- */ + XTIFFClose( hTIFF ); ++ VSIFCloseL( fp ); + + VSIUnlink( szFilename ); + +@@ -2289,6 +2512,16 @@ + CPLErr GTIFMemBufFromWkt( const char *pszWKT, const double *padfGeoTransform, + int nGCPCount, const GDAL_GCP *pasGCPList, + int *pnSize, unsigned char **ppabyBuffer ) ++{ ++ return GTIFMemBufFromWktEx(pszWKT, padfGeoTransform, ++ nGCPCount,pasGCPList, ++ pnSize, ppabyBuffer, FALSE); ++} ++ ++CPLErr GTIFMemBufFromWktEx( const char *pszWKT, const double *padfGeoTransform, ++ int nGCPCount, const GDAL_GCP *pasGCPList, ++ int *pnSize, unsigned char **ppabyBuffer, ++ int bPixelIsPoint ) + + { + TIFF *hTIFF; +@@ -2299,14 +2532,24 @@ + (long) CPLGetPID() ); + + /* -------------------------------------------------------------------- */ ++/* Make sure we have hooked CSVFilename(). */ ++/* -------------------------------------------------------------------- */ ++ LibgeotiffOneTimeInit(); ++ ++/* -------------------------------------------------------------------- */ + /* Initialize access to the memory geotiff structure. */ + /* -------------------------------------------------------------------- */ +- hTIFF = VSI_TIFFOpen( szFilename, "w" ); ++ VSILFILE* fpL = VSIFOpenL( szFilename, "w" ); ++ if( fpL == NULL ) ++ return CE_Failure; ++ ++ hTIFF = VSI_TIFFOpen( szFilename, "w", fpL ); + + if( hTIFF == NULL ) + { + CPLError( CE_Failure, CPLE_AppDefined, + "TIFF/GeoTIFF structure is corrupt." ); ++ VSIFCloseL(fpL); + return CE_Failure; + } + +@@ -2325,10 +2568,26 @@ + /* Get the projection definition. */ + /* -------------------------------------------------------------------- */ + +- if( pszWKT != NULL ) ++ int bPointGeoIgnore = FALSE; ++ if( bPixelIsPoint ) ++ { ++ bPointGeoIgnore = ++ CSLTestBoolean( CPLGetConfigOption("GTIFF_POINT_GEO_IGNORE", ++ "FALSE") ); ++ } ++ ++ if( pszWKT != NULL || bPixelIsPoint ) + { + hGTIF = GTIFNew(hTIFF); +- GTIFSetFromOGISDefn( hGTIF, pszWKT ); ++ if( pszWKT != NULL ) ++ GTIFSetFromOGISDefn( hGTIF, pszWKT ); ++ ++ if( bPixelIsPoint ) ++ { ++ GTIFKeySet(hGTIF, GTRasterTypeGeoKey, TYPE_SHORT, 1, ++ RasterPixelIsPoint); ++ } ++ + GTIFWriteKeys( hGTIF ); + GTIFFree( hGTIF ); + } +@@ -2336,6 +2595,7 @@ + /* -------------------------------------------------------------------- */ + /* Set the geotransform, or GCPs. */ + /* -------------------------------------------------------------------- */ ++ + if( padfGeoTransform[0] != 0.0 || padfGeoTransform[1] != 1.0 + || padfGeoTransform[2] != 0.0 || padfGeoTransform[3] != 0.0 + || padfGeoTransform[4] != 0.0 || ABS(padfGeoTransform[5]) != 1.0 ) +@@ -2357,7 +2617,13 @@ + adfTiePoints[3] = padfGeoTransform[0]; + adfTiePoints[4] = padfGeoTransform[3]; + adfTiePoints[5] = 0.0; +- ++ ++ if( bPixelIsPoint && !bPointGeoIgnore ) ++ { ++ adfTiePoints[3] += padfGeoTransform[1] * 0.5 + padfGeoTransform[2] * 0.5; ++ adfTiePoints[4] += padfGeoTransform[4] * 0.5 + padfGeoTransform[5] * 0.5; ++ } ++ + TIFFSetField( hTIFF, TIFFTAG_GEOTIEPOINTS, 6, adfTiePoints ); + } + else +@@ -2374,6 +2640,12 @@ + adfMatrix[7] = padfGeoTransform[3]; + adfMatrix[15] = 1.0; + ++ if( bPixelIsPoint && !bPointGeoIgnore ) ++ { ++ adfMatrix[3] += padfGeoTransform[1] * 0.5 + padfGeoTransform[2] * 0.5; ++ adfMatrix[7] += padfGeoTransform[4] * 0.5 + padfGeoTransform[5] * 0.5; ++ } ++ + TIFFSetField( hTIFF, TIFFTAG_GEOTRANSMATRIX, 16, adfMatrix ); + } + } +@@ -2412,6 +2684,7 @@ + TIFFWriteDirectory( hTIFF ); + + XTIFFClose( hTIFF ); ++ VSIFCloseL(fpL); + + /* -------------------------------------------------------------------- */ + /* Read back from the memory buffer. It would be preferrable */ +@@ -2425,4 +2698,3 @@ + + return CE_None; + } +- +--- liblas.orig/src/gt_wkt_srs.h ++++ liblas/src/gt_wkt_srs.h +@@ -1,5 +1,5 @@ + /****************************************************************************** +- * $Id: gt_wkt_srs.h 21595 2011-01-28 04:21:40Z warmerdam $ ++ * $Id$ + * + * Project: GeoTIFF Driver + * Purpose: Implements translation between GeoTIFF normalized projection +@@ -9,7 +9,7 @@ + * Author: Even Rouault + * + ****************************************************************************** +- * Copyright (c) 2010, Even Rouault ++ * Copyright (c) 2010, Even Rouault <even dot rouault at mines-paris dot org> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), +--- liblas.orig/src/gt_wkt_srs_for_gdal.h ++++ liblas/src/gt_wkt_srs_for_gdal.h +@@ -1,12 +1,12 @@ + /****************************************************************************** +- * $Id: gt_wkt_srs_for_gdal.h 21595 2011-01-28 04:21:40Z warmerdam $ ++ * $Id$ + * + * Project: GeoTIFF Driver + * Purpose: Read/Write in-memory GeoTIFF file + * Author: Even Rouault + * + ****************************************************************************** +- * Copyright (c) 2010, Even Rouault ++ * Copyright (c) 2010-2012, Even Rouault <even dot rouault at mines-paris dot org> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), +@@ -39,10 +39,22 @@ + const double *padfGeoTransform, + int nGCPCount, const GDAL_GCP *pasGCPList, + int *pnSize, unsigned char **ppabyBuffer ); ++ ++CPLErr GTIFMemBufFromWktEx( const char *pszWKT, ++ const double *padfGeoTransform, ++ int nGCPCount, const GDAL_GCP *pasGCPList, ++ int *pnSize, unsigned char **ppabyBuffer, ++ int bPixelIsPoint ); ++ + CPLErr CPL_DLL GTIFWktFromMemBuf( int nSize, unsigned char *pabyBuffer, + char **ppszWKT, double *padfGeoTransform, + int *pnGCPCount, GDAL_GCP **ppasGCPList ); + +-CPL_C_END ++CPLErr GTIFWktFromMemBufEx( int nSize, unsigned char *pabyBuffer, ++ char **ppszWKT, double *padfGeoTransform, ++ int *pnGCPCount, GDAL_GCP **ppasGCPList, ++ int *pbPixelIsPoint ); ++ ++CPL_C_END; + + #endif // GT_WKT_SRS_FOR_GDAL_H_INCLUDED +--- liblas.orig/src/tifvsi.cpp ++++ liblas/src/tifvsi.cpp +@@ -1,5 +1,5 @@ + /****************************************************************************** +- * $Id: tifvsi.cpp 10645 2007-01-18 02:22:39Z warmerdam $ ++ * $Id$ + * + * Project: GeoTIFF Driver + * Purpose: Implement system hook functions for libtiff on top of CPL/VSI, +@@ -9,6 +9,7 @@ + * + ****************************************************************************** + * Copyright (c) 2005, Frank Warmerdam, warmer...@pobox.com ++ * Copyright (c) 2010-2012, Even Rouault <even dot rouault at mines-paris dot org> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), +@@ -32,12 +33,18 @@ + /* + * TIFF Library UNIX-specific Routines. + */ +-#include "tiffio.h" + #include "cpl_vsi.h" ++#include "tifvsi.h" ++ ++#include <errno.h> + + // We avoid including xtiffio.h since it drags in the libgeotiff version + // of the VSI functions. + ++#ifdef RENAME_INTERNAL_LIBGEOTIFF_SYMBOLS ++#include "gdal_libgeotiff_symbol_rename.h" ++#endif ++ + CPL_C_START + extern TIFF CPL_DLL * XTIFFClientOpen(const char* name, const char* mode, + thandle_t thehandle, +@@ -50,28 +57,36 @@ + static tsize_t + _tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) + { +- return VSIFReadL( buf, 1, size, (FILE *) fd ); ++ return VSIFReadL( buf, 1, size, (VSILFILE *) fd ); + } + + static tsize_t + _tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) + { +- return VSIFWriteL( buf, 1, size, (FILE *) fd ); ++ tsize_t nRet = VSIFWriteL( buf, 1, size, (VSILFILE *) fd ); ++ if (nRet < size) ++ { ++ TIFFErrorExt( fd, "_tiffWriteProc", "%s", VSIStrerror( errno ) ); ++ } ++ return nRet; + } + + static toff_t + _tiffSeekProc(thandle_t fd, toff_t off, int whence) + { +- if( VSIFSeekL( (FILE *) fd, off, whence ) == 0 ) +- return (toff_t) VSIFTellL( (FILE *) fd ); ++ if( VSIFSeekL( (VSILFILE *) fd, off, whence ) == 0 ) ++ return (toff_t) VSIFTellL( (VSILFILE *) fd ); + else ++ { ++ TIFFErrorExt( fd, "_tiffSeekProc", "%s", VSIStrerror( errno ) ); + return (toff_t) -1; ++ } + } + + static int + _tiffCloseProc(thandle_t fd) + { +- return VSIFCloseL( (FILE *) fd ); ++ return 0; + } + + static toff_t +@@ -80,11 +95,11 @@ + vsi_l_offset old_off; + toff_t file_size; + +- old_off = VSIFTellL( (FILE *) fd ); +- VSIFSeekL( (FILE *) fd, 0, SEEK_END ); ++ old_off = VSIFTellL( (VSILFILE *) fd ); ++ VSIFSeekL( (VSILFILE *) fd, 0, SEEK_END ); + +- file_size = (toff_t) VSIFTellL( (FILE *) fd ); +- VSIFSeekL( (FILE *) fd, old_off, SEEK_SET ); ++ file_size = (toff_t) VSIFTellL( (VSILFILE *) fd ); ++ VSIFSeekL( (VSILFILE *) fd, old_off, SEEK_SET ); + + return file_size; + } +@@ -105,12 +120,11 @@ + /* + * Open a TIFF file for read/writing. + */ +-TIFF* VSI_TIFFOpen(const char* name, const char* mode) ++TIFF* VSI_TIFFOpen(const char* name, const char* mode, ++ VSILFILE* fp) + { +- static const char module[] = "TIFFOpen"; + int i, a_out; + char access[32]; +- FILE *fp; + TIFF *tif; + + a_out = 0; +@@ -128,24 +142,13 @@ + } + + strcat( access, "b" ); +- +- fp = VSIFOpenL( name, access ); +- if (fp == NULL) { +- if( errno >= 0 ) +- TIFFError(module,"%s: %s", name, VSIStrerror( errno ) ); +- else +- TIFFError(module, "%s: Cannot open", name); +- return ((TIFF *)0); +- } + ++ VSIFSeekL(fp, 0, SEEK_SET); + tif = XTIFFClientOpen(name, mode, + (thandle_t) fp, + _tiffReadProc, _tiffWriteProc, + _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, + _tiffMapProc, _tiffUnmapProc); + +- if( tif == NULL ) +- VSIFCloseL( fp ); +- + return tif; + } +--- liblas.orig/src/tifvsi.h ++++ liblas/src/tifvsi.h +@@ -1,5 +1,5 @@ + /****************************************************************************** +- * $Id: tifvsi.h 21102 2010-11-08 20:47:38Z rouault $ ++ * $Id$ + * + * Project: GeoTIFF Driver + * Purpose: Implement system hook functions for libtiff on top of CPL/VSI, +@@ -9,6 +9,7 @@ + * + ****************************************************************************** + * Copyright (c) 2005, Frank Warmerdam, warmer...@pobox.com ++ * Copyright (c) 2010, Even Rouault <even dot rouault at mines-paris dot org> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), +@@ -34,6 +35,6 @@ + + #include "tiffio.h" + +-TIFF* VSI_TIFFOpen(const char* name, const char* mode); ++TIFF* VSI_TIFFOpen(const char* name, const char* mode, VSILFILE* fp); + + #endif // TIFVSI_H_INCLUDED -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/liblas.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel