{"id":1432,"date":"2021-01-04T18:49:00","date_gmt":"2021-01-04T17:49:00","guid":{"rendered":"https:\/\/hannes.enjoys.it\/blog\/?p=1432"},"modified":"2022-07-25T20:51:11","modified_gmt":"2022-07-25T18:51:11","slug":"satellite-composite-of-earth-2020","status":"publish","type":"post","link":"https:\/\/hannes.enjoys.it\/blog\/2021\/01\/satellite-composite-of-earth-2020\/","title":{"rendered":"Satellite composite of Earth 2020"},"content":{"rendered":"\n<p>A follow-up to <a href=\"https:\/\/hannes.enjoys.it\/blog\/2019\/01\/average-earth-from-space-2018\/\" data-type=\"post\" data-id=\"1164\">Average Earth from Space 2018<\/a> with a how-to. For each day of 2020 I took one global true color image of the whole planet and merged them together by using  the most typical color per pixel. You can see cloud patterns in astonishing detail, global wind, permafrost (careful, white can be ice and\/or clouds here) and more.  Scroll to the bottom for interactive full resolution viewers.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-1024x512.png\" alt=\"\" class=\"wp-image-1463\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-1024x512.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-300x150.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-768x384.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-1536x768.png 1536w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-2048x1024.png 2048w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/4326-1-624x312.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-4 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1450\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz-300x211.png\" alt=\"\" class=\"wp-image-1450\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-2193-nz.png 1115w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1452\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa-300x211.png\" alt=\"\" class=\"wp-image-1452\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-3857...-africa.png 1115w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1454\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa-300x211.png\" alt=\"\" class=\"wp-image-1454\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-5070-usa.png 1115w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1455\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba-300x211.png\" alt=\"\" class=\"wp-image-1455\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32618-kuba.png 1115w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1456\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey-300x211.png\" alt=\"\" class=\"wp-image-1456\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32635-greece-turkey.png 1115w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1457\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan-300x211.png\" alt=\"\" class=\"wp-image-1457\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32653-japan.png 1115w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"719\" data-id=\"1461\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1-1024x719.png\" alt=\"\" class=\"wp-image-1461\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1-624x438.png 624w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/detail-32718-chile-1.png 1115w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<p>Basically we will want to overlay one satellite image per day into one image for the whole year. You need two things: The images and the GDAL suite of geospatial processing tools.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Imagery<\/h2>\n\n\n\n<p>You can get a daily satellite composite of (almost) the whole earth from NASA. For example of the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Visible_Infrared_Imaging_Radiometer_Suite\">Soumi NPP \/ VIIRS<\/a> instrument. <a href=\"https:\/\/worldview.earthdata.nasa.gov\/?l=VIIRS_SNPP_CorrectedReflectance_TrueColor\">Check it out at WorldView<\/a>.<\/p>\n\n\n\n<p>You can download those images via <a href=\"https:\/\/wiki.earthdata.nasa.gov\/display\/GIBS\/GIBS+API+for+Developers\">Global Imagery Browse Services (GIBS)<\/a>.<\/p>\n\n\n\n<p>As the API I used two years ago is gone, <a href=\"https:\/\/gist.github.com\/jscarto\/6c0413f4820ed5141744e96e19f31205\">Joshua Stevens was so nice to share code he used previously<\/a>. It was easy to adapt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">set -e\nset -u\n\n# run like: $ bash gibs_viirs.sh 2020-10-05\n# you get: VIIRS_SNPP_CorrectedReflectance_TrueColor-2020-10-05.tif\n# in ~15 minutes and at ~600 megabytes for 32768x16384 pixels\n\n# based on https:\/\/gist.github.com\/jscarto\/6c0413f4820ed5141744e96e19f31205\n\n# https:\/\/gibs.earthdata.nasa.gov\/wmts\/epsg4326\/best\/1.0.0\/WMTSCapabilities.xml\n# VIIRS_SNPP_CorrectedReflectance_TrueColor is not served as PNG by GIBS\n# so this is using JPEG tiles as source\n\n# -outsize 65536 32768 took ~50 minutes\n# -outsize 32768 16384 took ~15 minutes\n# you can run multiple instances at once without issues to reduce total time\n\n# TODO probably should be using a less detailed tileset than 250m to put\n# less stress on the server...!\n\nlayer=VIIRS_SNPP_CorrectedReflectance_TrueColor\ncaldate=$1  # 2020-09-09\ntilelevel=8  # 8 is the highest for 250m, see Capa -> 163840 81920 would be the full outsize\n# 2022 says: Dude, check what gdal says for \"Input file size is x, y\" and then compare it to the outsize. Use the tilelevel that gives 2x the outsize, that seems to be what's needed\n\n# ready? let's go!\ngdal_translate \\\n-outsize 32768 16384 \\\n-projwin -180 90 180 -90 \\\n-of GTIFF \\\n-co TILED=YES \\\n-co COMPRESS=DEFLATE \\\n-co PREDICTOR=2 \\\n-co NUM_THREADS=ALL_CPUS \\\n\"&lt;GDAL_WMS>\n &lt;Service name=\\\"TMS\\\">\n &lt;ServerUrl>https:\/\/gibs.earthdata.nasa.gov\/wmts\/epsg4326\/best\/\"${layer}\"\/default\/\"${caldate}\"\/250m\/\\${z}\/\\${y}\/\\${x}.jpg&lt;\/ServerUrl>\n&lt;\/Service>\n&lt;DataWindow>\n &lt;UpperLeftX>-180.0&lt;\/UpperLeftX>&lt;!-- makes sense -->\n &lt;UpperLeftY>90&lt;\/UpperLeftY>&lt;!-- makes sense -->\n &lt;LowerRightX>396.0&lt;\/LowerRightX>&lt;!-- wtf -->\n &lt;LowerRightY>-198&lt;\/LowerRightY>&lt;!-- wtf -->\n &lt;TileLevel>\"${tilelevel}\"&lt;\/TileLevel>\n &lt;TileCountX>2&lt;\/TileCountX>\n &lt;TileCountY>1&lt;\/TileCountY>\n &lt;YOrigin>top&lt;\/YOrigin>\n&lt;\/DataWindow>\n&lt;Projection>EPSG:4326&lt;\/Projection>\n&lt;BlockSizeX>512&lt;\/BlockSizeX>&lt;!-- correct for VIIRS_SNPP_CorrectedReflectance_TrueColor-->\n&lt;BlockSizeY>512&lt;\/BlockSizeY>&lt;!-- correct for VIIRS_SNPP_CorrectedReflectance_TrueColor -->\n&lt;BandsCount>3&lt;\/BandsCount>\n&lt;\/GDAL_WMS>\" \\\n${layer}-${caldate}.tif<\/code><\/pre>\n\n\n\n<p>As this was no scientific project, please note that I have spent no time checking e. g.:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>If one could reduce the (significantly) compression artifacts of imagery received through this (the imagery is only provided as JPEG using this particular API),<\/li><li>if the temporal queries are actually getting the correct dates,<\/li><li>if there might be more imagery available<\/li><li>or even if the geographic referencing is correct.<\/li><\/ul>\n\n\n\n<p>As it takes a long time to fetch an image this way, I decided to go for a resolution of 32768&#215;16384 pixels instead of 65536&#215;32768 because the latter took about 50 minutes per image. A day of 32768&#215;16384 pixels took me about 15 minutes to download.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Overlaying the images<\/h2>\n\n\n\n<p>There are lots of options to overlay images. imagemagick\/graphicsmagick might be the obvious choice but they are unfit for imagery of these dimensions (exhausting RAM). VIPS\/nips2 is awesome but might require some getting used to and\/or manual processing. GDAL is the hot shit and very RAM friendly if you are careful. So I used GDAL for this.<\/p>\n\n\n\n<p>Make sure to store the images somewhere sensible for lots of I\/O.<\/p>\n\n\n\n<p>Got all the images you want to process? Cool, build a VRT for them:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">gdalbuildvrt \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020.vrt \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020-*.tif<\/code><\/pre>\n\n\n\n<p>This takes some seconds.<\/p>\n\n\n\n<p>We want to overlay the images with some fancy, highly complex mathematical formula (or not ;) ) and since <a href=\"https:\/\/gdal.org\/drivers\/raster\/vrt.html#using-derived-bands-with-pixel-functions-in-python\">GDAL&#8217;s VRT driver supports custom Python functions to manipulate pixel values<\/a>, we can use numpy for that. Put this in a file called <code>functions.py<\/code> and remember the path to that file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">import numpy as np\n\ndef median(in_ar, out_ar, xoff, yoff, xsize, ysize, raster_xsize,\n      raster_ysize, buf_radius, gt,  **kwargs):\n    out_ar[:] = np.median(in_ar, axis = 0)\n\ndef mean(in_ar, out_ar, xoff, yoff, xsize, ysize, raster_xsize,\n      raster_ysize, buf_radius, gt,  **kwargs):\n    out_ar[:] = np.mean(in_ar, axis = 0)\n\ndef max(in_ar, out_ar, xoff, yoff, xsize, ysize, raster_xsize,\n      raster_ysize, buf_radius, gt,  **kwargs):\n    out_ar[:] = np.amax(in_ar, axis = 0)\n\ndef min(in_ar, out_ar, xoff, yoff, xsize, ysize, raster_xsize,\n      raster_ysize, buf_radius, gt,  **kwargs):\n    out_ar[:] = np.amin(in_ar, axis = 0)<\/code><\/pre>\n\n\n\n<p>You can now use a median, mean, min or max function for aggregating the images per pixel. For that you have to modify the VRT to include the function you want it to use. I used <code>sed<\/code> for that:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">sed -e 's#&lt;VRTRasterBand#&lt;VRTRasterBand subClass=\"VRTDerivedRasterBand\"#' \\\n-e 's#&lt;\/ColorInterp&gt;#&lt;\/ColorInterp&gt;\\n&lt;PixelFunctionLanguage&gt;Python&lt;\/PixelFunctionLanguage&gt;\\n&lt;PixelFunctionType&gt;functions.median&lt;\/PixelFunctionType&gt;#' \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020.vrt \\\n&gt; VIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt\n<\/code><\/pre>\n\n\n\n<p>That&#8217;s it, we are ready to use GDAL to build an image that combines all the daily images into one median image. For this to work you have to set the PYTHONPATH environment variable to include the directory of the <code>functions.py<\/code> file. If it is in the same directory where you launch gdal, you can use <code>$PWD<\/code>, otherwise enter the full path to the directory. Adjust the rest of the options as you like, e. g. to choose a different output format. If you use <a href=\"https:\/\/www.cogeo.org\/\">COG<\/a>, enabling <code>ALL_CPUS<\/code> is highly recommended or building overviews will take forever.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">PYTHONPATH=$PWD gdal_translate \\\n--config CPL_DEBUG VRT --config GDAL_CACHEMAX 25% \\\n--config GDAL_VRT_ENABLE_PYTHON YES \\\n-of COG -co NUM_THREADS=ALL_CPUS \\\n-co COMPRESS=DEFLATE -co PREDICTOR=2 \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.tif<\/code><\/pre>\n\n\n\n<p>This will take many hours. 35 hours for me on a Ryzen 3600 with lots of RAM and the images on a cheap SSD. The resulting file is about the same size as the single images (makes sense, doesn&#8217;t it) at ~800 megabytes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Alternative, faster approach<\/h3>\n\n\n\n<p>A small note while we are at it: GDAL calculates overviews from the source data. And since we are using a custom VRT function here, on a lot of raster images, that takes a long time. To save a lot of that time, you can build the file without overviews first, then calculate them in a second step. With this approach they will be calculated from the final raster instead of the initial input which, when ever there is non-trivial processing involved, is way quicker:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">PYTHONPATH=$PWD gdal_translate \\\n--config CPL_DEBUG VRT --config GDAL_CACHEMAX 25% \\\n--config GDAL_VRT_ENABLE_PYTHON YES \\\n-of GTiff -co NUM_THREADS=ALL_CPUS \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.noovr.tif<\/code><\/pre>\n\n\n\n<p>Followed by the conversion to a COG (which automatically will build the overviews as mandatory for that awesome format):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">gdal_translate \\\n--config GDAL_CACHEMAX 25% \\\n-of COG -co NUM_THREADS=ALL_CPUS \\\n-co COMPRESS=DEFLATE -co PREDICTOR=2 \\\n\/tmp\/VIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.noovr.tif \\\nVIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.cog.tif<\/code><\/pre>\n\n\n\n<p>This took &#8220;just&#8221; 10 hours for the initial raster and then an additional 11 <em>seconds<\/em> for the conversion COG and the building of overviews. And the resulting file is bit-by-bit identical to the one from the direct-to-COG approach. So one third of processing time for the same result. Nice!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Result<\/h2>\n\n\n\n<p>Check it out in full, zoomable resolution: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/geotiffjs.github.io\/cog-explorer\/?#scene=https:\/\/hannes.enjoys.it\/cog\/VIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.cog.tif\">EPSG:4326<\/a> 1:1 to the data I used via <a rel=\"noreferrer noopener\" href=\"https:\/\/geotiffjs.github.io\/\" data-type=\"URL\" data-id=\"https:\/\/geotiffjs.github.io\/\" target=\"_blank\">geotiffjs.github.io<\/a><\/li><li><a href=\"https:\/\/www.cogeo.org\/map\/#\/url\/https%3A%2F%2Fhannes.enjoys.it%2Fcog%2FVIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.cog.tif\">Pseudo\/Web Mercator EPSG:3857 using client-side reprojection<\/a> via <a href=\"https:\/\/cogeo.org\">cogeo.org<\/a><\/li><\/ul>\n\n\n\n<p>Or download the Cloud-Optimized GeoTIFF file for your own software:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/hannes.enjoys.it\/cog\/VIIRS_SNPP_CorrectedReflectance_TrueColor-2020_median.vrt.cog.tif\">EPSG:4326<\/a> (800MB)<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" data-id=\"1448\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-300x211.png\" alt=\"\" class=\"wp-image-1448\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-300x211.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-1024x719.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-768x539.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-1536x1078.png 1536w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-2048x1438.png 2048w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/3995-WGS-84-Arctic-Polar-Stereographic-624x438.png 624w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" data-id=\"1464\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-1024x466.png\" alt=\"\" class=\"wp-image-1464\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-1024x466.png 1024w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-300x136.png 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-768x349.png 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-1536x699.png 1536w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-2048x932.png 2048w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/world-robinson-1-624x284.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Closing remarks<\/h2>\n\n\n\n<p>Please do not consider a true representation of the typical weather or cloud cover throughout the year. The satellite takes the day imagery at local noon if I recall correctly so the rest of the day is not part of this &#8220;analysis&#8221;. I did zero plausibility or consistency checks. The data was probably reprojected multiple times through out the full (sensor-&gt;composite) pipeline. The composite is based on color alone, anything bright will lead to a white-ish color, be it snow, ice, clouds, algae, sand, &#8230;<\/p>\n\n\n\n<p>It&#8217;s just some neat imagery to love our planet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Update 2020-01-05<\/h2>\n\n\n\n<p>Added compression to GeoTIFF creation where useful, not sure how I missed that here. Reduces filesizes to 1\/2 or 1\/3 even.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A follow-up to Average Earth from Space 2018 with a how-to. For each day of 2020 I took one global true color image of the whole planet and merged them together by using the most typical color per pixel. You can see cloud patterns in astonishing detail, global wind, permafrost (careful, white can be ice [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,24,3,2],"tags":[],"class_list":["post-1432","post","type-post","status-publish","format-standard","hentry","category-commandline","category-gdal","category-guide","category-map"],"_links":{"self":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts\/1432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/comments?post=1432"}],"version-history":[{"count":23,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts\/1432\/revisions"}],"predecessor-version":[{"id":1784,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts\/1432\/revisions\/1784"}],"wp:attachment":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/media?parent=1432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/categories?post=1432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/tags?post=1432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}