#------------------------------------------------------------------------------
# File:         GeoTiff.pm
#
# Description:  Read GeoTiff meta information
#
# Revisions:    02/23/2004 - P. Harvey Created
#               02/25/2004 - PH Added new codes from libgeotiff-1.2.1
#               02/01/2007 - PH Added new codes from libgeotiff-1.2.3
#               01/22/2014 - PH Added new code from libgeotiff-1.4.0
#
# Reference:    ftp://ftp.remotesensing.org/geotiff/libgeotiff/libgeotiff-1.1.4.tar.gz
#------------------------------------------------------------------------------

package Image::ExifTool::GeoTiff;

use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);

$VERSION = '1.10';

# format codes for geoTiff directory entries
my %geoTiffFormat = (
    0      => 'int16u',
    0x87b0 => 'double',
    0x87b1 => 'string',
);

my %epsg_units = (
    9001 => 'Linear Meter',
    9002 => 'Linear Foot',
    9003 => 'Linear Foot US Survey',
    9004 => 'Linear Foot Modified American',
    9005 => 'Linear Foot Clarke',
    9006 => 'Linear Foot Indian',
    9007 => 'Linear Link',
    9008 => 'Linear Link Benoit',
    9009 => 'Linear Link Sears',
    9010 => 'Linear Chain Benoit',
    9011 => 'Linear Chain Sears',
    9012 => 'Linear Yard Sears',
    9013 => 'Linear Yard Indian',
    9014 => 'Linear Fathom',
    9015 => 'Linear Mile International Nautical',
    9101 => 'Angular Radian',
    9102 => 'Angular Degree',
    9103 => 'Angular Arc Minute',
    9104 => 'Angular Arc Second',
    9105 => 'Angular Grad',
    9106 => 'Angular Gon',
    9107 => 'Angular DMS',
    9108 => 'Angular DMS Hemisphere',
    32767 => 'User Defined',
);

