diff --git a/.travis.yml b/.travis.yml index 7197b06..2b2dbac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ # This is the config file for Travis-ci.org sudo: required +dist: focal # Avoid consuming our GitHub LFS quota git: diff --git a/copyright_and_licenses.csv b/copyright_and_licenses.csv index 1e34167..09fd15f 100644 --- a/copyright_and_licenses.csv +++ b/copyright_and_licenses.csv @@ -363,5 +363,32 @@ us_noaa_wshpgn.tif,Disclaimed,Public domain,, us_noaa_wthpgn.tif,Disclaimed,Public domain,, us_noaa_wvhpgn.tif,Disclaimed,Public domain,, us_noaa_wyhpgn.tif,Disclaimed,Public domain,, +us_noaa_nadcon5_as62_nad83_1993_as.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad27_nad83_1986_alaska.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad27_nad83_1986_conus.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_pr40_nad83_1986_prvi.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif,Disclaimed,Public domain,1.13, +us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif,Disclaimed,Public domain,1.13, za_cdngi_README.txt,Disclaimed,Public domain,1.8, za_cdngi_sageoid2010.tif,Chief Directorate: National Geospatial Information (CD:NGI) South Africa,CC-BY-4.0,1.8, diff --git a/grid_tools/check_gtiff_grid.py b/grid_tools/check_gtiff_grid.py index 977362d..35cd5c5 100755 --- a/grid_tools/check_gtiff_grid.py +++ b/grid_tools/check_gtiff_grid.py @@ -75,7 +75,7 @@ def get_srs(ds, epsg_code_key, wkt_key, is_first_subds, infos, warnings, errors) return srs -def validate_horizontal_offset(ds, is_first_subds): +def validate_horizontal_offset(type, ds, is_first_subds): infos = [] warnings = [] @@ -88,10 +88,16 @@ def validate_horizontal_offset(ds, is_first_subds): warnings.append("target_crs found, but not a Geographic CRS") if ds.RasterCount < 2: - return infos, warnings, ["TYPE=HORIZONTAL_OFFSET should have at least 2 bands"] + return infos, warnings, [f"TYPE={type} should have at least 2 bands"] + if type == "GEOGRAPHIC_3D_OFFSET": + if ds.RasterCount < 3: + return infos, warnings, [f"TYPE={type} should have at least 3 bands"] + if target_crs.GetAxesCount() != 3: + warnings.append("target_crs found, but not a Geographic 3D CRS") lat_offset_idx = 0 lon_offset_idx = 0 + eht_offset_idx = 0 lat_accuracy_idx = 0 lon_accuracy_idx = 0 for i in range(ds.RasterCount): @@ -105,6 +111,10 @@ def validate_horizontal_offset(ds, is_first_subds): if lon_offset_idx > 0: return infos, warnings, ["At least, 2 bands are tagged with Description = longitude_offset"] lon_offset_idx = i+1 + elif desc == 'ellipsoidal_height_offset': + if eht_offset_idx > 0: + return infos, warnings, ["At least, 3 bands are tagged with Description = ellipsoidal_height_offset"] + eht_offset_idx = i+1 elif desc == 'latitude_offset_accuracy': lat_accuracy_idx = i+1 elif desc == 'longitude_offset_accuracy': @@ -125,6 +135,16 @@ def validate_horizontal_offset(ds, is_first_subds): lat_offset_idx = 1 lon_offset_idx = 2 + if type == "GEOGRAPHIC_3D_OFFSET": + if eht_offset_idx == 0: + return infos, warnings, ["No band with Description = ellipsoidal_height_offset"] + if eht_offset_idx != 3: + infos.append( + 'Usually the 3rd band should be ellipsoidal_height_offset.') + else: + if eht_offset_idx != 0: + return infos, warnings, ["Band with Description = ellipsoidal_height_offset found, but not expected"] + for idx in (lat_offset_idx, lon_offset_idx): band = ds.GetRasterBand(idx) if band.GetNoDataValue(): @@ -149,6 +169,19 @@ def validate_horizontal_offset(ds, is_first_subds): errors.append("positive_value=%s not supported by PROJ" % positive_value) + if eht_offset_idx > 0: + band = ds.GetRasterBand(eht_offset_idx) + if band.GetNoDataValue(): + warnings.append( + "ellipsoidal_height_offset band has a nodata setting. Nodata for horizontal shift grids is ignored by PROJ") + units = band.GetUnitType() + if not units: + warnings.append( + "ellipsoidal_height_offset band is missing units description. metre will be assumed") + elif units not in ('metre',): + errors.append( + "ellipsoidal_height_offset band is using a unit not supported by PROJ") + if lat_accuracy_idx > 0 and lon_accuracy_idx > 0: if lat_accuracy_idx != 3 or lon_accuracy_idx != 4: infos.append( @@ -264,6 +297,56 @@ def validate_vertical_offset_vertical_to_vertical(ds, is_first_subds): return infos, warnings, errors +def validate_ellipsoidal_height_offset(ds, is_first_subds): + + infos = [] + warnings = [] + errors = [] + + source_crs = ds.GetSpatialRef() + if source_crs: + if not source_crs.IsGeographic(): + errors.append("source_crs found, but not a Geographic CRS") + + target_crs = get_srs(ds, 'target_crs_epsg_code', 'target_crs_wkt', + is_first_subds, infos, warnings, errors) + if target_crs: + if not target_crs.IsGeographic(): + errors.append("target_crs found, but not a Geographic CRS") + + offset_idx = 0 + for i in range(ds.RasterCount): + b = ds.GetRasterBand(i+1) + desc = b.GetDescription() + if desc == 'ellipsoidal_height_offset': + if offset_idx > 0: + return infos, warnings, ["At least, 2 bands are tagged with Description = ellipsoidal_height_offset"] + offset_idx = i+1 + elif desc: + infos.append('Band of type %s not recognized by PROJ' % desc) + + if offset_idx == 0: + if is_first_subds: + warnings.append( + 'No explicit band tagged with Description = ellipsoidal_height_offset. Assuming first one') + offset_idx = 1 + + if offset_idx != 1: + infos.append( + 'Usually the first band should be ellipsoidal_height_offset.') + + units = ds.GetRasterBand(offset_idx).GetUnitType() + if not units: + if is_first_subds: + warnings.append( + "ellipsoidal_height_offset band is missing units description. Metre will be assumed") + elif units not in ('metre', ): + errors.append( + "ellipsoidal_height_offset band is using a unit not supported by PROJ") + + return infos, warnings, errors + + def validate_geocentric_translation(ds, is_first_subds): infos = [] @@ -408,7 +491,7 @@ def validate_defmodel(ds, is_first_subds, first_subds): 'HORIZONTAL', 'VERTICAL', '3D'): - warnings.append("DISPLACEMENT_TYPE=%s is not recognize by PROJ" % displacement_type) + warnings.append("DISPLACEMENT_TYPE=%s is not recognized by PROJ" % displacement_type) uncertainty_type = ds.GetMetadataItem('UNCERTAINTY_TYPE') if not displacement_type: @@ -420,7 +503,7 @@ def validate_defmodel(ds, is_first_subds, first_subds): 'HORIZONTAL', 'VERTICAL', '3D'): - warnings.append("UNCERTAINTY_TYPE=%s is not recognize by PROJ" % uncertainty_type) + warnings.append("UNCERTAINTY_TYPE=%s is not recognized by PROJ" % uncertainty_type) if displacement_type == 'HORIZONTAL': min_expected_band_count = 2 @@ -577,10 +660,12 @@ def validate_ifd(global_info, ds, is_first_subds, first_subds): elif type not in ('HORIZONTAL_OFFSET', 'VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL', 'VERTICAL_OFFSET_VERTICAL_TO_VERTICAL', + 'GEOGRAPHIC_3D_OFFSET', + 'ELLIPSOIDAL_HEIGHT_OFFSET', 'GEOCENTRIC_TRANSLATION', 'VELOCITY', 'DEFORMATION_MODEL',): - warnings.append("TYPE=%s is not recognize by PROJ" % type) + warnings.append("TYPE=%s is not recognized by PROJ" % type) if is_first_subds: if not ds.GetMetadataItem('area_of_use'): @@ -627,8 +712,8 @@ def validate_ifd(global_info, ds, is_first_subds, first_subds): warnings.append( 'Image uses %s compression. Might cause compatibility problems' % compression) - if type == 'HORIZONTAL_OFFSET': - i, w, e = validate_horizontal_offset(ds, is_first_subds) + if type in ('HORIZONTAL_OFFSET', 'GEOGRAPHIC_3D_OFFSET'): + i, w, e = validate_horizontal_offset(type, ds, is_first_subds) infos += i warnings += w errors += e @@ -659,6 +744,11 @@ def validate_ifd(global_info, ds, is_first_subds, first_subds): infos += i warnings += w errors += e + elif type == 'ELLIPSOIDAL_HEIGHT_OFFSET': + i, w, e = validate_ellipsoidal_height_offset(ds, is_first_subds) + infos += i + warnings += w + errors += e grid_name = ds.GetMetadataItem('grid_name') if grid_name: @@ -707,7 +797,9 @@ def validate_ifd(global_info, ds, is_first_subds, first_subds): 'number_of_nested_grids', 'UNCERTAINTY_TYPE', 'DISPLACEMENT_TYPE', - 'UNCERTAINTY_TYPE',): + 'UNCERTAINTY_TYPE', + 'interpolation_method', + 'auxiliary_data',): infos.append('Metadata %s=%s ignored' % (key, md[key])) for i in range(ds.RasterCount): diff --git a/travis/expected_main.lst b/travis/expected_main.lst index 43a8dde..ea4795e 100644 --- a/travis/expected_main.lst +++ b/travis/expected_main.lst @@ -327,6 +327,33 @@ us_noaa_mihpgn.tif us_noaa_mnhpgn.tif us_noaa_mohpgn.tif us_noaa_mshpgn.tif +us_noaa_nadcon5_as62_nad83_1993_as.tif +us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif +us_noaa_nadcon5_nad27_nad83_1986_alaska.tif +us_noaa_nadcon5_nad27_nad83_1986_conus.tif +us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif +us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif +us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif +us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif +us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif +us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif +us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif +us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif +us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif +us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif +us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif +us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif +us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif +us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif +us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif +us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif +us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif +us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif +us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif +us_noaa_nadcon5_pr40_nad83_1986_prvi.tif +us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif +us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif +us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif us_noaa_nbhpgn.tif us_noaa_nchpgn.tif us_noaa_ndhpgn.tif diff --git a/us_noaa/build_nadcon5.py b/us_noaa/build_nadcon5.py new file mode 100755 index 0000000..03a4584 --- /dev/null +++ b/us_noaa/build_nadcon5.py @@ -0,0 +1,374 @@ +from osgeo import gdal, osr +import os +import requests + +import sys +sys.path.append("../grid_tools") +from cloud_optimize_gtiff import generate_optimized_file + +base_url = "https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds" + +build_number = "20160901" +subdirs = ["as62.nad83_1993.as", + "gu63.nad83_1993.guamcnmi", + "nad27.nad83_1986.alaska", + "nad27.nad83_1986.conus", + "nad83_1986.nad83_1992.alaska", + "nad83_1986.nad83_1993.hawaii", + "nad83_1986.nad83_1993.prvi", + "nad83_1986.nad83_harn.conus", + "nad83_1992.nad83_2007.alaska", + "nad83_1993.nad83_1997.prvi", + "nad83_1993.nad83_2002.as", + "nad83_1993.nad83_2002.guamcnmi", + "nad83_1993.nad83_pa11.hawaii", + "nad83_1997.nad83_2002.prvi", + "nad83_2002.nad83_2007.prvi", + "nad83_2002.nad83_ma11.guamcnmi", + "nad83_2002.nad83_pa11.as", + "nad83_2007.nad83_2011.alaska", + "nad83_2007.nad83_2011.conus", + "nad83_2007.nad83_2011.prvi", + "nad83_fbn.nad83_2007.conus", + "nad83_harn.nad83_fbn.conus", + "ohd.nad83_1986.hawaii", + "pr40.nad83_1986.prvi", + #"sg1897.sg1952.stgeorge", + "sg1952.nad83_1986.stgeorge", + "sl1952.nad83_1986.stlawrence", + #"sp1897.sp1952.stpaul", + "sp1952.nad83_1986.stpaul", + #"ussd.nad27.conus", +] + +d = { + "as62.nad83_1993.as": { + "source_crs": "EPSG:4169", + "target_crs": "EPSG:4152", + "area_of_use": "USA - American Samoa", + }, + "gu63.nad83_1993.guamcnmi": { + "source_crs": "EPSG:4675", + "target_crs": "EPSG:4152", + "area_of_use": "USA - Guam and the Commonwealth of the Northern Mariana Islands", + }, + "nad27.nad83_1986.alaska": { + "source_crs": "EPSG:4267", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Alaska", + }, + "nad27.nad83_1986.conus": { + "source_crs": "EPSG:4267", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Conterminous", + }, + "nad83_1986.nad83_1992.alaska": { + "source_crs": "EPSG:4269", + "target_crs": "EPSG:4152", + "area_of_use": "USA - Alaska", + }, + "nad83_1986.nad83_1993.hawaii": { + "source_crs": "EPSG:4269", + "target_crs": "EPSG:4152", + "area_of_use": "USA - Hawaii", + }, + "nad83_1986.nad83_1993.prvi": { + "source_crs": "EPSG:4269", + "target_crs": "EPSG:4152", + "area_of_use": "USA - Puerto Rico and the Virgin Islands", + }, + "nad83_1986.nad83_harn.conus": { + "source_crs": "EPSG:4269", + "target_crs": "EPSG:4152", + "area_of_use": "USA - Conterminous", + }, + "nad83_1992.nad83_2007.alaska": { + "source_crs": "EPSG:4152", + "target_crs": "EPSG:4759", + "area_of_use": "USA - Alaska", + }, + "nad83_1993.nad83_1997.prvi": { + "source_crs": "EPSG:4152", + "target_crs": "EPSG:8545", + "area_of_use": "USA - Puerto Rico and the Virgin Islands", + }, + "nad83_1993.nad83_2002.as": { + "source_crs": "EPSG:4152", + "target_crs": "EPSG:8860", + "area_of_use": "USA - American Samoa", + }, + "nad83_1993.nad83_2002.guamcnmi": { + "source_crs": "EPSG:4152", + "target_crs": "EPSG:8860", + "area_of_use": "USA - Guam and the Commonwealth of the Northern Mariana Islands", + }, + "nad83_1993.nad83_pa11.hawaii": { + "source_crs": "EPSG:4152", + "target_crs": "EPSG:6322", + "area_of_use": "USA - Hawaii", + }, + "nad83_1997.nad83_2002.prvi": { + "source_crs": "EPSG:8545", + "target_crs": "EPSG:8860", + "area_of_use": "USA - Puerto Rico and the Virgin Islands", + }, + "nad83_2002.nad83_2007.prvi": { + "source_crs": "EPSG:8860", + "target_crs": "EPSG:4759", + "area_of_use": "USA - Puerto Rico and the Virgin Islands", + }, + "nad83_2002.nad83_ma11.guamcnmi": { + "source_crs": "EPSG:8860", + "target_crs": "EPSG:6325", + "area_of_use": "USA - Guam and the Commonwealth of the Northern Mariana Islands", + }, + "nad83_2002.nad83_pa11.as": { + "source_crs": "EPSG:8860", + "target_crs": "EPSG:6322", + "area_of_use": "USA - American Samoaa", + }, + "nad83_2007.nad83_2011.alaska": { + "source_crs": "EPSG:4759", + "target_crs": "EPSG:6318", + "area_of_use": "USA - Alaska", + }, + "nad83_2007.nad83_2011.conus": { + "source_crs": "EPSG:4759", + "target_crs": "EPSG:6318", + "area_of_use": "USA - Conterminous", + }, + "nad83_2007.nad83_2011.prvi": { + "source_crs": "EPSG:4759", + "target_crs": "EPSG:6318", + "area_of_use": "USA - Puerto Rico and the Virgin Islands", + }, + "nad83_fbn.nad83_2007.conus": { + "source_crs": "EPSG:8860", + "target_crs": "EPSG:4759", + "area_of_use": "USA - Conterminous", + }, + "nad83_harn.nad83_fbn.conus": { + "source_crs": "EPSG:4152", + "target_crs": "EPSG:8860", + "area_of_use": "USA - Conterminous", + }, + "ohd.nad83_1986.hawaii": { + "source_crs": "EPSG:4135", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Hawaii", + }, + "pr40.nad83_1986.prvi": { + "source_crs": "EPSG:4139", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Puerto Rico and the Virgin Islands", + }, + #"sg1897.sg1952.stgeorge", + "sg1952.nad83_1986.stgeorge": { + "source_crs": "EPSG:4138", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Saint George Island", + }, + "sl1952.nad83_1986.stlawrence": { + "source_crs": "EPSG:4136", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Saint Lawrence Island", + }, + #"sp1897.sp1952.stpaul", + "sp1952.nad83_1986.stpaul": { + "source_crs": "EPSG:4137", + "target_crs": "EPSG:4269", + "area_of_use": "USA - Saint Lawrence Island", + }, +#"ussd.nad27.conus", +} + +os.makedirs("nadcon5", exist_ok=True) + +readme_txt = "" + +for subdir in subdirs: + + lat_filename = "nadcon5." + subdir + ".lat.trn." + build_number + ".b" + out_filename = "nadcon5/" + lat_filename + if not os.path.exists(out_filename): + url = base_url + "/" + subdir + "/" + lat_filename + print(f"Fetch {url}...") + r = requests.get(url) + open(out_filename, "wb").write(r.content) + ds = gdal.Open(out_filename) + assert ds.GetRasterBand(1).Checksum() >= 0 + + lon_filename = "nadcon5." + subdir + ".lon.trn." + build_number + ".b" + out_filename = "nadcon5/" + lon_filename + if not os.path.exists(out_filename): + url = base_url + "/" + subdir + "/" + lon_filename + print(f"Fetch {url}...") + r = requests.get(url) + open(out_filename, "wb").write(r.content) + ds = gdal.Open(out_filename) + assert ds.GetRasterBand(1).Checksum() >= 0 + + has_ellipsoidal_height_shift = ("nad83_2007" in subdir or "nad83_1997" in subdir or "nad83_2002" in subdir or "nad83_pa11" in subdir or "nad83_fbn" in subdir) + if has_ellipsoidal_height_shift: + eht_filename = "nadcon5." + subdir + ".eht.trn." + build_number + ".b" + out_filename = "nadcon5/" + eht_filename + if not os.path.exists(out_filename): + url = base_url + "/" + subdir + "/" + eht_filename + print(f"Fetch {url}...") + r = requests.get(url) + open(out_filename, "wb").write(r.content) + ds = gdal.Open(out_filename) + assert ds.GetRasterBand(1).Checksum() >= 0 + + source_crs_code = d[subdir]["source_crs"] + target_crs_code = d[subdir]["target_crs"] + area_of_use = d[subdir]["area_of_use"] + source_crs = osr.SpatialReference() + source_crs.SetFromUserInput(source_crs_code) + source_crs_name = source_crs.GetName() + target_crs = osr.SpatialReference() + target_crs.SetFromUserInput(target_crs_code) + + if has_ellipsoidal_height_shift: + target_crs.PromoteTo3D() + target_crs_code = "EPSG:" + target_crs.GetAuthorityCode(None) + + target_crs_name = target_crs.GetName() + print(f"{subdir} -> {source_crs_code}({source_crs_name}) -> {target_crs_code}({target_crs_name}). {area_of_use}") + + lat_ds = gdal.Open("nadcon5/" + lat_filename) + lon_ds = gdal.Open("nadcon5/" + lon_filename) + eht_ds = gdal.Open("nadcon5/" + eht_filename) if has_ellipsoidal_height_shift else None + assert lat_ds.RasterXSize == lon_ds.RasterXSize + assert lat_ds.RasterYSize == lon_ds.RasterYSize + lon_gt = lon_ds.GetGeoTransform() + lat_gt = lat_ds.GetGeoTransform() + assert lon_gt == lat_gt + + ellipsoidal_same_resolution = False + if has_ellipsoidal_height_shift: + if eht_ds.RasterXSize == lon_ds.RasterXSize and eht_ds.RasterYSize == lon_ds.RasterYSize: + ellipsoidal_same_resolution = True + elif eht_ds.RasterXSize == 1 + lon_ds.RasterXSize // 2 and eht_ds.RasterYSize == 1 + lon_ds.RasterYSize // 2: + pass + elif eht_ds.RasterXSize == 1 + lon_ds.RasterXSize // 3 and eht_ds.RasterYSize == 1 + lon_ds.RasterYSize // 3: + pass + elif eht_ds.RasterXSize == 1 + lon_ds.RasterXSize // 4 and eht_ds.RasterYSize == 1 + lon_ds.RasterYSize // 4: + pass + elif eht_ds.RasterXSize == 1 + lon_ds.RasterXSize // 5 and eht_ds.RasterYSize == 1 + lon_ds.RasterYSize // 5: + pass + elif lon_ds.RasterXSize == 1 + eht_ds.RasterXSize // 2 and lon_ds.RasterYSize == 1 + eht_ds.RasterYSize // 2: + pass + elif lon_ds.RasterXSize == 1 + eht_ds.RasterXSize // 3 and lon_ds.RasterYSize == 1 + eht_ds.RasterYSize // 3: + pass + elif lon_ds.RasterXSize - 1 == (eht_ds.RasterXSize - 1) * 6 // 10 and lon_ds.RasterYSize - 1 == (eht_ds.RasterYSize - 1) * 6 // 10: + pass + elif eht_ds.RasterXSize - 1 == (lon_ds.RasterXSize - 1) * 6 // 10 and eht_ds.RasterYSize - 1 == (lon_ds.RasterYSize - 1) * 6 // 10: + pass + else: + assert False, eht_filename + + # Check spatial extent is same + eht_gt = eht_ds.GetGeoTransform() + assert lon_gt[0] + lon_gt[1] / 2 == eht_gt[0] + eht_gt[1] / 2 + assert (lon_ds.RasterXSize - 1) * lon_gt[1] == (eht_ds.RasterXSize - 1) * eht_gt[1] + assert lon_gt[3] + lon_gt[5] / 2 == eht_gt[3] + eht_gt[5] / 2 + assert (lon_ds.RasterYSize - 1) * lon_gt[5] == (eht_ds.RasterYSize - 1) * eht_gt[5] + + + mem_ds = gdal.GetDriverByName("MEM").Create("", lon_ds.RasterXSize, lon_ds.RasterYSize, 3 if ellipsoidal_same_resolution else 2, gdal.GDT_Float32) + mem_ds.SetGeoTransform(lon_gt) + mem_ds.SetSpatialRef(source_crs) + + mem_ds.GetRasterBand(1).WriteRaster(0, 0, lon_ds.RasterXSize, lon_ds.RasterYSize, lat_ds.ReadRaster()) + mem_ds.GetRasterBand(1).SetDescription("latitude_offset") + mem_ds.GetRasterBand(1).SetUnitType("arc-second") + + mem_ds.GetRasterBand(2).WriteRaster(0, 0, lon_ds.RasterXSize, lon_ds.RasterYSize, lon_ds.ReadRaster()) + mem_ds.GetRasterBand(2).SetDescription("longitude_offset") + mem_ds.GetRasterBand(2).SetMetadataItem("positive_value", "east") + mem_ds.GetRasterBand(2).SetUnitType("arc-second") + + if ellipsoidal_same_resolution: + mem_ds.GetRasterBand(3).WriteRaster(0, 0, lon_ds.RasterXSize, lon_ds.RasterYSize, eht_ds.ReadRaster()) + mem_ds.GetRasterBand(3).SetDescription("ellipsoidal_height_offset") + mem_ds.GetRasterBand(3).SetUnitType("metre") + + mem_ds.SetMetadataItem("area_of_use", area_of_use) + mem_ds.SetMetadataItem("AREA_OR_POINT", "Point") + mem_ds.SetMetadataItem("target_crs_epsg_code", target_crs.GetAuthorityCode(None)) + mem_ds.SetMetadataItem("TIFFTAG_COPYRIGHT", "Derived from work by NOAA. Public Domain") + mem_ds.SetMetadataItem("TIFFTAG_DATETIME", "2016:09:01 00:00:00") + description = f"{source_crs_code} ({source_crs_name}) to {target_crs_code} ({target_crs_name}). Converted from {base_url}/{subdir}" + mem_ds.SetMetadataItem("TIFFTAG_IMAGEDESCRIPTION", description) + if not has_ellipsoidal_height_shift: + mem_ds.SetMetadataItem("TYPE", "HORIZONTAL_OFFSET") + elif ellipsoidal_same_resolution: + mem_ds.SetMetadataItem("TYPE", "GEOGRAPHIC_3D_OFFSET") + else: + mem_ds.SetMetadataItem("TYPE", "HORIZONTAL_OFFSET") + mem_ds.SetMetadataItem("auxiliary_data", "ellipsoidal_height_offset") + mem_ds.SetMetadataItem("interpolation_method", "biquadratic") + + tiff_filename = "us_noaa_nadcon5_" + subdir.replace('.', '_') + ".tif" + options = ["COMPRESS=DEFLATE", "PREDICTOR=3"] + if mem_ds.RasterXSize > 256 or mem_ds.RasterYSize > 256: + options += ["TILED=YES"] + else: + options += ["BLOCKYSIZE=" + str(mem_ds.RasterYSize)] + assert gdal.GetDriverByName("GTiff").CreateCopy(tiff_filename + ".tmp", mem_ds, + options = options) is not None + + if has_ellipsoidal_height_shift and not ellipsoidal_same_resolution: + + mem_ds = gdal.GetDriverByName("MEM").Create("", eht_ds.RasterXSize, eht_ds.RasterYSize, 1, gdal.GDT_Float32) + mem_ds.SetGeoTransform(eht_gt) + mem_ds.SetSpatialRef(source_crs) + mem_ds.GetRasterBand(1).WriteRaster(0, 0, eht_ds.RasterXSize, eht_ds.RasterYSize, eht_ds.ReadRaster()) + mem_ds.GetRasterBand(1).SetDescription("ellipsoidal_height_offset") + mem_ds.GetRasterBand(1).SetUnitType("metre") + + mem_ds.SetMetadataItem("area_of_use", area_of_use) + mem_ds.SetMetadataItem("AREA_OR_POINT", "Point") + mem_ds.SetMetadataItem("target_crs_epsg_code", target_crs.GetAuthorityCode(None)) + mem_ds.SetMetadataItem("TIFFTAG_COPYRIGHT", "Derived from work by NOAA. Public Domain") + mem_ds.SetMetadataItem("TIFFTAG_DATETIME", "2016:09:01 00:00:00") + mem_ds.SetMetadataItem("TIFFTAG_IMAGEDESCRIPTION", description) + mem_ds.SetMetadataItem("TYPE", "ELLIPSOIDAL_HEIGHT_OFFSET") + mem_ds.SetMetadataItem("auxiliary_data", "horizontal_offset") + mem_ds.SetMetadataItem("interpolation_method", "biquadratic") + + options = ["COMPRESS=DEFLATE", "PREDICTOR=3"] + if mem_ds.RasterXSize > 256 or mem_ds.RasterYSize > 256: + options += ["TILED=YES"] + else: + options += ["BLOCKYSIZE=" + str(mem_ds.RasterYSize)] + assert gdal.GetDriverByName("GTiff").CreateCopy(tiff_filename + ".tmp", mem_ds, + options = options + ["APPEND_SUBDATASET=YES"]) is not None + + generate_optimized_file(tiff_filename + ".tmp", tiff_filename) + gdal.Unlink(tiff_filename + ".tmp") + + out_ds = gdal.Open(tiff_filename) + assert out_ds.GetRasterBand(1).ReadRaster() == lat_ds.ReadRaster() + assert out_ds.GetRasterBand(2).ReadRaster() == lon_ds.ReadRaster() + if ellipsoidal_same_resolution: + assert out_ds.GetRasterBand(3).ReadRaster() == eht_ds.ReadRaster() + if has_ellipsoidal_height_shift and not ellipsoidal_same_resolution: + out_ds = gdal.Open("GTIFF_DIR:2:" + tiff_filename) + assert out_ds.GetRasterBand(1).ReadRaster() == eht_ds.ReadRaster() + + readme_txt += f"### {area_of_use}: NADCON5: {source_crs_name} -> {target_crs_name}\n" + readme_txt += "\n" + readme_txt += "*Source*: [NADCON5 .b files coming from NOAA](%s) \n" % (base_url + "/" + subdir) + readme_txt += "*Format*: GeoTIFF converted with build_nadcon5.py script \n" + readme_txt += "*License*: Public Domain \n" + readme_txt += f"*Source CRS*: {source_crs_name} ({source_crs_code}) \n" + readme_txt += f"*Target CRS*: {target_crs_name} ({target_crs_code})\n" + readme_txt += "\n" + if has_ellipsoidal_height_shift: + readme_txt += "Includes ellipsoidal height offsets.\n\n" + readme_txt += "* %s\n" % tiff_filename + readme_txt += "\n" + +open('README_nadcon5.txt', 'wt').write(readme_txt) diff --git a/us_noaa/us_noaa_README.txt b/us_noaa/us_noaa_README.txt index 5b70615..a8f7391 100644 --- a/us_noaa/us_noaa_README.txt +++ b/us_noaa/us_noaa_README.txt @@ -44,6 +44,304 @@ Also include a few files which are duplicate of *hpgn.tif files, for historic re * us_noaa_WI.tif - Wisconsin * us_noaa_WO.tif - Washington, Oregon, N. California +### USA - American Samoa: NADCON5: American Samoa 1962 -> NAD83(HARN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/as62.nad83_1993.as) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: American Samoa 1962 (EPSG:4169) +*Target CRS*: NAD83(HARN) (EPSG:4152) + +* us_noaa_nadcon5_as62_nad83_1993_as.tif + +### USA - Guam and the Commonwealth of the Northern Mariana Islands: NADCON5: Guam 1963 -> NAD83(HARN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/gu63.nad83_1993.guamcnmi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: Guam 1963 (EPSG:4675) +*Target CRS*: NAD83(HARN) (EPSG:4152) + +* us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif + +### USA - Alaska: NADCON5: NAD27 -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad27.nad83_1986.alaska) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD27 (EPSG:4267) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_nad27_nad83_1986_alaska.tif + +### USA - Conterminous: NADCON5: NAD27 -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad27.nad83_1986.conus) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD27 (EPSG:4267) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_nad27_nad83_1986_conus.tif + +### USA - Alaska: NADCON5: NAD83 -> NAD83(HARN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1986.nad83_1992.alaska) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83 (EPSG:4269) +*Target CRS*: NAD83(HARN) (EPSG:4152) + +* us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif + +### USA - Hawaii: NADCON5: NAD83 -> NAD83(HARN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1986.nad83_1993.hawaii) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83 (EPSG:4269) +*Target CRS*: NAD83(HARN) (EPSG:4152) + +* us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif + +### USA - Puerto Rico and the Virgin Islands: NADCON5: NAD83 -> NAD83(HARN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1986.nad83_1993.prvi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83 (EPSG:4269) +*Target CRS*: NAD83(HARN) (EPSG:4152) + +* us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif + +### USA - Conterminous: NADCON5: NAD83 -> NAD83(HARN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1986.nad83_harn.conus) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83 (EPSG:4269) +*Target CRS*: NAD83(HARN) (EPSG:4152) + +* us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif + +### USA - Alaska: NADCON5: NAD83(HARN) -> NAD83(NSRS2007) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1992.nad83_2007.alaska) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN) (EPSG:4152) +*Target CRS*: NAD83(NSRS2007) (EPSG:4893) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif + +### USA - Puerto Rico and the Virgin Islands: NADCON5: NAD83(HARN) -> NAD83(HARN Corrected) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1993.nad83_1997.prvi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN) (EPSG:4152) +*Target CRS*: NAD83(HARN Corrected) (EPSG:8544) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif + +### USA - American Samoa: NADCON5: NAD83(HARN) -> NAD83(FBN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1993.nad83_2002.as) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN) (EPSG:4152) +*Target CRS*: NAD83(FBN) (EPSG:8542) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif + +### USA - Guam and the Commonwealth of the Northern Mariana Islands: NADCON5: NAD83(HARN) -> NAD83(FBN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1993.nad83_2002.guamcnmi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN) (EPSG:4152) +*Target CRS*: NAD83(FBN) (EPSG:8542) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif + +### USA - Hawaii: NADCON5: NAD83(HARN) -> NAD83(PA11) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1993.nad83_pa11.hawaii) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN) (EPSG:4152) +*Target CRS*: NAD83(PA11) (EPSG:6321) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif + +### USA - Puerto Rico and the Virgin Islands: NADCON5: NAD83(HARN Corrected) -> NAD83(FBN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1997.nad83_2002.prvi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN Corrected) (EPSG:8545) +*Target CRS*: NAD83(FBN) (EPSG:8542) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif + +### USA - Puerto Rico and the Virgin Islands: NADCON5: NAD83(FBN) -> NAD83(NSRS2007) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2002.nad83_2007.prvi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(FBN) (EPSG:8860) +*Target CRS*: NAD83(NSRS2007) (EPSG:4893) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif + +### USA - Guam and the Commonwealth of the Northern Mariana Islands: NADCON5: NAD83(FBN) -> NAD83(MA11) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2002.nad83_ma11.guamcnmi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(FBN) (EPSG:8860) +*Target CRS*: NAD83(MA11) (EPSG:6324) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif + +### USA - American Samoaa: NADCON5: NAD83(FBN) -> NAD83(PA11) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2002.nad83_pa11.as) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(FBN) (EPSG:8860) +*Target CRS*: NAD83(PA11) (EPSG:6321) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif + +### USA - Alaska: NADCON5: NAD83(NSRS2007) -> NAD83(2011) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2007.nad83_2011.alaska) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(NSRS2007) (EPSG:4759) +*Target CRS*: NAD83(2011) (EPSG:6319) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif + +### USA - Conterminous: NADCON5: NAD83(NSRS2007) -> NAD83(2011) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2007.nad83_2011.conus) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(NSRS2007) (EPSG:4759) +*Target CRS*: NAD83(2011) (EPSG:6319) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif + +### USA - Puerto Rico and the Virgin Islands: NADCON5: NAD83(NSRS2007) -> NAD83(2011) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2007.nad83_2011.prvi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(NSRS2007) (EPSG:4759) +*Target CRS*: NAD83(2011) (EPSG:6319) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif + +### USA - Conterminous: NADCON5: NAD83(FBN) -> NAD83(NSRS2007) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_fbn.nad83_2007.conus) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(FBN) (EPSG:8860) +*Target CRS*: NAD83(NSRS2007) (EPSG:4893) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif + +### USA - Conterminous: NADCON5: NAD83(HARN) -> NAD83(FBN) + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_harn.nad83_fbn.conus) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: NAD83(HARN) (EPSG:4152) +*Target CRS*: NAD83(FBN) (EPSG:8542) + +Includes ellipsoidal height offsets. + +* us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif + +### USA - Hawaii: NADCON5: Old Hawaiian -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/ohd.nad83_1986.hawaii) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: Old Hawaiian (EPSG:4135) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif + +### USA - Puerto Rico and the Virgin Islands: NADCON5: Puerto Rico -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/pr40.nad83_1986.prvi) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: Puerto Rico (EPSG:4139) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_pr40_nad83_1986_prvi.tif + +### USA - Saint George Island: NADCON5: St. George Island -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/sg1952.nad83_1986.stgeorge) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: St. George Island (EPSG:4138) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif + +### USA - Saint Lawrence Island: NADCON5: St. Lawrence Island -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/sl1952.nad83_1986.stlawrence) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: St. Lawrence Island (EPSG:4136) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif + +### USA - Saint Lawrence Island: NADCON5: St. Paul Island -> NAD83 + +*Source*: [NADCON5 .b files coming from NOAA](https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/sp1952.nad83_1986.stpaul) +*Format*: GeoTIFF converted with build_nadcon5.py script +*License*: Public Domain +*Source CRS*: St. Paul Island (EPSG:4137) +*Target CRS*: NAD83 (EPSG:4269) + +* us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif + ### Continental USA VERTCON: NGVD (19)29 height to NAVD (19)88 height *Source*: converted from [NOAA VERTCON .94 grids](https://www.ngs.noaa.gov/PC_PROD/VERTCON/) diff --git a/us_noaa/us_noaa_nadcon5_as62_nad83_1993_as.tif b/us_noaa/us_noaa_nadcon5_as62_nad83_1993_as.tif new file mode 100644 index 0000000..d980463 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_as62_nad83_1993_as.tif differ diff --git a/us_noaa/us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif b/us_noaa/us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif new file mode 100644 index 0000000..d468ab2 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad27_nad83_1986_alaska.tif b/us_noaa/us_noaa_nadcon5_nad27_nad83_1986_alaska.tif new file mode 100644 index 0000000..6f79e3e Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad27_nad83_1986_alaska.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad27_nad83_1986_conus.tif b/us_noaa/us_noaa_nadcon5_nad27_nad83_1986_conus.tif new file mode 100644 index 0000000..745ce4e Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad27_nad83_1986_conus.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif new file mode 100644 index 0000000..78c9b2c Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif new file mode 100644 index 0000000..55692b5 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif new file mode 100644 index 0000000..bae6a26 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif new file mode 100644 index 0000000..1b36469 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif b/us_noaa/us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif new file mode 100644 index 0000000..e6a3b32 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif new file mode 100644 index 0000000..3c35bba Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif new file mode 100644 index 0000000..8d43d23 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif new file mode 100644 index 0000000..d3251d4 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif new file mode 100644 index 0000000..6af39f3 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif b/us_noaa/us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif new file mode 100644 index 0000000..e91b9b2 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif b/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif new file mode 100644 index 0000000..b4d58ea Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif b/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif new file mode 100644 index 0000000..bc1e63a Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif b/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif new file mode 100644 index 0000000..0994e3e Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif b/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif new file mode 100644 index 0000000..cb0a158 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif b/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif new file mode 100644 index 0000000..a277b89 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif b/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif new file mode 100644 index 0000000..a544637 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif b/us_noaa/us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif new file mode 100644 index 0000000..5a9e8fe Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif differ diff --git a/us_noaa/us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif b/us_noaa/us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif new file mode 100644 index 0000000..1820bcc Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif differ diff --git a/us_noaa/us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif b/us_noaa/us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif new file mode 100644 index 0000000..b306d84 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif differ diff --git a/us_noaa/us_noaa_nadcon5_pr40_nad83_1986_prvi.tif b/us_noaa/us_noaa_nadcon5_pr40_nad83_1986_prvi.tif new file mode 100644 index 0000000..b951d91 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_pr40_nad83_1986_prvi.tif differ diff --git a/us_noaa/us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif b/us_noaa/us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif new file mode 100644 index 0000000..962d524 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif differ diff --git a/us_noaa/us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif b/us_noaa/us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif new file mode 100644 index 0000000..816bd95 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif differ diff --git a/us_noaa/us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif b/us_noaa/us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif new file mode 100644 index 0000000..3be3774 Binary files /dev/null and b/us_noaa/us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif differ