# Le stockage S3: Un exemple pour la visualisation de cartes interactives

Benoît Seignovert

► To cite this version:

Benoît Seignovert. Le stockage S3: Un exemple pour la visualisation de cartes interactives. JoSy S3, Resinfo, Oct 2025, Strasbourg, France. 10.57745/DZGEQS. hal-05305463

HAL Id: hal-05305463

https://hal.science/hal-05305463v1

Submitted on 9 Oct 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution - ShareAlike 4.0 International License
# Le stockage S3

## Un exemple pour la visualisation de cartes interactives

### Benoît Seignovert

*Observatoire des Sciences de l'Univers Nantes Atlantique (Osuna)*
*Groupement Ligérien pour le Calcul Intensif Distribué (GLiCID)*

<figure><img src="image_2.png" /></figure>
# Produire des cartes

## une histoire millénaire

<figure><img src="image_3.png" /><figcaption>Carte Sumérienne | -2500</figcaption></figure>

<figure><img src="image_4.png" /><figcaption>Tabula Rogeriana | 1154</figcaption></figure>

70 feuillets
Global vs. détails

<figure><img src="image_5.png" /></figure>

<figure><img src="image_6.png" /><figcaption>Carte de Mercator
1569</figcaption></figure>

18 feuillets

1.2 m x 60 cm
Global vs. détails

<figure><img src="image_7.png" /></figure>

<figure><img src="image_8.png" /><figcaption>Carte de Mercator</figcaption></figure>

1569

18 feuillets

1.2 m x 60 cm
Global vs. détails

<figure><img src="image_9.png" /></figure>

<figure><img src="image_10.png" /><figcaption>Carte de Mercator</figcaption></figure>

1569

18 feuillets

1.2 m x 60 cm
<figure><img src="image_11.png" /><figcaption># Carte de Cassini</figcaption></figure>

1756 - 1815
(4 générations !)

181 feuilles au 1:86 400

11 m x 11 m

Écran

32 000 x 32 000 pixels

1 000 Mpix ~ 3 Go

Papier

130 000 x 130 000 pixels

17 000 Mpix ~ 50 Go
# Cartes IGN

1 200 cartes au 1:25 000

38 m x 38 m

Écran

110 000 x 110 000 pixels

12 000 Mpix ~ 33 Go

Papier

450 000 x 450 000 pixels

200 000 Mpix ~ 0.5 To

<figure><img src="image_12.png" /></figure>

<figure><img src="image_13.png" /></figure>
# Global vs. détails aujourd'hui

Projection Mercator

<figure><img src="image_14.png" /></figure>

1:1 000

40 km x 20 km

Écran

110 000 000 x 55 000 000 pixels
6 000 000 000 Mpix ~ 18 Po

Papier

450 000 000 x 225 000 000 pixels
100 000 000 000 Mpix ~ 300 Po
# Global vs. détails aujourd'hui

Strasbourg

<figure><img src="image_15.png" /></figure>

1:1 000

40 km x 20 km

Écran

110 000 000 x 55 000 000 pixels
6 000 000 000 Mpix ~ 18 Po

Papier

450 000 000 x 225 000 000 pixels
100 000 000 000 Mpix ~ 300 Po

10 m
# Global vs. détails aujourd'hui

Strasbourg

<figure><img src="image_16.png" /></figure>

1:1 000

40 km x 20 km

Écran

110 000 000 x 55 000 000 pixels
6 000 000 000 Mpix ~ 18 Po

Papier

450 000 000 x 225 000 000 pixels
100 000 000 000 Mpix ~ 300 Po

10 m
Comment
stocker tout ça ?

<figure><img src="image_17.png" /></figure>

S3 ?

<figure><img src="image_18.png" /></figure>
Oui mais ...
on n'a pas attendu S3 pour **distribuer** des cartes

<figure><img src="image_19.png" /></figure>
Des cartes à
différentes
résolutions

<figure><img src="image_20.png" /></figure>

IGN

<figure><img src="image_21.png" /></figure>

1 : 25 000

<figure><img src="image_22.png" /></figure>

1 : 100 000

<figure><img src="image_23.png" /></figure>

1 : 250 000

<figure><img src="image_24.png" /></figure>

1 : 1 000 000
# Méthode de Tuilage | Pyramidage

**Taille des tuiles :** 256 x 256 pixels
200 ko