%Image::ExifTool::GeoTiff::Main = (
    GROUPS => { 2 => 'Location' },
    1 => {
        # this isn't a real GeoTiff key, but put it here
        # so it will appear in tag lists since we generate it below
        Name => 'GeoTiffVersion',
    },
    1024 => {
        Name => 'GTModelType',
        PrintConv => {
            1 => 'Projected',
            2 => 'Geographic',
            3 => 'Geocentric',
            32767 => 'User Defined',
        },
    },
    1025 => {
        Name => 'GTRasterType',
        PrintConv => {
            1 => 'Pixel Is Area',
            2 => 'Pixel Is Point',
            32767 => 'User Defined',
        },
    },
    1026 => 'GTCitation',
    2048 => {
        Name => 'GeographicType',
        PrintConv => {
            # epsg_gcs
            4001 => 'Airy 1830',
            4002 => 'Airy Modified 1849',
            4003 => 'Australian National Spheroid',
            4004 => 'Bessel 1841',
            4005 => 'Bessel Modified',
            4006 => 'Bessel Namibia',
            4007 => 'Clarke 1858',
            4008 => 'Clarke 1866',
            4009 => 'Clarke 1866 Michigan',
            4010 => 'Clarke 1880 Benoit',
            4011 => 'Clarke 1880 IGN',
            4012 => 'Clarke 1880 RGS',
            4013 => 'Clarke 1880 Arc',
            4014 => 'Clarke 1880 SGA 1922',
            4015 => 'Everest 1830 1937 Adjustment',
            4016 => 'Everest 1830 1967 Definition',
            4017 => 'Everest 1830 1975 Definition',
            4018 => 'Everest 1830 Modified',
            4019 => 'GRS 1980',
            4020 => 'Helmert 1906',
            4021 => 'Indonesian National Spheroid',
            4022 => 'International 1924',
            4023 => 'International 1967',
            4024 => 'Krassowsky 1940',
            4025 => 'NWL9D',
            4026 => 'NWL10D',
            4027 => 'Plessis 1817',
            4028 => 'Struve 1860',
            4029 => 'War Office',
            4030 => 'WGS84',
            4031 => 'GEM10C',
            4032 => 'OSU86F',
            4033 => 'OSU91A',
            4034 => 'Clarke 1880',
            4035 => 'Sphere',
            4120 => 'Greek',
            4121 => 'GGRS87',
            4123 => 'KKJ',
            4124 => 'RT90',
            4133 => 'EST92',
            4815 => 'Greek Athens',
            4201 => 'Adindan',
            4202 => 'AGD66',
            4203 => 'AGD84',
            4204 => 'Ain el Abd',
            4205 => 'Afgooye',
            4206 => 'Agadez',
            4207 => 'Lisbon',
            4208 => 'Aratu',
            4209 => 'Arc 1950',
            4210 => 'Arc 1960',
            4211 => 'Batavia',
            4212 => 'Barbados',
            4213 => 'Beduaram',
            4214 => 'Beijing 1954',
            4215 => 'Belge 1950',
            4216 => 'Bermuda 1957',
            4217 => 'Bern 1898',
            4218 => 'Bogota',
            4219 => 'Bukit Rimpah',
            4220 => 'Camacupa',
            4221 => 'Campo Inchauspe',
            4222 => 'Cape',
            4223 => 'Carthage',
            4224 => 'Chua',
            4225 => 'Corrego Alegre',
            4226 => 'Cote d Ivoire',
            4227 => 'Deir ez Zor',
            4228 => 'Douala',
            4229 => 'Egypt 1907',
            4230 => 'ED50',
            4231 => 'ED87',
            4232 => 'Fahud',
            4233 => 'Gandajika 1970',
            4234 => 'Garoua',
            4235 => 'Guyane Francaise',
            4236 => 'Hu Tzu Shan',
            4237 => 'HD72',
            4238 => 'ID74',
            4239 => 'Indian 1954',
            4240 => 'Indian 1975',
            4241 => 'Jamaica 1875',
            4242 => 'JAD69',
            4243 => 'Kalianpur',
            4244 => 'Kandawala',
            4245 => 'Kertau',
            4246 => 'KOC',
            4247 => 'La Canoa',
            4248 => 'PSAD56',
            4249 => 'Lake',
            4250 => 'Leigon',
            4251 => 'Liberia 1964',
            4252 => 'Lome',
            4253 => 'Luzon 1911',
            4254 => 'Hito XVIII 1963',
            4255 => 'Herat North',
            4256 => 'Mahe 1971',
            4257 => 'Makassar',
            4258 => 'EUREF89',
            4259 => 'Malongo 1987',
            4260 => 'Manoca',
            4261 => 'Merchich',
            4262 => 'Massawa',
            4263 => 'Minna',
            4264 => 'Mhast',
            4265 => 'Monte Mario',
            4266 => 'M poraloko',
            4267 => 'NAD27',
            4268 => 'NAD Michigan',
            4269 => 'NAD83',
            4270 => 'Nahrwan 1967',
            4271 => 'Naparima 1972',
            4272 => 'GD49',
            4273 => 'NGO 1948',
            4274 => '73',
            4275 => 'NTF',
            4276 => 'NSWC 9Z 2',
            4277 => 'OSGB 1936',
            4278 => 'OSGB70',
            4279 => 'OS SN80',
            4280 => 'Padang',
            4281 => 'Palestine 1923',
            4282 => 'Pointe Noire',
            4283 => 'GDA94',
            4284 => 'Pulkovo 1942',
            4285 => 'Qatar',
            4286 => 'Qatar 1948',
            4287 => 'Qornoq',
            4288 => 'Loma Quintana',
            4289 => 'Amersfoort',
            4290 => 'RT38',
            4291 => 'SAD69',
            4292 => 'Sapper Hill 1943',
            4293 => 'Schwarzeck',
            4294 => 'Segora',
            4295 => 'Serindung',
            4296 => 'Sudan',
            4297 => 'Tananarive',
            4298 => 'Timbalai 1948',
            4299 => 'TM65',
            4300 => 'TM75',
            4301 => 'Tokyo',
            4302 => 'Trinidad 1903',
            4303 => 'TC 1948',
            4304 => 'Voirol 1875',
            4305 => 'Voirol Unifie',
            4306 => 'Bern 1938',
            4307 => 'Nord Sahara 1959',
            4308 => 'Stockholm 1938',
            4309 => 'Yacare',
            4310 => 'Yoff',
            4311 => 'Zanderij',
            4312 => 'MGI',
            4313 => 'Belge 1972',
            4314 => 'DHDN',
            4315 => 'Conakry 1905',
            4317 => 'Dealul Piscului 1970',
            4322 => 'WGS 72',
            4324 => 'WGS 72BE',
            4326 => 'WGS 84',
            4801 => 'Bern 1898 Bern',
            4802 => 'Bogota Bogota',
            4803 => 'Lisbon Lisbon',
            4804 => 'Makassar Jakarta',
            4805 => 'MGI Ferro',
            4806 => 'Monte Mario Rome',
            4807 => 'NTF Paris',
            4808 => 'Padang Jakarta',
            4809 => 'Belge 1950 Brussels',
            4810 => 'Tananarive Paris',
            4811 => 'Voirol 1875 Paris',
            4812 => 'Voirol Unifie Paris',
            4813 => 'Batavia Jakarta',
            4901 => 'ATF Paris',
            4902 => 'NDG Paris',
            32767 => 'User Defined',
        },
    },
    2049 => 'GeogCitation',
    2050 => {
        Name => 'GeogGeodeticDatum',
        PrintConv => {
            # epsg_datum,
            6001 => 'Airy 1830',
            6002 => 'Airy Modified 1849',
            6003 => 'Australian National Spheroid',
            6004 => 'Bessel 1841',
            6005 => 'Bessel Modified',
            6006 => 'Bessel Namibia',
            6007 => 'Clarke 1858',
            6008 => 'Clarke 1866',
            6009 => 'Clarke 1866 Michigan',
            6010 => 'Clarke 1880 Benoit',
            6011 => 'Clarke 1880 IGN',
            6012 => 'Clarke 1880 RGS',
            6013 => 'Clarke 1880 Arc',
            6014 => 'Clarke 1880 SGA 1922',
            6015 => 'Everest 1830 1937 Adjustment',
            6016 => 'Everest 1830 1967 Definition',
            6017 => 'Everest 1830 1975 Definition',
            6018 => 'Everest 1830 Modified',
            6019 => 'GRS 1980',
            6020 => 'Helmert 1906',
            6021 => 'Indonesian National Spheroid',
            6022 => 'International 1924',
            6023 => 'International 1967',
            6024 => 'Krassowsky 1960',
            6025 => 'NWL9D',
            6026 => 'NWL10D',
            6027 => 'Plessis 1817',
            6028 => 'Struve 1860',
            6029 => 'War Office',
            6030 => 'WGS84',
            6031 => 'GEM10C',
            6032 => 'OSU86F',
            6033 => 'OSU91A',
            6034 => 'Clarke 1880',
            6035 => 'Sphere',
            6201 => 'Adindan',
            6202 => 'Australian Geodetic Datum 1966',
            6203 => 'Australian Geodetic Datum 1984',
            6204 => 'Ain el Abd 1970',
            6205 => 'Afgooye',
            6206 => 'Agadez',
            6207 => 'Lisbon',
            6208 => 'Aratu',
            6209 => 'Arc 1950',
            6210 => 'Arc 1960',
            6211 => 'Batavia',
            6212 => 'Barbados',
            6213 => 'Beduaram',
            6214 => 'Beijing 1954',
            6215 => 'Reseau National Belge 1950',
            6216 => 'Bermuda 1957',
            6217 => 'Bern 1898',
            6218 => 'Bogota',
            6219 => 'Bukit Rimpah',
            6220 => 'Camacupa',
            6221 => 'Campo Inchauspe',
            6222 => 'Cape',
            6223 => 'Carthage',
            6224 => 'Chua',
            6225 => 'Corrego Alegre',
            6226 => 'Cote d Ivoire',
            6227 => 'Deir ez Zor',
            6228 => 'Douala',
            6229 => 'Egypt 1907',
            6230 => 'European Datum 1950',
            6231 => 'European Datum 1987',
            6232 => 'Fahud',
            6233 => 'Gandajika 1970',
            6234 => 'Garoua',
            6235 => 'Guyane Francaise',
            6236 => 'Hu Tzu Shan',
            6237 => 'Hungarian Datum 1972',
            6238 => 'Indonesian Datum 1974',
            6239 => 'Indian 1954',
            6240 => 'Indian 1975',
            6241 => 'Jamaica 1875',
            6242 => 'Jamaica 1969',
            6243 => 'Kalianpur',
            6244 => 'Kandawala',
            6245 => 'Kertau',
            6246 => 'Kuwait Oil Company',
            6247 => 'La Canoa',
            6248 => 'Provisional S American Datum 1956',
            6249 => 'Lake',
            6250 => 'Leigon',
            6251 => 'Liberia 1964',
            6252 => 'Lome',
            6253 => 'Luzon 1911',
            6254 => 'Hito XVIII 1963',
            6255 => 'Herat North',
            6256 => 'Mahe 1971',
            6257 => 'Makassar',
            6258 => 'European Reference System 1989',
            6259 => 'Malongo 1987',
            6260 => 'Manoca',
            6261 => 'Merchich',
            6262 => 'Massawa',
            6263 => 'Minna',
            6264 => 'Mhast',
            6265 => 'Monte Mario',
            6266 => 'M poraloko',
            6267 => 'North American Datum 1927',
            6268 => 'NAD Michigan',
            6269 => 'North American Datum 1983',
            6270 => 'Nahrwan 1967',
            6271 => 'Naparima 1972',
            6272 => 'New Zealand Geodetic Datum 1949',
            6273 => 'NGO 1948',
            6274 => 'Datum 73',
            6275 => 'Nouvelle Triangulation Francaise',
            6276 => 'NSWC 9Z 2',
            6277 => 'OSGB 1936',
            6278 => 'OSGB 1970 SN',
            6279 => 'OS SN 1980',
            6280 => 'Padang 1884',
            6281 => 'Palestine 1923',
            6282 => 'Pointe Noire',
            6283 => 'Geocentric Datum of Australia 1994',
            6284 => 'Pulkovo 1942',
            6285 => 'Qatar',
            6286 => 'Qatar 1948',
            6287 => 'Qornoq',
            6288 => 'Loma Quintana',
            6289 => 'Amersfoort',
            6290 => 'RT38',
            6291 => 'South American Datum 1969',
            6292 => 'Sapper Hill 1943',
            6293 => 'Schwarzeck',
            6294 => 'Segora',
            6295 => 'Serindung',
            6296 => 'Sudan',
            6297 => 'Tananarive 1925',
            6298 => 'Timbalai 1948',
            6299 => 'TM65',
            6300 => 'TM75',
            6301 => 'Tokyo',
            6302 => 'Trinidad 1903',
            6303 => 'Trucial Coast 1948',
            6304 => 'Voirol 1875',
            6305 => 'Voirol Unifie 1960',
            6306 => 'Bern 1938',
            6307 => 'Nord Sahara 1959',
            6308 => 'Stockholm 1938',
            6309 => 'Yacare',
            6310 => 'Yoff',
            6311 => 'Zanderij',
            6312 => 'Militar Geographische Institut',
            6313 => 'Reseau National Belge 1972',
            6314 => 'Deutsche Hauptdreiecksnetz',
            6315 => 'Conakry 1905',
            6317 => 'Dealul Piscului 1970',
            6322 => 'WGS72',
            6324 => 'WGS72 Transit Broadcast Ephemeris',
            6326 => 'WGS84',
            6901 => 'Ancienne Triangulation Francaise',
            6902 => 'Nord de Guerre',
            32767 => 'User Defined',
        },
    },
    2051 => {
        Name => 'GeogPrimeMeridian',
        PrintConv => {
            # epsg_pm
            8901 => 'Greenwich',
            8902 => 'Lisbon',
            8903 => 'Paris',
            8904 => 'Bogota',
            8905 => 'Madrid',
            8906 => 'Rome',
            8907 => 'Bern',
            8908 => 'Jakarta',
            8909 => 'Ferro',
            8910 => 'Brussels',
            8911 => 'Stockholm',
            32767 => 'User Defined',
        },
    },
    2052 => {
        Name => 'GeogLinearUnits',
        SeparateTable => 'Units',
        PrintConv => \%epsg_units,
    },
    2053 => 'GeogLinearUnitSize',
    2054 => {
        Name => 'GeogAngularUnits',
        SeparateTable => 'Units',
        PrintConv => \%epsg_units,
    },
    2055 => 'GeogAngularUnitSize',
    2056 => {
        Name => 'GeogEllipsoid',
        PrintConv => {
            # epsg_ellipse
            7001 => 'Airy 1830',
            7002 => 'Airy Modified 1849',
            7003 => 'Australian National Spheroid',
            7004 => 'Bessel 1841',
            7005 => 'Bessel Modified',
            7006 => 'Bessel Namibia',
            7007 => 'Clarke 1858',
            7008 => 'Clarke 1866',
            7009 => 'Clarke 1866 Michigan',
            7010 => 'Clarke 1880 Benoit',
            7011 => 'Clarke 1880 IGN',
            7012 => 'Clarke 1880 RGS',
            7013 => 'Clarke 1880 Arc',
            7014 => 'Clarke 1880 SGA 1922',
            7015 => 'Everest 1830 1937 Adjustment',
            7016 => 'Everest 1830 1967 Definition',
            7017 => 'Everest 1830 1975 Definition',
            7018 => 'Everest 1830 Modified',
            7019 => 'GRS 1980',
            7020 => 'Helmert 1906',
            7021 => 'Indonesian National Spheroid',
            7022 => 'International 1924',
            7023 => 'International 1967',
            7024 => 'Krassowsky 1940',
            7025 => 'NWL 9D',
            7026 => 'NWL 10D',
            7027 => 'Plessis 1817',
            7028 => 'Struve 1860',
            7029 => 'War Office',
            7030 => 'WGS 84',
            7031 => 'GEM 10C',
            7032 => 'OSU86F',
            7033 => 'OSU91A',
            7034 => 'Clarke 1880',
            7035 => 'Sphere',
            32767 => 'User Defined',
        },
    },
    2057 => 'GeogSemiMajorAxis',
    2058 => 'GeogSemiMinorAxis',
    2059 => 'GeogInvFlattening',
    2060 => {
        Name => 'GeogAzimuthUnits',
        SeparateTable => 'Units',
        PrintConv => \%epsg_units,
    },
    2061 => 'GeogPrimeMeridianLong',
    2062 => 'GeogToWGS84',
    3072 => {
        Name => 'ProjectedCSType',
        PrintConv => {
            # epsg_pcs
            2100 => 'GGRS87 Greek Grid',
            2176 => 'ETRS89 Poland CS2000 zone 5',
            2177 => 'ETRS89 Poland CS2000 zone 6',
            2177 => 'ETRS89 Poland CS2000 zone 7',
            2178 => 'ETRS89 Poland CS2000 zone 8',
            2180 => 'ETRS89 Poland CS92',
            2204 => 'NAD27 Tennessee',
            2205 => 'NAD83 Kentucky North',
            2391 => 'KKJ Finland zone 1',
            2392 => 'KKJ Finland zone 2',
            2393 => 'KKJ Finland zone 3',
            2394 => 'KKJ Finland zone 4',
            2400 => 'RT90 2 5 gon W',
            2600 => 'Lietuvos Koordinoei Sistema 1994',
            3053 => 'Hjorsey 1955 Lambert',
            3057 => 'ISN93 Lambert 1993',
            3300 => 'Estonian Coordinate System of 1992',
            20137 => 'Adindan UTM zone 37N',
            20138 => 'Adindan UTM zone 38N',
            20248 => 'AGD66 AMG zone 48',
            20249 => 'AGD66 AMG zone 49',
            20250 => 'AGD66 AMG zone 50',
            20251 => 'AGD66 AMG zone 51',
            20252 => 'AGD66 AMG zone 52',
            20253 => 'AGD66 AMG zone 53',
            20254 => 'AGD66 AMG zone 54',
            20255 => 'AGD66 AMG zone 55',
            20256 => 'AGD66 AMG zone 56',
            20257 => 'AGD66 AMG zone 57',
            20258 => 'AGD66 AMG zone 58',
            20348 => 'AGD84 AMG zone 48',
            20349 => 'AGD84 AMG zone 49',
            20350 => 'AGD84 AMG zone 50',
            20351 => 'AGD84 AMG zone 51',
            20352 => 'AGD84 AMG zone 52',
            20353 => 'AGD84 AMG zone 53',
            20354 => 'AGD84 AMG zone 54',
            20355 => 'AGD84 AMG zone 55',
            20356 => 'AGD84 AMG zone 56',
            20357 => 'AGD84 AMG zone 57',
            20358 => 'AGD84 AMG zone 58',
            20437 => 'Ain el Abd UTM zone 37N',
            20438 => 'Ain el Abd UTM zone 38N',
            20439 => 'Ain el Abd UTM zone 39N',
            20499 => 'Ain el Abd Bahrain Grid',
            20538 => 'Afgooye UTM zone 38N',
            20539 => 'Afgooye UTM zone 39N',
            20700 => 'Lisbon Portugese Grid',
            20822 => 'Aratu UTM zone 22S',
            20823 => 'Aratu UTM zone 23S',
            20824 => 'Aratu UTM zone 24S',
            20973 => 'Arc 1950 Lo13',
            20975 => 'Arc 1950 Lo15',
            20977 => 'Arc 1950 Lo17',
            20979 => 'Arc 1950 Lo19',
            20981 => 'Arc 1950 Lo21',
            20983 => 'Arc 1950 Lo23',
            20985 => 'Arc 1950 Lo25',
            20987 => 'Arc 1950 Lo27',
            20989 => 'Arc 1950 Lo29',
            20991 => 'Arc 1950 Lo31',
            20993 => 'Arc 1950 Lo33',
            20995 => 'Arc 1950 Lo35',
            21100 => 'Batavia NEIEZ',
            21148 => 'Batavia UTM zone 48S',
            21149 => 'Batavia UTM zone 49S',
            21150 => 'Batavia UTM zone 50S',
            21413 => 'Beijing Gauss zone 13',
            21414 => 'Beijing Gauss zone 14',
            21415 => 'Beijing Gauss zone 15',
            21416 => 'Beijing Gauss zone 16',
            21417 => 'Beijing Gauss zone 17',
            21418 => 'Beijing Gauss zone 18',
            21419 => 'Beijing Gauss zone 19',
            21420 => 'Beijing Gauss zone 20',
            21421 => 'Beijing Gauss zone 21',
            21422 => 'Beijing Gauss zone 22',
            21423 => 'Beijing Gauss zone 23',
            21473 => 'Beijing Gauss 13N',
            21474 => 'Beijing Gauss 14N',
            21475 => 'Beijing Gauss 15N',
            21476 => 'Beijing Gauss 16N',
            21477 => 'Beijing Gauss 17N',
            21478 => 'Beijing Gauss 18N',
            21479 => 'Beijing Gauss 19N',
            21480 => 'Beijing Gauss 20N',
            21481 => 'Beijing Gauss 21N',
            21482 => 'Beijing Gauss 22N',
            21483 => 'Beijing Gauss 23N',
            21500 => 'Belge Lambert 50',
            21790 => 'Bern 1898 Swiss Old',
            21817 => 'Bogota UTM zone 17N',
            21818 => 'Bogota UTM zone 18N',
            21891 => 'Bogota Colombia 3W',
            21892 => 'Bogota Colombia Bogota',
            21893 => 'Bogota Colombia 3E',
            21894 => 'Bogota Colombia 6E',
            22032 => 'Camacupa UTM 32S',
            22033 => 'Camacupa UTM 33S',
            22191 => 'C Inchauspe Argentina 1',
            22192 => 'C Inchauspe Argentina 2',
            22193 => 'C Inchauspe Argentina 3',
            22194 => 'C Inchauspe Argentina 4',
            22195 => 'C Inchauspe Argentina 5',
            22196 => 'C Inchauspe Argentina 6',
            22197 => 'C Inchauspe Argentina 7',
            22332 => 'Carthage UTM zone 32N',
            22391 => 'Carthage Nord Tunisie',
            22392 => 'Carthage Sud Tunisie',
            22523 => 'Corrego Alegre UTM 23S',
            22524 => 'Corrego Alegre UTM 24S',
            22832 => 'Douala UTM zone 32N',
            22992 => 'Egypt 1907 Red Belt',
            22993 => 'Egypt 1907 Purple Belt',
            22994 => 'Egypt 1907 Ext Purple',
            23028 => 'ED50 UTM zone 28N',
            23029 => 'ED50 UTM zone 29N',
            23030 => 'ED50 UTM zone 30N',
            23031 => 'ED50 UTM zone 31N',
            23032 => 'ED50 UTM zone 32N',
            23033 => 'ED50 UTM zone 33N',
            23034 => 'ED50 UTM zone 34N',
            23035 => 'ED50 UTM zone 35N',
            23036 => 'ED50 UTM zone 36N',
            23037 => 'ED50 UTM zone 37N',
            23038 => 'ED50 UTM zone 38N',
            23239 => 'Fahud UTM zone 39N',
            23240 => 'Fahud UTM zone 40N',
            23433 => 'Garoua UTM zone 33N',
            23700 => 'HD72 EOV',
            23846 => 'ID74 UTM zone 46N',
            23847 => 'ID74 UTM zone 47N',
            23848 => 'ID74 UTM zone 48N',
            23849 => 'ID74 UTM zone 49N',
            23850 => 'ID74 UTM zone 50N',
            23851 => 'ID74 UTM zone 51N',
            23852 => 'ID74 UTM zone 52N',
            23853 => 'ID74 UTM zone 53N',
            23886 => 'ID74 UTM zone 46S',
            23887 => 'ID74 UTM zone 47S',
            23888 => 'ID74 UTM zone 48S',
            23889 => 'ID74 UTM zone 49S',
            23890 => 'ID74 UTM zone 50S',
            23891 => 'ID74 UTM zone 51S',
            23892 => 'ID74 UTM zone 52S',
            23893 => 'ID74 UTM zone 53S',
            23894 => 'ID74 UTM zone 54S',
            23947 => 'Indian 1954 UTM 47N',
            23948 => 'Indian 1954 UTM 48N',
            24047 => 'Indian 1975 UTM 47N',
            24048 => 'Indian 1975 UTM 48N',
            24100 => 'Jamaica 1875 Old Grid',
            24200 => 'JAD69 Jamaica Grid',
            24370 => 'Kalianpur India 0',
            24371 => 'Kalianpur India I',
            24372 => 'Kalianpur India IIa',
            24373 => 'Kalianpur India IIIa',
            24374 => 'Kalianpur India IVa',
            24382 => 'Kalianpur India IIb',
            24383 => 'Kalianpur India IIIb',
            24384 => 'Kalianpur India IVb',
            24500 => 'Kertau Singapore Grid',
            24547 => 'Kertau UTM zone 47N',
            24548 => 'Kertau UTM zone 48N',
            24720 => 'La Canoa UTM zone 20N',
            24721 => 'La Canoa UTM zone 21N',
            24818 => 'PSAD56 UTM zone 18N',
            24819 => 'PSAD56 UTM zone 19N',
            24820 => 'PSAD56 UTM zone 20N',
            24821 => 'PSAD56 UTM zone 21N',
            24877 => 'PSAD56 UTM zone 17S',
            24878 => 'PSAD56 UTM zone 18S',
            24879 => 'PSAD56 UTM zone 19S',
            24880 => 'PSAD56 UTM zone 20S',
            24891 => 'PSAD56 Peru west zone',
            24892 => 'PSAD56 Peru central',
            24893 => 'PSAD56 Peru east zone',
            25000 => 'Leigon Ghana Grid',
            25231 => 'Lome UTM zone 31N',
            25391 => 'Luzon Philippines I',
            25392 => 'Luzon Philippines II',
            25393 => 'Luzon Philippines III',
            25394 => 'Luzon Philippines IV',
            25395 => 'Luzon Philippines V',
            25700 => 'Makassar NEIEZ',
            25932 => 'Malongo 1987 UTM 32S',
            26191 => 'Merchich Nord Maroc',
            26192 => 'Merchich Sud Maroc',
            26193 => 'Merchich Sahara',
            26237 => 'Massawa UTM zone 37N',
            26331 => 'Minna UTM zone 31N',
            26332 => 'Minna UTM zone 32N',
            26391 => 'Minna Nigeria West',
            26392 => 'Minna Nigeria Mid Belt',
            26393 => 'Minna Nigeria East',
            26432 => 'Mhast UTM zone 32S',
            26591 => 'Monte Mario Italy 1',
            26592 => 'Monte Mario Italy 2',
            26632 => 'M poraloko UTM 32N',
            26692 => 'M poraloko UTM 32S',
            26703 => 'NAD27 UTM zone 3N',
            26704 => 'NAD27 UTM zone 4N',
            26705 => 'NAD27 UTM zone 5N',
            26706 => 'NAD27 UTM zone 6N',
            26707 => 'NAD27 UTM zone 7N',
            26708 => 'NAD27 UTM zone 8N',
            26709 => 'NAD27 UTM zone 9N',
            26710 => 'NAD27 UTM zone 10N',
            26711 => 'NAD27 UTM zone 11N',
            26712 => 'NAD27 UTM zone 12N',
            26713 => 'NAD27 UTM zone 13N',
            26714 => 'NAD27 UTM zone 14N',
            26715 => 'NAD27 UTM zone 15N',
            26716 => 'NAD27 UTM zone 16N',
            26717 => 'NAD27 UTM zone 17N',
            26718 => 'NAD27 UTM zone 18N',
            26719 => 'NAD27 UTM zone 19N',
            26720 => 'NAD27 UTM zone 20N',
            26721 => 'NAD27 UTM zone 21N',
            26722 => 'NAD27 UTM zone 22N',
            26729 => 'NAD27 Alabama East',
            26730 => 'NAD27 Alabama West',
            26731 => 'NAD27 Alaska zone 1',
            26732 => 'NAD27 Alaska zone 2',
            26733 => 'NAD27 Alaska zone 3',
            26734 => 'NAD27 Alaska zone 4',
            26735 => 'NAD27 Alaska zone 5',
            26736 => 'NAD27 Alaska zone 6',
            26737 => 'NAD27 Alaska zone 7',
            26738 => 'NAD27 Alaska zone 8',
            26739 => 'NAD27 Alaska zone 9',
            26740 => 'NAD27 Alaska zone 10',
            26741 => 'NAD27 California I',
            26742 => 'NAD27 California II',
            26743 => 'NAD27 California III',
            26744 => 'NAD27 California IV',
            26745 => 'NAD27 California V',
            26746 => 'NAD27 California VI',
            26747 => 'NAD27 California VII',
            26748 => 'NAD27 Arizona East',
            26749 => 'NAD27 Arizona Central',
            26750 => 'NAD27 Arizona West',
            26751 => 'NAD27 Arkansas North',
            26752 => 'NAD27 Arkansas South',
            26753 => 'NAD27 Colorado North',
            26754 => 'NAD27 Colorado Central',
            26755 => 'NAD27 Colorado South',
            26756 => 'NAD27 Connecticut',
            26757 => 'NAD27 Delaware',
            26758 => 'NAD27 Florida East',
            26759 => 'NAD27 Florida West',
            26760 => 'NAD27 Florida North',
            26761 => 'NAD27 Hawaii zone 1',
            26762 => 'NAD27 Hawaii zone 2',
            26763 => 'NAD27 Hawaii zone 3',
            26764 => 'NAD27 Hawaii zone 4',
            26765 => 'NAD27 Hawaii zone 5',
            26766 => 'NAD27 Georgia East',
            26767 => 'NAD27 Georgia West',
            26768 => 'NAD27 Idaho East',
            26769 => 'NAD27 Idaho Central',
            26770 => 'NAD27 Idaho West',
            26771 => 'NAD27 Illinois East',
            26772 => 'NAD27 Illinois West',
            26773 => 'NAD27 Indiana East',
            26774 => 'NAD27 BLM 14N feet',
            26774 => 'NAD27 Indiana West',
            26775 => 'NAD27 BLM 15N feet',
            26775 => 'NAD27 Iowa North',
            26776 => 'NAD27 BLM 16N feet',
            26776 => 'NAD27 Iowa South',
            26777 => 'NAD27 BLM 17N feet',
            26777 => 'NAD27 Kansas North',
            26778 => 'NAD27 Kansas South',
            26779 => 'NAD27 Kentucky North',
            26780 => 'NAD27 Kentucky South',
            26781 => 'NAD27 Louisiana North',
            26782 => 'NAD27 Louisiana South',
            26783 => 'NAD27 Maine East',
            26784 => 'NAD27 Maine West',
            26785 => 'NAD27 Maryland',
            26786 => 'NAD27 Massachusetts',
            26787 => 'NAD27 Massachusetts Is',
            26788 => 'NAD27 Michigan North',
            26789 => 'NAD27 Michigan Central',
            26790 => 'NAD27 Michigan South',
            26791 => 'NAD27 Minnesota North',
            26792 => 'NAD27 Minnesota Cent',
            26793 => 'NAD27 Minnesota South',
            26794 => 'NAD27 Mississippi East',
            26795 => 'NAD27 Mississippi West',
            26796 => 'NAD27 Missouri East',
            26797 => 'NAD27 Missouri Central',
            26798 => 'NAD27 Missouri West',
            26801 => 'NAD Michigan Michigan East',
            26802 => 'NAD Michigan Michigan Old Central',
            26803 => 'NAD Michigan Michigan West',
            26903 => 'NAD83 UTM zone 3N',
            26904 => 'NAD83 UTM zone 4N',
            26905 => 'NAD83 UTM zone 5N',
            26906 => 'NAD83 UTM zone 6N',
            26907 => 'NAD83 UTM zone 7N',
            26908 => 'NAD83 UTM zone 8N',
            26909 => 'NAD83 UTM zone 9N',
            26910 => 'NAD83 UTM zone 10N',
            26911 => 'NAD83 UTM zone 11N',
            26912 => 'NAD83 UTM zone 12N',
            26913 => 'NAD83 UTM zone 13N',
            26914 => 'NAD83 UTM zone 14N',
            26915 => 'NAD83 UTM zone 15N',
            26916 => 'NAD83 UTM zone 16N',
            26917 => 'NAD83 UTM zone 17N',
            26918 => 'NAD83 UTM zone 18N',
            26919 => 'NAD83 UTM zone 19N',
            26920 => 'NAD83 UTM zone 20N',
            26921 => 'NAD83 UTM zone 21N',
            26922 => 'NAD83 UTM zone 22N',
            26923 => 'NAD83 UTM zone 23N',
            26929 => 'NAD83 Alabama East',
            26930 => 'NAD83 Alabama West',
            26931 => 'NAD83 Alaska zone 1',
            26932 => 'NAD83 Alaska zone 2',
            26933 => 'NAD83 Alaska zone 3',
            26934 => 'NAD83 Alaska zone 4',
            26935 => 'NAD83 Alaska zone 5',
            26936 => 'NAD83 Alaska zone 6',
            26937 => 'NAD83 Alaska zone 7',
            26938 => 'NAD83 Alaska zone 8',
            26939 => 'NAD83 Alaska zone 9',
            26940 => 'NAD83 Alaska zone 10',
            26941 => 'NAD83 California 1',
            26942 => 'NAD83 California 2',
            26943 => 'NAD83 California 3',
            26944 => 'NAD83 California 4',
            26945 => 'NAD83 California 5',
            26946 => 'NAD83 California 6',
            26948 => 'NAD83 Arizona East',
            26949 => 'NAD83 Arizona Central',
            26950 => 'NAD83 Arizona West',
            26951 => 'NAD83 Arkansas North',
            26952 => 'NAD83 Arkansas South',
            26953 => 'NAD83 Colorado North',
            26954 => 'NAD83 Colorado Central',
            26955 => 'NAD83 Colorado South',
            26956 => 'NAD83 Connecticut',
            26957 => 'NAD83 Delaware',
            26958 => 'NAD83 Florida East',
            26959 => 'NAD83 Florida West',
            26960 => 'NAD83 Florida North',
            26961 => 'NAD83 Hawaii zone 1',
            26962 => 'NAD83 Hawaii zone 2',
            26963 => 'NAD83 Hawaii zone 3',
            26964 => 'NAD83 Hawaii zone 4',
            26965 => 'NAD83 Hawaii zone 5',
            26966 => 'NAD83 Georgia East',
            26967 => 'NAD83 Georgia West',
            26968 => 'NAD83 Idaho East',
            26969 => 'NAD83 Idaho Central',
            26970 => 'NAD83 Idaho West',
            26971 => 'NAD83 Illinois East',
            26972 => 'NAD83 Illinois West',
            26973 => 'NAD83 Indiana East',
            26974 => 'NAD83 Indiana West',
            26975 => 'NAD83 Iowa North',
            26976 => 'NAD83 Iowa South',
            26977 => 'NAD83 Kansas North',
            26978 => 'NAD83 Kansas South',
            26979 => 'NAD83 Kentucky North',
            26980 => 'NAD83 Kentucky South',
            26981 => 'NAD83 Louisiana North',
            26982 => 'NAD83 Louisiana South',
            26983 => 'NAD83 Maine East',
            26984 => 'NAD83 Maine West',
            26985 => 'NAD83 Maryland',
            26986 => 'NAD83 Massachusetts',
            26987 => 'NAD83 Massachusetts Is',
            26988 => 'NAD83 Michigan North',
            26989 => 'NAD83 Michigan Central',
            26990 => 'NAD83 Michigan South',
            26991 => 'NAD83 Minnesota North',
            26992 => 'NAD83 Minnesota Cent',
            26993 => 'NAD83 Minnesota South',
            26994 => 'NAD83 Mississippi East',
            26995 => 'NAD83 Mississippi West',
            26996 => 'NAD83 Missouri East',
            26997 => 'NAD83 Missouri Central',
            26998 => 'NAD83 Missouri West',
            27038 => 'Nahrwan 1967 UTM 38N',
            27039 => 'Nahrwan 1967 UTM 39N',
            27040 => 'Nahrwan 1967 UTM 40N',
            27120 => 'Naparima UTM 20N',
            27200 => 'GD49 NZ Map Grid',
            27291 => 'GD49 North Island Grid',
            27292 => 'GD49 South Island Grid',
            27429 => 'Datum 73 UTM zone 29N',
            27500 => 'ATF Nord de Guerre',
            27581 => 'NTF France I',
            27582 => 'NTF France II',
            27583 => 'NTF France III',
            27591 => 'NTF Nord France',
            27592 => 'NTF Centre France',
            27593 => 'NTF Sud France',
            27700 => 'British National Grid',
            28232 => 'Point Noire UTM 32S',
            28348 => 'GDA94 MGA zone 48',
            28349 => 'GDA94 MGA zone 49',
            28350 => 'GDA94 MGA zone 50',
            28351 => 'GDA94 MGA zone 51',
            28352 => 'GDA94 MGA zone 52',
            28353 => 'GDA94 MGA zone 53',
            28354 => 'GDA94 MGA zone 54',
            28355 => 'GDA94 MGA zone 55',
            28356 => 'GDA94 MGA zone 56',
            28357 => 'GDA94 MGA zone 57',
            28358 => 'GDA94 MGA zone 58',
            28404 => 'Pulkovo Gauss zone 4',
            28405 => 'Pulkovo Gauss zone 5',
            28406 => 'Pulkovo Gauss zone 6',
            28407 => 'Pulkovo Gauss zone 7',
            28408 => 'Pulkovo Gauss zone 8',
            28409 => 'Pulkovo Gauss zone 9',
            28410 => 'Pulkovo Gauss zone 10',
            28411 => 'Pulkovo Gauss zone 11',
            28412 => 'Pulkovo Gauss zone 12',
            28413 => 'Pulkovo Gauss zone 13',
            28414 => 'Pulkovo Gauss zone 14',
            28415 => 'Pulkovo Gauss zone 15',
            28416 => 'Pulkovo Gauss zone 16',
            28417 => 'Pulkovo Gauss zone 17',
            28418 => 'Pulkovo Gauss zone 18',
            28419 => 'Pulkovo Gauss zone 19',
            28420 => 'Pulkovo Gauss zone 20',
            28421 => 'Pulkovo Gauss zone 21',
            28422 => 'Pulkovo Gauss zone 22',
            28423 => 'Pulkovo Gauss zone 23',
            28424 => 'Pulkovo Gauss zone 24',
            28425 => 'Pulkovo Gauss zone 25',
            28426 => 'Pulkovo Gauss zone 26',
            28427 => 'Pulkovo Gauss zone 27',
            28428 => 'Pulkovo Gauss zone 28',
            28429 => 'Pulkovo Gauss zone 29',
            28430 => 'Pulkovo Gauss zone 30',
            28431 => 'Pulkovo Gauss zone 31',
            28432 => 'Pulkovo Gauss zone 32',
            28464 => 'Pulkovo Gauss 4N',
            28465 => 'Pulkovo Gauss 5N',
            28466 => 'Pulkovo Gauss 6N',
            28467 => 'Pulkovo Gauss 7N',
            28468 => 'Pulkovo Gauss 8N',
            28469 => 'Pulkovo Gauss 9N',
            28470 => 'Pulkovo Gauss 10N',
            28471 => 'Pulkovo Gauss 11N',
            28472 => 'Pulkovo Gauss 12N',
            28473 => 'Pulkovo Gauss 13N',
            28474 => 'Pulkovo Gauss 14N',
            28475 => 'Pulkovo Gauss 15N',
            28476 => 'Pulkovo Gauss 16N',
            28477 => 'Pulkovo Gauss 17N',
            28478 => 'Pulkovo Gauss 18N',
            28479 => 'Pulkovo Gauss 19N',
            28480 => 'Pulkovo Gauss 20N',
            28481 => 'Pulkovo Gauss 21N',
            28482 => 'Pulkovo Gauss 22N',
            28483 => 'Pulkovo Gauss 23N',
            28484 => 'Pulkovo Gauss 24N',
            28485 => 'Pulkovo Gauss 25N',
            28486 => 'Pulkovo Gauss 26N',
            28487 => 'Pulkovo Gauss 27N',
            28488 => 'Pulkovo Gauss 28N',
            28489 => 'Pulkovo Gauss 29N',
            28490 => 'Pulkovo Gauss 30N',
            28491 => 'Pulkovo Gauss 31N',
            28492 => 'Pulkovo Gauss 32N',
            28600 => 'Qatar National Grid',
            28991 => 'RD Netherlands Old',
            28992 => 'RD Netherlands New',
            29118 => 'SAD69 UTM zone 18N',
            29119 => 'SAD69 UTM zone 19N',
            29120 => 'SAD69 UTM zone 20N',
            29121 => 'SAD69 UTM zone 21N',
            29122 => 'SAD69 UTM zone 22N',
            29177 => 'SAD69 UTM zone 17S',
            29178 => 'SAD69 UTM zone 18S',
            29179 => 'SAD69 UTM zone 19S',
            29180 => 'SAD69 UTM zone 20S',
            29181 => 'SAD69 UTM zone 21S',
            29182 => 'SAD69 UTM zone 22S',
            29183 => 'SAD69 UTM zone 23S',
            29184 => 'SAD69 UTM zone 24S',
            29185 => 'SAD69 UTM zone 25S',
            29220 => 'Sapper Hill UTM 20S',
            29221 => 'Sapper Hill UTM 21S',
            29333 => 'Schwarzeck UTM 33S',
            29635 => 'Sudan UTM zone 35N',
            29636 => 'Sudan UTM zone 36N',
            29700 => 'Tananarive Laborde',
            29738 => 'Tananarive UTM 38S',
            29739 => 'Tananarive UTM 39S',
            29800 => 'Timbalai 1948 Borneo',
            29849 => 'Timbalai 1948 UTM 49N',
            29850 => 'Timbalai 1948 UTM 50N',
            29900 => 'TM65 Irish Nat Grid',
            30200 => 'Trinidad 1903 Trinidad',
            30339 => 'TC 1948 UTM zone 39N',
            30340 => 'TC 1948 UTM zone 40N',
            30491 => 'Voirol N Algerie ancien',
            30492 => 'Voirol S Algerie ancien',
            30591 => 'Voirol Unifie N Algerie',
            30592 => 'Voirol Unifie S Algerie',
            30600 => 'Bern 1938 Swiss New',
            30729 => 'Nord Sahara UTM 29N',
            30730 => 'Nord Sahara UTM 30N',
            30731 => 'Nord Sahara UTM 31N',
            30732 => 'Nord Sahara UTM 32N',
            31028 => 'Yoff UTM zone 28N',
            31121 => 'Zanderij UTM zone 21N',
            31291 => 'MGI Austria West',
            31292 => 'MGI Austria Central',
            31293 => 'MGI Austria East',
            31300 => 'Belge Lambert 72',
            31491 => 'DHDN Germany zone 1',
            31492 => 'DHDN Germany zone 2',
            31493 => 'DHDN Germany zone 3',
            31494 => 'DHDN Germany zone 4',
            31495 => 'DHDN Germany zone 5',
            31700 => 'Dealul Piscului 1970 Stereo 70',
            32001 => 'NAD27 Montana North',
            32002 => 'NAD27 Montana Central',
            32003 => 'NAD27 Montana South',
            32005 => 'NAD27 Nebraska North',
            32006 => 'NAD27 Nebraska South',
            32007 => 'NAD27 Nevada East',
            32008 => 'NAD27 Nevada Central',
            32009 => 'NAD27 Nevada West',
            32010 => 'NAD27 New Hampshire',
            32011 => 'NAD27 New Jersey',
            32012 => 'NAD27 New Mexico East',
            32013 => 'NAD27 New Mexico Cent',
            32014 => 'NAD27 New Mexico West',
            32015 => 'NAD27 New York East',
            32016 => 'NAD27 New York Central',
            32017 => 'NAD27 New York West',
            32018 => 'NAD27 New York Long Is',
            32019 => 'NAD27 North Carolina',
            32020 => 'NAD27 North Dakota N',
            32021 => 'NAD27 North Dakota S',
            32022 => 'NAD27 Ohio North',
            32023 => 'NAD27 Ohio South',
            32024 => 'NAD27 Oklahoma North',
            32025 => 'NAD27 Oklahoma South',
            32026 => 'NAD27 Oregon North',
            32027 => 'NAD27 Oregon South',
            32028 => 'NAD27 Pennsylvania N',
            32029 => 'NAD27 Pennsylvania S',
            32030 => 'NAD27 Rhode Island',
            32031 => 'NAD27 South Carolina N',
            32033 => 'NAD27 South Carolina S',
            32034 => 'NAD27 South Dakota N',
            32035 => 'NAD27 South Dakota S',
            32036 => 'NAD27 Tennessee',
            32037 => 'NAD27 Texas North',
            32038 => 'NAD27 Texas North Cen',
            32039 => 'NAD27 Texas Central',
            32040 => 'NAD27 Texas South Cen',
            32041 => 'NAD27 Texas South',
            32042 => 'NAD27 Utah North',
            32043 => 'NAD27 Utah Central',
            32044 => 'NAD27 Utah South',
            32045 => 'NAD27 Vermont',
            32046 => 'NAD27 Virginia North',
            32047 => 'NAD27 Virginia South',
            32048 => 'NAD27 Washington North',
            32049 => 'NAD27 Washington South',
            32050 => 'NAD27 West Virginia N',
            32051 => 'NAD27 West Virginia S',
            32052 => 'NAD27 Wisconsin North',
            32053 => 'NAD27 Wisconsin Cen',
            32054 => 'NAD27 Wisconsin South',
            32055 => 'NAD27 Wyoming East',
            32056 => 'NAD27 Wyoming E Cen',
            32057 => 'NAD27 Wyoming W Cen',
            32058 => 'NAD27 Wyoming West',
            32059 => 'NAD27 Puerto Rico',
            32060 => 'NAD27 St Croix',
            32100 => 'NAD83 Montana',
            32104 => 'NAD83 Nebraska',
            32107 => 'NAD83 Nevada East',
            32108 => 'NAD83 Nevada Central',
            32109 => 'NAD83 Nevada West',
            32110 => 'NAD83 New Hampshire',
            32111 => 'NAD83 New Jersey',
            32112 => 'NAD83 New Mexico East',
            32113 => 'NAD83 New Mexico Cent',
            32114 => 'NAD83 New Mexico West',
            32115 => 'NAD83 New York East',
            32116 => 'NAD83 New York Central',
            32117 => 'NAD83 New York West',
            32118 => 'NAD83 New York Long Is',
            32119 => 'NAD83 North Carolina',
            32120 => 'NAD83 North Dakota N',
            32121 => 'NAD83 North Dakota S',
            32122 => 'NAD83 Ohio North',
            32123 => 'NAD83 Ohio South',
            32124 => 'NAD83 Oklahoma North',
            32125 => 'NAD83 Oklahoma South',
            32126 => 'NAD83 Oregon North',
            32127 => 'NAD83 Oregon South',
            32128 => 'NAD83 Pennsylvania N',
            32129 => 'NAD83 Pennsylvania S',
            32130 => 'NAD83 Rhode Island',
            32133 => 'NAD83 South Carolina',
            32134 => 'NAD83 South Dakota N',
            32135 => 'NAD83 South Dakota S',
            32136 => 'NAD83 Tennessee',
            32137 => 'NAD83 Texas North',
            32138 => 'NAD83 Texas North Cen',
            32139 => 'NAD83 Texas Central',
            32140 => 'NAD83 Texas South Cen',
            32141 => 'NAD83 Texas South',
            32142 => 'NAD83 Utah North',
            32143 => 'NAD83 Utah Central',
            32144 => 'NAD83 Utah South',
            32145 => 'NAD83 Vermont',
            32146 => 'NAD83 Virginia North',
            32147 => 'NAD83 Virginia South',
            32148 => 'NAD83 Washington North',
            32149 => 'NAD83 Washington South',
            32150 => 'NAD83 West Virginia N',
            32151 => 'NAD83 West Virginia S',
            32152 => 'NAD83 Wisconsin North',
            32153 => 'NAD83 Wisconsin Cen',
            32154 => 'NAD83 Wisconsin South',
            32155 => 'NAD83 Wyoming East',
            32156 => 'NAD83 Wyoming E Cen',
            32157 => 'NAD83 Wyoming W Cen',
            32158 => 'NAD83 Wyoming West',
            32161 => 'NAD83 Puerto Rico Virgin Is',
            32201 => 'WGS72 UTM zone 1N',
            32202 => 'WGS72 UTM zone 2N',
            32203 => 'WGS72 UTM zone 3N',
            32204 => 'WGS72 UTM zone 4N',
            32205 => 'WGS72 UTM zone 5N',
            32206 => 'WGS72 UTM zone 6N',
            32207 => 'WGS72 UTM zone 7N',
            32208 => 'WGS72 UTM zone 8N',
            32209 => 'WGS72 UTM zone 9N',
            32210 => 'WGS72 UTM zone 10N',
            32211 => 'WGS72 UTM zone 11N',
            32212 => 'WGS72 UTM zone 12N',
            32213 => 'WGS72 UTM zone 13N',
            32214 => 'WGS72 UTM zone 14N',
            32215 => 'WGS72 UTM zone 15N',
            32216 => 'WGS72 UTM zone 16N',
            32217 => 'WGS72 UTM zone 17N',
            32218 => 'WGS72 UTM zone 18N',
            32219 => 'WGS72 UTM zone 19N',
            32220 => 'WGS72 UTM zone 20N',
            32221 => 'WGS72 UTM zone 21N',
            32222 => 'WGS72 UTM zone 22N',
            32223 => 'WGS72 UTM zone 23N',
            32224 => 'WGS72 UTM zone 24N',
            32225 => 'WGS72 UTM zone 25N',
            32226 => 'WGS72 UTM zone 26N',
            32227 => 'WGS72 UTM zone 27N',
            32228 => 'WGS72 UTM zone 28N',
            32229 => 'WGS72 UTM zone 29N',
            32230 => 'WGS72 UTM zone 30N',
            32231 => 'WGS72 UTM zone 31N',
            32232 => 'WGS72 UTM zone 32N',
            32233 => 'WGS72 UTM zone 33N',
            32234 => 'WGS72 UTM zone 34N',
            32235 => 'WGS72 UTM zone 35N',
            32236 => 'WGS72 UTM zone 36N',
            32237 => 'WGS72 UTM zone 37N',
            32238 => 'WGS72 UTM zone 38N',
            32239 => 'WGS72 UTM zone 39N',
            32240 => 'WGS72 UTM zone 40N',
            32241 => 'WGS72 UTM zone 41N',
            32242 => 'WGS72 UTM zone 42N',
            32243 => 'WGS72 UTM zone 43N',
            32244 => 'WGS72 UTM zone 44N',
            32245 => 'WGS72 UTM zone 45N',
            32246 => 'WGS72 UTM zone 46N',
            32247 => 'WGS72 UTM zone 47N',
            32248 => 'WGS72 UTM zone 48N',
            32249 => 'WGS72 UTM zone 49N',
            32250 => 'WGS72 UTM zone 50N',
            32251 => 'WGS72 UTM zone 51N',
            32252 => 'WGS72 UTM zone 52N',
            32253 => 'WGS72 UTM zone 53N',
            32254 => 'WGS72 UTM zone 54N',
            32255 => 'WGS72 UTM zone 55N',
            32256 => 'WGS72 UTM zone 56N',
            32257 => 'WGS72 UTM zone 57N',
            32258 => 'WGS72 UTM zone 58N',
            32259 => 'WGS72 UTM zone 59N',
            32260 => 'WGS72 UTM zone 60N',
            32301 => 'WGS72 UTM zone 1S',
            32302 => 'WGS72 UTM zone 2S',
            32303 => 'WGS72 UTM zone 3S',
            32304 => 'WGS72 UTM zone 4S',
            32305 => 'WGS72 UTM zone 5S',
            32306 => 'WGS72 UTM zone 6S',
            32307 => 'WGS72 UTM zone 7S',
            32308 => 'WGS72 UTM zone 8S',
            32309 => 'WGS72 UTM zone 9S',
            32310 => 'WGS72 UTM zone 10S',
            32311 => 'WGS72 UTM zone 11S',
            32312 => 'WGS72 UTM zone 12S',
            32313 => 'WGS72 UTM zone 13S',
            32314 => 'WGS72 UTM zone 14S',
            32315 => 'WGS72 UTM zone 15S',
            32316 => 'WGS72 UTM zone 16S',
            32317 => 'WGS72 UTM zone 17S',
            32318 => 'WGS72 UTM zone 18S',
            32319 => 'WGS72 UTM zone 19S',
            32320 => 'WGS72 UTM zone 20S',
            32321 => 'WGS72 UTM zone 21S',
            32322 => 'WGS72 UTM zone 22S',
            32323 => 'WGS72 UTM zone 23S',
            32324 => 'WGS72 UTM zone 24S',
            32325 => 'WGS72 UTM zone 25S',
            32326 => 'WGS72 UTM zone 26S',
            32327 => 'WGS72 UTM zone 27S',
            32328 => 'WGS72 UTM zone 28S',
            32329 => 'WGS72 UTM zone 29S',
            32330 => 'WGS72 UTM zone 30S',
            32331 => 'WGS72 UTM zone 31S',
            32332 => 'WGS72 UTM zone 32S',
            32333 => 'WGS72 UTM zone 33S',
            32334 => 'WGS72 UTM zone 34S',
            32335 => 'WGS72 UTM zone 35S',
            32336 => 'WGS72 UTM zone 36S',
            32337 => 'WGS72 UTM zone 37S',
            32338 => 'WGS72 UTM zone 38S',
            32339 => 'WGS72 UTM zone 39S',
            32340 => 'WGS72 UTM zone 40S',
            32341 => 'WGS72 UTM zone 41S',
            32342 => 'WGS72 UTM zone 42S',
            32343 => 'WGS72 UTM zone 43S',
            32344 => 'WGS72 UTM zone 44S',
            32345 => 'WGS72 UTM zone 45S',
            32346 => 'WGS72 UTM zone 46S',
            32347 => 'WGS72 UTM zone 47S',
            32348 => 'WGS72 UTM zone 48S',
            32349 => 'WGS72 UTM zone 49S',
            32350 => 'WGS72 UTM zone 50S',
            32351 => 'WGS72 UTM zone 51S',
            32352 => 'WGS72 UTM zone 52S',
            32353 => 'WGS72 UTM zone 53S',
            32354 => 'WGS72 UTM zone 54S',
            32355 => 'WGS72 UTM zone 55S',
            32356 => 'WGS72 UTM zone 56S',
            32357 => 'WGS72 UTM zone 57S',
            32358 => 'WGS72 UTM zone 58S',
            32359 => 'WGS72 UTM zone 59S',
            32360 => 'WGS72 UTM zone 60S',
            32401 => 'WGS72BE UTM zone 1N',
            32402 => 'WGS72BE UTM zone 2N',
            32403 => 'WGS72BE UTM zone 3N',
            32404 => 'WGS72BE UTM zone 4N',
            32405 => 'WGS72BE UTM zone 5N',
            32406 => 'WGS72BE UTM zone 6N',
            32407 => 'WGS72BE UTM zone 7N',
            32408 => 'WGS72BE UTM zone 8N',
            32409 => 'WGS72BE UTM zone 9N',
            32410 => 'WGS72BE UTM zone 10N',
            32411 => 'WGS72BE UTM zone 11N',
            32412 => 'WGS72BE UTM zone 12N',
            32413 => 'WGS72BE UTM zone 13N',
            32414 => 'WGS72BE UTM zone 14N',
            32415 => 'WGS72BE UTM zone 15N',
            32416 => 'WGS72BE UTM zone 16N',
            32417 => 'WGS72BE UTM zone 17N',
            32418 => 'WGS72BE UTM zone 18N',
            32419 => 'WGS72BE UTM zone 19N',
            32420 => 'WGS72BE UTM zone 20N',
            32421 => 'WGS72BE UTM zone 21N',
            32422 => 'WGS72BE UTM zone 22N',
            32423 => 'WGS72BE UTM zone 23N',
            32424 => 'WGS72BE UTM zone 24N',
            32425 => 'WGS72BE UTM zone 25N',
            32426 => 'WGS72BE UTM zone 26N',
            32427 => 'WGS72BE UTM zone 27N',
            32428 => 'WGS72BE UTM zone 28N',
            32429 => 'WGS72BE UTM zone 29N',
            32430 => 'WGS72BE UTM zone 30N',
            32431 => 'WGS72BE UTM zone 31N',
            32432 => 'WGS72BE UTM zone 32N',
            32433 => 'WGS72BE UTM zone 33N',
            32434 => 'WGS72BE UTM zone 34N',
            32435 => 'WGS72BE UTM zone 35N',
            32436 => 'WGS72BE UTM zone 36N',
            32437 => 'WGS72BE UTM zone 37N',
            32438 => 'WGS72BE UTM zone 38N',
            32439 => 'WGS72BE UTM zone 39N',
            32440 => 'WGS72BE UTM zone 40N',
            32441 => 'WGS72BE UTM zone 41N',
            32442 => 'WGS72BE UTM zone 42N',
            32443 => 'WGS72BE UTM zone 43N',
            32444 => 'WGS72BE UTM zone 44N',
            32445 => 'WGS72BE UTM zone 45N',
            32446 => 'WGS72BE UTM zone 46N',
            32447 => 'WGS72BE UTM zone 47N',
            32448 => 'WGS72BE UTM zone 48N',
            32449 => 'WGS72BE UTM zone 49N',
            32450 => 'WGS72BE UTM zone 50N',
            32451 => 'WGS72BE UTM zone 51N',
            32452 => 'WGS72BE UTM zone 52N',
            32453 => 'WGS72BE UTM zone 53N',
            32454 => 'WGS72BE UTM zone 54N',
            32455 => 'WGS72BE UTM zone 55N',
            32456 => 'WGS72BE UTM zone 56N',
            32457 => 'WGS72BE UTM zone 57N',
            32458 => 'WGS72BE UTM zone 58N',
            32459 => 'WGS72BE UTM zone 59N',
            32460 => 'WGS72BE UTM zone 60N',
            32501 => 'WGS72BE UTM zone 1S',
            32502 => 'WGS72BE UTM zone 2S',
            32503 => 'WGS72BE UTM zone 3S',
            32504 => 'WGS72BE UTM zone 4S',
            32505 => 'WGS72BE UTM zone 5S',
            32506 => 'WGS72BE UTM zone 6S',
            32507 => 'WGS72BE UTM zone 7S',
            32508 => 'WGS72BE UTM zone 8S',
            32509 => 'WGS72BE UTM zone 9S',
            32510 => 'WGS72BE UTM zone 10S',
            32511 => 'WGS72BE UTM zone 11S',
            32512 => 'WGS72BE UTM zone 12S',
            32513 => 'WGS72BE UTM zone 13S',
            32514 => 'WGS72BE UTM zone 14S',
            32515 => 'WGS72BE UTM zone 15S',
            32516 => 'WGS72BE UTM zone 16S',
            32517 => 'WGS72BE UTM zone 17S',
            32518 => 'WGS72BE UTM zone 18S',
            32519 => 'WGS72BE UTM zone 19S',
            32520 => 'WGS72BE UTM zone 20S',
            32521 => 'WGS72BE UTM zone 21S',
            32522 => 'WGS72BE UTM zone 22S',
            32523 => 'WGS72BE UTM zone 23S',
            32524 => 'WGS72BE UTM zone 24S',
            32525 => 'WGS72BE UTM zone 25S',
            32526 => 'WGS72BE UTM zone 26S',
            32527 => 'WGS72BE UTM zone 27S',
            32528 => 'WGS72BE UTM zone 28S',
            32529 => 'WGS72BE UTM zone 29S',
            32530 => 'WGS72BE UTM zone 30S',
            32531 => 'WGS72BE UTM zone 31S',
            32532 => 'WGS72BE UTM zone 32S',
            32533 => 'WGS72BE UTM zone 33S',
            32534 => 'WGS72BE UTM zone 34S',
            32535 => 'WGS72BE UTM zone 35S',
            32536 => 'WGS72BE UTM zone 36S',
            32537 => 'WGS72BE UTM zone 37S',
            32538 => 'WGS72BE UTM zone 38S',
            32539 => 'WGS72BE UTM zone 39S',
            32540 => 'WGS72BE UTM zone 40S',
            32541 => 'WGS72BE UTM zone 41S',
            32542 => 'WGS72BE UTM zone 42S',
            32543 => 'WGS72BE UTM zone 43S',
            32544 => 'WGS72BE UTM zone 44S',
            32545 => 'WGS72BE UTM zone 45S',
            32546 => 'WGS72BE UTM zone 46S',
            32547 => 'WGS72BE UTM zone 47S',
            32548 => 'WGS72BE UTM zone 48S',
            32549 => 'WGS72BE UTM zone 49S',
            32550 => 'WGS72BE UTM zone 50S',
            32551 => 'WGS72BE UTM zone 51S',
            32552 => 'WGS72BE UTM zone 52S',
            32553 => 'WGS72BE UTM zone 53S',
            32554 => 'WGS72BE UTM zone 54S',
            32555 => 'WGS72BE UTM zone 55S',
            32556 => 'WGS72BE UTM zone 56S',
            32557 => 'WGS72BE UTM zone 57S',
            32558 => 'WGS72BE UTM zone 58S',
            32559 => 'WGS72BE UTM zone 59S',
            32560 => 'WGS72BE UTM zone 60S',
            32601 => 'WGS84 UTM zone 1N',
            32602 => 'WGS84 UTM zone 2N',
            32603 => 'WGS84 UTM zone 3N',
            32604 => 'WGS84 UTM zone 4N',
            32605 => 'WGS84 UTM zone 5N',
            32606 => 'WGS84 UTM zone 6N',
            32607 => 'WGS84 UTM zone 7N',
            32608 => 'WGS84 UTM zone 8N',
            32609 => 'WGS84 UTM zone 9N',
            32610 => 'WGS84 UTM zone 10N',
            32611 => 'WGS84 UTM zone 11N',
            32612 => 'WGS84 UTM zone 12N',
            32613 => 'WGS84 UTM zone 13N',
            32614 => 'WGS84 UTM zone 14N',
            32615 => 'WGS84 UTM zone 15N',
            32616 => 'WGS84 UTM zone 16N',
            32617 => 'WGS84 UTM zone 17N',
            32618 => 'WGS84 UTM zone 18N',
            32619 => 'WGS84 UTM zone 19N',
            32620 => 'WGS84 UTM zone 20N',
            32621 => 'WGS84 UTM zone 21N',
            32622 => 'WGS84 UTM zone 22N',
            32623 => 'WGS84 UTM zone 23N',
            32624 => 'WGS84 UTM zone 24N',
            32625 => 'WGS84 UTM zone 25N',
            32626 => 'WGS84 UTM zone 26N',
            32627 => 'WGS84 UTM zone 27N',
            32628 => 'WGS84 UTM zone 28N',
            32629 => 'WGS84 UTM zone 29N',
            32630 => 'WGS84 UTM zone 30N',
            32631 => 'WGS84 UTM zone 31N',
            32632 => 'WGS84 UTM zone 32N',
            32633 => 'WGS84 UTM zone 33N',
            32634 => 'WGS84 UTM zone 34N',
            32635 => 'WGS84 UTM zone 35N',
            32636 => 'WGS84 UTM zone 36N',
            32637 => 'WGS84 UTM zone 37N',
            32638 => 'WGS84 UTM zone 38N',
            32639 => 'WGS84 UTM zone 39N',
            32640 => 'WGS84 UTM zone 40N',
            32641 => 'WGS84 UTM zone 41N',
            32642 => 'WGS84 UTM zone 42N',
            32643 => 'WGS84 UTM zone 43N',
            32644 => 'WGS84 UTM zone 44N',
            32645 => 'WGS84 UTM zone 45N',
            32646 => 'WGS84 UTM zone 46N',
            32647 => 'WGS84 UTM zone 47N',
            32648 => 'WGS84 UTM zone 48N',
            32649 => 'WGS84 UTM zone 49N',
            32650 => 'WGS84 UTM zone 50N',
            32651 => 'WGS84 UTM zone 51N',
            32652 => 'WGS84 UTM zone 52N',
            32653 => 'WGS84 UTM zone 53N',
            32654 => 'WGS84 UTM zone 54N',
            32655 => 'WGS84 UTM zone 55N',
            32656 => 'WGS84 UTM zone 56N',
            32657 => 'WGS84 UTM zone 57N',
            32658 => 'WGS84 UTM zone 58N',
            32659 => 'WGS84 UTM zone 59N',
            32660 => 'WGS84 UTM zone 60N',
            32701 => 'WGS84 UTM zone 1S',
            32702 => 'WGS84 UTM zone 2S',
            32703 => 'WGS84 UTM zone 3S',
            32704 => 'WGS84 UTM zone 4S',
            32705 => 'WGS84 UTM zone 5S',
            32706 => 'WGS84 UTM zone 6S',
            32707 => 'WGS84 UTM zone 7S',
            32708 => 'WGS84 UTM zone 8S',
            32709 => 'WGS84 UTM zone 9S',
            32710 => 'WGS84 UTM zone 10S',
            32711 => 'WGS84 UTM zone 11S',
            32712 => 'WGS84 UTM zone 12S',
            32713 => 'WGS84 UTM zone 13S',
            32714 => 'WGS84 UTM zone 14S',
            32715 => 'WGS84 UTM zone 15S',
            32716 => 'WGS84 UTM zone 16S',
            32717 => 'WGS84 UTM zone 17S',
            32718 => 'WGS84 UTM zone 18S',
            32719 => 'WGS84 UTM zone 19S',
            32720 => 'WGS84 UTM zone 20S',
            32721 => 'WGS84 UTM zone 21S',
            32722 => 'WGS84 UTM zone 22S',
            32723 => 'WGS84 UTM zone 23S',
            32724 => 'WGS84 UTM zone 24S',
            32725 => 'WGS84 UTM zone 25S',
            32726 => 'WGS84 UTM zone 26S',
            32727 => 'WGS84 UTM zone 27S',
            32728 => 'WGS84 UTM zone 28S',
            32729 => 'WGS84 UTM zone 29S',
            32730 => 'WGS84 UTM zone 30S',
            32731 => 'WGS84 UTM zone 31S',
            32732 => 'WGS84 UTM zone 32S',
            32733 => 'WGS84 UTM zone 33S',
            32734 => 'WGS84 UTM zone 34S',
            32735 => 'WGS84 UTM zone 35S',
            32736 => 'WGS84 UTM zone 36S',
            32737 => 'WGS84 UTM zone 37S',
            32738 => 'WGS84 UTM zone 38S',
            32739 => 'WGS84 UTM zone 39S',
            32740 => 'WGS84 UTM zone 40S',
            32741 => 'WGS84 UTM zone 41S',
            32742 => 'WGS84 UTM zone 42S',
            32743 => 'WGS84 UTM zone 43S',
            32744 => 'WGS84 UTM zone 44S',
            32745 => 'WGS84 UTM zone 45S',
            32746 => 'WGS84 UTM zone 46S',
            32747 => 'WGS84 UTM zone 47S',
            32748 => 'WGS84 UTM zone 48S',
            32749 => 'WGS84 UTM zone 49S',
            32750 => 'WGS84 UTM zone 50S',
            32751 => 'WGS84 UTM zone 51S',
            32752 => 'WGS84 UTM zone 52S',
            32753 => 'WGS84 UTM zone 53S',
            32754 => 'WGS84 UTM zone 54S',
            32755 => 'WGS84 UTM zone 55S',
            32756 => 'WGS84 UTM zone 56S',
            32757 => 'WGS84 UTM zone 57S',
            32758 => 'WGS84 UTM zone 58S',
            32759 => 'WGS84 UTM zone 59S',
            32760 => 'WGS84 UTM zone 60S',
            32767 => 'User Defined',
        },
    },
    3073 => 'PCSCitation',
    3074 => {
        Name => 'Projection',
        PrintConv => {
            # epsg_proj
            10101 => 'Alabama CS27 East',
            10102 => 'Alabama CS27 West',
            10131 => 'Alabama CS83 East',
            10132 => 'Alabama CS83 West',
            10201 => 'Arizona Coordinate System east',
            10202 => 'Arizona Coordinate System Central',
            10203 => 'Arizona Coordinate System west',
            10231 => 'Arizona CS83 east',
            10232 => 'Arizona CS83 Central',
            10233 => 'Arizona CS83 west',
            10301 => 'Arkansas CS27 North',
            10302 => 'Arkansas CS27 South',
            10331 => 'Arkansas CS83 North',
            10332 => 'Arkansas CS83 South',
            10401 => 'California CS27 I',
            10402 => 'California CS27 II',
            10403 => 'California CS27 III',
            10404 => 'California CS27 IV',
            10405 => 'California CS27 V',
            10406 => 'California CS27 VI',
            10407 => 'California CS27 VII',
            10431 => 'California CS83 1',
            10432 => 'California CS83 2',
            10433 => 'California CS83 3',
            10434 => 'California CS83 4',
            10435 => 'California CS83 5',
            10436 => 'California CS83 6',
            10501 => 'Colorado CS27 North',
            10502 => 'Colorado CS27 Central',
            10503 => 'Colorado CS27 South',
            10531 => 'Colorado CS83 North',
            10532 => 'Colorado CS83 Central',
            10533 => 'Colorado CS83 South',
            10600 => 'Connecticut CS27',
            10630 => 'Connecticut CS83',
            10700 => 'Delaware CS27',
            10730 => 'Delaware CS83',
            10901 => 'Florida CS27 East',
            10902 => 'Florida CS27 West',
            10903 => 'Florida CS27 North',
            10931 => 'Florida CS83 East',
            10932 => 'Florida CS83 West',
            10933 => 'Florida CS83 North',
            11001 => 'Georgia CS27 East',
            11002 => 'Georgia CS27 West',
            11031 => 'Georgia CS83 East',
            11032 => 'Georgia CS83 West',
            11101 => 'Idaho CS27 East',
            11102 => 'Idaho CS27 Central',
            11103 => 'Idaho CS27 West',
            11131 => 'Idaho CS83 East',
            11132 => 'Idaho CS83 Central',
            11133 => 'Idaho CS83 West',
            11201 => 'Illinois CS27 East',
            11202 => 'Illinois CS27 West',
            11231 => 'Illinois CS83 East',
            11232 => 'Illinois CS83 West',
            11301 => 'Indiana CS27 East',
            11302 => 'Indiana CS27 West',
            11331 => 'Indiana CS83 East',
            11332 => 'Indiana CS83 West',
            11401 => 'Iowa CS27 North',
            11402 => 'Iowa CS27 South',
            11431 => 'Iowa CS83 North',
            11432 => 'Iowa CS83 South',
            11501 => 'Kansas CS27 North',
            11502 => 'Kansas CS27 South',
            11531 => 'Kansas CS83 North',
            11532 => 'Kansas CS83 South',
            11601 => 'Kentucky CS27 North',
            11602 => 'Kentucky CS27 South',
            11631 => 'Kentucky CS83 North',
            11632 => 'Kentucky CS83 South',
            11701 => 'Louisiana CS27 North',
            11702 => 'Louisiana CS27 South',
            11731 => 'Louisiana CS83 North',
            11732 => 'Louisiana CS83 South',
            11801 => 'Maine CS27 East',
            11802 => 'Maine CS27 West',
            11831 => 'Maine CS83 East',
            11832 => 'Maine CS83 West',
            11900 => 'Maryland CS27',
            11930 => 'Maryland CS83',
            12001 => 'Massachusetts CS27 Mainland',
            12002 => 'Massachusetts CS27 Island',
            12031 => 'Massachusetts CS83 Mainland',
            12032 => 'Massachusetts CS83 Island',
            12101 => 'Michigan State Plane East',
            12102 => 'Michigan State Plane Old Central',
            12103 => 'Michigan State Plane West',
            12111 => 'Michigan CS27 North',
            12112 => 'Michigan CS27 Central',
            12113 => 'Michigan CS27 South',
            12141 => 'Michigan CS83 North',
            12142 => 'Michigan CS83 Central',
            12143 => 'Michigan CS83 South',
            12201 => 'Minnesota CS27 North',
            12202 => 'Minnesota CS27 Central',
            12203 => 'Minnesota CS27 South',
            12231 => 'Minnesota CS83 North',
            12232 => 'Minnesota CS83 Central',
            12233 => 'Minnesota CS83 South',
            12301 => 'Mississippi CS27 East',
            12302 => 'Mississippi CS27 West',
            12331 => 'Mississippi CS83 East',
            12332 => 'Mississippi CS83 West',
            12401 => 'Missouri CS27 East',
            12402 => 'Missouri CS27 Central',
            12403 => 'Missouri CS27 West',
            12431 => 'Missouri CS83 East',
            12432 => 'Missouri CS83 Central',
            12433 => 'Missouri CS83 West',
            12501 => 'Montana CS27 North',
            12502 => 'Montana CS27 Central',
            12503 => 'Montana CS27 South',
            12530 => 'Montana CS83',
            12601 => 'Nebraska CS27 North',
            12602 => 'Nebraska CS27 South',
            12630 => 'Nebraska CS83',
            12701 => 'Nevada CS27 East',
            12702 => 'Nevada CS27 Central',
            12703 => 'Nevada CS27 West',
            12731 => 'Nevada CS83 East',
            12732 => 'Nevada CS83 Central',
            12733 => 'Nevada CS83 West',
            12800 => 'New Hampshire CS27',
            12830 => 'New Hampshire CS83',
            12900 => 'New Jersey CS27',
            12930 => 'New Jersey CS83',
            13001 => 'New Mexico CS27 East',
            13002 => 'New Mexico CS27 Central',
            13003 => 'New Mexico CS27 West',
            13031 => 'New Mexico CS83 East',
            13032 => 'New Mexico CS83 Central',
            13033 => 'New Mexico CS83 West',
            13101 => 'New York CS27 East',
            13102 => 'New York CS27 Central',
            13103 => 'New York CS27 West',
            13104 => 'New York CS27 Long Island',
            13131 => 'New York CS83 East',
            13132 => 'New York CS83 Central',
            13133 => 'New York CS83 West',
            13134 => 'New York CS83 Long Island',
            13200 => 'North Carolina CS27',
            13230 => 'North Carolina CS83',
            13301 => 'North Dakota CS27 North',
            13302 => 'North Dakota CS27 South',
            13331 => 'North Dakota CS83 North',
            13332 => 'North Dakota CS83 South',
            13401 => 'Ohio CS27 North',
            13402 => 'Ohio CS27 South',
            13431 => 'Ohio CS83 North',
            13432 => 'Ohio CS83 South',
            13501 => 'Oklahoma CS27 North',
            13502 => 'Oklahoma CS27 South',
            13531 => 'Oklahoma CS83 North',
            13532 => 'Oklahoma CS83 South',
            13601 => 'Oregon CS27 North',
            13602 => 'Oregon CS27 South',
            13631 => 'Oregon CS83 North',
            13632 => 'Oregon CS83 South',
            13701 => 'Pennsylvania CS27 North',
            13702 => 'Pennsylvania CS27 South',
            13731 => 'Pennsylvania CS83 North',
            13732 => 'Pennsylvania CS83 South',
            13800 => 'Rhode Island CS27',
            13830 => 'Rhode Island CS83',
            13901 => 'South Carolina CS27 North',
            13902 => 'South Carolina CS27 South',
            13930 => 'South Carolina CS83',
            14001 => 'South Dakota CS27 North',
            14002 => 'South Dakota CS27 South',
            14031 => 'South Dakota CS83 North',
            14032 => 'South Dakota CS83 South',
            14100 => 'Tennessee CS27',
            14130 => 'Tennessee CS83',
            14201 => 'Texas CS27 North',
            14202 => 'Texas CS27 North Central',
            14203 => 'Texas CS27 Central',
            14204 => 'Texas CS27 South Central',
            14205 => 'Texas CS27 South',
            14231 => 'Texas CS83 North',
            14232 => 'Texas CS83 North Central',
            14233 => 'Texas CS83 Central',
            14234 => 'Texas CS83 South Central',
            14235 => 'Texas CS83 South',
            14301 => 'Utah CS27 North',
            14302 => 'Utah CS27 Central',
            14303 => 'Utah CS27 South',
            14331 => 'Utah CS83 North',
            14332 => 'Utah CS83 Central',
            14333 => 'Utah CS83 South',
            14400 => 'Vermont CS27',
            14430 => 'Vermont CS83',
            14501 => 'Virginia CS27 North',
            14502 => 'Virginia CS27 South',
            14531 => 'Virginia CS83 North',
            14532 => 'Virginia CS83 South',
            14601 => 'Washington CS27 North',
            14602 => 'Washington CS27 South',
            14631 => 'Washington CS83 North',
            14632 => 'Washington CS83 South',
            14701 => 'West Virginia CS27 North',
            14702 => 'West Virginia CS27 South',
            14731 => 'West Virginia CS83 North',
            14732 => 'West Virginia CS83 South',
            14801 => 'Wisconsin CS27 North',
            14802 => 'Wisconsin CS27 Central',
            14803 => 'Wisconsin CS27 South',
            14831 => 'Wisconsin CS83 North',
            14832 => 'Wisconsin CS83 Central',
            14833 => 'Wisconsin CS83 South',
            14901 => 'Wyoming CS27 East',
            14902 => 'Wyoming CS27 East Central',
            14903 => 'Wyoming CS27 West Central',
            14904 => 'Wyoming CS27 West',
            14931 => 'Wyoming CS83 East',
            14932 => 'Wyoming CS83 East Central',
            14933 => 'Wyoming CS83 West Central',
            14934 => 'Wyoming CS83 West',
            15001 => 'Alaska CS27 1',
            15002 => 'Alaska CS27 2',
            15003 => 'Alaska CS27 3',
            15004 => 'Alaska CS27 4',
            15005 => 'Alaska CS27 5',
            15006 => 'Alaska CS27 6',
            15007 => 'Alaska CS27 7',
            15008 => 'Alaska CS27 8',
            15009 => 'Alaska CS27 9',
            15010 => 'Alaska CS27 10',
            15031 => 'Alaska CS83 1',
            15032 => 'Alaska CS83 2',
            15033 => 'Alaska CS83 3',
            15034 => 'Alaska CS83 4',
            15035 => 'Alaska CS83 5',
            15036 => 'Alaska CS83 6',
            15037 => 'Alaska CS83 7',
            15038 => 'Alaska CS83 8',
            15039 => 'Alaska CS83 9',
            15040 => 'Alaska CS83 10',
            15101 => 'Hawaii CS27 1',
            15102 => 'Hawaii CS27 2',
            15103 => 'Hawaii CS27 3',
            15104 => 'Hawaii CS27 4',
            15105 => 'Hawaii CS27 5',
            15131 => 'Hawaii CS83 1',
            15132 => 'Hawaii CS83 2',
            15133 => 'Hawaii CS83 3',
            15134 => 'Hawaii CS83 4',
            15135 => 'Hawaii CS83 5',
            15201 => 'Puerto Rico CS27',
            15202 => 'St Croix',
            15230 => 'Puerto Rico Virgin Is',
            15302 => 'Kentucky CS27',
            15303 => 'Kentucky CS83 North',
            15914 => 'BLM 14N feet',
            15915 => 'BLM 15N feet',
            15916 => 'BLM 16N feet',
            15917 => 'BLM 17N feet',
            16001 => 'UTM zone 1N',
            16002 => 'UTM zone 2N',
            16003 => 'UTM zone 3N',
            16004 => 'UTM zone 4N',
            16005 => 'UTM zone 5N',
            16006 => 'UTM zone 6N',
            16007 => 'UTM zone 7N',
            16008 => 'UTM zone 8N',
            16009 => 'UTM zone 9N',
            16010 => 'UTM zone 10N',
            16011 => 'UTM zone 11N',
            16012 => 'UTM zone 12N',
            16013 => 'UTM zone 13N',
            16014 => 'UTM zone 14N',
            16015 => 'UTM zone 15N',
            16016 => 'UTM zone 16N',
            16017 => 'UTM zone 17N',
            16018 => 'UTM zone 18N',
            16019 => 'UTM zone 19N',
            16020 => 'UTM zone 20N',
            16021 => 'UTM zone 21N',
            16022 => 'UTM zone 22N',
            16023 => 'UTM zone 23N',
            16024 => 'UTM zone 24N',
            16025 => 'UTM zone 25N',
            16026 => 'UTM zone 26N',
            16027 => 'UTM zone 27N',
            16028 => 'UTM zone 28N',
            16029 => 'UTM zone 29N',
            16030 => 'UTM zone 30N',
            16031 => 'UTM zone 31N',
            16032 => 'UTM zone 32N',
            16033 => 'UTM zone 33N',
            16034 => 'UTM zone 34N',
            16035 => 'UTM zone 35N',
            16036 => 'UTM zone 36N',
            16037 => 'UTM zone 37N',
            16038 => 'UTM zone 38N',
            16039 => 'UTM zone 39N',
            16040 => 'UTM zone 40N',
            16041 => 'UTM zone 41N',
            16042 => 'UTM zone 42N',
            16043 => 'UTM zone 43N',
            16044 => 'UTM zone 44N',
            16045 => 'UTM zone 45N',
            16046 => 'UTM zone 46N',
            16047 => 'UTM zone 47N',
            16048 => 'UTM zone 48N',
            16049 => 'UTM zone 49N',
            16050 => 'UTM zone 50N',
            16051 => 'UTM zone 51N',
            16052 => 'UTM zone 52N',
            16053 => 'UTM zone 53N',
            16054 => 'UTM zone 54N',
            16055 => 'UTM zone 55N',
            16056 => 'UTM zone 56N',
            16057 => 'UTM zone 57N',
            16058 => 'UTM zone 58N',
            16059 => 'UTM zone 59N',
            16060 => 'UTM zone 60N',
            16101 => 'UTM zone 1S',
            16102 => 'UTM zone 2S',
            16103 => 'UTM zone 3S',
            16104 => 'UTM zone 4S',
            16105 => 'UTM zone 5S',
            16106 => 'UTM zone 6S',
            16107 => 'UTM zone 7S',
            16108 => 'UTM zone 8S',
            16109 => 'UTM zone 9S',
            16110 => 'UTM zone 10S',
            16111 => 'UTM zone 11S',
            16112 => 'UTM zone 12S',
            16113 => 'UTM zone 13S',
            16114 => 'UTM zone 14S',
            16115 => 'UTM zone 15S',
            16116 => 'UTM zone 16S',
            16117 => 'UTM zone 17S',
            16118 => 'UTM zone 18S',
            16119 => 'UTM zone 19S',
            16120 => 'UTM zone 20S',
            16121 => 'UTM zone 21S',
            16122 => 'UTM zone 22S',
            16123 => 'UTM zone 23S',
            16124 => 'UTM zone 24S',
            16125 => 'UTM zone 25S',
            16126 => 'UTM zone 26S',
            16127 => 'UTM zone 27S',
            16128 => 'UTM zone 28S',
            16129 => 'UTM zone 29S',
            16130 => 'UTM zone 30S',
            16131 => 'UTM zone 31S',
            16132 => 'UTM zone 32S',
            16133 => 'UTM zone 33S',
            16134 => 'UTM zone 34S',
            16135 => 'UTM zone 35S',
            16136 => 'UTM zone 36S',
            16137 => 'UTM zone 37S',
            16138 => 'UTM zone 38S',
            16139 => 'UTM zone 39S',
            16140 => 'UTM zone 40S',
            16141 => 'UTM zone 41S',
            16142 => 'UTM zone 42S',
            16143 => 'UTM zone 43S',
            16144 => 'UTM zone 44S',
            16145 => 'UTM zone 45S',
            16146 => 'UTM zone 46S',
            16147 => 'UTM zone 47S',
            16148 => 'UTM zone 48S',
            16149 => 'UTM zone 49S',
            16150 => 'UTM zone 50S',
            16151 => 'UTM zone 51S',
            16152 => 'UTM zone 52S',
            16153 => 'UTM zone 53S',
            16154 => 'UTM zone 54S',
            16155 => 'UTM zone 55S',
            16156 => 'UTM zone 56S',
            16157 => 'UTM zone 57S',
            16158 => 'UTM zone 58S',
            16159 => 'UTM zone 59S',
            16160 => 'UTM zone 60S',
            16200 => 'Gauss Kruger zone 0',
            16201 => 'Gauss Kruger zone 1',
            16202 => 'Gauss Kruger zone 2',
            16203 => 'Gauss Kruger zone 3',
            16204 => 'Gauss Kruger zone 4',
            16205 => 'Gauss Kruger zone 5',
            17348 => 'Map Grid of Australia 48',
            17349 => 'Map Grid of Australia 49',
            17350 => 'Map Grid of Australia 50',
            17351 => 'Map Grid of Australia 51',
            17352 => 'Map Grid of Australia 52',
            17353 => 'Map Grid of Australia 53',
            17354 => 'Map Grid of Australia 54',
            17355 => 'Map Grid of Australia 55',
            17356 => 'Map Grid of Australia 56',
            17357 => 'Map Grid of Australia 57',
            17358 => 'Map Grid of Australia 58',
            17448 => 'Australian Map Grid 48',
            17449 => 'Australian Map Grid 49',
            17450 => 'Australian Map Grid 50',
            17451 => 'Australian Map Grid 51',
            17452 => 'Australian Map Grid 52',
            17453 => 'Australian Map Grid 53',
            17454 => 'Australian Map Grid 54',
            17455 => 'Australian Map Grid 55',
            17456 => 'Australian Map Grid 56',
            17457 => 'Australian Map Grid 57',
            17458 => 'Australian Map Grid 58',
            18031 => 'Argentina 1',
            18032 => 'Argentina 2',
            18033 => 'Argentina 3',
            18034 => 'Argentina 4',
            18035 => 'Argentina 5',
            18036 => 'Argentina 6',
            18037 => 'Argentina 7',
            18051 => 'Colombia 3W',
            18052 => 'Colombia Bogota',
            18053 => 'Colombia 3E',
            18054 => 'Colombia 6E',
            18072 => 'Egypt Red Belt',
            18073 => 'Egypt Purple Belt',
            18074 => 'Extended Purple Belt',
            18141 => 'New Zealand North Island Nat Grid',
            18142 => 'New Zealand South Island Nat Grid',
            19900 => 'Bahrain Grid',
            19905 => 'Netherlands E Indies Equatorial',
            19912 => 'RSO Borneo',
            19926 => 'Stereo 70',
            32767 => 'User Defined',
        },
    },
    3075 => {
        Name => 'ProjCoordTrans',
        PrintConv => {
            # geo_ctrans
            1 => 'Transverse Mercator',
            2 => 'Transverse Mercator Modified Alaska',
            3 => 'Oblique Mercator',
            4 => 'Oblique Mercator Laborde',
            5 => 'Oblique Mercator Rosenmund',
            6 => 'Oblique Mercator Spherical',   # not advisable
            7 => 'Mercator',
            8 => 'Lambert Conf Conic 2SP',
            9 => 'Lambert Conf Conic 1SP',
            10 => 'Lambert Azim Equal Area',
            11 => 'Albers Equal Area',
            12 => 'Azimuthal Equidistant',
            13 => 'Equidistant Conic',
            14 => 'Stereographic',
            15 => 'Polar Stereographic',
            16 => 'Oblique Stereographic',   # not advisable
            17 => 'Equirectangular',
            18 => 'Cassini Soldner',
            19 => 'Gnomonic',
            20 => 'Miller Cylindrical',
            21 => 'Orthographic',
            22 => 'Polyconic',
            23 => 'Robinson',
            24 => 'Sinusoidal',
            25 => 'VanDerGrinten',
            26 => 'New Zealand Map Grid',
            27 => 'Transverse Mercator South Orientated',
            28 => 'Cylindrical Equal Area',
            32767 => 'User Defined',
        },
    },
    3076 => {
        Name => 'ProjLinearUnits',
        SeparateTable => 'Units',
        PrintConv => \%epsg_units,
    },
    3077 => 'ProjLinearUnitSize',
    3078 => 'ProjStdParallel1',
    3079 => 'ProjStdParallel2',
    3080 => 'ProjNatOriginLong',
    3081 => 'ProjNatOriginLat',
    3082 => 'ProjFalseEasting',
    3083 => 'ProjFalseNorthing',
    3084 => 'ProjFalseOriginLong',
    3085 => 'ProjFalseOriginLat',
    3086 => 'ProjFalseOriginEasting',
    3087 => 'ProjFalseOriginNorthing',
    3088 => 'ProjCenterLong',
    3089 => 'ProjCenterLat',
    3090 => 'ProjCenterEasting',
    3091 => 'ProjCenterNorthing',
    3092 => 'ProjScaleAtNatOrigin',
    3093 => 'ProjScaleAtCenter',
    3094 => 'ProjAzimuthAngle',
    3095 => 'ProjStraightVertPoleLong',
    3096 => 'ProjRectifiedGridAngle',
    4096 => {
        Name => 'VerticalCSType',
        PrintConv => {
            # epsg_vertcs
            5001 => 'Airy 1830 ellipsoid',
            5002 => 'Airy Modified 1849 ellipsoid',
            5003 => 'ANS ellipsoid',
            5004 => 'Bessel 1841 ellipsoid',
            5005 => 'Bessel Modified ellipsoid',
            5006 => 'Bessel Namibia ellipsoid',
            5007 => 'Clarke 1858 ellipsoid',
            5008 => 'Clarke 1866 ellipsoid',
            5010 => 'Clarke 1880 Benoit ellipsoid',
            5011 => 'Clarke 1880 IGN ellipsoid',
            5012 => 'Clarke 1880 RGS ellipsoid',
            5013 => 'Clarke 1880 Arc ellipsoid',
            5014 => 'Clarke 1880 SGA 1922 ellipsoid',
            5015 => 'Everest 1830 1937 Adjustment ellipsoid',
            5016 => 'Everest 1830 1967 Definition ellipsoid',
            5017 => 'Everest 1830 1975 Definition ellipsoid',
            5018 => 'Everest 1830 Modified ellipsoid',
            5019 => 'GRS 1980 ellipsoid',
            5020 => 'Helmert 1906 ellipsoid',
            5021 => 'INS ellipsoid',
            5022 => 'International 1924 ellipsoid',
            5023 => 'International 1967 ellipsoid',
            5024 => 'Krassowsky 1940 ellipsoid',
            5025 => 'NWL 9D ellipsoid',
            5026 => 'NWL 10D ellipsoid',
            5027 => 'Plessis 1817 ellipsoid',
            5028 => 'Struve 1860 ellipsoid',
            5029 => 'War Office ellipsoid',
            5030 => 'WGS 84 ellipsoid',
            5031 => 'GEM 10C ellipsoid',
            5032 => 'OSU86F ellipsoid',
            5033 => 'OSU91A ellipsoid',
            5101 => 'Newlyn',
            5102 => 'North American Vertical Datum 1929',
            5103 => 'North American Vertical Datum 1988',
            5104 => 'Yellow Sea 1956',
            5105 => 'Baltic Sea',
            5106 => 'Caspian Sea',
            32767 => 'User Defined',
        },
    },
    4097 => 'VerticalCitation',
    4098 => {
        Name => 'VerticalDatum',
        PrintConv => {
            1 => 'Vertical Datum Base',
            32767 => 'User Defined',
        },
    },
    4099 => {
        Name => 'VerticalUnits',
        SeparateTable => 'Units',
        PrintConv => \%epsg_units,
    },
);

