From 48f748bc3ea0daf91209ba4ff6cdd8a6111d472c Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Wed, 30 Mar 2022 15:17:43 +0900 Subject: [PATCH] info: improved geotiff display --- .../channel/calls/MetadataFetchHandler.kt | 2 + .../aves/metadata/MetadataExtractorHelper.kt | 2 +- lib/ref/geotiff.dart | 19 + lib/widgets/viewer/info/metadata/geotiff.dart | 3429 +++++++++++++++++ .../info/metadata/metadata_dir_tile.dart | 10 +- .../info/metadata/metadata_section.dart | 1 + 6 files changed, 3461 insertions(+), 2 deletions(-) create mode 100644 lib/ref/geotiff.dart create mode 100644 lib/widgets/viewer/info/metadata/geotiff.dart diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt index 13220cb60..579641cf4 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt @@ -769,6 +769,8 @@ class MetadataFetchHandler(private val context: Context) : MethodCallHandler { } Pair(it, value) }) + val geoKeyDirectory = dir.getIntArray(ExifGeoTiffTags.TAG_GEO_KEY_DIRECTORY) + fields.putAll((dir as ExifIFD0Directory).extractGeoKeys(geoKeyDirectory)) } } result.success(fields) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MetadataExtractorHelper.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MetadataExtractorHelper.kt index 95d9046d2..2286ee78c 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MetadataExtractorHelper.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MetadataExtractorHelper.kt @@ -140,7 +140,7 @@ object MetadataExtractorHelper { } } else if (sourceValue.javaClass.isArray) { val sourceArray = sourceValue as DoubleArray - if (valueOffset + valueCount < sourceArray.size) { + if (valueOffset + valueCount <= sourceArray.size) { fields[keyId] = sourceArray.copyOfRange(valueOffset, valueOffset + valueCount) } else { Log.w(LOG_TAG, "GeoTIFF key $keyId with offset $valueOffset and count $valueCount extends beyond length of source value (${sourceArray.size})") diff --git a/lib/ref/geotiff.dart b/lib/ref/geotiff.dart new file mode 100644 index 000000000..57efc3a70 --- /dev/null +++ b/lib/ref/geotiff.dart @@ -0,0 +1,19 @@ +class GeoTiffExifTags { + static const int modelPixelScale = 0x830e; + static const int modelTiePoints = 0x8482; + static const int modelTransformation = 0x85d8; + static const int geoKeyDirectory = 0x87af; + static const int geoDoubleParams = 0x87b0; + static const int geoAsciiParams = 0x87b1; +} + +class GeoTiffKeys { + static const int modelType = 0x0400; + static const int rasterType = 0x0401; + static const int geographicType = 0x0800; + static const int geogAngularUnits = 0x0806; + static const int projCSType = 0x0c00; + static const int projection = 0x0c02; + static const int projCoordinateTransform = 0x0c03; + static const int projLinearUnits = 0x0c04; +} diff --git a/lib/widgets/viewer/info/metadata/geotiff.dart b/lib/widgets/viewer/info/metadata/geotiff.dart new file mode 100644 index 000000000..e6648917c --- /dev/null +++ b/lib/widgets/viewer/info/metadata/geotiff.dart @@ -0,0 +1,3429 @@ +import 'package:aves/ref/geotiff.dart'; + +class GeoTiffDirectory { + static int? tagForName(String name) { + switch (name) { + case 'Model Type': + return GeoTiffKeys.modelType; + case 'Raster Type': + return GeoTiffKeys.rasterType; + case 'Geographic Type': + return GeoTiffKeys.geographicType; + case 'Geographic Angular Units': + return GeoTiffKeys.geogAngularUnits; + case 'Projected Coordinate System Type': + return GeoTiffKeys.projCSType; + case 'Projection': + return GeoTiffKeys.projection; + case 'Projected Coordinate Transform': + return GeoTiffKeys.projCoordinateTransform; + case 'Projection Linear Units': + return GeoTiffKeys.projLinearUnits; + default: + return null; + } + } + + static String formatValue(int? tag, String v) { + switch (tag) { + case GeoTiffKeys.modelType: + return getModelTypeDescription(v); + case GeoTiffKeys.rasterType: + return getRasterTypeDescription(v); + case GeoTiffKeys.geographicType: + return getGeographicTypeDescription(v); + case GeoTiffKeys.projCSType: + return getProjCSTypeDescription(v); + case GeoTiffKeys.projection: + return getProjectionDescription(v); + case GeoTiffKeys.projCoordinateTransform: + return getProjCoordinateTransformDescription(v); + case GeoTiffKeys.projLinearUnits: + case GeoTiffKeys.geogAngularUnits: + return getGeoTiffUnitsDescription(v); + default: + return v; + } + } + + static String getModelTypeDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 1: + return 'Projected'; + case 2: + return 'Geographic'; + case 3: + return 'Geocentric'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } + + static String getRasterTypeDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 1: + return 'Pixel Is Area'; + case 2: + return 'Pixel Is Point'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } + + static String getGeographicTypeDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 4001: + return 'Airy 1830'; + case 4002: + return 'Airy Modified 1849'; + case 4003: + return 'Australian National Spheroid'; + case 4004: + return 'Bessel 1841'; + case 4005: + return 'Bessel Modified'; + case 4006: + return 'Bessel Namibia'; + case 4007: + return 'Clarke 1858'; + case 4008: + return 'Clarke 1866'; + case 4009: + return 'Clarke 1866 Michigan'; + case 4010: + return 'Clarke 1880 Benoit'; + case 4011: + return 'Clarke 1880 IGN'; + case 4012: + return 'Clarke 1880 RGS'; + case 4013: + return 'Clarke 1880 Arc'; + case 4014: + return 'Clarke 1880 SGA 1922'; + case 4015: + return 'Everest 1830 1937 Adjustment'; + case 4016: + return 'Everest 1830 1967 Definition'; + case 4017: + return 'Everest 1830 1975 Definition'; + case 4018: + return 'Everest 1830 Modified'; + case 4019: + return 'GRS 1980'; + case 4020: + return 'Helmert 1906'; + case 4021: + return 'Indonesian National Spheroid'; + case 4022: + return 'International 1924'; + case 4023: + return 'International 1967'; + case 4024: + return 'Krassowsky 1940'; + case 4025: + return 'NWL9D'; + case 4026: + return 'NWL10D'; + case 4027: + return 'Plessis 1817'; + case 4028: + return 'Struve 1860'; + case 4029: + return 'War Office'; + case 4030: + return 'WGS84'; + case 4031: + return 'GEM10C'; + case 4032: + return 'OSU86F'; + case 4033: + return 'OSU91A'; + case 4034: + return 'Clarke 1880'; + case 4035: + return 'Sphere'; + case 4120: + return 'Greek'; + case 4121: + return 'GGRS87'; + case 4123: + return 'KKJ'; + case 4124: + return 'RT90'; + case 4133: + return 'EST92'; + case 4201: + return 'Adindan'; + case 4202: + return 'AGD66'; + case 4203: + return 'AGD84'; + case 4204: + return 'Ain el Abd'; + case 4205: + return 'Afgooye'; + case 4206: + return 'Agadez'; + case 4207: + return 'Lisbon'; + case 4208: + return 'Aratu'; + case 4209: + return 'Arc 1950'; + case 4210: + return 'Arc 1960'; + case 4211: + return 'Batavia'; + case 4212: + return 'Barbados'; + case 4213: + return 'Beduaram'; + case 4214: + return 'Beijing 1954'; + case 4215: + return 'Belge 1950'; + case 4216: + return 'Bermuda 1957'; + case 4217: + return 'Bern 1898'; + case 4218: + return 'Bogota'; + case 4219: + return 'Bukit Rimpah'; + case 4220: + return 'Camacupa'; + case 4221: + return 'Campo Inchauspe'; + case 4222: + return 'Cape'; + case 4223: + return 'Carthage'; + case 4224: + return 'Chua'; + case 4225: + return 'Corrego Alegre'; + case 4226: + return 'Cote d Ivoire'; + case 4227: + return 'Deir ez Zor'; + case 4228: + return 'Douala'; + case 4229: + return 'Egypt 1907'; + case 4230: + return 'ED50'; + case 4231: + return 'ED87'; + case 4232: + return 'Fahud'; + case 4233: + return 'Gandajika 1970'; + case 4234: + return 'Garoua'; + case 4235: + return 'Guyane Francaise'; + case 4236: + return 'Hu Tzu Shan'; + case 4237: + return 'HD72'; + case 4238: + return 'ID74'; + case 4239: + return 'Indian 1954'; + case 4240: + return 'Indian 1975'; + case 4241: + return 'Jamaica 1875'; + case 4242: + return 'JAD69'; + case 4243: + return 'Kalianpur'; + case 4244: + return 'Kandawala'; + case 4245: + return 'Kertau'; + case 4246: + return 'KOC'; + case 4247: + return 'La Canoa'; + case 4248: + return 'PSAD56'; + case 4249: + return 'Lake'; + case 4250: + return 'Leigon'; + case 4251: + return 'Liberia 1964'; + case 4252: + return 'Lome'; + case 4253: + return 'Luzon 1911'; + case 4254: + return 'Hito XVIII 1963'; + case 4255: + return 'Herat North'; + case 4256: + return 'Mahe 1971'; + case 4257: + return 'Makassar'; + case 4258: + return 'EUREF89'; + case 4259: + return 'Malongo 1987'; + case 4260: + return 'Manoca'; + case 4261: + return 'Merchich'; + case 4262: + return 'Massawa'; + case 4263: + return 'Minna'; + case 4264: + return 'Mhast'; + case 4265: + return 'Monte Mario'; + case 4266: + return 'M poraloko'; + case 4267: + return 'NAD27'; + case 4268: + return 'NAD Michigan'; + case 4269: + return 'NAD83'; + case 4270: + return 'Nahrwan 1967'; + case 4271: + return 'Naparima 1972'; + case 4272: + return 'GD49'; + case 4273: + return 'NGO 1948'; + case 4274: + return '73'; + case 4275: + return 'NTF'; + case 4276: + return 'NSWC 9Z 2'; + case 4277: + return 'OSGB 1936'; + case 4278: + return 'OSGB70'; + case 4279: + return 'OS SN80'; + case 4280: + return 'Padang'; + case 4281: + return 'Palestine 1923'; + case 4282: + return 'Pointe Noire'; + case 4283: + return 'GDA94'; + case 4284: + return 'Pulkovo 1942'; + case 4285: + return 'Qatar'; + case 4286: + return 'Qatar 1948'; + case 4287: + return 'Qornoq'; + case 4288: + return 'Loma Quintana'; + case 4289: + return 'Amersfoort'; + case 4290: + return 'RT38'; + case 4291: + return 'SAD69'; + case 4292: + return 'Sapper Hill 1943'; + case 4293: + return 'Schwarzeck'; + case 4294: + return 'Segora'; + case 4295: + return 'Serindung'; + case 4296: + return 'Sudan'; + case 4297: + return 'Tananarive'; + case 4298: + return 'Timbalai 1948'; + case 4299: + return 'TM65'; + case 4300: + return 'TM75'; + case 4301: + return 'Tokyo'; + case 4302: + return 'Trinidad 1903'; + case 4303: + return 'TC 1948'; + case 4304: + return 'Voirol 1875'; + case 4305: + return 'Voirol Unifie'; + case 4306: + return 'Bern 1938'; + case 4307: + return 'Nord Sahara 1959'; + case 4308: + return 'Stockholm 1938'; + case 4309: + return 'Yacare'; + case 4310: + return 'Yoff'; + case 4311: + return 'Zanderij'; + case 4312: + return 'MGI'; + case 4313: + return 'Belge 1972'; + case 4314: + return 'DHDN'; + case 4315: + return 'Conakry 1905'; + case 4317: + return 'Dealul Piscului 1970'; + case 4322: + return 'WGS 72'; + case 4324: + return 'WGS 72BE'; + case 4326: + return 'WGS 84'; + case 4801: + return 'Bern 1898 Bern'; + case 4802: + return 'Bogota Bogota'; + case 4803: + return 'Lisbon Lisbon'; + case 4804: + return 'Makassar Jakarta'; + case 4805: + return 'MGI Ferro'; + case 4806: + return 'Monte Mario Rome'; + case 4807: + return 'NTF Paris'; + case 4808: + return 'Padang Jakarta'; + case 4809: + return 'Belge 1950 Brussels'; + case 4810: + return 'Tananarive Paris'; + case 4811: + return 'Voirol 1875 Paris'; + case 4812: + return 'Voirol Unifie Paris'; + case 4813: + return 'Batavia Jakarta'; + case 4815: + return 'Greek Athens'; + case 4901: + return 'ATF Paris'; + case 4902: + return 'NDG Paris'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } + + static String getProjCSTypeDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 2100: + return 'GGRS87 Greek Grid'; + case 2176: + return 'ETRS89 Poland CS2000 zone 5'; + case 2177: + return 'ETRS89 Poland CS2000 zone 7'; + case 2178: + return 'ETRS89 Poland CS2000 zone 8'; + case 2180: + return 'ETRS89 Poland CS92'; + case 2204: + return 'NAD27 Tennessee'; + case 2205: + return 'NAD83 Kentucky North'; + case 2391: + return 'KKJ Finland zone 1'; + case 2392: + return 'KKJ Finland zone 2'; + case 2393: + return 'KKJ Finland zone 3'; + case 2394: + return 'KKJ Finland zone 4'; + case 2400: + return 'RT90 2 5 gon W'; + case 2600: + return 'Lietuvos Koordinoei Sistema 1994'; + case 3053: + return 'Hjorsey 1955 Lambert'; + case 3057: + return 'ISN93 Lambert 1993'; + case 3300: + return 'Estonian Coordinate System of 1992'; + case 3786: + return 'Popular Visualisation CRS / Mercator'; + case 3857: + return 'WGS 84 / Pseudo-Mercator'; + case 20137: + return 'Adindan UTM zone 37N'; + case 20138: + return 'Adindan UTM zone 38N'; + case 20248: + return 'AGD66 AMG zone 48'; + case 20249: + return 'AGD66 AMG zone 49'; + case 20250: + return 'AGD66 AMG zone 50'; + case 20251: + return 'AGD66 AMG zone 51'; + case 20252: + return 'AGD66 AMG zone 52'; + case 20253: + return 'AGD66 AMG zone 53'; + case 20254: + return 'AGD66 AMG zone 54'; + case 20255: + return 'AGD66 AMG zone 55'; + case 20256: + return 'AGD66 AMG zone 56'; + case 20257: + return 'AGD66 AMG zone 57'; + case 20258: + return 'AGD66 AMG zone 58'; + case 20348: + return 'AGD84 AMG zone 48'; + case 20349: + return 'AGD84 AMG zone 49'; + case 20350: + return 'AGD84 AMG zone 50'; + case 20351: + return 'AGD84 AMG zone 51'; + case 20352: + return 'AGD84 AMG zone 52'; + case 20353: + return 'AGD84 AMG zone 53'; + case 20354: + return 'AGD84 AMG zone 54'; + case 20355: + return 'AGD84 AMG zone 55'; + case 20356: + return 'AGD84 AMG zone 56'; + case 20357: + return 'AGD84 AMG zone 57'; + case 20358: + return 'AGD84 AMG zone 58'; + case 20437: + return 'Ain el Abd UTM zone 37N'; + case 20438: + return 'Ain el Abd UTM zone 38N'; + case 20439: + return 'Ain el Abd UTM zone 39N'; + case 20499: + return 'Ain el Abd Bahrain Grid'; + case 20538: + return 'Afgooye UTM zone 38N'; + case 20539: + return 'Afgooye UTM zone 39N'; + case 20700: + return 'Lisbon Portuguese Grid'; + case 20822: + return 'Aratu UTM zone 22S'; + case 20823: + return 'Aratu UTM zone 23S'; + case 20824: + return 'Aratu UTM zone 24S'; + case 20973: + return 'Arc 1950 Lo13'; + case 20975: + return 'Arc 1950 Lo15'; + case 20977: + return 'Arc 1950 Lo17'; + case 20979: + return 'Arc 1950 Lo19'; + case 20981: + return 'Arc 1950 Lo21'; + case 20983: + return 'Arc 1950 Lo23'; + case 20985: + return 'Arc 1950 Lo25'; + case 20987: + return 'Arc 1950 Lo27'; + case 20989: + return 'Arc 1950 Lo29'; + case 20991: + return 'Arc 1950 Lo31'; + case 20993: + return 'Arc 1950 Lo33'; + case 20995: + return 'Arc 1950 Lo35'; + case 21100: + return 'Batavia NEIEZ'; + case 21148: + return 'Batavia UTM zone 48S'; + case 21149: + return 'Batavia UTM zone 49S'; + case 21150: + return 'Batavia UTM zone 50S'; + case 21413: + return 'Beijing Gauss zone 13'; + case 21414: + return 'Beijing Gauss zone 14'; + case 21415: + return 'Beijing Gauss zone 15'; + case 21416: + return 'Beijing Gauss zone 16'; + case 21417: + return 'Beijing Gauss zone 17'; + case 21418: + return 'Beijing Gauss zone 18'; + case 21419: + return 'Beijing Gauss zone 19'; + case 21420: + return 'Beijing Gauss zone 20'; + case 21421: + return 'Beijing Gauss zone 21'; + case 21422: + return 'Beijing Gauss zone 22'; + case 21423: + return 'Beijing Gauss zone 23'; + case 21473: + return 'Beijing Gauss 13N'; + case 21474: + return 'Beijing Gauss 14N'; + case 21475: + return 'Beijing Gauss 15N'; + case 21476: + return 'Beijing Gauss 16N'; + case 21477: + return 'Beijing Gauss 17N'; + case 21478: + return 'Beijing Gauss 18N'; + case 21479: + return 'Beijing Gauss 19N'; + case 21480: + return 'Beijing Gauss 20N'; + case 21481: + return 'Beijing Gauss 21N'; + case 21482: + return 'Beijing Gauss 22N'; + case 21483: + return 'Beijing Gauss 23N'; + case 21500: + return 'Belge Lambert 50'; + case 21790: + return 'Bern 1898 Swiss Old'; + case 21817: + return 'Bogota UTM zone 17N'; + case 21818: + return 'Bogota UTM zone 18N'; + case 21891: + return 'Bogota Colombia 3W'; + case 21892: + return 'Bogota Colombia Bogota'; + case 21893: + return 'Bogota Colombia 3E'; + case 21894: + return 'Bogota Colombia 6E'; + case 22032: + return 'Camacupa UTM 32S'; + case 22033: + return 'Camacupa UTM 33S'; + case 22191: + return 'C Inchauspe Argentina 1'; + case 22192: + return 'C Inchauspe Argentina 2'; + case 22193: + return 'C Inchauspe Argentina 3'; + case 22194: + return 'C Inchauspe Argentina 4'; + case 22195: + return 'C Inchauspe Argentina 5'; + case 22196: + return 'C Inchauspe Argentina 6'; + case 22197: + return 'C Inchauspe Argentina 7'; + case 22332: + return 'Carthage UTM zone 32N'; + case 22391: + return 'Carthage Nord Tunisie'; + case 22392: + return 'Carthage Sud Tunisie'; + case 22523: + return 'Corrego Alegre UTM 23S'; + case 22524: + return 'Corrego Alegre UTM 24S'; + case 22832: + return 'Douala UTM zone 32N'; + case 22992: + return 'Egypt 1907 Red Belt'; + case 22993: + return 'Egypt 1907 Purple Belt'; + case 22994: + return 'Egypt 1907 Ext Purple'; + case 23028: + return 'ED50 UTM zone 28N'; + case 23029: + return 'ED50 UTM zone 29N'; + case 23030: + return 'ED50 UTM zone 30N'; + case 23031: + return 'ED50 UTM zone 31N'; + case 23032: + return 'ED50 UTM zone 32N'; + case 23033: + return 'ED50 UTM zone 33N'; + case 23034: + return 'ED50 UTM zone 34N'; + case 23035: + return 'ED50 UTM zone 35N'; + case 23036: + return 'ED50 UTM zone 36N'; + case 23037: + return 'ED50 UTM zone 37N'; + case 23038: + return 'ED50 UTM zone 38N'; + case 23239: + return 'Fahud UTM zone 39N'; + case 23240: + return 'Fahud UTM zone 40N'; + case 23433: + return 'Garoua UTM zone 33N'; + case 23700: + return 'HD72 EOV'; + case 23846: + return 'ID74 UTM zone 46N'; + case 23847: + return 'ID74 UTM zone 47N'; + case 23848: + return 'ID74 UTM zone 48N'; + case 23849: + return 'ID74 UTM zone 49N'; + case 23850: + return 'ID74 UTM zone 50N'; + case 23851: + return 'ID74 UTM zone 51N'; + case 23852: + return 'ID74 UTM zone 52N'; + case 23853: + return 'ID74 UTM zone 53N'; + case 23886: + return 'ID74 UTM zone 46S'; + case 23887: + return 'ID74 UTM zone 47S'; + case 23888: + return 'ID74 UTM zone 48S'; + case 23889: + return 'ID74 UTM zone 49S'; + case 23890: + return 'ID74 UTM zone 50S'; + case 23891: + return 'ID74 UTM zone 51S'; + case 23892: + return 'ID74 UTM zone 52S'; + case 23893: + return 'ID74 UTM zone 53S'; + case 23894: + return 'ID74 UTM zone 54S'; + case 23947: + return 'Indian 1954 UTM 47N'; + case 23948: + return 'Indian 1954 UTM 48N'; + case 24047: + return 'Indian 1975 UTM 47N'; + case 24048: + return 'Indian 1975 UTM 48N'; + case 24100: + return 'Jamaica 1875 Old Grid'; + case 24200: + return 'JAD69 Jamaica Grid'; + case 24370: + return 'Kalianpur India 0'; + case 24371: + return 'Kalianpur India I'; + case 24372: + return 'Kalianpur India IIa'; + case 24373: + return 'Kalianpur India IIIa'; + case 24374: + return 'Kalianpur India IVa'; + case 24382: + return 'Kalianpur India IIb'; + case 24383: + return 'Kalianpur India IIIb'; + case 24384: + return 'Kalianpur India IVb'; + case 24500: + return 'Kertau Singapore Grid'; + case 24547: + return 'Kertau UTM zone 47N'; + case 24548: + return 'Kertau UTM zone 48N'; + case 24720: + return 'La Canoa UTM zone 20N'; + case 24721: + return 'La Canoa UTM zone 21N'; + case 24818: + return 'PSAD56 UTM zone 18N'; + case 24819: + return 'PSAD56 UTM zone 19N'; + case 24820: + return 'PSAD56 UTM zone 20N'; + case 24821: + return 'PSAD56 UTM zone 21N'; + case 24877: + return 'PSAD56 UTM zone 17S'; + case 24878: + return 'PSAD56 UTM zone 18S'; + case 24879: + return 'PSAD56 UTM zone 19S'; + case 24880: + return 'PSAD56 UTM zone 20S'; + case 24891: + return 'PSAD56 Peru west zone'; + case 24892: + return 'PSAD56 Peru central'; + case 24893: + return 'PSAD56 Peru east zone'; + case 25000: + return 'Leigon Ghana Grid'; + case 25231: + return 'Lome UTM zone 31N'; + case 25391: + return 'Luzon Philippines I'; + case 25392: + return 'Luzon Philippines II'; + case 25393: + return 'Luzon Philippines III'; + case 25394: + return 'Luzon Philippines IV'; + case 25395: + return 'Luzon Philippines V'; + case 25700: + return 'Makassar NEIEZ'; + case 25932: + return 'Malongo 1987 UTM 32S'; + case 26191: + return 'Merchich Nord Maroc'; + case 26192: + return 'Merchich Sud Maroc'; + case 26193: + return 'Merchich Sahara'; + case 26237: + return 'Massawa UTM zone 37N'; + case 26331: + return 'Minna UTM zone 31N'; + case 26332: + return 'Minna UTM zone 32N'; + case 26391: + return 'Minna Nigeria West'; + case 26392: + return 'Minna Nigeria Mid Belt'; + case 26393: + return 'Minna Nigeria East'; + case 26432: + return 'Mhast UTM zone 32S'; + case 26591: + return 'Monte Mario Italy 1'; + case 26592: + return 'Monte Mario Italy 2'; + case 26632: + return 'M poraloko UTM 32N'; + case 26692: + return 'M poraloko UTM 32S'; + case 26703: + return 'NAD27 UTM zone 3N'; + case 26704: + return 'NAD27 UTM zone 4N'; + case 26705: + return 'NAD27 UTM zone 5N'; + case 26706: + return 'NAD27 UTM zone 6N'; + case 26707: + return 'NAD27 UTM zone 7N'; + case 26708: + return 'NAD27 UTM zone 8N'; + case 26709: + return 'NAD27 UTM zone 9N'; + case 26710: + return 'NAD27 UTM zone 10N'; + case 26711: + return 'NAD27 UTM zone 11N'; + case 26712: + return 'NAD27 UTM zone 12N'; + case 26713: + return 'NAD27 UTM zone 13N'; + case 26714: + return 'NAD27 UTM zone 14N'; + case 26715: + return 'NAD27 UTM zone 15N'; + case 26716: + return 'NAD27 UTM zone 16N'; + case 26717: + return 'NAD27 UTM zone 17N'; + case 26718: + return 'NAD27 UTM zone 18N'; + case 26719: + return 'NAD27 UTM zone 19N'; + case 26720: + return 'NAD27 UTM zone 20N'; + case 26721: + return 'NAD27 UTM zone 21N'; + case 26722: + return 'NAD27 UTM zone 22N'; + case 26729: + return 'NAD27 Alabama East'; + case 26730: + return 'NAD27 Alabama West'; + case 26731: + return 'NAD27 Alaska zone 1'; + case 26732: + return 'NAD27 Alaska zone 2'; + case 26733: + return 'NAD27 Alaska zone 3'; + case 26734: + return 'NAD27 Alaska zone 4'; + case 26735: + return 'NAD27 Alaska zone 5'; + case 26736: + return 'NAD27 Alaska zone 6'; + case 26737: + return 'NAD27 Alaska zone 7'; + case 26738: + return 'NAD27 Alaska zone 8'; + case 26739: + return 'NAD27 Alaska zone 9'; + case 26740: + return 'NAD27 Alaska zone 10'; + case 26741: + return 'NAD27 California I'; + case 26742: + return 'NAD27 California II'; + case 26743: + return 'NAD27 California III'; + case 26744: + return 'NAD27 California IV'; + case 26745: + return 'NAD27 California V'; + case 26746: + return 'NAD27 California VI'; + case 26747: + return 'NAD27 California VII'; + case 26748: + return 'NAD27 Arizona East'; + case 26749: + return 'NAD27 Arizona Central'; + case 26750: + return 'NAD27 Arizona West'; + case 26751: + return 'NAD27 Arkansas North'; + case 26752: + return 'NAD27 Arkansas South'; + case 26753: + return 'NAD27 Colorado North'; + case 26754: + return 'NAD27 Colorado Central'; + case 26755: + return 'NAD27 Colorado South'; + case 26756: + return 'NAD27 Connecticut'; + case 26757: + return 'NAD27 Delaware'; + case 26758: + return 'NAD27 Florida East'; + case 26759: + return 'NAD27 Florida West'; + case 26760: + return 'NAD27 Florida North'; + case 26761: + return 'NAD27 Hawaii zone 1'; + case 26762: + return 'NAD27 Hawaii zone 2'; + case 26763: + return 'NAD27 Hawaii zone 3'; + case 26764: + return 'NAD27 Hawaii zone 4'; + case 26765: + return 'NAD27 Hawaii zone 5'; + case 26766: + return 'NAD27 Georgia East'; + case 26767: + return 'NAD27 Georgia West'; + case 26768: + return 'NAD27 Idaho East'; + case 26769: + return 'NAD27 Idaho Central'; + case 26770: + return 'NAD27 Idaho West'; + case 26771: + return 'NAD27 Illinois East'; + case 26772: + return 'NAD27 Illinois West'; + case 26773: + return 'NAD27 Indiana East'; + case 26774: + return 'NAD27 Indiana West'; + case 26775: + return 'NAD27 Iowa North'; + case 26776: + return 'NAD27 Iowa South'; + case 26777: + return 'NAD27 Kansas North'; + case 26778: + return 'NAD27 Kansas South'; + case 26779: + return 'NAD27 Kentucky North'; + case 26780: + return 'NAD27 Kentucky South'; + case 26781: + return 'NAD27 Louisiana North'; + case 26782: + return 'NAD27 Louisiana South'; + case 26783: + return 'NAD27 Maine East'; + case 26784: + return 'NAD27 Maine West'; + case 26785: + return 'NAD27 Maryland'; + case 26786: + return 'NAD27 Massachusetts'; + case 26787: + return 'NAD27 Massachusetts Is'; + case 26788: + return 'NAD27 Michigan North'; + case 26789: + return 'NAD27 Michigan Central'; + case 26790: + return 'NAD27 Michigan South'; + case 26791: + return 'NAD27 Minnesota North'; + case 26792: + return 'NAD27 Minnesota Cent'; + case 26793: + return 'NAD27 Minnesota South'; + case 26794: + return 'NAD27 Mississippi East'; + case 26795: + return 'NAD27 Mississippi West'; + case 26796: + return 'NAD27 Missouri East'; + case 26797: + return 'NAD27 Missouri Central'; + case 26798: + return 'NAD27 Missouri West'; + case 26801: + return 'NAD Michigan Michigan East'; + case 26802: + return 'NAD Michigan Michigan Old Central'; + case 26803: + return 'NAD Michigan Michigan West'; + case 26903: + return 'NAD83 UTM zone 3N'; + case 26904: + return 'NAD83 UTM zone 4N'; + case 26905: + return 'NAD83 UTM zone 5N'; + case 26906: + return 'NAD83 UTM zone 6N'; + case 26907: + return 'NAD83 UTM zone 7N'; + case 26908: + return 'NAD83 UTM zone 8N'; + case 26909: + return 'NAD83 UTM zone 9N'; + case 26910: + return 'NAD83 UTM zone 10N'; + case 26911: + return 'NAD83 UTM zone 11N'; + case 26912: + return 'NAD83 UTM zone 12N'; + case 26913: + return 'NAD83 UTM zone 13N'; + case 26914: + return 'NAD83 UTM zone 14N'; + case 26915: + return 'NAD83 UTM zone 15N'; + case 26916: + return 'NAD83 UTM zone 16N'; + case 26917: + return 'NAD83 UTM zone 17N'; + case 26918: + return 'NAD83 UTM zone 18N'; + case 26919: + return 'NAD83 UTM zone 19N'; + case 26920: + return 'NAD83 UTM zone 20N'; + case 26921: + return 'NAD83 UTM zone 21N'; + case 26922: + return 'NAD83 UTM zone 22N'; + case 26923: + return 'NAD83 UTM zone 23N'; + case 26929: + return 'NAD83 Alabama East'; + case 26930: + return 'NAD83 Alabama West'; + case 26931: + return 'NAD83 Alaska zone 1'; + case 26932: + return 'NAD83 Alaska zone 2'; + case 26933: + return 'NAD83 Alaska zone 3'; + case 26934: + return 'NAD83 Alaska zone 4'; + case 26935: + return 'NAD83 Alaska zone 5'; + case 26936: + return 'NAD83 Alaska zone 6'; + case 26937: + return 'NAD83 Alaska zone 7'; + case 26938: + return 'NAD83 Alaska zone 8'; + case 26939: + return 'NAD83 Alaska zone 9'; + case 26940: + return 'NAD83 Alaska zone 10'; + case 26941: + return 'NAD83 California 1'; + case 26942: + return 'NAD83 California 2'; + case 26943: + return 'NAD83 California 3'; + case 26944: + return 'NAD83 California 4'; + case 26945: + return 'NAD83 California 5'; + case 26946: + return 'NAD83 California 6'; + case 26948: + return 'NAD83 Arizona East'; + case 26949: + return 'NAD83 Arizona Central'; + case 26950: + return 'NAD83 Arizona West'; + case 26951: + return 'NAD83 Arkansas North'; + case 26952: + return 'NAD83 Arkansas South'; + case 26953: + return 'NAD83 Colorado North'; + case 26954: + return 'NAD83 Colorado Central'; + case 26955: + return 'NAD83 Colorado South'; + case 26956: + return 'NAD83 Connecticut'; + case 26957: + return 'NAD83 Delaware'; + case 26958: + return 'NAD83 Florida East'; + case 26959: + return 'NAD83 Florida West'; + case 26960: + return 'NAD83 Florida North'; + case 26961: + return 'NAD83 Hawaii zone 1'; + case 26962: + return 'NAD83 Hawaii zone 2'; + case 26963: + return 'NAD83 Hawaii zone 3'; + case 26964: + return 'NAD83 Hawaii zone 4'; + case 26965: + return 'NAD83 Hawaii zone 5'; + case 26966: + return 'NAD83 Georgia East'; + case 26967: + return 'NAD83 Georgia West'; + case 26968: + return 'NAD83 Idaho East'; + case 26969: + return 'NAD83 Idaho Central'; + case 26970: + return 'NAD83 Idaho West'; + case 26971: + return 'NAD83 Illinois East'; + case 26972: + return 'NAD83 Illinois West'; + case 26973: + return 'NAD83 Indiana East'; + case 26974: + return 'NAD83 Indiana West'; + case 26975: + return 'NAD83 Iowa North'; + case 26976: + return 'NAD83 Iowa South'; + case 26977: + return 'NAD83 Kansas North'; + case 26978: + return 'NAD83 Kansas South'; + case 26979: + return 'NAD83 Kentucky North'; + case 26980: + return 'NAD83 Kentucky South'; + case 26981: + return 'NAD83 Louisiana North'; + case 26982: + return 'NAD83 Louisiana South'; + case 26983: + return 'NAD83 Maine East'; + case 26984: + return 'NAD83 Maine West'; + case 26985: + return 'NAD83 Maryland'; + case 26986: + return 'NAD83 Massachusetts'; + case 26987: + return 'NAD83 Massachusetts Is'; + case 26988: + return 'NAD83 Michigan North'; + case 26989: + return 'NAD83 Michigan Central'; + case 26990: + return 'NAD83 Michigan South'; + case 26991: + return 'NAD83 Minnesota North'; + case 26992: + return 'NAD83 Minnesota Cent'; + case 26993: + return 'NAD83 Minnesota South'; + case 26994: + return 'NAD83 Mississippi East'; + case 26995: + return 'NAD83 Mississippi West'; + case 26996: + return 'NAD83 Missouri East'; + case 26997: + return 'NAD83 Missouri Central'; + case 26998: + return 'NAD83 Missouri West'; + case 27038: + return 'Nahrwan 1967 UTM 38N'; + case 27039: + return 'Nahrwan 1967 UTM 39N'; + case 27040: + return 'Nahrwan 1967 UTM 40N'; + case 27120: + return 'Naparima UTM 20N'; + case 27200: + return 'GD49 NZ Map Grid'; + case 27291: + return 'GD49 North Island Grid'; + case 27292: + return 'GD49 South Island Grid'; + case 27429: + return 'Datum 73 UTM zone 29N'; + case 27500: + return 'ATF Nord de Guerre'; + case 27581: + return 'NTF France I'; + case 27582: + return 'NTF France II'; + case 27583: + return 'NTF France III'; + case 27591: + return 'NTF Nord France'; + case 27592: + return 'NTF Centre France'; + case 27593: + return 'NTF Sud France'; + case 27700: + return 'British National Grid'; + case 28232: + return 'Point Noire UTM 32S'; + case 28348: + return 'GDA94 MGA zone 48'; + case 28349: + return 'GDA94 MGA zone 49'; + case 28350: + return 'GDA94 MGA zone 50'; + case 28351: + return 'GDA94 MGA zone 51'; + case 28352: + return 'GDA94 MGA zone 52'; + case 28353: + return 'GDA94 MGA zone 53'; + case 28354: + return 'GDA94 MGA zone 54'; + case 28355: + return 'GDA94 MGA zone 55'; + case 28356: + return 'GDA94 MGA zone 56'; + case 28357: + return 'GDA94 MGA zone 57'; + case 28358: + return 'GDA94 MGA zone 58'; + case 28404: + return 'Pulkovo Gauss zone 4'; + case 28405: + return 'Pulkovo Gauss zone 5'; + case 28406: + return 'Pulkovo Gauss zone 6'; + case 28407: + return 'Pulkovo Gauss zone 7'; + case 28408: + return 'Pulkovo Gauss zone 8'; + case 28409: + return 'Pulkovo Gauss zone 9'; + case 28410: + return 'Pulkovo Gauss zone 10'; + case 28411: + return 'Pulkovo Gauss zone 11'; + case 28412: + return 'Pulkovo Gauss zone 12'; + case 28413: + return 'Pulkovo Gauss zone 13'; + case 28414: + return 'Pulkovo Gauss zone 14'; + case 28415: + return 'Pulkovo Gauss zone 15'; + case 28416: + return 'Pulkovo Gauss zone 16'; + case 28417: + return 'Pulkovo Gauss zone 17'; + case 28418: + return 'Pulkovo Gauss zone 18'; + case 28419: + return 'Pulkovo Gauss zone 19'; + case 28420: + return 'Pulkovo Gauss zone 20'; + case 28421: + return 'Pulkovo Gauss zone 21'; + case 28422: + return 'Pulkovo Gauss zone 22'; + case 28423: + return 'Pulkovo Gauss zone 23'; + case 28424: + return 'Pulkovo Gauss zone 24'; + case 28425: + return 'Pulkovo Gauss zone 25'; + case 28426: + return 'Pulkovo Gauss zone 26'; + case 28427: + return 'Pulkovo Gauss zone 27'; + case 28428: + return 'Pulkovo Gauss zone 28'; + case 28429: + return 'Pulkovo Gauss zone 29'; + case 28430: + return 'Pulkovo Gauss zone 30'; + case 28431: + return 'Pulkovo Gauss zone 31'; + case 28432: + return 'Pulkovo Gauss zone 32'; + case 28464: + return 'Pulkovo Gauss 4N'; + case 28465: + return 'Pulkovo Gauss 5N'; + case 28466: + return 'Pulkovo Gauss 6N'; + case 28467: + return 'Pulkovo Gauss 7N'; + case 28468: + return 'Pulkovo Gauss 8N'; + case 28469: + return 'Pulkovo Gauss 9N'; + case 28470: + return 'Pulkovo Gauss 10N'; + case 28471: + return 'Pulkovo Gauss 11N'; + case 28472: + return 'Pulkovo Gauss 12N'; + case 28473: + return 'Pulkovo Gauss 13N'; + case 28474: + return 'Pulkovo Gauss 14N'; + case 28475: + return 'Pulkovo Gauss 15N'; + case 28476: + return 'Pulkovo Gauss 16N'; + case 28477: + return 'Pulkovo Gauss 17N'; + case 28478: + return 'Pulkovo Gauss 18N'; + case 28479: + return 'Pulkovo Gauss 19N'; + case 28480: + return 'Pulkovo Gauss 20N'; + case 28481: + return 'Pulkovo Gauss 21N'; + case 28482: + return 'Pulkovo Gauss 22N'; + case 28483: + return 'Pulkovo Gauss 23N'; + case 28484: + return 'Pulkovo Gauss 24N'; + case 28485: + return 'Pulkovo Gauss 25N'; + case 28486: + return 'Pulkovo Gauss 26N'; + case 28487: + return 'Pulkovo Gauss 27N'; + case 28488: + return 'Pulkovo Gauss 28N'; + case 28489: + return 'Pulkovo Gauss 29N'; + case 28490: + return 'Pulkovo Gauss 30N'; + case 28491: + return 'Pulkovo Gauss 31N'; + case 28492: + return 'Pulkovo Gauss 32N'; + case 28600: + return 'Qatar National Grid'; + case 28991: + return 'RD Netherlands Old'; + case 28992: + return 'RD Netherlands New'; + case 29118: + return 'SAD69 UTM zone 18N'; + case 29119: + return 'SAD69 UTM zone 19N'; + case 29120: + return 'SAD69 UTM zone 20N'; + case 29121: + return 'SAD69 UTM zone 21N'; + case 29122: + return 'SAD69 UTM zone 22N'; + case 29177: + return 'SAD69 UTM zone 17S'; + case 29178: + return 'SAD69 UTM zone 18S'; + case 29179: + return 'SAD69 UTM zone 19S'; + case 29180: + return 'SAD69 UTM zone 20S'; + case 29181: + return 'SAD69 UTM zone 21S'; + case 29182: + return 'SAD69 UTM zone 22S'; + case 29183: + return 'SAD69 UTM zone 23S'; + case 29184: + return 'SAD69 UTM zone 24S'; + case 29185: + return 'SAD69 UTM zone 25S'; + case 29220: + return 'Sapper Hill UTM 20S'; + case 29221: + return 'Sapper Hill UTM 21S'; + case 29333: + return 'Schwarzeck UTM 33S'; + case 29635: + return 'Sudan UTM zone 35N'; + case 29636: + return 'Sudan UTM zone 36N'; + case 29700: + return 'Tananarive Laborde'; + case 29738: + return 'Tananarive UTM 38S'; + case 29739: + return 'Tananarive UTM 39S'; + case 29800: + return 'Timbalai 1948 Borneo'; + case 29849: + return 'Timbalai 1948 UTM 49N'; + case 29850: + return 'Timbalai 1948 UTM 50N'; + case 29900: + return 'TM65 Irish Nat Grid'; + case 30200: + return 'Trinidad 1903 Trinidad'; + case 30339: + return 'TC 1948 UTM zone 39N'; + case 30340: + return 'TC 1948 UTM zone 40N'; + case 30491: + return 'Voirol N Algerie ancien'; + case 30492: + return 'Voirol S Algerie ancien'; + case 30591: + return 'Voirol Unifie N Algerie'; + case 30592: + return 'Voirol Unifie S Algerie'; + case 30600: + return 'Bern 1938 Swiss New'; + case 30729: + return 'Nord Sahara UTM 29N'; + case 30730: + return 'Nord Sahara UTM 30N'; + case 30731: + return 'Nord Sahara UTM 31N'; + case 30732: + return 'Nord Sahara UTM 32N'; + case 31028: + return 'Yoff UTM zone 28N'; + case 31121: + return 'Zanderij UTM zone 21N'; + case 31291: + return 'MGI Austria West'; + case 31292: + return 'MGI Austria Central'; + case 31293: + return 'MGI Austria East'; + case 31300: + return 'Belge Lambert 72'; + case 31491: + return 'DHDN Germany zone 1'; + case 31492: + return 'DHDN Germany zone 2'; + case 31493: + return 'DHDN Germany zone 3'; + case 31494: + return 'DHDN Germany zone 4'; + case 31495: + return 'DHDN Germany zone 5'; + case 31700: + return 'Dealul Piscului 1970 Stereo 70'; + case 32001: + return 'NAD27 Montana North'; + case 32002: + return 'NAD27 Montana Central'; + case 32003: + return 'NAD27 Montana South'; + case 32005: + return 'NAD27 Nebraska North'; + case 32006: + return 'NAD27 Nebraska South'; + case 32007: + return 'NAD27 Nevada East'; + case 32008: + return 'NAD27 Nevada Central'; + case 32009: + return 'NAD27 Nevada West'; + case 32010: + return 'NAD27 New Hampshire'; + case 32011: + return 'NAD27 New Jersey'; + case 32012: + return 'NAD27 New Mexico East'; + case 32013: + return 'NAD27 New Mexico Cent'; + case 32014: + return 'NAD27 New Mexico West'; + case 32015: + return 'NAD27 New York East'; + case 32016: + return 'NAD27 New York Central'; + case 32017: + return 'NAD27 New York West'; + case 32018: + return 'NAD27 New York Long Is'; + case 32019: + return 'NAD27 North Carolina'; + case 32020: + return 'NAD27 North Dakota N'; + case 32021: + return 'NAD27 North Dakota S'; + case 32022: + return 'NAD27 Ohio North'; + case 32023: + return 'NAD27 Ohio South'; + case 32024: + return 'NAD27 Oklahoma North'; + case 32025: + return 'NAD27 Oklahoma South'; + case 32026: + return 'NAD27 Oregon North'; + case 32027: + return 'NAD27 Oregon South'; + case 32028: + return 'NAD27 Pennsylvania N'; + case 32029: + return 'NAD27 Pennsylvania S'; + case 32030: + return 'NAD27 Rhode Island'; + case 32031: + return 'NAD27 South Carolina N'; + case 32033: + return 'NAD27 South Carolina S'; + case 32034: + return 'NAD27 South Dakota N'; + case 32035: + return 'NAD27 South Dakota S'; + case 32036: + return 'NAD27 Tennessee'; + case 32037: + return 'NAD27 Texas North'; + case 32038: + return 'NAD27 Texas North Cen'; + case 32039: + return 'NAD27 Texas Central'; + case 32040: + return 'NAD27 Texas South Cen'; + case 32041: + return 'NAD27 Texas South'; + case 32042: + return 'NAD27 Utah North'; + case 32043: + return 'NAD27 Utah Central'; + case 32044: + return 'NAD27 Utah South'; + case 32045: + return 'NAD27 Vermont'; + case 32046: + return 'NAD27 Virginia North'; + case 32047: + return 'NAD27 Virginia South'; + case 32048: + return 'NAD27 Washington North'; + case 32049: + return 'NAD27 Washington South'; + case 32050: + return 'NAD27 West Virginia N'; + case 32051: + return 'NAD27 West Virginia S'; + case 32052: + return 'NAD27 Wisconsin North'; + case 32053: + return 'NAD27 Wisconsin Cen'; + case 32054: + return 'NAD27 Wisconsin South'; + case 32055: + return 'NAD27 Wyoming East'; + case 32056: + return 'NAD27 Wyoming E Cen'; + case 32057: + return 'NAD27 Wyoming W Cen'; + case 32058: + return 'NAD27 Wyoming West'; + case 32059: + return 'NAD27 Puerto Rico'; + case 32060: + return 'NAD27 St Croix'; + case 32100: + return 'NAD83 Montana'; + case 32104: + return 'NAD83 Nebraska'; + case 32107: + return 'NAD83 Nevada East'; + case 32108: + return 'NAD83 Nevada Central'; + case 32109: + return 'NAD83 Nevada West'; + case 32110: + return 'NAD83 New Hampshire'; + case 32111: + return 'NAD83 New Jersey'; + case 32112: + return 'NAD83 New Mexico East'; + case 32113: + return 'NAD83 New Mexico Cent'; + case 32114: + return 'NAD83 New Mexico West'; + case 32115: + return 'NAD83 New York East'; + case 32116: + return 'NAD83 New York Central'; + case 32117: + return 'NAD83 New York West'; + case 32118: + return 'NAD83 New York Long Is'; + case 32119: + return 'NAD83 North Carolina'; + case 32120: + return 'NAD83 North Dakota N'; + case 32121: + return 'NAD83 North Dakota S'; + case 32122: + return 'NAD83 Ohio North'; + case 32123: + return 'NAD83 Ohio South'; + case 32124: + return 'NAD83 Oklahoma North'; + case 32125: + return 'NAD83 Oklahoma South'; + case 32126: + return 'NAD83 Oregon North'; + case 32127: + return 'NAD83 Oregon South'; + case 32128: + return 'NAD83 Pennsylvania N'; + case 32129: + return 'NAD83 Pennsylvania S'; + case 32130: + return 'NAD83 Rhode Island'; + case 32133: + return 'NAD83 South Carolina'; + case 32134: + return 'NAD83 South Dakota N'; + case 32135: + return 'NAD83 South Dakota S'; + case 32136: + return 'NAD83 Tennessee'; + case 32137: + return 'NAD83 Texas North'; + case 32138: + return 'NAD83 Texas North Cen'; + case 32139: + return 'NAD83 Texas Central'; + case 32140: + return 'NAD83 Texas South Cen'; + case 32141: + return 'NAD83 Texas South'; + case 32142: + return 'NAD83 Utah North'; + case 32143: + return 'NAD83 Utah Central'; + case 32144: + return 'NAD83 Utah South'; + case 32145: + return 'NAD83 Vermont'; + case 32146: + return 'NAD83 Virginia North'; + case 32147: + return 'NAD83 Virginia South'; + case 32148: + return 'NAD83 Washington North'; + case 32149: + return 'NAD83 Washington South'; + case 32150: + return 'NAD83 West Virginia N'; + case 32151: + return 'NAD83 West Virginia S'; + case 32152: + return 'NAD83 Wisconsin North'; + case 32153: + return 'NAD83 Wisconsin Cen'; + case 32154: + return 'NAD83 Wisconsin South'; + case 32155: + return 'NAD83 Wyoming East'; + case 32156: + return 'NAD83 Wyoming E Cen'; + case 32157: + return 'NAD83 Wyoming W Cen'; + case 32158: + return 'NAD83 Wyoming West'; + case 32161: + return 'NAD83 Puerto Rico Virgin Is'; + case 32201: + return 'WGS72 UTM zone 1N'; + case 32202: + return 'WGS72 UTM zone 2N'; + case 32203: + return 'WGS72 UTM zone 3N'; + case 32204: + return 'WGS72 UTM zone 4N'; + case 32205: + return 'WGS72 UTM zone 5N'; + case 32206: + return 'WGS72 UTM zone 6N'; + case 32207: + return 'WGS72 UTM zone 7N'; + case 32208: + return 'WGS72 UTM zone 8N'; + case 32209: + return 'WGS72 UTM zone 9N'; + case 32210: + return 'WGS72 UTM zone 10N'; + case 32211: + return 'WGS72 UTM zone 11N'; + case 32212: + return 'WGS72 UTM zone 12N'; + case 32213: + return 'WGS72 UTM zone 13N'; + case 32214: + return 'WGS72 UTM zone 14N'; + case 32215: + return 'WGS72 UTM zone 15N'; + case 32216: + return 'WGS72 UTM zone 16N'; + case 32217: + return 'WGS72 UTM zone 17N'; + case 32218: + return 'WGS72 UTM zone 18N'; + case 32219: + return 'WGS72 UTM zone 19N'; + case 32220: + return 'WGS72 UTM zone 20N'; + case 32221: + return 'WGS72 UTM zone 21N'; + case 32222: + return 'WGS72 UTM zone 22N'; + case 32223: + return 'WGS72 UTM zone 23N'; + case 32224: + return 'WGS72 UTM zone 24N'; + case 32225: + return 'WGS72 UTM zone 25N'; + case 32226: + return 'WGS72 UTM zone 26N'; + case 32227: + return 'WGS72 UTM zone 27N'; + case 32228: + return 'WGS72 UTM zone 28N'; + case 32229: + return 'WGS72 UTM zone 29N'; + case 32230: + return 'WGS72 UTM zone 30N'; + case 32231: + return 'WGS72 UTM zone 31N'; + case 32232: + return 'WGS72 UTM zone 32N'; + case 32233: + return 'WGS72 UTM zone 33N'; + case 32234: + return 'WGS72 UTM zone 34N'; + case 32235: + return 'WGS72 UTM zone 35N'; + case 32236: + return 'WGS72 UTM zone 36N'; + case 32237: + return 'WGS72 UTM zone 37N'; + case 32238: + return 'WGS72 UTM zone 38N'; + case 32239: + return 'WGS72 UTM zone 39N'; + case 32240: + return 'WGS72 UTM zone 40N'; + case 32241: + return 'WGS72 UTM zone 41N'; + case 32242: + return 'WGS72 UTM zone 42N'; + case 32243: + return 'WGS72 UTM zone 43N'; + case 32244: + return 'WGS72 UTM zone 44N'; + case 32245: + return 'WGS72 UTM zone 45N'; + case 32246: + return 'WGS72 UTM zone 46N'; + case 32247: + return 'WGS72 UTM zone 47N'; + case 32248: + return 'WGS72 UTM zone 48N'; + case 32249: + return 'WGS72 UTM zone 49N'; + case 32250: + return 'WGS72 UTM zone 50N'; + case 32251: + return 'WGS72 UTM zone 51N'; + case 32252: + return 'WGS72 UTM zone 52N'; + case 32253: + return 'WGS72 UTM zone 53N'; + case 32254: + return 'WGS72 UTM zone 54N'; + case 32255: + return 'WGS72 UTM zone 55N'; + case 32256: + return 'WGS72 UTM zone 56N'; + case 32257: + return 'WGS72 UTM zone 57N'; + case 32258: + return 'WGS72 UTM zone 58N'; + case 32259: + return 'WGS72 UTM zone 59N'; + case 32260: + return 'WGS72 UTM zone 60N'; + case 32301: + return 'WGS72 UTM zone 1S'; + case 32302: + return 'WGS72 UTM zone 2S'; + case 32303: + return 'WGS72 UTM zone 3S'; + case 32304: + return 'WGS72 UTM zone 4S'; + case 32305: + return 'WGS72 UTM zone 5S'; + case 32306: + return 'WGS72 UTM zone 6S'; + case 32307: + return 'WGS72 UTM zone 7S'; + case 32308: + return 'WGS72 UTM zone 8S'; + case 32309: + return 'WGS72 UTM zone 9S'; + case 32310: + return 'WGS72 UTM zone 10S'; + case 32311: + return 'WGS72 UTM zone 11S'; + case 32312: + return 'WGS72 UTM zone 12S'; + case 32313: + return 'WGS72 UTM zone 13S'; + case 32314: + return 'WGS72 UTM zone 14S'; + case 32315: + return 'WGS72 UTM zone 15S'; + case 32316: + return 'WGS72 UTM zone 16S'; + case 32317: + return 'WGS72 UTM zone 17S'; + case 32318: + return 'WGS72 UTM zone 18S'; + case 32319: + return 'WGS72 UTM zone 19S'; + case 32320: + return 'WGS72 UTM zone 20S'; + case 32321: + return 'WGS72 UTM zone 21S'; + case 32322: + return 'WGS72 UTM zone 22S'; + case 32323: + return 'WGS72 UTM zone 23S'; + case 32324: + return 'WGS72 UTM zone 24S'; + case 32325: + return 'WGS72 UTM zone 25S'; + case 32326: + return 'WGS72 UTM zone 26S'; + case 32327: + return 'WGS72 UTM zone 27S'; + case 32328: + return 'WGS72 UTM zone 28S'; + case 32329: + return 'WGS72 UTM zone 29S'; + case 32330: + return 'WGS72 UTM zone 30S'; + case 32331: + return 'WGS72 UTM zone 31S'; + case 32332: + return 'WGS72 UTM zone 32S'; + case 32333: + return 'WGS72 UTM zone 33S'; + case 32334: + return 'WGS72 UTM zone 34S'; + case 32335: + return 'WGS72 UTM zone 35S'; + case 32336: + return 'WGS72 UTM zone 36S'; + case 32337: + return 'WGS72 UTM zone 37S'; + case 32338: + return 'WGS72 UTM zone 38S'; + case 32339: + return 'WGS72 UTM zone 39S'; + case 32340: + return 'WGS72 UTM zone 40S'; + case 32341: + return 'WGS72 UTM zone 41S'; + case 32342: + return 'WGS72 UTM zone 42S'; + case 32343: + return 'WGS72 UTM zone 43S'; + case 32344: + return 'WGS72 UTM zone 44S'; + case 32345: + return 'WGS72 UTM zone 45S'; + case 32346: + return 'WGS72 UTM zone 46S'; + case 32347: + return 'WGS72 UTM zone 47S'; + case 32348: + return 'WGS72 UTM zone 48S'; + case 32349: + return 'WGS72 UTM zone 49S'; + case 32350: + return 'WGS72 UTM zone 50S'; + case 32351: + return 'WGS72 UTM zone 51S'; + case 32352: + return 'WGS72 UTM zone 52S'; + case 32353: + return 'WGS72 UTM zone 53S'; + case 32354: + return 'WGS72 UTM zone 54S'; + case 32355: + return 'WGS72 UTM zone 55S'; + case 32356: + return 'WGS72 UTM zone 56S'; + case 32357: + return 'WGS72 UTM zone 57S'; + case 32358: + return 'WGS72 UTM zone 58S'; + case 32359: + return 'WGS72 UTM zone 59S'; + case 32360: + return 'WGS72 UTM zone 60S'; + case 32401: + return 'WGS72BE UTM zone 1N'; + case 32402: + return 'WGS72BE UTM zone 2N'; + case 32403: + return 'WGS72BE UTM zone 3N'; + case 32404: + return 'WGS72BE UTM zone 4N'; + case 32405: + return 'WGS72BE UTM zone 5N'; + case 32406: + return 'WGS72BE UTM zone 6N'; + case 32407: + return 'WGS72BE UTM zone 7N'; + case 32408: + return 'WGS72BE UTM zone 8N'; + case 32409: + return 'WGS72BE UTM zone 9N'; + case 32410: + return 'WGS72BE UTM zone 10N'; + case 32411: + return 'WGS72BE UTM zone 11N'; + case 32412: + return 'WGS72BE UTM zone 12N'; + case 32413: + return 'WGS72BE UTM zone 13N'; + case 32414: + return 'WGS72BE UTM zone 14N'; + case 32415: + return 'WGS72BE UTM zone 15N'; + case 32416: + return 'WGS72BE UTM zone 16N'; + case 32417: + return 'WGS72BE UTM zone 17N'; + case 32418: + return 'WGS72BE UTM zone 18N'; + case 32419: + return 'WGS72BE UTM zone 19N'; + case 32420: + return 'WGS72BE UTM zone 20N'; + case 32421: + return 'WGS72BE UTM zone 21N'; + case 32422: + return 'WGS72BE UTM zone 22N'; + case 32423: + return 'WGS72BE UTM zone 23N'; + case 32424: + return 'WGS72BE UTM zone 24N'; + case 32425: + return 'WGS72BE UTM zone 25N'; + case 32426: + return 'WGS72BE UTM zone 26N'; + case 32427: + return 'WGS72BE UTM zone 27N'; + case 32428: + return 'WGS72BE UTM zone 28N'; + case 32429: + return 'WGS72BE UTM zone 29N'; + case 32430: + return 'WGS72BE UTM zone 30N'; + case 32431: + return 'WGS72BE UTM zone 31N'; + case 32432: + return 'WGS72BE UTM zone 32N'; + case 32433: + return 'WGS72BE UTM zone 33N'; + case 32434: + return 'WGS72BE UTM zone 34N'; + case 32435: + return 'WGS72BE UTM zone 35N'; + case 32436: + return 'WGS72BE UTM zone 36N'; + case 32437: + return 'WGS72BE UTM zone 37N'; + case 32438: + return 'WGS72BE UTM zone 38N'; + case 32439: + return 'WGS72BE UTM zone 39N'; + case 32440: + return 'WGS72BE UTM zone 40N'; + case 32441: + return 'WGS72BE UTM zone 41N'; + case 32442: + return 'WGS72BE UTM zone 42N'; + case 32443: + return 'WGS72BE UTM zone 43N'; + case 32444: + return 'WGS72BE UTM zone 44N'; + case 32445: + return 'WGS72BE UTM zone 45N'; + case 32446: + return 'WGS72BE UTM zone 46N'; + case 32447: + return 'WGS72BE UTM zone 47N'; + case 32448: + return 'WGS72BE UTM zone 48N'; + case 32449: + return 'WGS72BE UTM zone 49N'; + case 32450: + return 'WGS72BE UTM zone 50N'; + case 32451: + return 'WGS72BE UTM zone 51N'; + case 32452: + return 'WGS72BE UTM zone 52N'; + case 32453: + return 'WGS72BE UTM zone 53N'; + case 32454: + return 'WGS72BE UTM zone 54N'; + case 32455: + return 'WGS72BE UTM zone 55N'; + case 32456: + return 'WGS72BE UTM zone 56N'; + case 32457: + return 'WGS72BE UTM zone 57N'; + case 32458: + return 'WGS72BE UTM zone 58N'; + case 32459: + return 'WGS72BE UTM zone 59N'; + case 32460: + return 'WGS72BE UTM zone 60N'; + case 32501: + return 'WGS72BE UTM zone 1S'; + case 32502: + return 'WGS72BE UTM zone 2S'; + case 32503: + return 'WGS72BE UTM zone 3S'; + case 32504: + return 'WGS72BE UTM zone 4S'; + case 32505: + return 'WGS72BE UTM zone 5S'; + case 32506: + return 'WGS72BE UTM zone 6S'; + case 32507: + return 'WGS72BE UTM zone 7S'; + case 32508: + return 'WGS72BE UTM zone 8S'; + case 32509: + return 'WGS72BE UTM zone 9S'; + case 32510: + return 'WGS72BE UTM zone 10S'; + case 32511: + return 'WGS72BE UTM zone 11S'; + case 32512: + return 'WGS72BE UTM zone 12S'; + case 32513: + return 'WGS72BE UTM zone 13S'; + case 32514: + return 'WGS72BE UTM zone 14S'; + case 32515: + return 'WGS72BE UTM zone 15S'; + case 32516: + return 'WGS72BE UTM zone 16S'; + case 32517: + return 'WGS72BE UTM zone 17S'; + case 32518: + return 'WGS72BE UTM zone 18S'; + case 32519: + return 'WGS72BE UTM zone 19S'; + case 32520: + return 'WGS72BE UTM zone 20S'; + case 32521: + return 'WGS72BE UTM zone 21S'; + case 32522: + return 'WGS72BE UTM zone 22S'; + case 32523: + return 'WGS72BE UTM zone 23S'; + case 32524: + return 'WGS72BE UTM zone 24S'; + case 32525: + return 'WGS72BE UTM zone 25S'; + case 32526: + return 'WGS72BE UTM zone 26S'; + case 32527: + return 'WGS72BE UTM zone 27S'; + case 32528: + return 'WGS72BE UTM zone 28S'; + case 32529: + return 'WGS72BE UTM zone 29S'; + case 32530: + return 'WGS72BE UTM zone 30S'; + case 32531: + return 'WGS72BE UTM zone 31S'; + case 32532: + return 'WGS72BE UTM zone 32S'; + case 32533: + return 'WGS72BE UTM zone 33S'; + case 32534: + return 'WGS72BE UTM zone 34S'; + case 32535: + return 'WGS72BE UTM zone 35S'; + case 32536: + return 'WGS72BE UTM zone 36S'; + case 32537: + return 'WGS72BE UTM zone 37S'; + case 32538: + return 'WGS72BE UTM zone 38S'; + case 32539: + return 'WGS72BE UTM zone 39S'; + case 32540: + return 'WGS72BE UTM zone 40S'; + case 32541: + return 'WGS72BE UTM zone 41S'; + case 32542: + return 'WGS72BE UTM zone 42S'; + case 32543: + return 'WGS72BE UTM zone 43S'; + case 32544: + return 'WGS72BE UTM zone 44S'; + case 32545: + return 'WGS72BE UTM zone 45S'; + case 32546: + return 'WGS72BE UTM zone 46S'; + case 32547: + return 'WGS72BE UTM zone 47S'; + case 32548: + return 'WGS72BE UTM zone 48S'; + case 32549: + return 'WGS72BE UTM zone 49S'; + case 32550: + return 'WGS72BE UTM zone 50S'; + case 32551: + return 'WGS72BE UTM zone 51S'; + case 32552: + return 'WGS72BE UTM zone 52S'; + case 32553: + return 'WGS72BE UTM zone 53S'; + case 32554: + return 'WGS72BE UTM zone 54S'; + case 32555: + return 'WGS72BE UTM zone 55S'; + case 32556: + return 'WGS72BE UTM zone 56S'; + case 32557: + return 'WGS72BE UTM zone 57S'; + case 32558: + return 'WGS72BE UTM zone 58S'; + case 32559: + return 'WGS72BE UTM zone 59S'; + case 32560: + return 'WGS72BE UTM zone 60S'; + case 32601: + return 'WGS84 UTM zone 1N'; + case 32602: + return 'WGS84 UTM zone 2N'; + case 32603: + return 'WGS84 UTM zone 3N'; + case 32604: + return 'WGS84 UTM zone 4N'; + case 32605: + return 'WGS84 UTM zone 5N'; + case 32606: + return 'WGS84 UTM zone 6N'; + case 32607: + return 'WGS84 UTM zone 7N'; + case 32608: + return 'WGS84 UTM zone 8N'; + case 32609: + return 'WGS84 UTM zone 9N'; + case 32610: + return 'WGS84 UTM zone 10N'; + case 32611: + return 'WGS84 UTM zone 11N'; + case 32612: + return 'WGS84 UTM zone 12N'; + case 32613: + return 'WGS84 UTM zone 13N'; + case 32614: + return 'WGS84 UTM zone 14N'; + case 32615: + return 'WGS84 UTM zone 15N'; + case 32616: + return 'WGS84 UTM zone 16N'; + case 32617: + return 'WGS84 UTM zone 17N'; + case 32618: + return 'WGS84 UTM zone 18N'; + case 32619: + return 'WGS84 UTM zone 19N'; + case 32620: + return 'WGS84 UTM zone 20N'; + case 32621: + return 'WGS84 UTM zone 21N'; + case 32622: + return 'WGS84 UTM zone 22N'; + case 32623: + return 'WGS84 UTM zone 23N'; + case 32624: + return 'WGS84 UTM zone 24N'; + case 32625: + return 'WGS84 UTM zone 25N'; + case 32626: + return 'WGS84 UTM zone 26N'; + case 32627: + return 'WGS84 UTM zone 27N'; + case 32628: + return 'WGS84 UTM zone 28N'; + case 32629: + return 'WGS84 UTM zone 29N'; + case 32630: + return 'WGS84 UTM zone 30N'; + case 32631: + return 'WGS84 UTM zone 31N'; + case 32632: + return 'WGS84 UTM zone 32N'; + case 32633: + return 'WGS84 UTM zone 33N'; + case 32634: + return 'WGS84 UTM zone 34N'; + case 32635: + return 'WGS84 UTM zone 35N'; + case 32636: + return 'WGS84 UTM zone 36N'; + case 32637: + return 'WGS84 UTM zone 37N'; + case 32638: + return 'WGS84 UTM zone 38N'; + case 32639: + return 'WGS84 UTM zone 39N'; + case 32640: + return 'WGS84 UTM zone 40N'; + case 32641: + return 'WGS84 UTM zone 41N'; + case 32642: + return 'WGS84 UTM zone 42N'; + case 32643: + return 'WGS84 UTM zone 43N'; + case 32644: + return 'WGS84 UTM zone 44N'; + case 32645: + return 'WGS84 UTM zone 45N'; + case 32646: + return 'WGS84 UTM zone 46N'; + case 32647: + return 'WGS84 UTM zone 47N'; + case 32648: + return 'WGS84 UTM zone 48N'; + case 32649: + return 'WGS84 UTM zone 49N'; + case 32650: + return 'WGS84 UTM zone 50N'; + case 32651: + return 'WGS84 UTM zone 51N'; + case 32652: + return 'WGS84 UTM zone 52N'; + case 32653: + return 'WGS84 UTM zone 53N'; + case 32654: + return 'WGS84 UTM zone 54N'; + case 32655: + return 'WGS84 UTM zone 55N'; + case 32656: + return 'WGS84 UTM zone 56N'; + case 32657: + return 'WGS84 UTM zone 57N'; + case 32658: + return 'WGS84 UTM zone 58N'; + case 32659: + return 'WGS84 UTM zone 59N'; + case 32660: + return 'WGS84 UTM zone 60N'; + case 32701: + return 'WGS84 UTM zone 1S'; + case 32702: + return 'WGS84 UTM zone 2S'; + case 32703: + return 'WGS84 UTM zone 3S'; + case 32704: + return 'WGS84 UTM zone 4S'; + case 32705: + return 'WGS84 UTM zone 5S'; + case 32706: + return 'WGS84 UTM zone 6S'; + case 32707: + return 'WGS84 UTM zone 7S'; + case 32708: + return 'WGS84 UTM zone 8S'; + case 32709: + return 'WGS84 UTM zone 9S'; + case 32710: + return 'WGS84 UTM zone 10S'; + case 32711: + return 'WGS84 UTM zone 11S'; + case 32712: + return 'WGS84 UTM zone 12S'; + case 32713: + return 'WGS84 UTM zone 13S'; + case 32714: + return 'WGS84 UTM zone 14S'; + case 32715: + return 'WGS84 UTM zone 15S'; + case 32716: + return 'WGS84 UTM zone 16S'; + case 32717: + return 'WGS84 UTM zone 17S'; + case 32718: + return 'WGS84 UTM zone 18S'; + case 32719: + return 'WGS84 UTM zone 19S'; + case 32720: + return 'WGS84 UTM zone 20S'; + case 32721: + return 'WGS84 UTM zone 21S'; + case 32722: + return 'WGS84 UTM zone 22S'; + case 32723: + return 'WGS84 UTM zone 23S'; + case 32724: + return 'WGS84 UTM zone 24S'; + case 32725: + return 'WGS84 UTM zone 25S'; + case 32726: + return 'WGS84 UTM zone 26S'; + case 32727: + return 'WGS84 UTM zone 27S'; + case 32728: + return 'WGS84 UTM zone 28S'; + case 32729: + return 'WGS84 UTM zone 29S'; + case 32730: + return 'WGS84 UTM zone 30S'; + case 32731: + return 'WGS84 UTM zone 31S'; + case 32732: + return 'WGS84 UTM zone 32S'; + case 32733: + return 'WGS84 UTM zone 33S'; + case 32734: + return 'WGS84 UTM zone 34S'; + case 32735: + return 'WGS84 UTM zone 35S'; + case 32736: + return 'WGS84 UTM zone 36S'; + case 32737: + return 'WGS84 UTM zone 37S'; + case 32738: + return 'WGS84 UTM zone 38S'; + case 32739: + return 'WGS84 UTM zone 39S'; + case 32740: + return 'WGS84 UTM zone 40S'; + case 32741: + return 'WGS84 UTM zone 41S'; + case 32742: + return 'WGS84 UTM zone 42S'; + case 32743: + return 'WGS84 UTM zone 43S'; + case 32744: + return 'WGS84 UTM zone 44S'; + case 32745: + return 'WGS84 UTM zone 45S'; + case 32746: + return 'WGS84 UTM zone 46S'; + case 32747: + return 'WGS84 UTM zone 47S'; + case 32748: + return 'WGS84 UTM zone 48S'; + case 32749: + return 'WGS84 UTM zone 49S'; + case 32750: + return 'WGS84 UTM zone 50S'; + case 32751: + return 'WGS84 UTM zone 51S'; + case 32752: + return 'WGS84 UTM zone 52S'; + case 32753: + return 'WGS84 UTM zone 53S'; + case 32754: + return 'WGS84 UTM zone 54S'; + case 32755: + return 'WGS84 UTM zone 55S'; + case 32756: + return 'WGS84 UTM zone 56S'; + case 32757: + return 'WGS84 UTM zone 57S'; + case 32758: + return 'WGS84 UTM zone 58S'; + case 32759: + return 'WGS84 UTM zone 59S'; + case 32760: + return 'WGS84 UTM zone 60S'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } + + static String getProjectionDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 10101: + return 'Alabama CS27 East'; + case 10102: + return 'Alabama CS27 West'; + case 10131: + return 'Alabama CS83 East'; + case 10132: + return 'Alabama CS83 West'; + case 10201: + return 'Arizona Coordinate System east'; + case 10202: + return 'Arizona Coordinate System Central'; + case 10203: + return 'Arizona Coordinate System west'; + case 10231: + return 'Arizona CS83 east'; + case 10232: + return 'Arizona CS83 Central'; + case 10233: + return 'Arizona CS83 west'; + case 10301: + return 'Arkansas CS27 North'; + case 10302: + return 'Arkansas CS27 South'; + case 10331: + return 'Arkansas CS83 North'; + case 10332: + return 'Arkansas CS83 South'; + case 10401: + return 'California CS27 I'; + case 10402: + return 'California CS27 II'; + case 10403: + return 'California CS27 III'; + case 10404: + return 'California CS27 IV'; + case 10405: + return 'California CS27 V'; + case 10406: + return 'California CS27 VI'; + case 10407: + return 'California CS27 VII'; + case 10431: + return 'California CS83 1'; + case 10432: + return 'California CS83 2'; + case 10433: + return 'California CS83 3'; + case 10434: + return 'California CS83 4'; + case 10435: + return 'California CS83 5'; + case 10436: + return 'California CS83 6'; + case 10501: + return 'Colorado CS27 North'; + case 10502: + return 'Colorado CS27 Central'; + case 10503: + return 'Colorado CS27 South'; + case 10531: + return 'Colorado CS83 North'; + case 10532: + return 'Colorado CS83 Central'; + case 10533: + return 'Colorado CS83 South'; + case 10600: + return 'Connecticut CS27'; + case 10630: + return 'Connecticut CS83'; + case 10700: + return 'Delaware CS27'; + case 10730: + return 'Delaware CS83'; + case 10901: + return 'Florida CS27 East'; + case 10902: + return 'Florida CS27 West'; + case 10903: + return 'Florida CS27 North'; + case 10931: + return 'Florida CS83 East'; + case 10932: + return 'Florida CS83 West'; + case 10933: + return 'Florida CS83 North'; + case 11001: + return 'Georgia CS27 East'; + case 11002: + return 'Georgia CS27 West'; + case 11031: + return 'Georgia CS83 East'; + case 11032: + return 'Georgia CS83 West'; + case 11101: + return 'Idaho CS27 East'; + case 11102: + return 'Idaho CS27 Central'; + case 11103: + return 'Idaho CS27 West'; + case 11131: + return 'Idaho CS83 East'; + case 11132: + return 'Idaho CS83 Central'; + case 11133: + return 'Idaho CS83 West'; + case 11201: + return 'Illinois CS27 East'; + case 11202: + return 'Illinois CS27 West'; + case 11231: + return 'Illinois CS83 East'; + case 11232: + return 'Illinois CS83 West'; + case 11301: + return 'Indiana CS27 East'; + case 11302: + return 'Indiana CS27 West'; + case 11331: + return 'Indiana CS83 East'; + case 11332: + return 'Indiana CS83 West'; + case 11401: + return 'Iowa CS27 North'; + case 11402: + return 'Iowa CS27 South'; + case 11431: + return 'Iowa CS83 North'; + case 11432: + return 'Iowa CS83 South'; + case 11501: + return 'Kansas CS27 North'; + case 11502: + return 'Kansas CS27 South'; + case 11531: + return 'Kansas CS83 North'; + case 11532: + return 'Kansas CS83 South'; + case 11601: + return 'Kentucky CS27 North'; + case 11602: + return 'Kentucky CS27 South'; + case 11631: + return 'Kentucky CS83 North'; + case 11632: + return 'Kentucky CS83 South'; + case 11701: + return 'Louisiana CS27 North'; + case 11702: + return 'Louisiana CS27 South'; + case 11731: + return 'Louisiana CS83 North'; + case 11732: + return 'Louisiana CS83 South'; + case 11801: + return 'Maine CS27 East'; + case 11802: + return 'Maine CS27 West'; + case 11831: + return 'Maine CS83 East'; + case 11832: + return 'Maine CS83 West'; + case 11900: + return 'Maryland CS27'; + case 11930: + return 'Maryland CS83'; + case 12001: + return 'Massachusetts CS27 Mainland'; + case 12002: + return 'Massachusetts CS27 Island'; + case 12031: + return 'Massachusetts CS83 Mainland'; + case 12032: + return 'Massachusetts CS83 Island'; + case 12101: + return 'Michigan State Plane East'; + case 12102: + return 'Michigan State Plane Old Central'; + case 12103: + return 'Michigan State Plane West'; + case 12111: + return 'Michigan CS27 North'; + case 12112: + return 'Michigan CS27 Central'; + case 12113: + return 'Michigan CS27 South'; + case 12141: + return 'Michigan CS83 North'; + case 12142: + return 'Michigan CS83 Central'; + case 12143: + return 'Michigan CS83 South'; + case 12201: + return 'Minnesota CS27 North'; + case 12202: + return 'Minnesota CS27 Central'; + case 12203: + return 'Minnesota CS27 South'; + case 12231: + return 'Minnesota CS83 North'; + case 12232: + return 'Minnesota CS83 Central'; + case 12233: + return 'Minnesota CS83 South'; + case 12301: + return 'Mississippi CS27 East'; + case 12302: + return 'Mississippi CS27 West'; + case 12331: + return 'Mississippi CS83 East'; + case 12332: + return 'Mississippi CS83 West'; + case 12401: + return 'Missouri CS27 East'; + case 12402: + return 'Missouri CS27 Central'; + case 12403: + return 'Missouri CS27 West'; + case 12431: + return 'Missouri CS83 East'; + case 12432: + return 'Missouri CS83 Central'; + case 12433: + return 'Missouri CS83 West'; + case 12501: + return 'Montana CS27 North'; + case 12502: + return 'Montana CS27 Central'; + case 12503: + return 'Montana CS27 South'; + case 12530: + return 'Montana CS83'; + case 12601: + return 'Nebraska CS27 North'; + case 12602: + return 'Nebraska CS27 South'; + case 12630: + return 'Nebraska CS83'; + case 12701: + return 'Nevada CS27 East'; + case 12702: + return 'Nevada CS27 Central'; + case 12703: + return 'Nevada CS27 West'; + case 12731: + return 'Nevada CS83 East'; + case 12732: + return 'Nevada CS83 Central'; + case 12733: + return 'Nevada CS83 West'; + case 12800: + return 'New Hampshire CS27'; + case 12830: + return 'New Hampshire CS83'; + case 12900: + return 'New Jersey CS27'; + case 12930: + return 'New Jersey CS83'; + case 13001: + return 'New Mexico CS27 East'; + case 13002: + return 'New Mexico CS27 Central'; + case 13003: + return 'New Mexico CS27 West'; + case 13031: + return 'New Mexico CS83 East'; + case 13032: + return 'New Mexico CS83 Central'; + case 13033: + return 'New Mexico CS83 West'; + case 13101: + return 'New York CS27 East'; + case 13102: + return 'New York CS27 Central'; + case 13103: + return 'New York CS27 West'; + case 13104: + return 'New York CS27 Long Island'; + case 13131: + return 'New York CS83 East'; + case 13132: + return 'New York CS83 Central'; + case 13133: + return 'New York CS83 West'; + case 13134: + return 'New York CS83 Long Island'; + case 13200: + return 'North Carolina CS27'; + case 13230: + return 'North Carolina CS83'; + case 13301: + return 'North Dakota CS27 North'; + case 13302: + return 'North Dakota CS27 South'; + case 13331: + return 'North Dakota CS83 North'; + case 13332: + return 'North Dakota CS83 South'; + case 13401: + return 'Ohio CS27 North'; + case 13402: + return 'Ohio CS27 South'; + case 13431: + return 'Ohio CS83 North'; + case 13432: + return 'Ohio CS83 South'; + case 13501: + return 'Oklahoma CS27 North'; + case 13502: + return 'Oklahoma CS27 South'; + case 13531: + return 'Oklahoma CS83 North'; + case 13532: + return 'Oklahoma CS83 South'; + case 13601: + return 'Oregon CS27 North'; + case 13602: + return 'Oregon CS27 South'; + case 13631: + return 'Oregon CS83 North'; + case 13632: + return 'Oregon CS83 South'; + case 13701: + return 'Pennsylvania CS27 North'; + case 13702: + return 'Pennsylvania CS27 South'; + case 13731: + return 'Pennsylvania CS83 North'; + case 13732: + return 'Pennsylvania CS83 South'; + case 13800: + return 'Rhode Island CS27'; + case 13830: + return 'Rhode Island CS83'; + case 13901: + return 'South Carolina CS27 North'; + case 13902: + return 'South Carolina CS27 South'; + case 13930: + return 'South Carolina CS83'; + case 14001: + return 'South Dakota CS27 North'; + case 14002: + return 'South Dakota CS27 South'; + case 14031: + return 'South Dakota CS83 North'; + case 14032: + return 'South Dakota CS83 South'; + case 14100: + return 'Tennessee CS27'; + case 14130: + return 'Tennessee CS83'; + case 14201: + return 'Texas CS27 North'; + case 14202: + return 'Texas CS27 North Central'; + case 14203: + return 'Texas CS27 Central'; + case 14204: + return 'Texas CS27 South Central'; + case 14205: + return 'Texas CS27 South'; + case 14231: + return 'Texas CS83 North'; + case 14232: + return 'Texas CS83 North Central'; + case 14233: + return 'Texas CS83 Central'; + case 14234: + return 'Texas CS83 South Central'; + case 14235: + return 'Texas CS83 South'; + case 14301: + return 'Utah CS27 North'; + case 14302: + return 'Utah CS27 Central'; + case 14303: + return 'Utah CS27 South'; + case 14331: + return 'Utah CS83 North'; + case 14332: + return 'Utah CS83 Central'; + case 14333: + return 'Utah CS83 South'; + case 14400: + return 'Vermont CS27'; + case 14430: + return 'Vermont CS83'; + case 14501: + return 'Virginia CS27 North'; + case 14502: + return 'Virginia CS27 South'; + case 14531: + return 'Virginia CS83 North'; + case 14532: + return 'Virginia CS83 South'; + case 14601: + return 'Washington CS27 North'; + case 14602: + return 'Washington CS27 South'; + case 14631: + return 'Washington CS83 North'; + case 14632: + return 'Washington CS83 South'; + case 14701: + return 'West Virginia CS27 North'; + case 14702: + return 'West Virginia CS27 South'; + case 14731: + return 'West Virginia CS83 North'; + case 14732: + return 'West Virginia CS83 South'; + case 14801: + return 'Wisconsin CS27 North'; + case 14802: + return 'Wisconsin CS27 Central'; + case 14803: + return 'Wisconsin CS27 South'; + case 14831: + return 'Wisconsin CS83 North'; + case 14832: + return 'Wisconsin CS83 Central'; + case 14833: + return 'Wisconsin CS83 South'; + case 14901: + return 'Wyoming CS27 East'; + case 14902: + return 'Wyoming CS27 East Central'; + case 14903: + return 'Wyoming CS27 West Central'; + case 14904: + return 'Wyoming CS27 West'; + case 14931: + return 'Wyoming CS83 East'; + case 14932: + return 'Wyoming CS83 East Central'; + case 14933: + return 'Wyoming CS83 West Central'; + case 14934: + return 'Wyoming CS83 West'; + case 15001: + return 'Alaska CS27 1'; + case 15002: + return 'Alaska CS27 2'; + case 15003: + return 'Alaska CS27 3'; + case 15004: + return 'Alaska CS27 4'; + case 15005: + return 'Alaska CS27 5'; + case 15006: + return 'Alaska CS27 6'; + case 15007: + return 'Alaska CS27 7'; + case 15008: + return 'Alaska CS27 8'; + case 15009: + return 'Alaska CS27 9'; + case 15010: + return 'Alaska CS27 10'; + case 15031: + return 'Alaska CS83 1'; + case 15032: + return 'Alaska CS83 2'; + case 15033: + return 'Alaska CS83 3'; + case 15034: + return 'Alaska CS83 4'; + case 15035: + return 'Alaska CS83 5'; + case 15036: + return 'Alaska CS83 6'; + case 15037: + return 'Alaska CS83 7'; + case 15038: + return 'Alaska CS83 8'; + case 15039: + return 'Alaska CS83 9'; + case 15040: + return 'Alaska CS83 10'; + case 15101: + return 'Hawaii CS27 1'; + case 15102: + return 'Hawaii CS27 2'; + case 15103: + return 'Hawaii CS27 3'; + case 15104: + return 'Hawaii CS27 4'; + case 15105: + return 'Hawaii CS27 5'; + case 15131: + return 'Hawaii CS83 1'; + case 15132: + return 'Hawaii CS83 2'; + case 15133: + return 'Hawaii CS83 3'; + case 15134: + return 'Hawaii CS83 4'; + case 15135: + return 'Hawaii CS83 5'; + case 15201: + return 'Puerto Rico CS27'; + case 15202: + return 'St Croix'; + case 15230: + return 'Puerto Rico Virgin Is'; + case 15302: + return 'Kentucky CS27'; + case 15303: + return 'Kentucky CS83 North'; + case 15914: + return 'BLM 14N feet'; + case 15915: + return 'BLM 15N feet'; + case 15916: + return 'BLM 16N feet'; + case 15917: + return 'BLM 17N feet'; + case 16001: + return 'UTM zone 1N'; + case 16002: + return 'UTM zone 2N'; + case 16003: + return 'UTM zone 3N'; + case 16004: + return 'UTM zone 4N'; + case 16005: + return 'UTM zone 5N'; + case 16006: + return 'UTM zone 6N'; + case 16007: + return 'UTM zone 7N'; + case 16008: + return 'UTM zone 8N'; + case 16009: + return 'UTM zone 9N'; + case 16010: + return 'UTM zone 10N'; + case 16011: + return 'UTM zone 11N'; + case 16012: + return 'UTM zone 12N'; + case 16013: + return 'UTM zone 13N'; + case 16014: + return 'UTM zone 14N'; + case 16015: + return 'UTM zone 15N'; + case 16016: + return 'UTM zone 16N'; + case 16017: + return 'UTM zone 17N'; + case 16018: + return 'UTM zone 18N'; + case 16019: + return 'UTM zone 19N'; + case 16020: + return 'UTM zone 20N'; + case 16021: + return 'UTM zone 21N'; + case 16022: + return 'UTM zone 22N'; + case 16023: + return 'UTM zone 23N'; + case 16024: + return 'UTM zone 24N'; + case 16025: + return 'UTM zone 25N'; + case 16026: + return 'UTM zone 26N'; + case 16027: + return 'UTM zone 27N'; + case 16028: + return 'UTM zone 28N'; + case 16029: + return 'UTM zone 29N'; + case 16030: + return 'UTM zone 30N'; + case 16031: + return 'UTM zone 31N'; + case 16032: + return 'UTM zone 32N'; + case 16033: + return 'UTM zone 33N'; + case 16034: + return 'UTM zone 34N'; + case 16035: + return 'UTM zone 35N'; + case 16036: + return 'UTM zone 36N'; + case 16037: + return 'UTM zone 37N'; + case 16038: + return 'UTM zone 38N'; + case 16039: + return 'UTM zone 39N'; + case 16040: + return 'UTM zone 40N'; + case 16041: + return 'UTM zone 41N'; + case 16042: + return 'UTM zone 42N'; + case 16043: + return 'UTM zone 43N'; + case 16044: + return 'UTM zone 44N'; + case 16045: + return 'UTM zone 45N'; + case 16046: + return 'UTM zone 46N'; + case 16047: + return 'UTM zone 47N'; + case 16048: + return 'UTM zone 48N'; + case 16049: + return 'UTM zone 49N'; + case 16050: + return 'UTM zone 50N'; + case 16051: + return 'UTM zone 51N'; + case 16052: + return 'UTM zone 52N'; + case 16053: + return 'UTM zone 53N'; + case 16054: + return 'UTM zone 54N'; + case 16055: + return 'UTM zone 55N'; + case 16056: + return 'UTM zone 56N'; + case 16057: + return 'UTM zone 57N'; + case 16058: + return 'UTM zone 58N'; + case 16059: + return 'UTM zone 59N'; + case 16060: + return 'UTM zone 60N'; + case 16101: + return 'UTM zone 1S'; + case 16102: + return 'UTM zone 2S'; + case 16103: + return 'UTM zone 3S'; + case 16104: + return 'UTM zone 4S'; + case 16105: + return 'UTM zone 5S'; + case 16106: + return 'UTM zone 6S'; + case 16107: + return 'UTM zone 7S'; + case 16108: + return 'UTM zone 8S'; + case 16109: + return 'UTM zone 9S'; + case 16110: + return 'UTM zone 10S'; + case 16111: + return 'UTM zone 11S'; + case 16112: + return 'UTM zone 12S'; + case 16113: + return 'UTM zone 13S'; + case 16114: + return 'UTM zone 14S'; + case 16115: + return 'UTM zone 15S'; + case 16116: + return 'UTM zone 16S'; + case 16117: + return 'UTM zone 17S'; + case 16118: + return 'UTM zone 18S'; + case 16119: + return 'UTM zone 19S'; + case 16120: + return 'UTM zone 20S'; + case 16121: + return 'UTM zone 21S'; + case 16122: + return 'UTM zone 22S'; + case 16123: + return 'UTM zone 23S'; + case 16124: + return 'UTM zone 24S'; + case 16125: + return 'UTM zone 25S'; + case 16126: + return 'UTM zone 26S'; + case 16127: + return 'UTM zone 27S'; + case 16128: + return 'UTM zone 28S'; + case 16129: + return 'UTM zone 29S'; + case 16130: + return 'UTM zone 30S'; + case 16131: + return 'UTM zone 31S'; + case 16132: + return 'UTM zone 32S'; + case 16133: + return 'UTM zone 33S'; + case 16134: + return 'UTM zone 34S'; + case 16135: + return 'UTM zone 35S'; + case 16136: + return 'UTM zone 36S'; + case 16137: + return 'UTM zone 37S'; + case 16138: + return 'UTM zone 38S'; + case 16139: + return 'UTM zone 39S'; + case 16140: + return 'UTM zone 40S'; + case 16141: + return 'UTM zone 41S'; + case 16142: + return 'UTM zone 42S'; + case 16143: + return 'UTM zone 43S'; + case 16144: + return 'UTM zone 44S'; + case 16145: + return 'UTM zone 45S'; + case 16146: + return 'UTM zone 46S'; + case 16147: + return 'UTM zone 47S'; + case 16148: + return 'UTM zone 48S'; + case 16149: + return 'UTM zone 49S'; + case 16150: + return 'UTM zone 50S'; + case 16151: + return 'UTM zone 51S'; + case 16152: + return 'UTM zone 52S'; + case 16153: + return 'UTM zone 53S'; + case 16154: + return 'UTM zone 54S'; + case 16155: + return 'UTM zone 55S'; + case 16156: + return 'UTM zone 56S'; + case 16157: + return 'UTM zone 57S'; + case 16158: + return 'UTM zone 58S'; + case 16159: + return 'UTM zone 59S'; + case 16160: + return 'UTM zone 60S'; + case 16200: + return 'Gauss Kruger zone 0'; + case 16201: + return 'Gauss Kruger zone 1'; + case 16202: + return 'Gauss Kruger zone 2'; + case 16203: + return 'Gauss Kruger zone 3'; + case 16204: + return 'Gauss Kruger zone 4'; + case 16205: + return 'Gauss Kruger zone 5'; + case 17348: + return 'Map Grid of Australia 48'; + case 17349: + return 'Map Grid of Australia 49'; + case 17350: + return 'Map Grid of Australia 50'; + case 17351: + return 'Map Grid of Australia 51'; + case 17352: + return 'Map Grid of Australia 52'; + case 17353: + return 'Map Grid of Australia 53'; + case 17354: + return 'Map Grid of Australia 54'; + case 17355: + return 'Map Grid of Australia 55'; + case 17356: + return 'Map Grid of Australia 56'; + case 17357: + return 'Map Grid of Australia 57'; + case 17358: + return 'Map Grid of Australia 58'; + case 17448: + return 'Australian Map Grid 48'; + case 17449: + return 'Australian Map Grid 49'; + case 17450: + return 'Australian Map Grid 50'; + case 17451: + return 'Australian Map Grid 51'; + case 17452: + return 'Australian Map Grid 52'; + case 17453: + return 'Australian Map Grid 53'; + case 17454: + return 'Australian Map Grid 54'; + case 17455: + return 'Australian Map Grid 55'; + case 17456: + return 'Australian Map Grid 56'; + case 17457: + return 'Australian Map Grid 57'; + case 17458: + return 'Australian Map Grid 58'; + case 18031: + return 'Argentina 1'; + case 18032: + return 'Argentina 2'; + case 18033: + return 'Argentina 3'; + case 18034: + return 'Argentina 4'; + case 18035: + return 'Argentina 5'; + case 18036: + return 'Argentina 6'; + case 18037: + return 'Argentina 7'; + case 18051: + return 'Colombia 3W'; + case 18052: + return 'Colombia Bogota'; + case 18053: + return 'Colombia 3E'; + case 18054: + return 'Colombia 6E'; + case 18072: + return 'Egypt Red Belt'; + case 18073: + return 'Egypt Purple Belt'; + case 18074: + return 'Extended Purple Belt'; + case 18141: + return 'New Zealand North Island Nat Grid'; + case 18142: + return 'New Zealand South Island Nat Grid'; + case 19900: + return 'Bahrain Grid'; + case 19905: + return 'Netherlands E Indies Equatorial'; + case 19912: + return 'RSO Borneo'; + case 19926: + return 'Stereo 70'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } + + static String getProjCoordinateTransformDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 1: + return 'Transverse Mercator'; + case 2: + return 'Transverse Mercator Modified Alaska'; + case 3: + return 'Oblique Mercator'; + case 4: + return 'Oblique Mercator Laborde'; + case 5: + return 'Oblique Mercator Rosenmund'; + case 6: + return 'Oblique Mercator Spherical'; + case 7: + return 'Mercator'; + case 8: + return 'Lambert Conf Conic 2SP'; + case 9: + return 'Lambert Conf Conic 1SP'; + case 10: + return 'Lambert Azim Equal Area'; + case 11: + return 'Albers Equal Area'; + case 12: + return 'Azimuthal Equidistant'; + case 13: + return 'Equidistant Conic'; + case 14: + return 'Stereographic'; + case 15: + return 'Polar Stereographic'; + case 16: + return 'Oblique Stereographic'; + case 17: + return 'Equirectangular'; + case 18: + return 'Cassini Soldner'; + case 19: + return 'Gnomonic'; + case 20: + return 'Miller Cylindrical'; + case 21: + return 'Orthographic'; + case 22: + return 'Polyconic'; + case 23: + return 'Robinson'; + case 24: + return 'Sinusoidal'; + case 25: + return 'VanDerGrinten'; + case 26: + return 'New Zealand Map Grid'; + case 27: + return 'Transverse Mercator South Orientated'; + case 28: + return 'Cylindrical Equal Area'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } + + static String getGeoTiffUnitsDescription(String valueString) { + final value = int.tryParse(valueString); + if (value == null) return valueString; + switch (value) { + case 9001: + return 'Linear Meter'; + case 9002: + return 'Linear Foot'; + case 9003: + return 'Linear Foot US Survey'; + case 9004: + return 'Linear Foot Modified American'; + case 9005: + return 'Linear Foot Clarke'; + case 9006: + return 'Linear Foot Indian'; + case 9007: + return 'Linear Link'; + case 9008: + return 'Linear Link Benoit'; + case 9009: + return 'Linear Link Sears'; + case 9010: + return 'Linear Chain Benoit'; + case 9011: + return 'Linear Chain Sears'; + case 9012: + return 'Linear Yard Sears'; + case 9013: + return 'Linear Yard Indian'; + case 9014: + return 'Linear Fathom'; + case 9015: + return 'Linear Mile International Nautical'; + case 9101: + return 'Angular Radian'; + case 9102: + return 'Angular Degree'; + case 9103: + return 'Angular Arc Minute'; + case 9104: + return 'Angular Arc Second'; + case 9105: + return 'Angular Grad'; + case 9106: + return 'Angular Gon'; + case 9107: + return 'Angular DMS'; + case 9108: + return 'Angular DMS Hemisphere'; + case 32767: + return 'User Defined'; + default: + return 'Unknown ($value)'; + } + } +} diff --git a/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart b/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart index 839e1dd67..f7a283abe 100644 --- a/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart +++ b/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart @@ -2,6 +2,7 @@ import 'dart:collection'; import 'package:aves/model/entry.dart'; import 'package:aves/ref/brand_colors.dart'; +import 'package:aves/ref/geotiff.dart'; import 'package:aves/services/metadata/svg_metadata_service.dart'; import 'package:aves/theme/colors.dart'; import 'package:aves/utils/constants.dart'; @@ -9,6 +10,7 @@ import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; import 'package:aves/widgets/viewer/embedded/notifications.dart'; import 'package:aves/widgets/viewer/info/common.dart'; +import 'package:aves/widgets/viewer/info/metadata/geotiff.dart'; import 'package:aves/widgets/viewer/info/metadata/metadata_section.dart'; import 'package:aves/widgets/viewer/info/metadata/metadata_thumbnail.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_tile.dart'; @@ -36,7 +38,7 @@ class MetadataDirTile extends StatelessWidget { @override Widget build(BuildContext context) { - final tags = dir.tags; + var tags = dir.tags; if (tags.isEmpty) return const SizedBox.shrink(); final dirName = dir.name; @@ -57,6 +59,12 @@ class MetadataDirTile extends StatelessWidget { case MetadataDirectory.coverDirectory: linkHandlers = getVideoCoverLinkHandlers(tags); break; + case MetadataDirectory.geoTiffDirectory: + tags = SplayTreeMap.from(tags.map((name, value) { + final tag = GeoTiffDirectory.tagForName(name); + return MapEntry(name, GeoTiffDirectory.formatValue(tag, value)); + })); + break; } final colors = context.watch(); diff --git a/lib/widgets/viewer/info/metadata/metadata_section.dart b/lib/widgets/viewer/info/metadata/metadata_section.dart index bfe18d098..fe003688e 100644 --- a/lib/widgets/viewer/info/metadata/metadata_section.dart +++ b/lib/widgets/viewer/info/metadata/metadata_section.dart @@ -279,6 +279,7 @@ class MetadataDirectory { static const xmpDirectory = 'XMP'; // from metadata-extractor static const mediaDirectory = 'Media'; // custom static const coverDirectory = 'Cover'; // custom + static const geoTiffDirectory = 'GeoTIFF'; // custom const MetadataDirectory( this.name,