**Nombre de tuiles :** N(Z) = 2<sup>2 x Z</sup>

**Indexation des tuiles :** /Z/X/Y.[jpg|png]

<figure><img src="image_25.png" /></figure>

**WMTS (Web Map Tile Service)**
<figure><img src="image_26.png" /></figure>

Z = 0

<figure><img src="image_27.png" /></figure>

Z = 1

<figure><img src="image_28.png" /></figure>

Z = 2

<figure><img src="image_29.png" /></figure>

Z = 3

<figure><img src="image_30.png" /></figure>

Z = 4

<figure><img src="image_31.png" /></figure>

Z = 5

• • •

<figure><img src="image_32.png" /></figure>

(0, 0, 0)

<figure><img src="image_33.png" /></figure>

(1, 1, 0)

<figure><img src="image_34.png" /></figure>

(2, 3, 1)

<figure><img src="image_35.png" /></figure>

(3, 6, 3)

<figure><img src="image_36.png" /></figure>

(4, 13, 6)

<figure><img src="image_37.png" /></figure>

(5, 27, 12)

• • •

(Z, X, Y)

## Coté server

1 x 256 x 256 pix
200 ko

4 x 256 x 256 pix
800 ko

16 x 256 x 256 pix
3.2 Mo

64 x 256 x 256 pix
13 Mo

256 x 256 x 256 pix
51 Mo

1024 x 256 x 256 pix
256 Mo

324 Mo
+26 %

## Coté client

256 x 256 pix
200 ko

256 x 256 pix
200 ko

256 x 256 pix
200 ko

256 x 256 pix
200 ko

256 x 256 pix
200 ko

256 x 256 pix
200 ko

1.2 Mo
0.5%
Découpage

1 </!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Map tiles demo</title>
7 <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
8 </head>
9 <body>
10 <div id="map" style="height: 800px"></div>
11 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
12 <script>
13 const map = L.map('map').setView([48.6056, 7.7095], 0);
14
15 const tiles = L tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
16 maxZoom: 19,
17 attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
18}).研究成果);
19 </script>
20 </body>
21 </html>
# Décmo

```html
1 </!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="UTF-8">
5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
6     <title>Map tiles demo</title>
7     <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
8 </head>
9 <body>
10     <div id="map" style="height: 800px"></div>
11     <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
12     <script>
13         const map = L.map('map').setView([48.6056, 7.7095], 0);
14
15         const tiles = L tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
16             maxZoom: 19,
17             attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
18         }).研究成果);
19     </script>
20 </body>
21 </html>
```
# Décmo

```html
1 </!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="UTF-8">
5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
6     <title>Map tiles demo</title>
7     <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
8 </head>
9 <body>
10     <div id="map" style="height: 800px"></div>
11     <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
12     <script>
13         const map = L.map('map').setView([48.6056, 7.7095], 0);
14
15         const tiles = L tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
16             maxZoom: 19,
17             attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
18         }).push(map);
19     </script>
20 </body>
21 </html>
```
Découpage

1 </!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Map tiles demo</title>
7 <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
8 </head>
9 <body>
10 <div id="map" style="height: 800px"></div>
11 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
12 <script>
13 const map = L.map('map').setView([48.6056, 7.7095], 0);
14
15 const tiles = L tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
16 maxZoom: 19,
17 attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
18}).研究成果);
19 </script>
20 </body>
21 </html>
Découpage