#------------------------------------------------------------------------------
# Inputs: 0) ExifTool object ref
# Notes: byte order must be set before calling this routine
sub ProcessGeoTiff($)
{
    my $et = shift;
    my $dirData = $et->GetValue('GeoTiffDirectory', 'ValueConv') or return;

    # avoid re-processing if another EXIF directory is found
    $$et{DidGeoTiff} and $$et{DidGeoTiff} eq $dirData and return;
    $$et{DidGeoTiff} = $dirData;

    my $doubleData = $et->GetValue('GeoTiffDoubleParams', 'ValueConv');
    my $asciiData = $et->GetValue('GeoTiffAsciiParams', 'ValueConv');
    my $verbose = $et->Options('Verbose');

    if (length($$dirData) >= 8 and
        length($$dirData) >= 8 * (Get16u($dirData,6) + 1))
    {
        my $version    = Get16u($dirData,0);
        my $revision   = Get16u($dirData,2);
        my $minorRev   = Get16u($dirData,4);
        my $numEntries = Get16u($dirData,6);

        if ($verbose) {
            $$et{INDENT} .= '| ';
            $et->VerboseDir('GeoTiff',$numEntries);
        }
        # generate version number tag (not a real GeoTiff tag)
        my $tagTable = GetTagTable("Image::ExifTool::GeoTiff::Main");
        my $tagInfo = $et->GetTagInfo($tagTable, 1);
        $tagInfo and $et->FoundTag($tagInfo,"$version.$revision.$minorRev");

        my $i;
        for ($i=0; $i<$numEntries; ++$i) {
            my $pt = 8 * ($i + 1);
            my $tag    = Get16u($dirData, $pt);
            $tagInfo   = $et->GetTagInfo($tagTable, $tag) or next;
            my $loc    = Get16u($dirData, $pt+2);
            my $count  = Get16u($dirData, $pt+4);
            my $offset = Get16u($dirData, $pt+6);
            my $format = $geoTiffFormat{$loc};
            my ($val, $dataPt);
            if ($format eq 'double') {          # in the double parms
                if (not $doubleData or length($$doubleData) < 8*($offset+$count)) {
                    $et->Warn("Missing double data for $$tagInfo{Name}");
                    next;
                }
                $dataPt = $doubleData;
                $offset *= 8;
                $val = Image::ExifTool::ReadValue($dataPt, $offset, $format,
                                                  $count, length($$doubleData)-$offset);
            } elsif ($format eq 'string') {     # in the ASCII parms
                if (not $asciiData or length($$asciiData) < $offset+$count) {
                    $et->Warn("Missing string data for $$tagInfo{Name}");
                    next;
                }
                $dataPt = $asciiData;
                $val = substr($$dataPt, $offset, $count);
                $val =~ s/(\0|\|)$//;   # remove trailing terminator (NULL or '|')
            } elsif ($format eq 'int16u') {     # use the offset as the value
                $dataPt = $dirData;
                $val = $offset;
                $offset = $pt+6;
            } else {
                $et->Warn("Unknown GeoTiff location: $loc");
                next;
            }
            $verbose and $et->VerboseInfo($tag, $tagInfo,
                'Table'  => $tagTable,
                'Index'  => $i,
                'Value'  => $val,
                'DataPt' => $dataPt,
                'Start'  => $offset,
                'Format' => $format,
                'Count'  => $count,
                'Size'   => $count * Image::ExifTool::FormatSize($format),
            );
            $et->FoundTag($tagInfo, $val);
        }
        if ($verbose) {
            $$et{INDENT} =~ s/..$//;
        }
    } else {
        $et->Warn('Bad GeoTIFF directory');
    }
    # extract block tags only if requested
    unless ($$et{OPTIONS}{RequestAll}) {
        $et->DeleteTag('GeoTiffDirectory')    unless $$et{REQ_TAG_LOOKUP}{geotiffdirectory};
        $et->DeleteTag('GeoTiffDoubleParams') unless $$et{REQ_TAG_LOOKUP}{geotiffdoubleparams};
        $et->DeleteTag('GeoTiffAsciiParams')  unless $$et{REQ_TAG_LOOKUP}{geotiffasciiparams};
    }
}


1;  #end

__END__

=head1 NAME

Image::ExifTool::GeoTiff - Read GeoTiff meta information

=head1 SYNOPSIS

This module is loaded automatically by Image::ExifTool when required.

=head1 DESCRIPTION

This module contains definitions required by Image::ExifTool to interpret
GeoTiff meta information.  GeoTiff information is used in images to specify
exact geometric mappings used to transform the image to real world
coordinates.

=head1 AUTHOR

Copyright 2003-2014, Phil Harvey (phil at owl.phy.queensu.ca)

This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=head1 REFERENCES

=over 4

=item ftp://ftp.remotesensing.org/geotiff/libgeotiff/libgeotiff-1.1.4.tar.gz

=back

=head1 SEE ALSO

L<Image::ExifTool::TagNames/GeoTiff Tags>,
L<Image::ExifTool(3pm)|Image::ExifTool>

=cut
