summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-17 22:57:16 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-17 22:57:16 +0100
commit4817130d268df7b5bd83bbc5fda0f1d5a75a0a09 (patch)
treee7302faa45a210a942ef968451aedc1163aee528
parentde6a04d8d600df2a0ac5896c5b82f243b5f8586c (diff)
downloadPROJ-data-4817130d268df7b5bd83bbc5fda0f1d5a75a0a09.tar.gz
PROJ-data-4817130d268df7b5bd83bbc5fda0f1d5a75a0a09.zip
Add sync_to_cdn.sh and regenerate_index_html.py; refresh index.html
-rw-r--r--index.html278
-rw-r--r--index.html.in36
-rw-r--r--regenerate_index_html.py59
-rwxr-xr-xsync_to_cdn.sh10
4 files changed, 383 insertions, 0 deletions
diff --git a/index.html b/index.html
index 1ab5e09..27cbe30 100644
--- a/index.html
+++ b/index.html
@@ -1,6 +1,11 @@
+<!-- This is a generated file by regenerate_index_html.py. Do not modify !!!! -->
+
+<!-- This file is the root of https://cdn.proj.org/ -->
+<!-- Part of it is generated by the regenerate_index_html.py script -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title>PROJ datumgrids</title>
</head>
@@ -11,5 +16,278 @@ This proj.cdn.org bucket, hosted by the
contains the datasets of
<a href="https://github.com/OSGeo/proj-datumgrid-geotiff/">https://github.com/OSGeo/proj-datumgrid-geotiff/</a>.
</p>
+<p>
+Those files are designed to be mainly used by <a href="https://proj.org">PROJ</a> 7 or later.
+</p>
+<p>The bucket contains the following files:</p>
+<ul>
+<li><a href="README.DATUMGRID">README.DATUMGRID</a></li>
+</ul><ul>
+<li><a href="README.at_bev">README.at_bev</a></li>
+<li><a href="AT_GIS_GRID.tif">AT_GIS_GRID.tif</a>: MGI (EPSG:4312) to ETRS89 (EPSG:4258). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.au_geoau">README.au_geoau</a></li>
+<li><a href="AUSGeoid09_V1.01.tif">AUSGeoid09_V1.01.tif</a>: GDA94 (EPSG:4939) to AHD height (EPSG:5711). Size: 12.2 MB. Last modified: 2019/12/16</li>
+<li><a href="AUSGeoid2020_20180201.tif">AUSGeoid2020_20180201.tif</a>: GDA2020 (EPSG:7843) to AHD height (EPSG:5711). Size: 5.6 MB. Last modified: 2019/12/16</li>
+<li><a href="AUSGeoid98.tif">AUSGeoid98.tif</a>: GDA94 (EPSG:4939) to AHD height (EPSG:5711). Size: 3.7 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.au_icsm">README.au_icsm</a></li>
+<li><a href="A66_National_13_09_01.tif">A66_National_13_09_01.tif</a>: AGD66 (EPSG:4202) to GDA94 (EPSG:4283). Size: 2.3 MB. Last modified: 2019/12/16</li>
+<li><a href="GDA94_GDA2020_conformal.tif">GDA94_GDA2020_conformal.tif</a>: GDA94 (EPSG:4283) to GDA2020 (EPSG:7844). Size: 4.3 MB. Last modified: 2019/12/16</li>
+<li><a href="GDA94_GDA2020_conformal_and_distortion.tif">GDA94_GDA2020_conformal_and_distortion.tif</a>: GDA94 (EPSG:4283) to GDA2020 (EPSG:7844). Size: 26.0 MB. Last modified: 2019/12/16</li>
+<li><a href="GDA94_GDA2020_conformal_christmas_island.tif">GDA94_GDA2020_conformal_christmas_island.tif</a>: GDA94 (EPSG:4283) to GDA2020 (EPSG:7844). Last modified: 2019/12/16</li>
+<li><a href="GDA94_GDA2020_conformal_cocos_island.tif">GDA94_GDA2020_conformal_cocos_island.tif</a>: GDA94 (EPSG:4283) to GDA2020 (EPSG:7844). Last modified: 2019/12/16</li>
+<li><a href="National_84_02_07_01.tif">National_84_02_07_01.tif</a>: AGD84 (EPSG:4203) to GDA94 (EPSG:4283). Size: 5.7 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.be_ign">README.be_ign</a></li>
+<li><a href="bd72lb72_etrs89lb08.tif">bd72lb72_etrs89lb08.tif</a>: Belge 1972 (EPSG:4313) to ETRS89 (EPSG:4258). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.ca_nrc">README.ca_nrc</a></li>
+<li><a href="ABCSRSV4.tif">ABCSRSV4.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v4 (EPSG:8246). Last modified: 2019/12/16</li>
+<li><a href="BC_27_05.tif">BC_27_05.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v4 (EPSG:8246). Last modified: 2019/12/16</li>
+<li><a href="BC_93_05.tif">BC_93_05.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v4 (EPSG:8246). Last modified: 2019/12/16</li>
+<li><a href="CGG2013ai08.tif">CGG2013ai08.tif</a>: ITRF2008 (EPSG:7911) to CGVD2013(CGG2013a) height (EPSG:9245). Size: 10.4 MB. Last modified: 2019/12/16</li>
+<li><a href="CGG2013an83.tif">CGG2013an83.tif</a>: NAD83(CSRS)v6 (EPSG:8251) to CGVD2013(CGG2013a) height (EPSG:9245). Size: 10.5 MB. Last modified: 2019/12/16</li>
+<li><a href="CGG2013i08.tif">CGG2013i08.tif</a>: ITRF2008 (EPSG:7911) to CGVD2013(CGG2013) height (EPSG:6647). Size: 10.4 MB. Last modified: 2019/12/16</li>
+<li><a href="CGG2013n83.tif">CGG2013n83.tif</a>: NAD83(CSRS)v6 (EPSG:8251) to CGVD2013(CGG2013) height (EPSG:6647). Size: 10.5 MB. Last modified: 2019/12/16</li>
+<li><a href="CQ77SCRS.tif">CQ77SCRS.tif</a>: NAD27(CGQ77) (EPSG:4609) to NAD83(CSRS)v2 (EPSG:8237). Last modified: 2019/12/16</li>
+<li><a href="CRD27_00.tif">CRD27_00.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v3 (EPSG:8240). Last modified: 2019/12/16</li>
+<li><a href="CRD93_00.tif">CRD93_00.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v3 (EPSG:8240). Last modified: 2019/12/16</li>
+<li><a href="GS7783.tif">GS7783.tif</a>: ATS77 (EPSG:4122) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="HT2_2010v70.tif">HT2_2010v70.tif</a>: NAD83(CSRS) (EPSG:4955) to CGVD28 height (EPSG:5713). Size: 2.7 MB. Last modified: 2019/12/16</li>
+<li><a href="NA27SCRS.tif">NA27SCRS.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v2 (EPSG:8237). Last modified: 2019/12/16</li>
+<li><a href="NA83SCRS.tif">NA83SCRS.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v2 (EPSG:8237). Size: 1.3 MB. Last modified: 2019/12/16</li>
+<li><a href="NB2783v2.tif">NB2783v2.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v2 (EPSG:8237). Size: 3.3 MB. Last modified: 2019/12/16</li>
+<li><a href="NB7783v2.tif">NB7783v2.tif</a>: ATS77 (EPSG:4122) to NAD83(CSRS)v2 (EPSG:8237). Size: 2.1 MB. Last modified: 2019/12/16</li>
+<li><a href="NS778302.tif">NS778302.tif</a>: ATS77 (EPSG:4122) to NAD83(CSRS)v6 (EPSG:8252). Size: 2.5 MB. Last modified: 2019/12/16</li>
+<li><a href="NVI93_05.tif">NVI93_05.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v3 (EPSG:8240). Last modified: 2019/12/16</li>
+<li><a href="ON27CSv1.tif">ON27CSv1.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v3 (EPSG:8240). Size: 7.6 MB. Last modified: 2019/12/16</li>
+<li><a href="ON76CSv1.tif">ON76CSv1.tif</a>: NAD27(76) (EPSG:4608) to NAD83(CSRS)v3 (EPSG:8240). Size: 7.0 MB. Last modified: 2019/12/16</li>
+<li><a href="ON83CSv1.tif">ON83CSv1.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v3 (EPSG:8240). Size: 4.9 MB. Last modified: 2019/12/16</li>
+<li><a href="PE7783V2.tif">PE7783V2.tif</a>: ATS77 (EPSG:4122) to NAD83(CSRS)v2 (EPSG:8237). Last modified: 2019/12/16</li>
+<li><a href="SK27-98.tif">SK27-98.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v3 (EPSG:8240). Last modified: 2019/12/16</li>
+<li><a href="SK83-98.tif">SK83-98.tif</a>: NAD83 (EPSG:4269) to NAD83(CSRS)v3 (EPSG:8240). Last modified: 2019/12/16</li>
+<li><a href="TO27CSv1.tif">TO27CSv1.tif</a>: NAD27 (EPSG:4267) to NAD83(CSRS)v3 (EPSG:8240). Last modified: 2019/12/16</li>
+<li><a href="ntv1_can.tif">ntv1_can.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="ntv2_0.tif">ntv2_0.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Size: 7.4 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.ch_swisstopo">README.ch_swisstopo</a></li>
+<li><a href="CHENyx06_ETRS.tif">CHENyx06_ETRS.tif</a>: CH1903 (EPSG:4149) to ETRS89 (EPSG:4258). Last modified: 2019/12/16</li>
+<li><a href="CHENyx06a.tif">CHENyx06a.tif</a>: CH1903 (EPSG:4149) to CH1903+ (EPSG:4150). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.de_bkg">README.de_bkg</a></li>
+<li><a href="BETA2007.tif">BETA2007.tif</a>: DHDN (EPSG:4314) to ETRS89 (EPSG:4258). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.de_geosn">README.de_geosn</a></li>
+<li><a href="NTv2_SN.tif">NTv2_SN.tif</a>: RD/83 (EPSG:4745) to ETRS89 (EPSG:4258). Size: 4.1 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.de_lgl_bw">README.de_lgl_bw</a></li>
+<li><a href="BWTA2017.tif">BWTA2017.tif</a>: DHDN (EPSG:4314) to ETRS89 (EPSG:4258). Size: 69.6 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.de_lgvl_saarland">README.de_lgvl_saarland</a></li>
+<li><a href="SeTa2016.tif">SeTa2016.tif</a>: DHDN (EPSG:4314) to ETRS89 (EPSG:4258). Last modified: 2019/12/17</li>
+</ul><ul>
+<li><a href="README.dk_sdfe">README.dk_sdfe</a></li>
+<li><a href="DK">DK</a>. Last modified: 2019/12/17</li>
+<li><a href="DK_bornholm.pol">DK_bornholm.pol</a>. Last modified: 2019/12/17</li>
+<li><a href="DK_bridges.pol">DK_bridges.pol</a>. Last modified: 2019/12/17</li>
+<li><a href="DK_general.pol">DK_general.pol</a>. Last modified: 2019/12/17</li>
+<li><a href="DK_jutland.pol">DK_jutland.pol</a>. Last modified: 2019/12/17</li>
+<li><a href="DK_zealand.pol">DK_zealand.pol</a>. Last modified: 2019/12/17</li>
+<li><a href="FO">FO</a>. Last modified: 2019/12/17</li>
+<li><a href="FO_fk89.pol">FO_fk89.pol</a>. Last modified: 2019/12/17</li>
+<li><a href="NKG">NKG</a>. Last modified: 2019/12/17</li>
+<li><a href="dnn.tif">dnn.tif</a>: ETRS89 (EPSG:4937) to DNN height (EPSG:5733). Size: 1.8 MB. Last modified: 2019/12/16</li>
+<li><a href="dvr90.tif">dvr90.tif</a>: ETRS89 (EPSG:4937) to DVR90 height (EPSG:5799). Last modified: 2019/12/16</li>
+<li><a href="fvr09.tif">fvr09.tif</a>: ETRS89 (EPSG:4937) to FVR09 height (EPSG:5317). Last modified: 2019/12/16</li>
+<li><a href="gvr2000.tif">gvr2000.tif</a>: GR96 (EPSG:4909) to GVR2000 height (EPSG:8266). Last modified: 2019/12/16</li>
+<li><a href="gvr2016.tif">gvr2016.tif</a>: GR96 (EPSG:4909) to GVR2016 height (EPSG:8267). Size: 6.8 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.es_cat_icgc">README.es_cat_icgc</a></li>
+<li><a href="100800401.tif">100800401.tif</a>: ED50 (EPSG:4230) to ETRS89 (EPSG:4258). Last modified: 2019/12/17</li>
+</ul><ul>
+<li><a href="README.fr_ign">README.fr_ign</a></li>
+<li><a href="CGVD2013RGSPM06.tif">CGVD2013RGSPM06.tif</a>: RGSPM06 (EPSG:4466) to CGVD2013(CGG2013) height (EPSG:6647). Last modified: 2019/12/16</li>
+<li><a href="RAC09.tif">RAC09.tif</a>: RGF93 (EPSG:4965) to NGF-IGN78 height (EPSG:5721). Last modified: 2019/12/16</li>
+<li><a href="RAF09.tif">RAF09.tif</a>: RGF93 (EPSG:4965) to NGF-IGN69 height (EPSG:5720). Last modified: 2019/12/16</li>
+<li><a href="RAF18.tif">RAF18.tif</a>: RGF93 (EPSG:4965) to NGF-IGN69 height (EPSG:5720). Last modified: 2019/12/16</li>
+<li><a href="RAGTBT2016.tif">RAGTBT2016.tif</a>: RGAF09 (EPSG:5488) to Guadeloupe 1988 height (EPSG:5757). Last modified: 2019/12/16</li>
+<li><a href="RALD2016.tif">RALD2016.tif</a>: RGAF09 (EPSG:5488) to IGN 2008 LD height (EPSG:9130). Last modified: 2019/12/16</li>
+<li><a href="RALDW842016.tif">RALDW842016.tif</a>: RRAF 1991 (EPSG:4557) to IGN 2008 LD height (EPSG:9130). Last modified: 2019/12/16</li>
+<li><a href="RALS2016.tif">RALS2016.tif</a>: RGAF09 (EPSG:5488) to IGN 1988 LS height (EPSG:5616). Last modified: 2019/12/16</li>
+<li><a href="RAMART2016.tif">RAMART2016.tif</a>: RGAF09 (EPSG:5488) to Martinique 1987 height (EPSG:5756). Last modified: 2019/12/16</li>
+<li><a href="RAMG2016.tif">RAMG2016.tif</a>: RGAF09 (EPSG:5488) to IGN 1988 MG height (EPSG:5617). Last modified: 2019/12/16</li>
+<li><a href="RAR07_bl.tif">RAR07_bl.tif</a>: RGR92 (EPSG:4971) to Reunion 1989 height (EPSG:5758). Last modified: 2019/12/16</li>
+<li><a href="RASPM2018.tif">RASPM2018.tif</a>: RGSPM06 (EPSG:4466) to Danger 1950 height (EPSG:5792). Last modified: 2019/12/16</li>
+<li><a href="gg10_sbv2.tif">gg10_sbv2.tif</a>: RGAF09 (EPSG:5488) to IGN 1988 SB height (EPSG:5619). Last modified: 2019/12/16</li>
+<li><a href="gg10_smv2.tif">gg10_smv2.tif</a>: RGAF09 (EPSG:5488) to IGN 1988 SM height (EPSG:5620). Last modified: 2019/12/16</li>
+<li><a href="ggg00_lsv2.tif">ggg00_lsv2.tif</a>: RRAF 1991 (EPSG:4557) to IGN 1988 LS height (EPSG:5616). Last modified: 2019/12/16</li>
+<li><a href="ggg00_mgv2.tif">ggg00_mgv2.tif</a>: RRAF 1991 (EPSG:4557) to IGN 1988 MG height (EPSG:5617). Last modified: 2019/12/16</li>
+<li><a href="ggg00_sbv2.tif">ggg00_sbv2.tif</a>: RRAF 1991 (EPSG:4557) to IGN 1988 SB height (EPSG:5619). Last modified: 2019/12/16</li>
+<li><a href="ggg00_smv2.tif">ggg00_smv2.tif</a>: RRAF 1991 (EPSG:4557) to IGN 1988 SM height (EPSG:5620). Last modified: 2019/12/16</li>
+<li><a href="ggg00v2.tif">ggg00v2.tif</a>: RRAF 1991 (EPSG:4557) to Guadeloupe 1988 height (EPSG:5757). Last modified: 2019/12/16</li>
+<li><a href="ggguy15.tif">ggguy15.tif</a>: RGFG95 (EPSG:4967) to NGG1977 height (EPSG:5755). Last modified: 2019/12/16</li>
+<li><a href="ggker08v2.tif">ggker08v2.tif</a>: RGTAAF07 (EPSG:7072) to IGN 1962 (KERGUELEN) (IGNF:KERG62). Last modified: 2019/12/16</li>
+<li><a href="ggm00v2.tif">ggm00v2.tif</a>: RRAF 1991 (EPSG:4557) to Martinique 1987 height (EPSG:5756). Last modified: 2019/12/16</li>
+<li><a href="ggm04v1.tif">ggm04v1.tif</a>: RGM04 (EPSG:4469) to SHOM 1953 (MAYOTTE) (IGNF:MAYO53). Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Bora.tif">ggpf02-Bora.tif</a>: RGPF (EPSG:4999) to Bora Bora SAU 2001 height (EPSG:5607). Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Huahine.tif">ggpf02-Huahine.tif</a>: RGPF (EPSG:4999) to Huahine SAU 2001 height (EPSG:5605). Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Maiao.tif">ggpf02-Maiao.tif</a>: RGPF (EPSG:4999) to MAIAO 2001 height. Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Maupiti.tif">ggpf02-Maupiti.tif</a>: RGPF (EPSG:4999) to Maupiti SAU 2001 height (EPSG:5604). Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Raiatea.tif">ggpf02-Raiatea.tif</a>: RGPF (EPSG:4999) to Raiatea SAU 2001 height (EPSG:5603). Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Tahaa.tif">ggpf02-Tahaa.tif</a>: RGPF (EPSG:4999) to Tahaa SAU 2001 height (EPSG:5606). Last modified: 2019/12/16</li>
+<li><a href="ggpf02-Tupai.tif">ggpf02-Tupai.tif</a>: RGPF (EPSG:4999) to TUPAI 2001 height. Last modified: 2019/12/16</li>
+<li><a href="ggpf05-HivaOa.tif">ggpf05-HivaOa.tif</a>: RGPF (EPSG:4999) to HIVA OA height. Last modified: 2019/12/16</li>
+<li><a href="ggpf05-Nuku.tif">ggpf05-Nuku.tif</a>: RGPF (EPSG:4999) to NUKU height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Fakarava.tif">ggpf08-Fakarava.tif</a>: RGPF (EPSG:4999) to IGN 1966 height (EPSG:5601). Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Gambier.tif">ggpf08-Gambier.tif</a>: RGPF (EPSG:4999) to GAMBIER height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Hao.tif">ggpf08-Hao.tif</a>: RGPF (EPSG:4999) to HAO height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Mataiva.tif">ggpf08-Mataiva.tif</a>: RGPF (EPSG:4999) to MATAIVA height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Raivavae.tif">ggpf08-Raivavae.tif</a>: RGPF (EPSG:4999) to Raivavae height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Reao.tif">ggpf08-Reao.tif</a>: RGPF (EPSG:4999) to Reao height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Rurutu.tif">ggpf08-Rurutu.tif</a>: RGPF (EPSG:4999) to Rurutu height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Tikehau.tif">ggpf08-Tikehau.tif</a>: RGPF (EPSG:4999) to Tikehau height. Last modified: 2019/12/16</li>
+<li><a href="ggpf08-Tubuai.tif">ggpf08-Tubuai.tif</a>: RGPF (EPSG:4999) to Tubuai height. Last modified: 2019/12/16</li>
+<li><a href="ggpf10-Moorea.tif">ggpf10-Moorea.tif</a>: RGPF (EPSG:4999) to Moorea SAU 1981 height (EPSG:5602). Last modified: 2019/12/16</li>
+<li><a href="ggpf10-Tahiti.tif">ggpf10-Tahiti.tif</a>: RGPF (EPSG:4999) to IGN 1966 height (EPSG:5601). Last modified: 2019/12/16</li>
+<li><a href="ggspm06v1.tif">ggspm06v1.tif</a>: RGSPM06 (EPSG:4466) to Danger 1950 height (EPSG:5792). Last modified: 2019/12/16</li>
+<li><a href="gr3df97a.tif">gr3df97a.tif</a>: Geocentric translation from NTF (IGNF:NTF) to RGF93 (EPSG:4964). Last modified: 2019/12/17</li>
+<li><a href="ntf_r93.tif">ntf_r93.tif</a>: NTF (EPSG:4275) to RGF93 (EPSG:4171). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.nz_linz">README.nz_linz</a></li>
+<li><a href="nzgd2kgrid0005.tif">nzgd2kgrid0005.tif</a>: NZGD49 (EPSG:4272) to NZGD2000 (EPSG:4167). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.pt_dgt">README.pt_dgt</a></li>
+<li><a href="D73_ETRS89_geo.tif">D73_ETRS89_geo.tif</a>: Datum 73 (EPSG:4274) to ETRS89 (EPSG:4258). Last modified: 2019/12/16</li>
+<li><a href="DLx_ETRS89_geo.tif">DLx_ETRS89_geo.tif</a>: Lisbon (EPSG:4207) to ETRS89 (EPSG:4258). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.se_lantmateriet">README.se_lantmateriet</a></li>
+<li><a href="SWEN17_RH2000.tif">SWEN17_RH2000.tif</a>: SWEREF99 (EPSG:4977) to RH2000 height (EPSG:5613). Size: 2.2 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.uk_os">README.uk_os</a></li>
+<li><a href="OSGM15_Belfast.tif">OSGM15_Belfast.tif</a>: ETRS89 (EPSG:4937) to Belfast height (EPSG:5732). Last modified: 2019/12/16</li>
+<li><a href="OSGM15_Malin.tif">OSGM15_Malin.tif</a>: ETRS89 (EPSG:4937) to Malin Head height (EPSG:5731). Last modified: 2019/12/16</li>
+<li><a href="OSTN15_NTv2_OSGBtoETRS.tif">OSTN15_NTv2_OSGBtoETRS.tif</a>: OSGB 1936 (EPSG:4277) to ETRS89 (EPSG:4258). Size: 2.9 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.us_nga">README.us_nga</a></li>
+<li><a href="egm08_25.tif">egm08_25.tif</a>: WGS 84 (EPSG:4979) to EGM2008 height (EPSG:3855). Size: 76.9 MB. Last modified: 2019/12/16</li>
+<li><a href="egm96_15.tif">egm96_15.tif</a>: WGS 84 (EPSG:4979) to EGM96 height (EPSG:5773). Size: 2.6 MB. Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.us_noaa">README.us_noaa</a></li>
+<li><a href="alhpgn.tif">alhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="arhpgn.tif">arhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="azhpgn.tif">azhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="c1hpgn.tif">c1hpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="c2hpgn.tif">c2hpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="cnhpgn.tif">cnhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="cohpgn.tif">cohpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="cshpgn.tif">cshpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="emhpgn.tif">emhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="eshpgn.tif">eshpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="ethpgn.tif">ethpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="flhpgn.tif">flhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="g1999a01.tif">g1999a01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.8 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999a02.tif">g1999a02.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.9 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999a03.tif">g1999a03.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.9 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999a04.tif">g1999a04.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.9 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999h01.tif">g1999h01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="g1999p01.tif">g1999p01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="g1999u01.tif">g1999u01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.5 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u02.tif">g1999u02.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.2 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u03.tif">g1999u03.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.0 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u04.tif">g1999u04.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.2 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u05.tif">g1999u05.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.3 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u06.tif">g1999u06.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.5 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u07.tif">g1999u07.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.3 MB. Last modified: 2019/12/16</li>
+<li><a href="g1999u08.tif">g1999u08.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.2 MB. Last modified: 2019/12/16</li>
+<li><a href="g2003a01.tif">g2003a01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.9 MB. Last modified: 2019/12/16</li>
+<li><a href="g2003a02.tif">g2003a02.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 3.0 MB. Last modified: 2019/12/16</li>
+<li><a href="g2003a03.tif">g2003a03.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 3.0 MB. Last modified: 2019/12/16</li>
+<li><a href="g2003a04.tif">g2003a04.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 2.9 MB. Last modified: 2019/12/16</li>
+<li><a href="g2003h01.tif">g2003h01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="g2003p01.tif">g2003p01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="g2009g01.tif">g2009g01.tif</a>: NAD83 (EPSG:4269) to GUVD04 height (EPSG:6644). Last modified: 2019/12/16</li>
+<li><a href="g2009h01.tif">g2009h01.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="g2009p01.tif">g2009p01.tif</a>: NAD83 (EPSG:4269) to PRVD02 height (EPSG:6641). Last modified: 2019/12/16</li>
+<li><a href="g2009s01.tif">g2009s01.tif</a>: NAD83 (EPSG:4269) to ASVD02 height (EPSG:6643). Last modified: 2019/12/16</li>
+<li><a href="g2012ba0.tif">g2012ba0.tif</a>: NAD83(2011) (EPSG:6319) to NAVD88 height (EPSG:5703). Size: 10.8 MB. Last modified: 2019/12/16</li>
+<li><a href="g2012bg0.tif">g2012bg0.tif</a>: NAD83(PA11) (EPSG:6321) to GUVD04 height (EPSG:6644). Last modified: 2019/12/16</li>
+<li><a href="g2012bh0.tif">g2012bh0.tif</a>: NAD83(PA11) (EPSG:6321) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="g2012bp0.tif">g2012bp0.tif</a>: NAD83(2011) (EPSG:6319) to PRVD02 height (EPSG:6641). Last modified: 2019/12/16</li>
+<li><a href="g2012bs0.tif">g2012bs0.tif</a>: NAD83(PA11) (EPSG:6321) to ASVD02 height (EPSG:6643). Last modified: 2019/12/16</li>
+<li><a href="g2012bu0.tif">g2012bu0.tif</a>: NAD83(2011) (EPSG:6319) to NAVD88 height (EPSG:5703). Size: 16.2 MB. Last modified: 2019/12/16</li>
+<li><a href="g2018p0.tif">g2018p0.tif</a>: NAD83(2011) (EPSG:6319) to PRVD02 height (EPSG:6641). Last modified: 2019/12/16</li>
+<li><a href="g2018u0.tif">g2018u0.tif</a>: NAD83(2011) (EPSG:6319) to NAVD88 height (EPSG:5703). Size: 16.0 MB. Last modified: 2019/12/16</li>
+<li><a href="gahpgn.tif">gahpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="geoid03_conus.tif">geoid03_conus.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 15.7 MB. Last modified: 2019/12/16</li>
+<li><a href="geoid06_ak.tif">geoid06_ak.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 10.9 MB. Last modified: 2019/12/16</li>
+<li><a href="geoid09_ak.tif">geoid09_ak.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 10.8 MB. Last modified: 2019/12/16</li>
+<li><a href="geoid09_conus.tif">geoid09_conus.tif</a>: NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Size: 16.0 MB. Last modified: 2019/12/16</li>
+<li><a href="guhpgn.tif">guhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="hihpgn.tif">hihpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="iahpgn.tif">iahpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="ilhpgn.tif">ilhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="inhpgn.tif">inhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="kshpgn.tif">kshpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="kyhpgn.tif">kyhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="lahpgn.tif">lahpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="mdhpgn.tif">mdhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="mehpgn.tif">mehpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="mihpgn.tif">mihpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="mnhpgn.tif">mnhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="mohpgn.tif">mohpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="mshpgn.tif">mshpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="nbhpgn.tif">nbhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="nchpgn.tif">nchpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="ndhpgn.tif">ndhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="nehpgn.tif">nehpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="njhpgn.tif">njhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="nmhpgn.tif">nmhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="nvhpgn.tif">nvhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="nyhpgn.tif">nyhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="ohhpgn.tif">ohhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="okhpgn.tif">okhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="pahpgn.tif">pahpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="pvhpgn.tif">pvhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="schpgn.tif">schpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="sdhpgn.tif">sdhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="tnhpgn.tif">tnhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="uthpgn.tif">uthpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="vahpgn.tif">vahpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="vertconc.tif">vertconc.tif</a>: NGVD29 height (m) (EPSG:7968) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="vertcone.tif">vertcone.tif</a>: NGVD29 height (m) (EPSG:7968) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="vertconw.tif">vertconw.tif</a>: NGVD29 height (m) (EPSG:7968) to NAVD88 height (EPSG:5703). Last modified: 2019/12/16</li>
+<li><a href="wihpgn.tif">wihpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="wmhpgn.tif">wmhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="wohpgn.tif">wohpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="wshpgn.tif">wshpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="wthpgn.tif">wthpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="wvhpgn.tif">wvhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="wyhpgn.tif">wyhpgn.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+</ul><ul>
+<li><a href="README.us_usgs">README.us_usgs</a></li>
+<li><a href="FL.tif">FL.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="MD.tif">MD.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="TN.tif">TN.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="WI.tif">WI.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="WO.tif">WO.tif</a>: NAD83 (EPSG:4269) to NAD83(HARN) (EPSG:4152). Last modified: 2019/12/16</li>
+<li><a href="alaska.tif">alaska.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="conus.tif">conus.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="hawaii.tif">hawaii.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="prvi.tif">prvi.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="stgeorge.tif">stgeorge.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="stlrnc.tif">stlrnc.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+<li><a href="stpaul.tif">stpaul.tif</a>: NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Last modified: 2019/12/16</li>
+</ul>
+<p>
+Total size of content: 463 MB
+</p>
+<div style="text-align: center;">
+<a href="https://aws.amazon.com/what-is-cloud-computing">
+<img src="https://d0.awsstatic.com/logos/powered-by-aws.png" style="position: relative; top: 50%; transform: translateY(50%);" alt="Powered by AWS Cloud Computing">
+</a>&nbsp;for use by&nbsp;
+<a href="https://proj.org">
+<img src="https://proj.org/_static/logo.png" style="position: relative; top: 50%; transform: translateY(50%);" alt="PROJ"></a>
+</div>
</body>
</html>
diff --git a/index.html.in b/index.html.in
new file mode 100644
index 0000000..3ba102e
--- /dev/null
+++ b/index.html.in
@@ -0,0 +1,36 @@
+<!-- This file is the root of https://cdn.proj.org/ -->
+<!-- Part of it is generated by the regenerate_index_html.py script -->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
+<title>PROJ datumgrids</title>
+</head>
+
+<body>
+<p>
+This proj.cdn.org bucket, hosted by the
+<a href="https://aws.amazon.com/opendata/public-datasets/">Amazon Public Datasets</a> program,
+contains the datasets of
+<a href="https://github.com/OSGeo/proj-datumgrid-geotiff/">https://github.com/OSGeo/proj-datumgrid-geotiff/</a>.
+</p>
+<p>
+Those files are designed to be mainly used by <a href="https://proj.org">PROJ</a> 7 or later.
+</p>
+<p>The bucket contains the following files:</p>
+<ul>
+<li><a href="README.DATUMGRID">README.DATUMGRID</a></li>
+${LINKS_WILL_BE_ADDED_HERE_BY_REGENERATE_INDEX_HTML}
+</ul>
+<p>
+Total size of content: ${TOTAL_SIZE}
+</p>
+<div style="text-align: center;">
+<a href="https://aws.amazon.com/what-is-cloud-computing">
+<img src="https://d0.awsstatic.com/logos/powered-by-aws.png" style="position: relative; top: 50%; transform: translateY(50%);" alt="Powered by AWS Cloud Computing">
+</a>&nbsp;for use by&nbsp;
+<a href="https://proj.org">
+<img src="https://proj.org/_static/logo.png" style="position: relative; top: 50%; transform: translateY(50%);" alt="PROJ"></a>
+</div>
+</body>
+</html>
diff --git a/regenerate_index_html.py b/regenerate_index_html.py
new file mode 100644
index 0000000..ebc3aa7
--- /dev/null
+++ b/regenerate_index_html.py
@@ -0,0 +1,59 @@
+from osgeo import gdal
+import datetime
+import glob
+import os
+
+dirnames = []
+links = []
+for dirname in glob.glob('*'):
+ if not os.path.isdir(dirname):
+ continue
+ dirnames.append(dirname)
+
+total_size = 0
+set_files = set()
+for dirname in sorted(dirnames):
+ filenames = []
+ readme_filename = None
+ for f in glob.glob(dirname + '/*'):
+ f = os.path.basename(f)
+ if f.startswith('README'):
+ assert not readme_filename
+ readme_filename = f
+ else:
+ filenames.append(f)
+ links.append('</ul><ul>')
+ for f in [readme_filename] + sorted(filenames):
+
+ assert f not in set_files
+ set_files.add(f)
+
+ full_filename = os.path.join(dirname, f)
+ ds = gdal.OpenEx(full_filename)
+ desc = ''
+ if ds:
+ imageDesc = ds.GetMetadataItem('TIFFTAG_IMAGEDESCRIPTION')
+ if imageDesc:
+ pos = imageDesc.find('. Converted from')
+ if pos >= 0:
+ imageDesc = imageDesc[0:pos]
+ desc = ': ' + imageDesc
+
+ size_str = ''
+ size = os.stat(full_filename).st_size
+ total_size += size
+ if size > 1024 * 1024:
+ size_str = '. Size: %.1f MB' % (size / (1024. * 1024))
+
+ if f.startswith('README'):
+ last_modified = ''
+ else:
+ last_modified = '. Last modified: ' + datetime.datetime.utcfromtimestamp(os.stat(full_filename).st_mtime).strftime("%Y/%m/%d")
+
+ links.append('<li><a href="%s">%s</a>%s%s%s</li>' % (f, f, desc, size_str, last_modified))
+
+total_size_str = '%d MB' % (total_size // (1024 * 1024))
+
+content = '<!-- This is a generated file by regenerate_index_html.py. Do not modify !!!! -->\n\n'
+content += open('index.html.in', 'rt').read().replace('${LINKS_WILL_BE_ADDED_HERE_BY_REGENERATE_INDEX_HTML}', '\n'.join(links)).replace('${TOTAL_SIZE}', total_size_str)
+open('index.html', 'wt').write(content)
diff --git a/sync_to_cdn.sh b/sync_to_cdn.sh
new file mode 100755
index 0000000..da77d8f
--- /dev/null
+++ b/sync_to_cdn.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+TARGET=s3://cdn.proj.org/
+
+for i in `ls -d */`; do
+ echo "Synchronizing $i ..."
+ aws s3 sync $i "$TARGET" --exclude ".github/*" --profile projcdn
+done
+aws s3 cp index.html "$TARGET" --profile projcdn
+aws s3 cp README.DATUMGRID "$TARGET" --profile projcdn