1 </!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Map tiles demo</title>
7 <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
8 </head>
9 <body>
10 <div id="map" style="height: 800px"></div>
11 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
12 <script>
13 const map = L.map('map').setView([48.6056, 7.7095], 0);
14
15 const tiles = L tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
16 maxZoom: 19,
17 attribution: '@ OpenStreetMap</a>
18 }).研究成果);
19 </script>
20 </body>
21 </html>
https://osuna.univ-nantes.io/demo/tiles/
<table><thead><tr><th>Status</th><th>Method</th><th>Domain</th><th>File</th><th>URL</th><th>Initiator</th><th>Type</th><th>Transferred</th></tr></thead><tbody><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>1.png</td><td>https://tile.openstreetmap.org/2/1/1.png</td><td>img</td><td>png</td><td>8,62 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>1.png</td><td>https://tile.openstreetmap.org/2/2/1.png</td><td>img</td><td>png</td><td>12,10 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/2/1/2.png</td><td>img</td><td>png</td><td>4,72 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/2/2/2.png</td><td>img</td><td>png</td><td>3,72 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>0.png</td><td>https://tile.openstreetmap.org/2/1/0.png</td><td>img</td><td>png</td><td>8,02 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>0.png</td><td>https://tile.openstreetmap.org/2/2/0.png</td><td>img</td><td>png</td><td>5,93 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>1.png</td><td>https://tile.openstreetmap.org/2/0/1.png</td><td>img</td><td>png</td><td>5,78 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>1.png</td><td>https://tile.openstreetmap.org/2/3/1.png</td><td>img</td><td>png</td><td>cached</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/2/0/2.png</td><td>img</td><td>png</td><td>766 B</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/2/3/2.png</td><td>img</td><td>png</td><td>4,18 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>3.png</td><td>https://tile.openstreetmap.org/2/1/3.png</td><td>img</td><td>png</td><td>2,14 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>3.png</td><td>https://tile.openstreetmap.org/2/2/3.png</td><td>img</td><td>png</td><td>1,47 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>0.png</td><td>https://tile.openstreetmap.org/2/0/0.png</td><td>img</td><td>png</td><td>5,48 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>0.png</td><td>https://tile.openstreetmap.org/2/3/0.png</td><td>img</td><td>png</td><td>3,71 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>3.png</td><td>https://tile.openstreetmap.org/2/0/3.png</td><td>img</td><td>png</td><td>1,54 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>3.png</td><td>https://tile.openstreetmap.org/2/3/3.png</td><td>img</td><td>png</td><td>1,64 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>1.png</td><td>https://tile.openstreetmap.org/2/3/1.png</td><td>lazy-img</td><td>png</td><td>7,20 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>3.png</td><td>https://tile.openstreetmap.org/3/3/3.png</td><td>img</td><td>png</td><td>5,77 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>3.png</td><td>https://tile.openstreetmap.org/3/4/3.png</td><td>img</td><td>png</td><td>15,24 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/3/3/2.png</td><td>img</td><td>png</td><td>5,69 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/3/4/2.png</td><td>img</td><td>png</td><td>15,78 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/4/2.png</td><td>img</td><td>png</td><td>1,35 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/4/4.png</td><td>img</td><td>png</td><td>10,19 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/2/3.png</td><td>img</td><td>png</td><td>6,27 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/5/3.png</td><td>img</td><td>png</td><td>10,13 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/2/2.png</td><td>img</td><td>png</td><td>10,18 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/5/2.png</td><td>img</td><td>png</td><td>6,44 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/2/4.png</td><td>img</td><td>png</td><td>8,56 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/5/4.png</td><td>img</td><td>png</td><td>1,22 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/3/1.png</td><td>img</td><td>png</td><td>5,06 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/4/1.png</td><td>img</td><td>png</td><td>5,40 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/3/5.png</td><td>img</td><td>png</td><td>899 B</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/4/5.png</td><td>img</td><td>png</td><td>766 B</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>2.png</td><td>https://tile.openstreetmap.org/3/6/2.png</td><td>img</td><td>png</td><td>6,90 kB</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>4.png</td><td>https://tile.openstreetmap.org/3/1/4.png</td><td>img</td><td>png</td><td>861 B</td></tr><tr><td>200</td><td>GET</td><td>tile.openstreetmap.org</td><td>1.png</td><td>https://tile.openstreetmap.org/3/2/1.png</td><td>img</td><td>png</td><td>9,12 kB</td></tr></tbody></table>

https://tile.openstreetmap.org/3/4/2.png

<figure><img src="image_38.png" /></figure>

256 x 256
Quelques fournisseurs de tuiles

<figure><img src="image_39.png" /></figure>

Open Street Map

<figure><img src="image_40.png" /></figure>

Google Maps

<figure><img src="image_41.png" /></figure>

géoportail

<figure><img src="image_42.png" /></figure>

Géosciences pour une Terre durable
brgm

<figure><img src="image_43.png" /></figure>

esri

IGN

INSTITUT NATIONAL
DE L'INFORMATION
GÉOGRAPHIQUE
ET FORESTIÈRE

USGS

science for a changing world

<figure><img src="image_44.png" /></figure>

maptiler

<figure><img src="image_45.png" /></figure>

