diff options
Diffstat (limited to 'ipl/procs/geodat.icn')
-rw-r--r-- | ipl/procs/geodat.icn | 1277 |
1 files changed, 1277 insertions, 0 deletions
diff --git a/ipl/procs/geodat.icn b/ipl/procs/geodat.icn new file mode 100644 index 0000000..378fe1d --- /dev/null +++ b/ipl/procs/geodat.icn @@ -0,0 +1,1277 @@ +############################################################################ +# +# File: geodat.icn +# +# Subject: Procedures for geodetic datum conversion +# +# Authors: William S. Evans and Gregg M. Townsend +# +# Date: July 31, 2000 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# These procedures provide "projections" that convert among geodetic +# datums, which relate locations on the earth's surface to longitude +# and latitude coordinates. As measurement techniques improve, +# newer datums typically give slightly different values from older +# ones. The values returned here are used with the project() +# procedure of cartog.icn. +# +# geodat(s1, s2) defines a geodetic datum conversion. +# molodensky() performs an algorithmic datum conversion. +# nadcon(s1, s2) uses data files for more precise conversion. +# +# ellipsoid(s) return the parameters of the named ellipsoid. +# +############################################################################ +# +# geodat(f, t) returns a projection from longitude and latitude +# in datum f to longitude and latitude in datum t. +# f and t are strings. If f and t equal "NAD83", "NAD27", +# "HARN", or "HPGN", geodat returns a nadcon projection. +# Failing that, geodat returns a molodensky projection. +# +# The input to the projection is a list of signed numeric values, +# angles measured in degrees, with each pair representing one +# location; longitude precedes latitude. The output is a list +# with the same form and length as the input list. +# +############################################################################ +# +# nadcon(f, t) returns a projection from longitude and latitude +# in datum f to longitude and latitude in datum t. The strings +# f and t must each be one of "NAD83", "NAD27", "HARN", or "HPGN". +# The projection uses our implementation of the National Oceanic +# and Atmospheric Administration's (NOAA's) North American Datum +# Conversion Utility (NADCON); for more information, see +# http://www.ngs.noaa.gov/TOOLS/Nadcon/Nadcon.html +# +# nadcon() requires data grid (.loa and .laa) files, which must be +# found in the current directory or along the space-separated path +# given by the environment variable DPATH. These files can be +# downloaded from: +# http://www.cs.arizona.edu/icon/ftp/data/nadcon/ +# ftp://ftp.cs.arizona.edu/icon/data/nadcon/ +# +# The projection's input and output are lists of signed numbers. +# Output is properly rounded and so may not agree exactly with +# the equivalent NOAA programs. +# +############################################################################ +# +# molodensky(dx, dy, dz, ain, fin, aout, fout) returns a projection +# from input longitude and latitude to output longitude and latitude. +# The projection uses the standard Molodensky transformation. +# The input datum is specified by an ellipsoid with parameters +# ain, the equatorial radius in metres, and fin, the flattening; +# and by three shift values dx, dy, and dz. The output datum is +# specified by an ellipsoid with parameters aout and fout. +# +# If dz is null, then dx and dy are interpreted as the names of +# an input and output datum. The names are the ID codes +# specified in NIMA TR 8350.2. +# +# The projection's input and output are lists of signed numbers. +# +############################################################################ +# +# ellipsoid(s) return a list [a, 1/f] containing the defining +# parameters of the standard ellipsoid model named s; a is the +# equatorial radius and 1/f is the flattening factor. Names are +# listed in the code; the default is "WGS84". +# +############################################################################ +# +# Ellipsoid and datum parameters are from: +# +# Department of Defense World Geodetic System 1984 +# National Imagery and Mapping Agency +# Technical Report TR8350.2 +# Third Edition, Amendment 1 (3 January 2000) +# ftp://ftp.nima.mil/pub/gg/tr8350.2/ +# +############################################################################ +# +# Links: cartog, io +# +############################################################################ + + + +link cartog +link io + + + +# Procedures and globals named with a "gdt_" prefix are +# not intended for access outside this file. + +global gdt_datum_ptab # table of gdt_datum_rec's, keyed by code + + + +###################### Geodat Conversion ################################# + +procedure geodat(f, t) #: define geodetic conversion + return nadcon(f, t) | molodensky(f, t) | fail +end + + + +###################### NADCON Conversion ################################# + +record gdt_nadcon( # nadcon conversion record + proj, # projection procedure + inv, # invert myself + grids # list of gdt_nadcon_grid records to search + ) + +record gdt_nadcon_grid( # information about a .loa and .laa file + name, # name of file + offset, # offset in file to start of grid data + termLen, # number of chars in line termination (1 or 2) + nc, nr, nz, # number of rows, columns in file (nz = ??) + xmin, xmax, dx, # dimension of coverage + ymin, ymax, dy, # + angle # ?? + ) + +procedure nadcon(f, t) #: define NAD data conversion + local d, ft + + ft := (gdt_nadcon_datum(f) || "-" || gdt_nadcon_datum(t)) | fail + d := gdt_nadcon() + d.inv := gdt_nadcon_inv + case ft of { + "NAD27-NAD83"|"NAD83-NAD27": + # more specific grids should precede less specific ones + d.grids := gdt_nadcon_initGrids( + ["hawaii","prvi","stlrnc", "stgeorge","stpaul","alaska","conus"]) + "NAD83-HPGN"|"HPGN-NAD83": + d.grids := gdt_nadcon_initGrids( + ["alhpgn","azhpgn","cnhpgn","cohpgn","cshpgn","emhpgn","ethpgn", + "flhpgn","gahpgn","hihpgn","inhpgn","kshpgn","kyhpgn","lahpgn", + "mdhpgn","mehpgn","mihpgn","mshpgn","nbhpgn","ndhpgn","nehpgn", + "nmhpgn","nvhpgn","nyhpgn","ohhpgn","okhpgn","pvhpgn","sdhpgn", + "tnhpgn","uthpgn","vahpgn","wihpgn","wmhpgn","wohpgn","wthpgn", + "wvhpgn","wyhpgn"]) + "NAD27-HPGN": + return compose(nadcon("NAD27", "NAD83"), nadcon("NAD83", "HPGN")) + "HPGN-NAD27": + return compose(nadcon("HPGN", "NAD83"), nadcon("NAD83", "NAD27")) + default: # identity conversion + d.grids := [] + } + case ft of { + "NAD27-NAD83"|"NAD83-HPGN": d.proj := gdt_nadcon_fwd + "NAD83-NAD27"|"HPGN-NAD83": d.proj := gdt_nadcon_bck + default: d.proj := gdt_identity + } + return d +end + +procedure gdt_nadcon_fwd(p, L) + local i, a + + a := [] + every i := 1 to *L by 2 do { + gdt_nadcon_fwdPoint(p, a, L[i], L[i+1]) | fail + } + return a +end + +procedure gdt_nadcon_bck(p, L) + local i, a + + a := [] + every i := 1 to *L by 2 do { + gdt_nadcon_bckPoint(p, a, L[i], L[i+1]) | fail + } + return a +end + +procedure gdt_identity(p, L) + return L +end + +procedure gdt_nadcon_inv(p) + local q + + q := copy(p) + case p.proj of { + gdt_nadcon_bck : q.proj := gdt_nadcon_fwd + gdt_nadcon_fwd : q.proj := gdt_nadcon_bck + gdt_identity : q.proj := gdt_identity + } + return q +end + +procedure gdt_nadcon_datum(x) + case x of { + "NAD27": return "NAD27" + "NAD83": return "NAD83" + "HARN" | "HPGN": return "HPGN" + } +end + + +procedure gdt_nadcon_initGrids(names) + local grids, latf, lonf, a1, a2, b1, b2, g + + grids := [] + every name := !names do { + close(\lonf) + close(\latf) + + g := gdt_nadcon_grid() + g.name := name + + lonf := dopen(name || ".loa") | &null + latf := dopen(name || ".laa") | &null + + if /lonf | /latf then next # filename unreadable + + a1 := read(lonf) | &null + a2 := read(lonf) | &null + b1 := read(latf) | &null + b2 := read(latf) | &null + if /a1 | /a2 | /b1 | /b2 | a1 ~== b1 | a2 ~== b2 then { + write(&errout, g.name, " incompatible or corrupt files.") + next + } + g.offset := where(lonf) + + if g.offset = 141 then + g.termLen := 2 + else + g.termLen := 1 + a2 ? { + g.nc := integer(move(4)) + g.nr := integer(move(4)) + g.nz := integer(move(4)) + g.xmin := real(move(12)) + g.dx := real(move(12)) + g.xmax := g.xmin + (g.nc - 1) * g.dx + g.ymin := real(move(12)) + g.dy := real(move(12)) + g.ymax := g.ymin + (g.nr - 1) * g.dy + g.angle := real(move(12)) + put(grids, g) + } + } + close(\lonf) + close(\latf) + + if *grids = 0 then { + write(&errout, "No valid NADCON conversion files found.") + fail + } + return grids +end + +procedure gdt_nadcon_findGrid(grids, xpt, ypt) + local g + + every g := !grids do { + if (g.xmin < xpt < g.xmax & g.ymin < ypt < g.ymax) then return g + } + fail +end + +procedure gdt_nadcon_box(f, g, xcol, yrow) +# This procedure is very sensitive to the format of the .loa & .laa +# files. In particular, it assumes: +# 1) each line contains 6 numbers (except, possibly, the +# last line of a row, which contains (nc % 6) numbers, +# 2) each number is 12 chars long, + local charsPerRow, pos, t1, t2, t3, t4 + + charsPerRow := (72 + g.termLen) * integer(g.nc / 6) + if (g.nc % 6) > 0 then + charsPerRow +:= g.termLen + 12 * (g.nc % 6) + + pos := g.offset + charsPerRow * (yrow - 1) + + (72 + g.termLen) * integer((xcol - 1) / 6) + 12 * ((xcol - 1) % 6) + + seek(f, pos) + t1 := reads(f, 12) + if (xcol % 6 = 0) then reads(f, g.termLen) # line termination + t3 := reads(f, 12) + seek(f, pos + 12 * g.nc + g.termLen * ceil(g.nc / 6.0)) + t2 := reads(f, 12) + if (xcol % 6 = 0) then reads(f, g.termLen) # line termination + t4 := reads(f, 12) + + return [real(t1), real(t2), real(t3), real(t4)] +end + + +procedure gdt_nadcon_fwdPoint(p, a, xpt, ypt) + local g, latf, lonf, xgrid, ygrid, xcol, yrow, t, dlas, dlos + + if not(g := gdt_nadcon_findGrid(p.grids, xpt, ypt)) then { + runerr(205, [xpt, ypt]) # point not in available areas + fail + } + lonf := dopen(g.name || ".loa") + latf := dopen(g.name || ".laa") + + xgrid := (xpt - g.xmin) / g.dx + 1.0 + ygrid := (ypt - g.ymin) / g.dy + 1.0 + xcol := integer(xgrid) + yrow := integer(ygrid) + + t := gdt_nadcon_box(lonf, g, xcol, yrow) + dlos := t[1] + (t[3]-t[1]) * (xgrid-xcol) + (t[2]-t[1]) * (ygrid-yrow) + + (t[4]-t[3]-t[2]+t[1]) * (xgrid-xcol) * (ygrid-yrow) + + t := gdt_nadcon_box(latf, g, xcol, yrow) + dlas := t[1] + (t[3]-t[1]) * (xgrid-xcol) + (t[2]-t[1]) * (ygrid-yrow) + + (t[4]-t[3]-t[2]+t[1]) * (xgrid-xcol) * (ygrid-yrow) + + close(lonf) + close(latf) + + # Why is the range specified in +east and the correction in +west? + put(a, xpt - dlos / 3600.0, ypt + dlas / 3600.0) + return +end + +$define CTG_NADCON_SMALL 0.000000001 # close enough for NADCON inverse + +procedure gdt_nadcon_bckPoint(p, a, xpt, ypt) + local xguess, yguess, b, i, dx, dy + + xguess := xpt + yguess := ypt + b := [] + every i:= 1 to 10 do { + gdt_nadcon_fwdPoint(p, b, xguess, yguess) | fail + dx := xpt - get(b) + dy := ypt - get(b) + if abs(dx) > CTG_NADCON_SMALL then xguess +:= dx + if abs(dy) > CTG_NADCON_SMALL then yguess +:= dy + if abs(dx) <= CTG_NADCON_SMALL & abs(dy) <= CTG_NADCON_SMALL then { + put(a, xguess, yguess) + return + } + } + write(&errout, "Maximum iterations exceeded!!") + fail +end + + + +################# Standard Molodensky Datum Transformation ################## +# See NIMA TR 8350.2 +# +# ************************ WARNING ****************************************** +# NIMA TR 8350.2 contains Molodensky parameters to convert +# from an arbitrary datum to WGS84. To convert from datum A to datum B, +# I call molodensky(Ax-Bx,Ay-By,Az-Bz,Aa,Af,Ba,Bf) where Ax,Ay,Az are the +# shift to convert A to WGS84; Bx,By,Bz are the shift to convert B to WGS84; +# Aa,Af,Ba,Bf are the ellipsoid parameters. +# ************************ WARNING ****************************************** +# +# TODO: +# 1) Add special conversion for North and South pole +# 2) Add Multiple Regression Equations +# 3) Add special WGS72 to WGS84 conversion +# +record gdt_molo( + proj, # projection procedure (always gdt_molo_proj) + inv, # invert myself (always gdt_molo_inv) + dx, dy, dz, # x,y,z differences (output - input) + ain, fin, # input ellipsoid specs + aout, fout # output ellipsoid specs + ) + +procedure molodensky(dx,dy,dz,ain,fin,aout,fout) #: define geodetic conversion + local p, a, din, ein, dout, eout + + if /dx | /dy then fail + if /dz then { + din := gdt_datum_params(dx) | fail + ein := ellipsoid(din.eps) | fail + dout := gdt_datum_params(dy) | fail + eout := ellipsoid(dout.eps) | fail + a := [] + put(a, din.dx - dout.dx, din.dy - dout.dy, din.dz - dout.dz) + put(a, ein[1], ein[2], eout[1], eout[2]) + return molodensky ! a + } + p := gdt_molo() + p.proj := gdt_molo_proj + p.inv := gdt_molo_inv + p.dx := dx + p.dy := dy + p.dz := dz + p.ain := ain + p.fin := fin + p.aout := aout + p.fout := fout + return p +end + +procedure gdt_molo_proj(p, L) + local e2, slam, clam, sphi, cphi, Rm, Rn, dlam, dphi + local i, bbya, da, df, lam, phi, lllist + + da := p.aout - p.ain + df := p.fout - p.fin + e2 := p.fin * (2 - p.fin) + bbya := 1. - p.fin + lllist := [] + every i := 1 to *L by 2 do { + lam := dtor(L[i]) + slam := sin(lam) + clam := cos(lam) + phi := dtor(L[i+1]) + sphi := sin(phi) + cphi := cos(phi) + Rm := p.ain * (1 - e2) / (1 - e2 * sphi ^ 2) ^ (1.5) + Rn := p.ain / sqrt(1 - e2 * sphi ^ 2) + dlam := (-p.dx * slam + p.dy * clam) / (Rn * cphi) + dphi := (-p.dx * sphi * clam - p.dy * sphi * slam + p.dz * cphi + + da * (Rn * e2 * sphi * cphi) / p.ain + + df * (Rm / bbya + Rn * bbya) * sphi * cphi) / Rm + put(lllist, rtod(lam + dlam), rtod(phi + dphi)) + } + return lllist +end + +procedure gdt_molo_inv(p) + local q + + q := gdt_molo() + q.proj := gdt_molo_proj + q.inv := gdt_molo_inv + q.dx := -p.dx + q.dy := -p.dy + q.dz := -p.dz + q.ain := p.aout + q.fin := p.fout + q.aout := p.ain + q.fout := p.fin + return q +end + + + +###################### Ellipsoid Parameters ################################# + +procedure ellipsoid(name) #: return [a, 1/f] for named ellipsoid + local f, line, w, i + + /name := "WGS84" + return case name of { + "Airy 1830"|"Airy"|"AA": [6377563.396, 1 / 299.3249646] + "Australian National"|"AN": [6378160.0, 1 / 298.25] + "Bessel 1841"|"BR": [6377397.155, 1 / 299.1528128] + "Bessel 1841 (Namibia)"|"BN": [6377483.865, 1 / 299.1528128] + "Clarke 1866"|"Clarke66"|"NAD27"|"CC": [6378206.4, 1 / 294.9786982] + "Clarke 1880"|"CD": [6378249.145, 1 / 293.465] + "Everest 1830"|"Everest"|"EA": [6377276.345, 1 / 300.8017] + "Everest 1948"|"Modified Everest"|"EE": [6377304.063, 1 / 300.8017] + "Everest 1956"|"EC": [6377301.243, 1 / 300.8017] + "Everest 1969"|"ED": [6377295.664, 1 / 300.8017] + "Everest (Pakistan)"|"EF": [6377309.613, 1 / 300.8017] + "Everest (Sabah & Sarawak)"|"EB": [6377298.556, 1 / 300.8017] + "Fischer 1960": [6378166.0, 1 / 298.3] + "Fischer 1968": [6378150.0, 1 / 298.3] + "GRS67": [6378160.0, 1 / 298.247167427] + "GRS80"|"NAD83"|"RF": [6378137.0, 1 / 298.257222101] + "Hayford": [6378388.0, 1 / 297.0] + "Helmert 1906"|"HE": [6378200.0, 1 / 298.3] + "Hough"|"HO": [6378270.0, 1 / 297.0] + "Indonesian 1974"|"ID": [6378160.0, 1 / 298.247] + "International 1924"|"IN": [6378388.0, 1 / 297.0] + "Krassovsky 1940"|"KA": [6378245.0, 1 / 298.3] + "Modified Airy"|"AM": [6377340.189, 1 / 299.3249646] + "Modified Fischer 1960"|"FA": [6378155.0, 1 / 298.3] + "South American 1969"|"SA": [6378160.0, 1 / 298.25] + "WGS 1960"|"WGS 60"|"WGS60"|"W60"|"WA": [6378165.0, 1 / 298.3] + "WGS 1966"|"WGS 66"|"WGS66"|"W66"|"WB": [6378145.0, 1 / 298.25] + "WGS 1972"|"WGS 72"|"WGS72"|"W72"|"WD": [6378135.0, 1 / 298.26] + "WGS 1984"|"WGS 84"|"WGS84"|"W84"|"WE": [6378137.0, 1 / 298.257223563] + default: runerr(207, name) + } +end + + + +###################### Datum Parameters ################################# + + +record gdt_datum_rec( + region, # major region of datum (e.g. "Africa") + name, # datum code name + area, # area of datum (e.g. "Cameroon") + eps, # ellipsoid specification (e.g. "CD") + dx, dy, dz, # x,y,z differences from WGS84 + ex, ey, ez # x,y,z maximum error in converted point (unused) + ) + + +procedure gdt_datum_params(codename) + initial gdt_datum_init() + return \gdt_datum_ptab[codename] | runerr(207, codename) +end + + +procedure gdt_datum_add(key, fields[]) + return gdt_datum_ptab[key] := gdt_datum_rec ! fields +end + + +procedure gdt_datum_init() + gdt_datum_ptab := table() + +$define add gdt_datum_add + +# ----------------- AFRICA -------------------------------- +add("ADI-M", "Africa", +"Adindan","mean Ethiopia & Sudan","CD", -166,-15,204, 5,5,3 +) +add("ADI-E", "Africa", +"Adindan","Burkina Faso","CD", -118,-14,218, 25,25,25 +) +add("ADI-F", "Africa", +"Adindan","Cameroon","CD", -134,-2,210, 25,25,25 +) +add("ADI-A", "Africa", +"Adindan","Ethiopia","CD", -165,-11,206, 3,3,3 +) +add("ADI-C", "Africa", +"Adindan","Mali","CD", -123,-20,220, 25,25,25 +) +add("ADI-D", "Africa", +"Adindan","Senegal","CD", -128,-18,224, 25,25,25 +) +add("ADI-B", "Africa", +"Adindan","Sudan","CD", -161,-14,205, 3,5,3 +) +add("AFG", "Africa", +"Afgooye","Somalia","KA", -43,-163,45, 25,25,25 +) +add("ARF-M", "Africa", +"Arc 1950","mean","CD", -143,-90,-294, 20,33,20 +) +add("ARF-A", "Africa", +"Arc 1950","Botswana","CD", -138,-105,-289, 3,5,3 +) +add("ARF-H", "Africa", +"Arc 1950","Burundi","CD", -153,-5,-292, 20,20,20 +) +add("ARF-B", "Africa", +"Arc 1950","Lesotho","CD", -125,-108,-295, 3,3,8 +) +add("ARF-C", "Africa", +"Arc 1950","Malawi","CD", -161,-73,-317, 9,24,8 +) +add("ARF-D", "Africa", +"Arc 1950","Swaziland","CD", -134,-105,-295, 15,15,15 +) +add("ARF-E", "Africa", +"Arc 1950","Zaire","CD", -169,-19,-278, 25,25,25 +) +add("ARF-F", "Africa", +"Arc 1950","Zambia","CD", -147,-74,-283, 21,21,27 +) +add("ARF-G", "Africa", +"Arc 1950","Zimbabwe","CD", -142,-96,-293, 5,8,11 +) +add("ARS-M", "Africa", +"Arc 1960","mean Kenya & Tanzania","CD",-160,-6,-302, 20,20,20 +) +add("ARS-A", "Africa", +"Arc 1960","Kenya","CD", -157,-2,-299, 4,3,3 +) +add("ARS-B", "Africa", +"Arc 1960","Tanzania","CD", -175,-23,-303, 6,9,10 +) +add("PHA", "Africa", +"Ayabelle Lighthouse","Djibouti","CD", -79,-129,145, 25,25,25 +) +add("BID", "Africa", +"Bissau","Guinea-Bissau","IN", -173,253,27, 25,25,25 +) +add("CAP", "Africa", +"Cape","South Africa","CD", -136,-108,-292, 3,6,6 +) +add("CGE", "Africa", +"Carthage","Tunisia","CD", -263,6,431, 6,9,8 +) +add("DAL", "Africa", +"Dabola","Guinea","CD", -83,37,124, 15,15,15 +) +add("EUR-F", "Africa", +"European 1950","Egypt","IN", -130,-117,-151, 6,8,8 +) +add("EUR-T", "Africa", +"European 1950","Tunisia","IN", -112,-77,-145, 25,25,25 +) +add("LEH", "Africa", +"Leigon","Ghana","CD", -130,29,364, 2,3,2 +) +add("LIB", "Africa", +"Liberia 1964","Liberia","CD", -90,40,88, 15,15,15 +) +add("MAS", "Africa", +"Massawa","Eritrea (Ethiopia)","BR", 639,405,60, 25,25,25 +) +add("MER", "Africa", +"Merchich","Morocco","CD", 31,146,47, 5,3,3 +) +add("MIN-A", "Africa", +"Minna","Cameroon","CD", -81,-84,115, 25,25,25 +) +add("MIN-B", "Africa", +"Minna","Nigeria","CD", -92,-93,122, 3,6,5 +) +add("MPO", "Africa", +"M'Poraloko","Gabon","CD", -74,-130,42, 25,25,25 +) +add("NSD", "Africa", +"North Sahara 1959","Algeria","CD", -186,-93,310, 25,25,25 +) +add("OEG", "Africa", +"Old Egyptian 1907","Egypt","HE", -130,110,-13, 3,6,8 +) +add("PTB", "Africa", +"Point 58","mean Burkina Faso & Niger","CD",-106,-129,165, 25,25,25 +) +add("PTN", "Africa", +"Pointe Noire 1948","Congo","CD", -148,51,-291, 25,25,25 +) +add("SCK", "Africa", +"Schwarzeck","Namibia","BN", 616,97,-251, 20,20,20 +) +add("SRL", "Africa", +"Sierra Leone 1960","Sierra Leone","CD", -88,4,101, 15,15,15 +) +add("VOR", "Africa", +"Voirol 1960","Algeria","CD", -123,-206,219, 25,25,25 +) + +# ----------------- ASIA -------------------------------- +add("AIN-A", "Asia", +"Ain el Abd 1970","Bahrain","IN", -150,-250,-1, 25,25,25 +) +add("AIN-B", "Asia", +"Ain el Abd 1970","Saudi Arabia","IN", -143,-236,7, 10,10,10 +) +add("BAT", "Asia", +"Djakarta (Batavia)","Sumatra (Indonesia)","BR",-377,681,-50, 3,3,3 +) +add("EUR-H", "Asia", +"European 1950","Iran","IN", -117,-132,-164, 9,12,11 +) +add("HKD", "Asia", +"Hong Kong 1963","Hong Kong","IN", -156,-271,-189, 25,25,25 +) +add("HTN", "Asia", +"Hu-Tzu-Shan","Taiwan","IN", -637,-549,-203, 15,15,15 +) +add("IND-B", "Asia", +"Indian","Bangladesh","EA", 282,726,254, 10,8,12 +) +add("IND-I", "Asia", +"Indian","India & Nepal","EC", 295,736,257, 12,10,15 +) +add("INF-A", "Asia", +"Indian 1954","Thailand","EA", 217,823,299, 15,6,12 +) +add("ING-A", "Asia", +"Indian 1960","Vietnam (near 16N)","EA",198,881,317, 25,25,25 +) +add("ING-B", "Asia", +"Indian 1960","Con Son Island (Vietnam)","EA",182,915,344, 25,25,25 +) +add("INH-A", "Asia", +"Indian 1975","Thailand","EA", 209,818,290, 12,10,12 +) +add("INH-A1", "Asia", +"Indian 1975","Thailand","EA", 210,814,289, 3,2,3 +) +add("IDN", "Asia", +"Indonesian 1974","Indonesia","ID", -24,-15,5, 25,25,25 +) +add("KAN", "Asia", +"Kandawala","Sri Lanka","EA", -97,787,86, 20,20,20 +) +add("KEA", "Asia", +"Kertau 1948","West Malaysia & Singapore","EE",-11,851,5, 10,8,6 +) +add("KGS", "Asia", +"Korean Geodetic System 1995","South Korea","WE",0,0,0, 1,1,1 +) +add("NAH-A", "Asia", +"Nahrwan","Masirah Island (Oman)","CD", -247,-148,369, 25,25,25 +) +add("NAH-B", "Asia", +"Nahrwan","United Arab Emirates","CD", -249,-156,381, 25,25,25 +) +add("NAH-C", "Asia", +"Nahrwan","Saudi Arabia","CD", -243,-192,477, 20,20,20 +) +add("FAH", "Asia", +"Oman","Oman","CD", -346,-1,224, 3,3,9 +) +add("QAT", "Asia", +"Qatar National","Qatar","IN", -128,-283,22, 20,20,20 +) +add("SOA", "Asia", +"South Asia","Singapore","FA", 7,-10,-26, 25,25,25 +) +add("TIL", "Asia", +"Timbalai 1948","Brunei & East Malaysia (Sarawak & Sabah)","EB", + -679,669,-48, 10,10,12 +) +add("TOY-M", "Asia", +"Tokyo","mean","BR", -148,507,685, 20,5,20 +) +add("TOY-A", "Asia", +"Tokyo","Japan","BR", -148,507,685, 8,5,8 +) +add("TOY-C", "Asia", +"Tokyo","Okinawa","BR", -158,507,676, 20,5,20 +) +add("TOY-B", "Asia", +"Tokyo","South Korea","BR", -146,507,687, 8,5,8 +) +add("TOY-B1", "Asia", +"Tokyo","South Korea","BR", -147,506,687, 2,2,2 +) + +# ----------------- AUSTRALIA -------------------------------- +add("AUA", "Australia", +"Australian Geodetic 1966","Australia & Tasmania","AN",-133,-48,148, 3,3,3 +) +add("AUG", "Australia", +"Australian Geodetic 1984","Australia & Tasmania","AN",-134,-48,149, 2,2,2 +) + +# ----------------- EUROPE -------------------------------- +add("EST", "Europe", +"Co-ordinate System 1937 of Estonia","Estonia","BN",374,150,588, 2,3,3 +) +add("EUR-M", "Europe", +"European 1950","mean","IN", -87,-98,-121, 3,8,5 +) +add("EUR-A", "Europe", +"European 1950","mean Western Europe","IN",-87,-96,-120, 3,3,3 +) +add("EUR-E", "Europe", +"European 1950","Cyprus","IN", -104,-101,-140, 15,15,15 +) +add("EUR-G", "Europe", +"European 1950","England & Channel Islands & Scotland & Shetland Islands","IN", + -86,-96,-120, 3,3,3 +) +add("EUR-K", "Europe", +"European 1950","England & Ireland & Scotland & Shetland Islands","IN", + -86,-96,-120, 3,3,3 +) +add("EUR-B", "Europe", +"European 1950","Greece","IN", -84,-95,-130, 25,25,25 +) +add("EUR-I", "Europe", +"European 1950","Sardinia (Italy)","IN",-97,-103,-120, 25,25,25 +) +add("EUR-J", "Europe", +"European 1950","Sicily (Italy)","IN", -97,-88,-135, 20,20,20 +) +add("EUR-L", "Europe", +"European 1950","Malta","IN", -107,-88,-149, 25,25,25 +) +add("EUR-C", "Europe", +"European 1950","Norway & Finland","IN",-87,-95,-120, 3,5,3 +) +add("EUR-D", "Europe", +"European 1950","Portugal & Spain","IN",-84,-107,-120, 5,6,3 +) +add("EUS", "Europe", +"European 1979","mean","IN", -86,-98,-119, 3,3,3 +) +add("HJO", "Europe", +"Hjorsey 1955","Iceland","IN", -73,46,-86, 3,3,6 +) +add("IRL", "Europe", +"Ireland 1965","Ireland","AM", 506,-122,611, 3,3,3 +) +add("OGB-M", "Europe", +"Ordnance Survey Great Britain 1936","mean","AA",375,-111,431, 10,10,15 +) +add("OGB-A", "Europe", +"Ordnance Survey Great Britain 1936","England","AA",371,-112,434, 5,5,6 +) +add("OGB-B", "Europe", +"Ordnance Survey Great Britain 1936","England & Isle of Man & Wales","AA", + 371,-111,434, 10,10,15 +) +add("OGB-C", "Europe", +"Ordnance Survey Great Britain 1936","Scotland & Shetland Islands","AA", + 384,-111,425, 10,10,10 +) +add("OGB-D", "Europe", +"Ordnance Survey Great Britain 1936","Wales","AA",370,-108,434, 20,20,20 +) +add("MOD", "Europe", +"Rome 1940","Sardinia","IN", -225,-65,9, 25,25,25 +) +add("SPK-A", "Europe", +"S-42 (Pulkovo 1942)","Hungary","KA", 28,-121,-77, 2,2,2 +) +add("SPK-B", "Europe", +"S-42 (Pulkovo 1942)","Poland","KA", 23,-124,-82, 4,2,4 +) +add("SPK-C", "Europe", +"S-42 (Pulkovo 1942)","Czechoslavakia","KA",26,-121,-78, 3,3,2 +) +add("SPK-D", "Europe", +"S-42 (Pulkovo 1942)","Latvia","KA", 24,-124,-82, 2,2,2 +) +add("SPK-E", "Europe", +"S-42 (Pulkovo 1942)","Kazakhstan","KA",15,-130,-84, 25,25,25 +) +add("SPK-F", "Europe", +"S-42 (Pulkovo 1942)","Albania","KA", 24,-130,-92, 3,3,3 +) +add("SPK-G", "Europe", +"S-42 (Pulkovo 1942)","Romania","KA", 28,-121,-77, 3,5,3 +) +add("CCD", "Europe", +"S-JTSK","Czechoslavakia (Prior 1 Jan 1993)","BR",589,76,480, 4,2,3 +) + +# ----------------- NORTH AMERICA -------------------------------- +add("CAC", "North America", +"Cape Canaveral","mean Bahamas & Florida","CC",-2,151,181, 3,3,3 +) +gdt_datum_ptab["NAD27"] := +add("NAS-C", "North America", +"North American 1927","mean CONUS","CC",-8,160,176, 5,5,6 +) +add("NAS-B", "North America", +"North American 1927","mean West CONUS","CC",-8,159,175, 5,3,3 +) +add("NAS-A", "North America", +"North American 1927","mean East CONUS","CC",-9,161,179, 5,5,8 +) +add("NAS-D", "North America", +"North American 1927","Alaska (minus Aleutian Islands)","CC", + -5,135,172, 5,9,5 +) +add("NAS-V", "North America", +"North American 1927","Aleutian Islands East of 180W","CC", + -2,152,149, 6,8,10 +) +add("NAS-W", "North America", +"North American 1927","Aleutian Islands West of 180W","CC", + 2,204,105, 10,10,10 +) +add("NAS-Q", "North America", +"North American 1927","Bahamas (minus San Salvador Island)","CC", + -4,154,178, 5,3,5 +) +add("NAS-R", "North America", +"North American 1927","San Salvador Island","CC",1,140,165, 25,25,25 +) +add("NAS-E", "North America", +"North American 1927","mean Canada","CC",-10,158,187, 15,11,6 +) +add("NAS-F", "North America", +"North American 1927","Albert & British Columbia (Canada)","CC", + -7,162,188, 8,8,6 +) +add("NAS-G", "North America", +"North American 1927","Eastern Canada","CC",-22,160,190, 6,6,3 +) +add("NAS-H", "North America", +"North American 1927","Manitoba & Ontario (Canada)","CC",-9,157,184, 9,5,5 +) +add("NAS-I", "North America", +"North American 1927","Northwest Territories & Saskatchewan (Canada)","CC", + 4,159,188, 5,5,3 +) +add("NAS-J", "North America", +"North American 1927","Yukon (Canada)","CC",-7,139,181, 5,8,3 +) +add("NAS-O", "North America", +"North American 1927","Canal Zone","CC",0,125,201, 20,20,20 +) +add("NAS-P", "North America", +"North American 1927","mean Caribbean","CC",-3,142,183, 3,9,12 +) +add("NAS-N", "North America", +"North American 1927","mean Central America","CC",0,125,194, 8,3,5 +) +add("NAS-T", "North America", +"North American 1927","Cuba","CC", -9,152,178, 25,25,25 +) +add("NAS-U", "North America", +"North American 1927","Greenland (Hayes Peninsula)","CC",11,114,195, 25,25,25 +) +add("NAS-L", "North America", +"North American 1927","Mexico","CC", -12,130,190, 8,6,6 +) +add("NAR-A", "North America", +"North American 1983","Alaska (minus Aleutian Islands)","RF",0,0,0, 2,2,2 +) +add("NAR-E", "North America", +"North American 1983","Aleutian Islands","RF",-2,0,4, 5,2,5 +) +add("NAR-B", "North America", +"North American 1983","Canada","RF", 0,0,0, 2,2,2 +) +gdt_datum_ptab["NAD83"] := +add("NAR-C", "North America", +"North American 1983","CONUS","RF", 0,0,0, 2,2,2 +) +add("NAR-H", "North America", +"North American 1983","Hawaii","RF", 1,1,-1, 2,2,2 +) +add("NAR-D", "North America", +"North American 1983","Mexico & Central America","RF",0,0,0, 2,2,2 +) + +# ----------------- SOUTH AMERICA -------------------------------- +add("BOO", "South America", +"Bogota Observatory","Colombia","IN", 307,304,-318, 6,5,6 +) +add("CAI", "South America", +"Campo Inchauspe 1969","Argentina","IN",-148,136,90, 5,5,5 +) +add("CHU", "South America", +"Chua Astro","Paraguay","IN", -134,229,-29, 6,9,5 +) +add("COA", "South America", +"Corrego Alegre","Brazil","IN", -206,172,-6, 5,3,5 +) +add("PRP-M", "South America", +"Provisional South American 1956","mean","IN",-288,175,-376, 17,27,27 +) +add("PRP-A", "South America", +"Provisional South American 1956","Bolivia","IN",-270,188,-388, 5,11,14 +) +add("PRP-B", "South America", +"Provisional South American 1956","Northern Chile","IN", + -270,183,-390, 25,25,25 +) +add("PRP-C", "South America", +"Provisional South American 1956","Southern Chile","IN", + -305,243,-442, 20,20,20 +) +add("PRP-D", "South America", +"Provisional South American 1956","Colombia","IN",-282,169,-371, 15,15,15 +) +add("PRP-E", "South America", +"Provisional South American 1956","Ecuador","IN",-278,171,-367, 3,5,3 +) +add("PRP-F", "South America", +"Provisional South American 1956","Guyana","IN",-298,159,-369, 6,14,5 +) +add("PRP-G", "South America", +"Provisional South American 1956","Peru","IN",-279,175,-379, 6,8,12 +) +add("PRP-H", "South America", +"Provisional South American 1956","Venezuela","IN",-295,173,-371, 9,14,15 +) +add("HIT", "South America", +"Provisional South Chilean 1963","Southern Chile","IN",16,196,93, 25,25,25 +) +add("SAN-M", "South America", +"South American 1969","mean","SA", -57,1,-41, 15,6,9 +) +add("SAN-A", "South America", +"South American 1969","Argentina","SA", -62,-1,-37, 5,5,5 +) +add("SAN-B", "South America", +"South American 1969","Bolivia","SA", -61,2,-48, 15,15,15 +) +add("SAN-C", "South America", +"South American 1969","Brazil","SA", -60,-2,-41, 3,5,5 +) +add("SAN-D", "South America", +"South American 1969","Chile","SA", -75,-1,-44, 15,8,11 +) +add("SAN-E", "South America", +"South American 1969","Colombia","SA", -44,6,-36, 6,6,5 +) +add("SAN-F", "South America", +"South American 1969","Ecuador (minus Galapagos Islands)","SA", + -48,3,-44, 3,3,3 +) +add("SAN-J", "South America", +"South American 1969","Baltra & Galapagos Islands (Ecuador)","SA", + -47,26,-42, 25,25,25 +) +add("SAN-G", "South America", +"South American 1969","Guyana","SA", -53,3,-47, 9,5,5 +) +add("SAN-H", "South America", +"South American 1969","Paraguay","SA", -61,2,-33, 15,15,15 +) +add("SAN-I", "South America", +"South American 1969","Peru","SA", -58,0,-44, 5,5,5 +) +add("SAN-K", "South America", +"South American 1969","Trinidad & Tobago","SA",-45,12,-33, 25,25,25 +) +add("SAN-L", "South America", +"South American 1969","Venezuela","SA", -45,8,-33, 3,6,3 +) +add("SIR", "South America", +"South American Geocentric Reference System (SIRGAS)","South America","RF", + 0,0,0, 1,1,1 +) +add("ZAN", "South America", +"Zanderij","Suriname","IN", -265,120,-358, 5,5,8 +) + +# ----------------- ATLANTIC OCEAN -------------------------------- +add("AIA", "Atlantic Ocean", +"Antigua Island Astro 1943","Antigua & Leeward Islands","CD", + -270,13,62, 25,25,25 +) +add("ASC", "Atlantic Ocean", +"Ascension Island 1958","Ascension Island","IN",-205,107,53, 25,25,25 +) +add("SHB", "Atlantic Ocean", +"Astro DOS 71/4","St Helena Island","IN",-320,550,-494, 25,25,25 +) +add("BER", "Atlantic Ocean", +"Bermuda 1957","Bermuda","CC", -73,213,296, 20,20,20 +) +add("DID", "Atlantic Ocean", +"Deception Island","Deception Island & Antarctica","CD",260,12,-147, 20,20,20 +) +add("FOT", "Atlantic Ocean", +"Fort Thomas 1955","Nevis & St. Kitts & Leeward Islands","CD", + -7,215,225, 25,25,25 +) +add("GRA", "Atlantic Ocean", +"Graciosa Base SW 1948", +"Faial & Graciosa & Pico & Sao Jorge & Terceira Islands (Azores)","IN", + -104,167,-38, 3,3,3 +) +add("ISG", "Atlantic Ocean", +"ISTS 061 Astro 1968","South Georgia Island","IN",-794,119,-298, 25,25,25 +) +add("LCF", "Atlantic Ocean", +"L. C. 5 Astro 1961","Cayman Brac Island","CC",42,124,147, 25,25,25 +) +add("ASM", "Atlantic Ocean", +"Montserrat Island Astro 1958","Montserrat & Leeward Islands","CD", + 174,359,365, 25,25,25 +) +add("NAP", "Atlantic Ocean", +"Naparima BWI","Trinidad & Tobago","IN",-10,375,165, 15,15,15 +) +add("FLO", "Atlantic Ocean", +"Observatorio Meteorologico 1939","Corvo & Flores Islands (Azores)","IN", + -425,-169,81, 20,20,20 +) +add("PLN", "Atlantic Ocean", +"Pico de las Nieves","Canary Islands","IN",-307,-92,127, 25,25,25 +) +add("POS", "Atlantic Ocean", +"Porto Santo 1936","Porto Santo & Madeira Islands","IN",-499,-249,314, 25,25,25 +) +add("PUR", "Atlantic Ocean", +"Puerto Rico","Puerto Rico & Virgin Islands","CC",11,72,-101, 3,3,3 +) +add("QUO", "Atlantic Ocean", +"Qornoq","South Greenland","IN", 164,138,-189, 25,25,32 +) +add("SAO", "Atlantic Ocean", +"Sao Braz","Sao Miguel & Santa Maria Islands","IN",-203,141,53, 25,25,25 +) +add("SAP", "Atlantic Ocean", +"Sapper Hill 1943","East Falkland Island","IN",-355,21,72, 1,1,1 +) +add("SGM", "Atlantic Ocean", +"Selvagem Grande 1938","Salvage Islands","IN",-289,-124,60, 25,25,25 +) +add("TDC", "Atlantic Ocean", +"Tristan Astro 1968","Tristan da Cunha","IN",-632,438,-609, 25,25,25 +) + +# ----------------- INDIAN OCEAN -------------------------------- +add("ANO", "Indian Ocean", +"Anna 1 Astro 1965","Cocos Islands","AN",-491,-22,435, 25,25,25 +) +add("GAA", "Indian Ocean", +"Gan 1970","Republic of Maldives","IN", -133,-321,50, 25,25,25 +) +add("IST", "Indian Ocean", +"ISTS 073 Astro 1969","Diego Garcia","IN",208,-435,-229, 25,25,25 +) +add("KEG", "Indian Ocean", +"Kerguelen Island 1949","Kerguelen Island","IN",145,-187,103, 25,25,25 +) +add("MIK", "Indian Ocean", +"Mahe 1971","Mahe Island","CD", 41,-220,-134, 25,25,25 +) +add("REU", "Indian Ocean", +"Reunion","Mascarene Islands","IN", 94,-948,-1262, 25,25,25 +) + +# ----------------- PACIFIC OCEAN -------------------------------- +add("AMA", "Pacific Ocean", +"American Samoa 1962","American Samoa Islands","CC",-115,118,426, 25,25,25 +) +add("ATF", "Pacific Ocean", +"Astro Beacon E 1945","Iwo Jima","IN", 145,75,-272, 25,25,25 +) +add("TRN", "Pacific Ocean", +"Astro Tern Island (FRIG) 1961","Tern Island","IN",114,-116,-333, 25,25,25 +) +add("ASQ", "Pacific Ocean", +"Astronomical Station 1952","Marcus Island","IN",124,-234,-25, 25,25,25 +) +add("IBE", "Pacific Ocean", +"Bellevue (IGN)","Efate & Erromango Islands","IN",-127,-769,472, 20,20,20 +) +add("CAO", "Pacific Ocean", +"Canton Astro 1966","Phoenix Islands","IN",298,-304,-375, 15,15,15 +) +add("CHI", "Pacific Ocean", +"Chatham Island Astro 1971","Chatham Island (New Zealand)","IN", + 175,-38,113, 15,15,15 +) +add("GIZ", "Pacific Ocean", +"DOS 1968","Gizo Island (New Georgia Islands)","IN",230,-199,-752, 25,25,25 +) +add("EAS", "Pacific Ocean", +"Easter Island 1967","Easter Island","IN",211,147,111, 25,25,25 +) +add("GEO", "Pacific Ocean", +"Geodetic Datum 1949","New Zealand","IN",84,-22,209, 5,3,5 +) +add("GUA", "Pacific Ocean", +"Guam 1963","Guam","CC", -100,-248,259, 3,3,3 +) +add("DOB", "Pacific Ocean", +"GUX 1 Astro","Guadalcanal Island","IN",252,-209,-751, 25,25,25 +) +add("JOH", "Pacific Ocean", +"Johnston Island 1961","Johnston Island","IN",189,-79,-202, 25,25,25 +) +add("KUS", "Pacific Ocean", +"Kusaie Astro 1951","Caroline Islands & Fed. States of Micronesia","IN", + 647,1777,-1124, 25,25,25 +) +add("LUZ-A", "Pacific Ocean", +"Luzon","Philippines (minus Mindanao Island)","CC",-133,-77,-51, 8,11,9 +) +add("LUZ-B", "Pacific Ocean", +"Luzon","Mindanao Island (Philippines)","CC",-133,-79,-72, 25,25,25 +) +add("MID", "Pacific Ocean", +"Midway Astro 1961","Midway Islands","IN",912,-58,1227, 25,25,25 +) +add("OHA-M", "Pacific Ocean", +"Old Hawaiian","mean","CC", 61,-285,-181, 25,20,20 +) +add("OHA-A", "Pacific Ocean", +"Old Hawaiian","Hawaii","CC", 89,-279,-183, 25,25,25 +) +add("OHA-B", "Pacific Ocean", +"Old Hawaiian","Kauai","CC", 45,-290,-172, 20,20,20 +) +add("OHA-C", "Pacific Ocean", +"Old Hawaiian","Maui","CC", 65,-290,-190, 25,25,25 +) +add("OHA-D", "Pacific Ocean", +"Old Hawaiian","Oahu","CC", 58,-283,-182, 10,6,6 +) +add("OHI-M", "Pacific Ocean", +"Old Hawaiian Int","mean","IN", 201,-228,-346, 25,20,20 +) +add("OHI-A", "Pacific Ocean", +"Old Hawaiian Int","Hawaii","IN", 229,-222,-348, 25,25,25 +) +add("OHI-B", "Pacific Ocean", +"Old Hawaiian Int","Kauai","IN", 185,-233,-337, 20,20,20 +) +add("OHI-C", "Pacific Ocean", +"Old Hawaiian Int","Maui","IN", 205,-233,-355, 25,25,25 +) +add("OHI-D", "Pacific Ocean", +"Old Hawaiian Int","Oahu","IN", 198,-226,-347, 10,6,6 +) +add("PIT", "Pacific Ocean", +"Pitcairn Astro 1967","Pitcairn Island","IN",185,165,42, 25,25,25 +) +add("SAE", "Pacific Ocean", +"Santo (DOS) 1965","Espirito Santo Island","IN",170,42,84, 25,25,25 +) +add("MVS", "Pacific Ocean", +"Viti Levu 1916","Viti Levu Island (Fiji Islands)","CD",51,391,-36, 25,25,25 +) +add("ENW", "Pacific Ocean", +"Wake-Eniwetok 1960","Marshall Islands","HO",102,52,-38, 3,3,3 +) +add("WAK", "Pacific Ocean", +"Wake Island Astro 1952","Wake Atoll","IN",276,-57,149, 25,25,25 +) + +# ----------------- WORLD-WIDE DATUM ---------------------------- +gdt_datum_ptab["WGS66"] := +add("W66", "World-wide Datum", +"WGS 1966","Global Definition I","WB", 0,0,0, 0,0,0 +) +gdt_datum_ptab["WGS72"] := +add("W72", "World-wide Datum", +"WGS 1972","Global Definition I","WD", 0,0,0, 3,3,3 +) +gdt_datum_ptab["WGS84"] := +add("W84", "World-wide Datum", +"WGS 1984","Global Definition II","WE", 0,0,0, 0,0,0 +) + +# ----------------- MISC. NON-SATELLITE DERIVED ---------------------------- +# Error bounds of zero mean unknown error. +add("BUR", "Misc. Non-satellite derived", +"Bukit Rimpah","Bangka & Belitung Islands (Indonesia)","BR",-384,664,-48, 0,0,0 +) +add("CAZ", "Misc. Non-satellite derived", +"Camp Area Astro","Camp McMurdo Area (Antarctica)","IN",-104,-129,239, 0,0,0 +) +add("EUR-S", "Misc. Non-satellite derived", +"European 1950","mean Near East","IN", -103,-106,-141, 0,0,0 +) +add("GSE", "Misc. Non-satellite derived", +"Gunung Segara","Kalimantan (Indonesia)","BR",-403,684,41, 0,0,0 +) +add("HEN", "Misc. Non-satellite derived", +"Herat North","Afghanistan","IN", -333,-222,114, 0,0,0 +) +add("HER", "Misc. Non-satellite derived", +"Hermannskogel", +"Yugoslavia (Prior to 1990) Slovenia & Croatia & Bosnia & Herzegovina & Serbia", +"BN", 682,-203,480, 0,0,0 +) +add("IND-P", "Misc. Non-satellite derived", +"Indian","Pakistan","EF", 283,682,231, 0,0,0 +) +add("PUK", "Misc. Non-satellite derived", +"Pulkovo 1942","Russia","KA", 28,-130,-95, 0,0,0 +) +add("TAN", "Misc. Non-satellite derived", +"Tananarive Observatory 1925","Madagascar","IN",-189,-242,-91, 0,0,0 +) +add("VOI", "Misc. Non-satellite derived", +"Voirol 1874","Tunisia & Algeria","CD", -73,-247,227,0,0,0 +) +add("YAC", "Misc. Non-satellite derived", +"Yacare","Uruguay","IN", -155,171,37, 0,0,0 +) +return +end |