mapbox

CARTO

<figure><img src="image_46.png" /></figure>

<figure><img src="image_47.png" /></figure>

osuna

planètes et
environnement

<figure><img src="image_48.png" /></figure>

<figure><img src="image_49.png" /></figure>

<figure><img src="image_50.png" /></figure>

MICHELIN

VIAMICHELIN

<figure><img src="image_51.png" /></figure>

Apple Maps

<figure><img src="image_52.png" /></figure>

百度

<figure><img src="image_53.png" /></figure>

tomtom
# Pourquoi faire du stockage sur S3 ?

<figure><img src="image_54.png" /></figure>
# Tuilage à petite échelle...

256 x 256 pixels
200 ko

<table><thead><tr><th>Level</th><th># Tuiles</th><th>Taille du pixel</th><th>~ Échelle</th><th>Couverture</th><th># dossiers / fichiers</th><th>Taille</th><th></th></tr></thead><tbody><tr><td>0</td><td>1</td><td>160 km</td><td>1:500 000 000</td><td>Globale</td><td>1 / 1 / 1</td><td>200 ko</td><td>😊</td></tr><tr><td>1</td><td>4</td><td>80 km</td><td>1:250 000 000</td><td></td><td>2 / 2 / 2</td><td>0.8 Mo</td><td>agné</td></tr><tr><td>2</td><td>16</td><td>40 km</td><td>1:150 000 000</td><td>Continent</td><td>3 / 4 / 4</td><td>3.2 Mo</td><td>D</td></tr><tr><td>3</td><td>64</td><td>20 km</td><td>1:70 000 000</td><td></td><td>4 / 8 / 8</td><td>12 Mo</td><td>❄️</td></tr><tr><td>4</td><td>256</td><td>10 km</td><td>1:35 000 000</td><td></td><td>4 / 16 / 16</td><td>50 Mo</td><td>❄️</td></tr><tr><td>5</td><td>1 024</td><td>5 km</td><td>1:15 000 000</td><td>Pays</td><td>5 / 32 / 32</td><td>200 Mo</td><td>agné</td></tr><tr><td>6</td><td>4 096</td><td>2.5 km</td><td>1:8 000 000</td><td></td><td>6 / 64 / 64</td><td>0.8 Go</td><td>agné</td></tr><tr><td>7</td><td>16 384</td><td>1.2 km</td><td>1:4 000 000</td><td></td><td>7 / 128 / 128</td><td>3.2 Go</td><td>agné</td></tr><tr><td>8</td><td>65 536</td><td>600 m</td><td>1:2 000 000</td><td></td><td>8 / 256 / 256</td><td>12 Go</td><td>agné</td></tr><tr><td>9</td><td>262 144</td><td>300 m</td><td>1:1 000 000</td><td></td><td>9 / 512 / 512</td><td>50 Go</td><td>agné</td></tr><tr><td>10</td><td>1 048 576</td><td>150 m</td><td>1:500 000</td><td>Métropole</td><td>10 / 1024 / 1024</td><td>200 Go</td><td>agné</td></tr><tr><td>11</td><td>4 194 304</td><td>75 m</td><td>1:250 000</td><td>Ville</td><td>11 / 2 048 / 2 048</td><td>0.8 To</td><td>agné</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>agné</td></tr><tr><td>15</td><td>1 073 741 824</td><td>5 m</td><td>1:15 000</td><td>Route</td><td>15 / 32 768 / 32 768</td><td>200 To</td><td>agné</td></tr><tr><td>16</td><td>4 294 967 296</td><td>2.5 m</td><td>1:8 000</td><td></td><td>16 / 65 536 / 65 536</td><td>0.8 Po</td><td>agné</td></tr><tr><td>17</td><td>17 179 869 184</td><td>1.2 m</td><td>1:4 000</td><td>Adresse</td><td>17 / 131 072 / 131 072</td><td>3.2 Po</td><td>agné</td></tr><tr><td>18</td><td>68 719 476 736</td><td>60 cm</td><td>1:2 000</td><td></td><td>18 / 262 144 / 262 144</td><td>12 Po</td><td>agné</td></tr><tr><td>19</td><td>274 877 906 944</td><td>30 cm</td><td>1:1 000</td><td>Passage piéton</td><td>19 / 524 288 / 524 288</td><td>50 Po</td><td>agné</td></tr></tbody></table>

<figure><img src="image_55.png" /></figure>

<figure><img src="image_56.png" /></figure>

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

<figure><img src="image_59.png" /></figure>

<figure><img src="image_60.png" /></figure>

<figure><img src="image_61.png" /></figure>

<figure><img src="image_62.png" /></figure>

<figure><img src="image_63.png" /></figure>

<figure><img src="image_64.png" /></figure>

<figure><img src="image_65.png" /></figure>

<figure><img src="image_66.png" /></figure>

<figure><img src="image_67.png" /></figure>

<figure><img src="image_68.png" /></figure>

<figure><img src="image_69.png" /></figure>

<figure><img src="image_70.png" /></figure>

<figure><img src="image_71.png" /></figure>
**Impossible** de stocker des cartes
à haute résolution sans **stockage objet** !

<figure><img src="image_72.png" /></figure>

<figure><img src="image_73.png" /></figure>

<figure><img src="image_74.png" /></figure>
<figure><img src="image_75.png" /></figure>

# Faire des cartes interactives en S3 □

- Capacité à stocker des très **grandes volumétries**

- Capacité à stocker un très grand **nombre de fichiers** de petites tailles

- **Pas de limite** de dossiers / fichiers

- Stockage **web natif** (gateway)

- Stockage **statique** (pas besoin de serveur)

- Adressage par des objets par clé : `/{z}/{x}/{y}.fmt`

- **Parallélisation** des requêtes: excellente performance

- Utilisation en **CDN**: réplication / synchronisation / haute disponibilité / régionalisation

- **Coût du stockage faible** mais... ⚠ au **egress-cost** 😂
<figure><img src="image_76.png" /><figcaption># Résolution temporelle</figcaption></figure>

/{t}/{z}/{x}/{y}.fmt

<figure><img src="image_77.png" /></figure>

2025
<figure><img src="image_78.png" /><figcaption># Résolution temporelle</figcaption></figure>

/{t}/{z}/{x}/{y}.fmt

<figure><img src="image_79.png" /></figure>

2002
<figure><img src="image_80.png" /><figcaption># Résolution temporelle</figcaption></figure>

/{t}/{z}/{x}/{y}.fmt

<figure><img src="image_81.png" /></figure>

1943
# Résolution multi/hyper-spectrale

<figure><img src="image_82.png" /></figure>

<figure><img src="image_83.png" /></figure>

/{w}/{z}/{x}/{y}.fmt

0.6 µm

Eumetsat

Meteosat FCI
# Résolution multi/hyper-spectrale

<figure><img src="image_84.png" /></figure>

<figure><img src="image_85.png" /></figure>

/{w}/{z}/{x}/{y}.fmt

10.5 µm

Eumetsat

Meteosat FCI
# Cloud Optimized GeoTiff

<figure><img src="image_86.png" /><figcaption>/{z}/{x}/{y}.tiff 👤 /cog.tiff</figcaption></figure>

<figure><img src="image_87.png" /></figure>
# Cloud Optimized GeoTiff

<figure><img src="image_88.png" /></figure>

`/{z}/{x}/{y}.tiff 👁️ /cog.tiff + 👁️ HTTP range requests`

$ curl -r 128 https://example.org/cog.tiff

<figure><img src="image_89.png" /></figure>

<figure><img src="image_90.png" /></figure>

<figure><img src="image_91.png" /></figure>

<figure><img src="image_92.png" /></figure>
# Cloud Optimized GeoTiff

<figure><img src="image_93.png" /></figure>

/*z}/{x}/{y}.tiff 👁️ /cog.tiff + 👁️ HTTP range requests

Start : 256
Length : 256

<figure><img src="image_94.png" /></figure>

$ curl -r 256-512 https://example.org/cog.tiff

<figure><img src="image_95.png" /></figure>

<figure><img src="image_96.png" /></figure>
# Cloud Optimized GeoTiff

<figure><img src="image_97.png" /></figure>

/{z}/{x}/{y}.tiff 👎 /cog.tiff + 👊 HTTP range requests

<figure><img src="image_98.png" /></figure>

$ curl -r 1024-5120 https://example.org/cog.tiff

<figure><img src="image_99.png" /></figure>

Start : 1024

Length : 16 * 256 = 4096

<figure><img src="image_100.png" /></figure>

<figure><img src="image_101.png" /></figure>
# Cloud Optimized GeoTiff

<figure><img src="image_102.png" /></figure>

/{z}/{x}/{y}.tiff 👁️ /cog.tiff + 👁️ HTTP range requests

$ curl -r 1280-1536 https://example.org/cog.tiff

<figure><img src="image_103.png" /></figure>

Start : 1024

Length : 1 * 256 = 256

Offset : 1 * 256 = 256

<figure><img src="image_104.png" /></figure>

<figure><img src="image_105.png" /></figure>
# Base de données géographique native S3

<figure><img src="image_106.png" /></figure>

<figure><img src="image_107.png" /></figure>
# Base de données géographique native S3

## COMPUTING ENGINES & LIBRARIES

<figure><img src="image_108.png" /></figure>

Google BigQuery

<figure><img src="image_109.png" /></figure>

databricks

<figure><img src="image_110.png" /></figure>

amazon REDSHIFT

<figure><img src="image_111.png" /></figure>

snowflake

<figure><img src="image_112.png" /></figure>

GeoPandas

<figure><img src="image_113.png" /></figure>

dremio

<figure><img src="image_114.png" /></figure>

<figure><img src="image_115.png" /></figure>

presto

<figure><img src="image_116.png" /></figure>

APACHE Spark™

<figure><img src="image_117.png" /></figure>

DuckDB

SELECT data FROM myTable JOIN providerTable

<figure><img src="image_118.png" /></figure>

## CLOUD STORAGE

CARTO

<figure><img src="image_119.png" /></figure>

PROVIDERS DATA

FOURSQUARE

<figure><img src="image_120.png" /></figure>

planet.

<figure><img src="image_121.png" /></figure>

SAFE GRAPH

data.parquet

ENTERPRISE DATA
# Base de données géographique native S3

<figure><img src="image_122.png" /></figure>

<figure><img src="image_123.png" /></figure>

ATTACH 's3://example.org/stations.duckdb' AS stations_db;

SELECT count(*) AS num_stations FROM stations_db.stations;

num_stations

578

<figure><img src="image_124.png" /></figure>

SELECT PARCEL_ID, geometry FROM stations_db.stations
WHERE ST_Contains(ST_Point(0, 45), geometry) LIMIT 100;

<table><thead><tr><td>ID_PARCEL</td><td>geometry</td></tr></thead><tbody><tr><td>123563</td><td>POLYGON ((3.33896 49.84122, 3.33948 49.8...)</td></tr><tr><td>5527076</td><td>POLYGON ((-1.44483 49.61280, -1.44467 49...)</td></tr><tr><td>11479241</td><td>POLYGON ((2.87821 46.53674, 2.87820 46.5...)</td></tr><tr><td>...</td><td>...</td></tr></tbody></table>
# Quelques exemples dans le système solaire

<figure><img src="image_125.png" /></figure>

<figure><img src="image_126.png" /><figcaption>Lune</figcaption></figure>

22 000 000 x 11 000 000 pixels

240 000 000 Mpix ~ 720 To

<figure><img src="image_127.png" /><figcaption>Mars</figcaption></figure>

70 000 000 x 35 000 000 pixels

2 500 000 000 Mpix ~ 7 Po
https://murray-lab.caltech.edu/CTX/V01/SceneView/MurrayLabCTXmosaic.html
# Carte du ciel ✿

<figure><img src="image_128.png" /></figure>

* 8.4 m miroir
* 3 200 Mpix / image
* 200 000 images / an
* 20 To / jour
* ~6 Po / an

<figure><img src="image_129.png" /></figure>

<figure><img src="image_130.png" /></figure>

<figure><img src="image_131.png" /></figure>

Observatoire Vera Rubin (LSST) - 2025
<figure><img src="image_132.png" /><figcaption>1. Messier 21</figcaption></figure>

<figure><img src="image_133.png" /><figcaption>2. Messier 20</figcaption></figure>

<figure><img src="image_134.png" /></figure>

1

2

3

4

<figure><img src="image_135.png" /><figcaption>3. Bochum 14</figcaption></figure>

<figure><img src="image_136.png" /><figcaption>4. NGC 6544</figcaption></figure>

# Nébuleuses Trifide et la Lagune
https://noirlab.edu/public/images/noirlab2521b/zoomable/