From d2e6872e95107a870123c871ecd3c8b7720e0f33 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Mon, 10 Mar 2025 14:30:15 +0100 Subject: [PATCH 001/108] =?UTF-8?q?README.md=20:=20am=C3=A9lioration=20de?= =?UTF-8?q?=20la=20documentation=20pour=20faciliter=20la=20compr=C3=A9hens?= =?UTF-8?q?ion=20de=20l'installation=20des=20outils=20rok4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 8d7312e..3d7ac64 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,24 @@ Depuis [PyPI](https://pypi.org/project/rok4/) : `pip install rok4` Depuis [GitHub](https://github.com/rok4/core-python/releases/) : `pip install https://github.com/rok4/core-python/releases/download/x.y.z/rok4-x.y.z-py3-none-any.whl` +Puis passer en mode superutilisateur pour taper cette ligne de commande et installer l'environnement virtuel de python : +```sh +sudo apt install python3.10-venv +``` +puis revenir en mode normal et tapez cette ligne de commande : +```sh +source .venv/bin/activate +``` + L'environnement d'exécution doit avoir accès aux librairies système. Dans le cas d'une utilisation au sein d'un environnement python, précisez bien à la création `python3 -m venv --system-site-packages .venv`. ## Utiliser la librairie +Dans un script nommé par exemple `tilematrixset_launcher.py` en dehors du dépôt `core-python`, tapez la ligne de commande suivante : +```sh +export ROK4_TMS_DIRECTORY=/home/{my_username}/core-python/ +``` +Le script `tilematrixset_launcher.py` contient les lignes suivantes : ```python from rok4.tile_matrix_set import TileMatrixSet @@ -27,6 +41,12 @@ except Exception as exc: print(exc) ``` +Puis exécuter le programme : +```sh +python3 tilematrixset_launcher.py +``` + + Les variables d'environnement suivantes peuvent être nécessaires, par module : * `storage` : plus de détails dans la documentation technique du module From 58f13312218b46e927b2664ced3a73edf6302a5f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 15:10:13 +0000 Subject: [PATCH 002/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3d7ac64..e485f52 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,9 @@ except Exception as exc: print(exc) ``` -Puis exécuter le programme : +Puis exécuter le programme : ```sh -python3 tilematrixset_launcher.py +python3 tilematrixset_launcher.py ``` From d992180a4550270f47d960b314d66ab118b5df58 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 11 Mar 2025 09:42:02 +0100 Subject: [PATCH 003/108] =?UTF-8?q?README.md=20:=20ajout=20de=20l'export?= =?UTF-8?q?=20des=20variables=20d'environnement=20python=20=C3=A0=20taper?= =?UTF-8?q?=20en=20ligne=20de=20commande=20en=20dehors=20du=20d=C3=A9p?= =?UTF-8?q?=C3=B4t=20'rok4'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e485f52..39267d2 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,15 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ## Utiliser la librairie -Dans un script nommé par exemple `tilematrixset_launcher.py` en dehors du dépôt `core-python`, tapez la ligne de commande suivante : +En dehors du dépôt `core-python`, tapez la ligne de commande suivante : ```sh -export ROK4_TMS_DIRECTORY=/home/{my_username}/core-python/ +export ROK4_TMS_DIRECTORY=s3://tilematrixsets +export ROK4_S3_KEY=rok4 +export ROK4_S3_SECRETKEY=rok4S3storage +export ROK4_S3_URL=http://localhost:9000 ``` + +Dans un script nommé par exemple `tilematrixset_launcher.py` Le script `tilematrixset_launcher.py` contient les lignes suivantes : ```python from rok4.tile_matrix_set import TileMatrixSet From b5d72cb6b4255113118b5b6980dd51221fdb9193 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Mar 2025 08:42:19 +0000 Subject: [PATCH 004/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39267d2..8ad0336 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` -Dans un script nommé par exemple `tilematrixset_launcher.py` +Dans un script nommé par exemple `tilematrixset_launcher.py` Le script `tilematrixset_launcher.py` contient les lignes suivantes : ```python from rok4.tile_matrix_set import TileMatrixSet From e990240a5e2dc25e7b136b84b997cc54e238d144 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 11 Mar 2025 09:53:10 +0100 Subject: [PATCH 005/108] =?UTF-8?q?README.md=20:=20r=C3=A9sultat=20du=20pe?= =?UTF-8?q?tit=20script=20de=20lancement=20sur=20la=20classe=20'Tilematrix?= =?UTF-8?q?set()'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 39267d2..bb1226b 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,10 @@ Le script `tilematrixset_launcher.py` contient les lignes suivantes : from rok4.tile_matrix_set import TileMatrixSet try: - tms = TileMatrixSet("file:///path/to/tms.json") + tms = TileMatrixSet("PM") + print (tms.name) + print (tms.path) + print (tms.srs) except Exception as exc: print(exc) ``` @@ -50,7 +53,13 @@ Puis exécuter le programme : ```sh python3 tilematrixset_launcher.py ``` - +Le résultat donne : +```sh +myusername@pcname:~$ python3 tilematrixset_launcher.py +PM +s3://tilematrixsets/PM.json +EPSG:3857 +``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From 1aaaab9756f4e4bbb7f60a8e5b6d22e858472b7c Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 11 Mar 2025 12:51:45 +0100 Subject: [PATCH 006/108] =?UTF-8?q?README.md=20:=20mise=20au=20format=20py?= =?UTF-8?q?thon=20string=20des=20affichages=20=C3=A0=20l'=C3=A9cran=20des?= =?UTF-8?q?=20r=C3=A9sultats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 632d90e..9146928 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,9 @@ from rok4.tile_matrix_set import TileMatrixSet try: tms = TileMatrixSet("PM") - print (tms.name) - print (tms.path) - print (tms.srs) + print("le nom du tms est le suivant : {}".format(tms.name)) + print("le nom du tms est le suivant : {}".format(tms.path)) + print("le code srs associé au système de projection planimétrique est le suivant : {}".format(tms.srs)) except Exception as exc: print(exc) ``` From f6b43788710f5e2ecafeaebe6edf8917a5c83080 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 18 Mar 2025 16:32:24 +0100 Subject: [PATCH 007/108] =?UTF-8?q?README.md=20:=20mise=20=C3=A0=20jour=20?= =?UTF-8?q?compl=C3=A9ment=20=20d'informations=20"Utiliser=20la=20librairi?= =?UTF-8?q?e"=20pour=20exploiter=20les=20diff=C3=A9rentes=20classes=20du?= =?UTF-8?q?=20core-python?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 73 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 9146928..e4b2559 100644 --- a/README.md +++ b/README.md @@ -35,30 +35,75 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` -Dans un script nommé par exemple `tilematrixset_launcher.py` -Le script `tilematrixset_launcher.py` contient les lignes suivantes : +Dans un script nommé par exemple `data_tilesmatrix_launcher.py` +Le script `data_tilesmatrix_launcher.py` contient les lignes suivantes : ```python -from rok4.tile_matrix_set import TileMatrixSet +#!/usr/bin/env python3 +# Nom : data_tilesmatrix_launcher.py +# But : récupérer des informations sur les pyramides de tuiles que l'on analyse +# Dossier cible : pyramide tuiles ALTI et BDORTHO + +import json +from enum import Enum + +# import des classes de rok4 +from rok4.enums import PyramidType, SlabType, StorageType +from rok4.pyramid import Level, Pyramid +from rok4.vector import Vector +from rok4.style import Colour, Palette, Slope, Exposition, Estompage, Legend, Style +from rok4.storage import get_infos_from_path, get_path_from_infos, get_osgeo_path, get_size +from rok4.utils import bbox_to_geometry, reproject_bbox, reproject_point, compute_bbox, compute_format, srs_to_spatialreference +from rok4.tile_matrix_set import TileMatrix, TileMatrixSet + + +try : -try: tms = TileMatrixSet("PM") - print("le nom du tms est le suivant : {}".format(tms.name)) - print("le nom du tms est le suivant : {}".format(tms.path)) - print("le code srs associé au système de projection planimétrique est le suivant : {}".format(tms.srs)) -except Exception as exc: - print(exc) + print(f"le nom du tms est le suivant : {tms.name}") + print(f"le nom du tms est le suivant : {tms.path}") + print(f"le code srs associé au système de projection planimétrique est le suivant : {tms.srs}") + + typePyramid = PyramidType("RASTER") + slabType = SlabType("MASK") + storageType = StorageType("s3://") + + print (f"type de pyramide : {typePyramid}") + print (f"type de slab : {slabType}") + print (f"type de stockage : {storageType}") + + couleur = Colour({ + "value": 600, + "red": 220, + "green": 179, + "blue": 99, + "alpha": 255 + }, "Style") + print(f"les canaux rouge, vert, bleu et alpha : {couleur.rgba}") + print(f"les canaux rouge, vert, bleu : {couleur.rgb}") + + pathtorasterpyramide = "/home/FBacquelot/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" + pathtovecteurrpyramide = "/home/FBacquelot/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" + +except Exception as exc : + + print (exc) ``` Puis exécuter le programme : ```sh -python3 tilematrixset_launcher.py +python3 data_tilesmatrix_launcher.py ``` Le résultat donne : ```sh -myusername@pcname:~$ python3 tilematrixset_launcher.py -PM -s3://tilematrixsets/PM.json -EPSG:3857 +myusername@pcname:~$ python3 data_tilesmatrix_launcher.py +le nom du tms est le suivant : PM +le nom du tms est le suivant : s3://tilematrixsets/PM.json +le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 +type de pyramide : PyramidType.RASTER +type de slab : SlabType.MASK +type de stockage : StorageType.S3 +les canaux rouge, vert, bleu et alpha : (220, 179, 99, 255) +les canaux rouge, vert, bleu : (220, 179, 99) ``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From d1ad283487f127a4d4405158010b4b8076a6da73 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 18 Mar 2025 18:27:43 +0100 Subject: [PATCH 008/108] =?UTF-8?q?README.md=20:=20mise=20=C3=A0=20jour=20?= =?UTF-8?q?de=20la=20partie=20"Utiliser=20la=20librairie"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e4b2559..47025c8 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,8 @@ Le script `data_tilesmatrix_launcher.py` contient les lignes suivantes : #!/usr/bin/env python3 # Nom : data_tilesmatrix_launcher.py # But : récupérer des informations sur les pyramides de tuiles que l'on analyse -# Dossier cible : pyramide tuiles ALTI et BDORTHO +# Dossier cible : pyramide tuiles de données raster ALTI et BDORTHO par exemple, et de données vecteur BDPARCELLAIRE -import json from enum import Enum # import des classes de rok4 @@ -81,9 +80,16 @@ try : print(f"les canaux rouge, vert, bleu et alpha : {couleur.rgba}") print(f"les canaux rouge, vert, bleu : {couleur.rgb}") + bbox = (10.6, 6.6, 3.3, 3.7) + layers = [("vector1", 10, [("attribute1", "attribute2")])] pathtorasterpyramide = "/home/FBacquelot/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" pathtovecteurrpyramide = "/home/FBacquelot/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" + vector = Vector() + print(f"le path donnant accès aux données de la pyramide de tuile vecteur est : {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['path']}") + print(f"la boundary box de la pyramide de tuile vecteur est : {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['bbox']}") + print(f"les couches vectorielles avec leur nom, le nombre d'objets et leurs attributs {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['layers']}") + except Exception as exc : print (exc) @@ -95,7 +101,7 @@ python3 data_tilesmatrix_launcher.py ``` Le résultat donne : ```sh -myusername@pcname:~$ python3 data_tilesmatrix_launcher.py +myusername@pcname:~$ python3 data_tilesmatrix_launcher.py le nom du tms est le suivant : PM le nom du tms est le suivant : s3://tilematrixsets/PM.json le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 @@ -104,6 +110,9 @@ type de slab : SlabType.MASK type de stockage : StorageType.S3 les canaux rouge, vert, bleu et alpha : (220, 179, 99, 255) les canaux rouge, vert, bleu : (220, 179, 99) +le path donnant accès aux données de la pyramide de tuile vecteur est : /home/myusername/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235 +la boundary box de la pyramide de tuile vecteur est : (10.6, 6.6, 3.3, 3.7) +les couches vectorielles avec leur nom, le nombre d'objets et leurs attributs [('vector1', 10, [('attribute1', 'attribute2')])] ``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From 37f4ec12c26ffcdb482a39bf34fb4d0a4801aa45 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:29:07 +0000 Subject: [PATCH 009/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47025c8..04cfbc4 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ python3 data_tilesmatrix_launcher.py ``` Le résultat donne : ```sh -myusername@pcname:~$ python3 data_tilesmatrix_launcher.py +myusername@pcname:~$ python3 data_tilesmatrix_launcher.py le nom du tms est le suivant : PM le nom du tms est le suivant : s3://tilematrixsets/PM.json le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 From b5099a515ff7fc1890b405495d5fdcc69c01d059 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Wed, 19 Mar 2025 13:57:55 +0100 Subject: [PATCH 010/108] README.MD : anonymer --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 47025c8..6657378 100644 --- a/README.md +++ b/README.md @@ -82,8 +82,8 @@ try : bbox = (10.6, 6.6, 3.3, 3.7) layers = [("vector1", 10, [("attribute1", "attribute2")])] - pathtorasterpyramide = "/home/FBacquelot/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" - pathtovecteurrpyramide = "/home/FBacquelot/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" + pathtorasterpyramide = "/home/myusername/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" + pathtovecteurrpyramide = "/home/myusername/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" vector = Vector() print(f"le path donnant accès aux données de la pyramide de tuile vecteur est : {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['path']}") From 4e2b16dc87aebd0cabf8d3a2d35015e1e567b868 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 20 Mar 2025 10:27:54 +0100 Subject: [PATCH 011/108] =?UTF-8?q?README.md=20:=20mise=20=C3=A0=20jour=20?= =?UTF-8?q?=3D>=20exploitation=20des=20fichiers=20json=20des=20couches=20e?= =?UTF-8?q?t=20des=20pyramides?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 86 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d62b27c..6d05c49 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ## Utiliser la librairie -En dehors du dépôt `core-python`, tapez la ligne de commande suivante : +En dehors du dépôt `core-python`, tapez la ligne de commande suivante dans un fichier shell `envvar.sh` , ainsi il n'y aura à chaque fois plus quà lancer le script shell contenant l'export de toutes les variables d'environnement du projet : ```sh export ROK4_TMS_DIRECTORY=s3://tilematrixsets export ROK4_S3_KEY=rok4 @@ -35,6 +35,36 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` +Arborescence d'organisation des scripts et des fichiers json pour l'exploitation des informations sur les tuiles de pyramide : +```sh +tree ../../Pyramide/ +../../Pyramide/ +├── JSON +│ ├── layers +│ │ └── pente.json +│ ├── pyramides +│ │ └── ALTI.json +│ ├── styles +│ │ └── pente.json +│ └── tilematrixsets +│ └── PM.json +├── RASTER +│ ├── ALTI +│ │ ├── DATA_0_0_0 +│ │ └── DATA_11_42_58 +│ └── BDORTHO +│ ├── DATA_11_42_58 +│ └── DATA_14_338_470 +├── scripts +│ ├── data_tilesmatrix_launcher.py +│ ├── envvar.sh +│ └── tilematrixset_launcher.py +└── VECTEUR + └── BDPARCELLAIRE + ├── DATA_11_21_29 + └── DATA_14_169_235 +``` + Dans un script nommé par exemple `data_tilesmatrix_launcher.py` Le script `data_tilesmatrix_launcher.py` contient les lignes suivantes : ```python @@ -80,10 +110,43 @@ try : print(f"les canaux rouge, vert, bleu et alpha : {couleur.rgba}") print(f"les canaux rouge, vert, bleu : {couleur.rgb}") + # Ouverture d'un fichier JSON d'une couche + print(f"\nOuverture d'un fichier JSON d'une pyramide") + with open("~/Documents/Pyramide/JSON/layers/pente.json") as json_file: + data = json.load(json_file) + print(f"type de structure de données de data : {type(data)}") + print(f'mots-clefs : {data["keywords"]}') + print(f'niveau le plus bas de la pyramide : {data["pyramids"][0]["bottom_level"]}') + print(f'niveau le plus haut de la pyramide : {data["pyramids"][0]["top_level"]}') + print(f'le chemin d accès à la pyramide : {data["pyramids"][0]["path"]}') + print(f'le style choisi : {data["styles"][0]}') + print(f'code srs de la projection planimétrique : {data["extra_crs"]}') + + # Ouverture d'un fichier JSON d'une pyramide + print ("\nOuverture d'un fichier JSON d'une pyramide") + with open("~/Documents/Pyramide/JSON/pyramides/ALTI.json") as json_file: + data = json.load(json_file) + print(f"type de structure de données de data : {type(data)}") + #print(data) + print(f'nombre de niveaux de la pyramide : {len(data["levels"])}') + #print(data["levels"]) + #print(data["levels"]["tile_limits"]) + print(data["levels"][0]["tile_limits"]) + print(f'niveau zéro de stockage de la pyramide : {data["levels"][0]["storage"]}') + print(f'nom de la tuile de la pyramide : {data["tile_matrix_set"]}') + #print(f'niveaux de la tuile de la pyramide : {data["levels"]}') + print(f'niveau zéro de la tuile de la pyramide : {data["levels"][0]}') + print(f'max de la colonne en limite de tuile niveau zéro de la tuile de la pyramide : {data["levels"][0]["tile_limits"]["max_col"]}') + print(f'données de stockage du niveau zéro de la tuile de la pyramide : {data["levels"][0]["storage"]}') + print(f'type de stockage : {data["levels"][0]["storage"]["type"]}') + print(f'préfixe de l image : {data["levels"][0]["storage"]["image_prefix"]}') + print(f'nom du bucket de stockage : {data["levels"][0]["storage"]["bucket_name"]}') + print(f'nombre de tuiles par hauteur : {data["levels"][0]["tiles_per_height"]}') + bbox = (10.6, 6.6, 3.3, 3.7) layers = [("vector1", 10, [("attribute1", "attribute2")])] - pathtorasterpyramide = "/home/myusername/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" - pathtovecteurrpyramide = "/home/myusername/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" + pathtorasterpyramide = "~/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" + pathtovecteurrpyramide = "~/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" vector = Vector() print(f"le path donnant accès aux données de la pyramide de tuile vecteur est : {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['path']}") @@ -101,7 +164,7 @@ python3 data_tilesmatrix_launcher.py ``` Le résultat donne : ```sh -myusername@pcname:~$ python3 data_tilesmatrix_launcher.py +myusername@pcname:~$ python3 data_tilesmatrix_launcher.py le nom du tms est le suivant : PM le nom du tms est le suivant : s3://tilematrixsets/PM.json le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 @@ -110,9 +173,25 @@ type de slab : SlabType.MASK type de stockage : StorageType.S3 les canaux rouge, vert, bleu et alpha : (220, 179, 99, 255) les canaux rouge, vert, bleu : (220, 179, 99) -le path donnant accès aux données de la pyramide de tuile vecteur est : /home/myusername/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235 -la boundary box de la pyramide de tuile vecteur est : (10.6, 6.6, 3.3, 3.7) -les couches vectorielles avec leur nom, le nombre d'objets et leurs attributs [('vector1', 10, [('attribute1', 'attribute2')])] +type de structure de données de data : +mots-clefs : ['Pente', 'Dérivé de la BD Alti'] +niveau le plus bas de la pyramide : 13 +niveau le plus haut de la pyramide : 0 +le chemin d accès à la pyramide : s3://pyramids/PENTE.json +le style choisi : montagne_palette +code srs de la projection planimétrique : ['EPSG:4559'] +type de structure de données de data : +nombre de niveaux de la pyramide : 14 +{'max_col': 0, 'max_row': 0, 'min_col': 0, 'min_row': 0} +{'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'} +nom de la tuile de la pyramide : PM +niveau zéro de la tuile de la pyramide : {'tile_limits': {'max_col': 0, 'max_row': 0, 'min_col': 0, 'min_row': 0}, 'storage': {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'}, 'tiles_per_width': 16, 'id': '0', 'tiles_per_height': 16} +max de la colonne en limite de tuile niveau zéro de la tuile de la pyramide : 0 +données de stockage du niveau zéro de la tuile de la pyramide : {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'} +type de stockage : S3 +préfixe de l image : ALTI/DATA_0 +nom du bucket de stockage : pyramids +nombre de tuiles par hauteur : 16 ``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From 90ace5c5a75a11f97c3267309ba42056be7ea054 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 09:28:13 +0000 Subject: [PATCH 012/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d05c49..65103e8 100644 --- a/README.md +++ b/README.md @@ -164,7 +164,7 @@ python3 data_tilesmatrix_launcher.py ``` Le résultat donne : ```sh -myusername@pcname:~$ python3 data_tilesmatrix_launcher.py +myusername@pcname:~$ python3 data_tilesmatrix_launcher.py le nom du tms est le suivant : PM le nom du tms est le suivant : s3://tilematrixsets/PM.json le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 From a68f07847e2da399d830375c411fc8be5d5bd9da Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 20 Mar 2025 12:03:56 +0100 Subject: [PATCH 013/108] README.md : rajout partie ouvrir le json d'un style et d'un tilematrixset --- README.md | 96 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 81 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 6d05c49..6274a55 100644 --- a/README.md +++ b/README.md @@ -27,15 +27,7 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ## Utiliser la librairie -En dehors du dépôt `core-python`, tapez la ligne de commande suivante dans un fichier shell `envvar.sh` , ainsi il n'y aura à chaque fois plus quà lancer le script shell contenant l'export de toutes les variables d'environnement du projet : -```sh -export ROK4_TMS_DIRECTORY=s3://tilematrixsets -export ROK4_S3_KEY=rok4 -export ROK4_S3_SECRETKEY=rok4S3storage -export ROK4_S3_URL=http://localhost:9000 -``` - -Arborescence d'organisation des scripts et des fichiers json pour l'exploitation des informations sur les tuiles de pyramide : +Voici un exemple d'arborescence d'organisation des scripts et des fichiers json pour l'exploitation des informations sur les pyramides de tuiles de données raster ou vecteur : ```sh tree ../../Pyramide/ ../../Pyramide/ @@ -65,6 +57,15 @@ tree ../../Pyramide/ └── DATA_14_169_235 ``` +En dehors du dépôt `core-python`, tapez la ligne de commande suivante dans un fichier shell `envvar.sh` , ainsi il n'y aura qu'une fois à lancer ce script shell contenant l'export de toutes les variables d'environnement du projet `ROK4`: +```sh +export ROK4_TMS_DIRECTORY=s3://tilematrixsets +export ROK4_S3_KEY=rok4 +export ROK4_S3_SECRETKEY=rok4S3storage +export ROK4_S3_URL=http://localhost:9000 +``` + + Dans un script nommé par exemple `data_tilesmatrix_launcher.py` Le script `data_tilesmatrix_launcher.py` contient les lignes suivantes : ```python @@ -110,8 +111,8 @@ try : print(f"les canaux rouge, vert, bleu et alpha : {couleur.rgba}") print(f"les canaux rouge, vert, bleu : {couleur.rgb}") - # Ouverture d'un fichier JSON d'une couche - print(f"\nOuverture d'un fichier JSON d'une pyramide") + # Ouverture d'un fichier JSON d'une couche + print(f"\nOuverture d'un fichier JSON d'une couche\n") with open("~/Documents/Pyramide/JSON/layers/pente.json") as json_file: data = json.load(json_file) print(f"type de structure de données de data : {type(data)}") @@ -120,10 +121,10 @@ try : print(f'niveau le plus haut de la pyramide : {data["pyramids"][0]["top_level"]}') print(f'le chemin d accès à la pyramide : {data["pyramids"][0]["path"]}') print(f'le style choisi : {data["styles"][0]}') - print(f'code srs de la projection planimétrique : {data["extra_crs"]}') + print(f'code srs de la projection planimétrique : {data["extra_crs"][0]}') # Ouverture d'un fichier JSON d'une pyramide - print ("\nOuverture d'un fichier JSON d'une pyramide") + print ("\nOuverture d'un fichier JSON d'une pyramide\n") with open("~/Documents/Pyramide/JSON/pyramides/ALTI.json") as json_file: data = json.load(json_file) print(f"type de structure de données de data : {type(data)}") @@ -143,6 +144,35 @@ try : print(f'nom du bucket de stockage : {data["levels"][0]["storage"]["bucket_name"]}') print(f'nombre de tuiles par hauteur : {data["levels"][0]["tiles_per_height"]}') + # Ouverture d'un fichier JSON d'un style + print ("\nOuverture d'un fichier JSON d'un style\n") + with open("~/Documents/Pyramide/JSON/styles/pente.json") as json_file: + data = json.load(json_file) + print(f"type de structure de données de data : {type(data)}") + print(f'le titre : {data["title"]}') + print(f'pente : {data["keywords"][0]}') + print(f'ce dont il s"agit : {data["keywords"][1]}') + print(f'niveau le plus bas : {data["pyramids"][0]["bottom_level"]}') + print(f'niveau le plus haut : {data["pyramids"][0]["top_level"]}') + print(f'type de palette : {data["styles"][0]}') + print(f'code srs associé à la projection planimétrique : {data["extra_crs"][0]}') + + # Ouverture d'un fichier JSON d'un tilematrixset + print ("\nOuverture d'un fichier JSON d'un tilematrixset\n") + with open("~/Documents/Pyramide/JSON/tilematrixsets/PM.json") as json_file: + data = json.load(json_file) + print(f"type de structure de données de data : {type(data)}") + print(f'nom de la pyramide : {data["id"]}') + print(f'code srs projection planimétrique : {data["crs"]}') + print(f'nombre de tuiles de la pyramide : {len(data["tileMatrices"])}') + print(f'coordonnées du point origine : {data["tileMatrices"][0]["pointOfOrigin"]}') + print(f'taille de la cellule : {data["tileMatrices"][0]["cellSize"]}') + print(f'nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : {len(data["tileMatrices"])}') + + + # Exploitation de la classe Vector + print ("\nExploitation de la classe Vector\n") + bbox = (10.6, 6.6, 3.3, 3.7) layers = [("vector1", 10, [("attribute1", "attribute2")])] pathtorasterpyramide = "~/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" @@ -165,6 +195,9 @@ python3 data_tilesmatrix_launcher.py Le résultat donne : ```sh myusername@pcname:~$ python3 data_tilesmatrix_launcher.py + +Exploitation de la classe TileMatrixSet + le nom du tms est le suivant : PM le nom du tms est le suivant : s3://tilematrixsets/PM.json le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 @@ -173,17 +206,23 @@ type de slab : SlabType.MASK type de stockage : StorageType.S3 les canaux rouge, vert, bleu et alpha : (220, 179, 99, 255) les canaux rouge, vert, bleu : (220, 179, 99) + +Ouverture d'un fichier JSON d'une couche + type de structure de données de data : mots-clefs : ['Pente', 'Dérivé de la BD Alti'] niveau le plus bas de la pyramide : 13 niveau le plus haut de la pyramide : 0 le chemin d accès à la pyramide : s3://pyramids/PENTE.json le style choisi : montagne_palette -code srs de la projection planimétrique : ['EPSG:4559'] +code srs de la projection planimétrique : EPSG:4559 + +Ouverture d'un fichier JSON d'une pyramide + type de structure de données de data : nombre de niveaux de la pyramide : 14 {'max_col': 0, 'max_row': 0, 'min_col': 0, 'min_row': 0} -{'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'} +niveau zéro de stockage de la pyramide : {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'} nom de la tuile de la pyramide : PM niveau zéro de la tuile de la pyramide : {'tile_limits': {'max_col': 0, 'max_row': 0, 'min_col': 0, 'min_row': 0}, 'storage': {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'}, 'tiles_per_width': 16, 'id': '0', 'tiles_per_height': 16} max de la colonne en limite de tuile niveau zéro de la tuile de la pyramide : 0 @@ -192,6 +231,33 @@ type de stockage : S3 préfixe de l image : ALTI/DATA_0 nom du bucket de stockage : pyramids nombre de tuiles par hauteur : 16 + +Ouverture d'un fichier JSON d'un style + +type de structure de données de data : +le titre : Pente +pente : Pente +ce dont il s"agit : Dérivé de la BD Alti +niveau le plus bas : 13 +niveau le plus haut : 0 +type de palette : montagne_palette +code srs associé à la projection planimétrique : EPSG:4559 + +Ouverture d'un fichier JSON d'un tilematrixset + +type de structure de données de data : +nom de la pyramide : PM +code srs projection planimétrique : EPSG:3857 +nombre de tuiles de la pyramide : 22 +coordonnées du point origine : [-20037508.3427892, 20037508.3427892] +taille de la cellule : 156543.033928041 +nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : 22 + +Exploitation de la classe Vector + +le path donnant accès aux données de la pyramide de tuile vecteur est : ~/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235 +la boundary box de la pyramide de tuile vecteur est : (10.6, 6.6, 3.3, 3.7) +les couches vectorielles avec leur nom, le nombre d'objets et leurs attributs [('vector1', 10, [('attribute1', 'attribute2')])] ``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From 95e8781a58c5a3eaef472464e393e99e6f4f69b7 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 20 Mar 2025 12:09:22 +0100 Subject: [PATCH 014/108] =?UTF-8?q?README.md=20:=20mise=20=C3=A0=20jour=20?= =?UTF-8?q?de=20l'arborescence=20dans=20l'organisation=20des=20sous-dossie?= =?UTF-8?q?rs=20et=20des=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dc0d9af..1d039cd 100644 --- a/README.md +++ b/README.md @@ -49,12 +49,13 @@ tree ../../Pyramide/ │ └── DATA_14_338_470 ├── scripts │ ├── data_tilesmatrix_launcher.py -│ ├── envvar.sh -│ └── tilematrixset_launcher.py +│ └── envvar.sh └── VECTEUR └── BDPARCELLAIRE ├── DATA_11_21_29 └── DATA_14_169_235 + +11 directories, 12 files ``` En dehors du dépôt `core-python`, tapez la ligne de commande suivante dans un fichier shell `envvar.sh` , ainsi il n'y aura qu'une fois à lancer ce script shell contenant l'export de toutes les variables d'environnement du projet `ROK4`: From 9c87766083d90833d8cff0173997d9da260b01c6 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 20 Mar 2025 13:43:46 +0100 Subject: [PATCH 015/108] =?UTF-8?q?README.md=20=20:=20mise=20=C3=A0=20jour?= =?UTF-8?q?=20de=20la=20rubrique=20'Utiliser=20la=20librairie'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1d039cd..d85cb16 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ tree ../../Pyramide/ 11 directories, 12 files ``` -En dehors du dépôt `core-python`, tapez la ligne de commande suivante dans un fichier shell `envvar.sh` , ainsi il n'y aura qu'une fois à lancer ce script shell contenant l'export de toutes les variables d'environnement du projet `ROK4`: +En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les variables d'environnement du projet `ROK4`: ```sh export ROK4_TMS_DIRECTORY=s3://tilematrixsets export ROK4_S3_KEY=rok4 @@ -76,14 +76,17 @@ Le script `data_tilesmatrix_launcher.py` contient les lignes suivantes : # Dossier cible : pyramide tuiles de données raster ALTI et BDORTHO par exemple, et de données vecteur BDPARCELLAIRE from enum import Enum +import json -# import des classes de rok4 -from rok4.enums import PyramidType, SlabType, StorageType +# import des packages de rok4 +from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat from rok4.pyramid import Level, Pyramid +from rok4.layer import Layer from rok4.vector import Vector +from rok4.raster import Raster, RasterSet from rok4.style import Colour, Palette, Slope, Exposition, Estompage, Legend, Style -from rok4.storage import get_infos_from_path, get_path_from_infos, get_osgeo_path, get_size -from rok4.utils import bbox_to_geometry, reproject_bbox, reproject_point, compute_bbox, compute_format, srs_to_spatialreference +from rok4.storage import * +from rok4.utils import * from rok4.tile_matrix_set import TileMatrix, TileMatrixSet From eb8c52911a05a2cd5614501fb5f35f495cfdbe5f Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 21 Mar 2025 09:16:33 +0100 Subject: [PATCH 016/108] =?UTF-8?q?README.md=20:=20mise=20=C3=A0=20jour=20?= =?UTF-8?q?des=20imports=20de=20classes=20et=20de=20fonctions=20des=20pack?= =?UTF-8?q?ages=20de=20rok4=20dans=20la=20rubrique=20'Utiliser=20la=20libr?= =?UTF-8?q?airie'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d85cb16..44474ec 100644 --- a/README.md +++ b/README.md @@ -85,9 +85,10 @@ from rok4.layer import Layer from rok4.vector import Vector from rok4.raster import Raster, RasterSet from rok4.style import Colour, Palette, Slope, Exposition, Estompage, Legend, Style -from rok4.storage import * -from rok4.utils import * +from rok4.storage import disconnect_s3_clients, disconnect_ceph_clients, get_infos_from_path, get_path_from_infos, hash_file, get_data_str, get_data_binary, put_data_str, get_size, exists, remove, copy, link, get_osgeo_path, size_path +from rok4.utils import srs_to_spatialreference, bbox_to_geometry, reproject_bbox, reproject_point, compute_bbox, compute_format from rok4.tile_matrix_set import TileMatrix, TileMatrixSet +from rok4.exceptions import MissingEnvironmentError, StorageError try : From 8f4cd5c2ab14afc864bba14db3cb4f411c681e2c Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Sun, 23 Mar 2025 14:50:34 +0100 Subject: [PATCH 017/108] README.md : exploitation de la classe Pyramid dans la rubrique 'Utiliser la librairie' --- README.md | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 44474ec..4746cd7 100644 --- a/README.md +++ b/README.md @@ -80,15 +80,22 @@ import json # import des packages de rok4 from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat -from rok4.pyramid import Level, Pyramid +from rok4.pyramid import Pyramid, Level from rok4.layer import Layer from rok4.vector import Vector from rok4.raster import Raster, RasterSet from rok4.style import Colour, Palette, Slope, Exposition, Estompage, Legend, Style -from rok4.storage import disconnect_s3_clients, disconnect_ceph_clients, get_infos_from_path, get_path_from_infos, hash_file, get_data_str, get_data_binary, put_data_str, get_size, exists, remove, copy, link, get_osgeo_path, size_path +from rok4.storage import (copy, + get_data_binary, + get_data_str, + get_infos_from_path, + get_path_from_infos, + put_data_str, + remove, + size_path) from rok4.utils import srs_to_spatialreference, bbox_to_geometry, reproject_bbox, reproject_point, compute_bbox, compute_format from rok4.tile_matrix_set import TileMatrix, TileMatrixSet -from rok4.exceptions import MissingEnvironmentError, StorageError +from rok4.exceptions import MissingEnvironmentError, StorageError, MissingAttributeError, FormatError try : @@ -175,18 +182,32 @@ try : print(f'nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : {len(data["tileMatrices"])}') - # Exploitation de la classe Vector - print ("\nExploitation de la classe Vector\n") + # Exploitation de la classe Pyramid + print ("\nExploitation de la classe Pyramid\n") + # chemin de la dalle ou du bloc de tuiles + slab_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" + # chemin du descriptor de la pyramide alti + path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" + # descriptor de la pyramide ALTI + pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) - bbox = (10.6, 6.6, 3.3, 3.7) - layers = [("vector1", 10, [("attribute1", "attribute2")])] - pathtorasterpyramide = "~/Documents/Pyramide/RASTER/BDORTHO/DATA_14_338_470" - pathtovecteurrpyramide = "~/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235" + slab_indexes_1 = (SlabType.DATA, "12", 159, 367) + slab_indexes_2 = (SlabType.MASK, "15", 9164, 5846) - vector = Vector() - print(f"le path donnant accès aux données de la pyramide de tuile vecteur est : {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['path']}") - print(f"la boundary box de la pyramide de tuile vecteur est : {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['bbox']}") - print(f"les couches vectorielles avec leur nom, le nombre d'objets et leurs attributs {vector.from_parameters(pathtovecteurrpyramide, bbox, layers).__dict__['layers']}") + print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") + slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_path) + slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_path) + print (slab_indexes) + slab_indexes_3 = ("SlabType.MASK", "15", 9164, 5846, True) + + pyramid_ortho = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") + level, col, row, pcol, prow = pyramid_ortho.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") + + data_binary = pyramid_ortho.get_tile_data_binary(level, col, row) + data_raster = pyramid_ortho.get_tile_data_raster(level, col, row) + + print(data_binary) + print(data_raster) except Exception as exc : From 31b5ac6de107047fe6857ff6177ef2e76c6661ad Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 13:50:43 +0000 Subject: [PATCH 018/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4746cd7..0c3e8cb 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ try : # Exploitation de la classe Pyramid print ("\nExploitation de la classe Pyramid\n") # chemin de la dalle ou du bloc de tuiles - slab_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" + slab_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" # chemin du descriptor de la pyramide alti path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" # descriptor de la pyramide ALTI From 74eed5ec598adcdefdf708a576681a4ed427fd11 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Sun, 23 Mar 2025 16:44:34 +0100 Subject: [PATCH 019/108] README.md : rajout dans la rubrique 'Utiliser la librairrie' --- README.md | 200 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 159 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 4746cd7..45f4cf0 100644 --- a/README.md +++ b/README.md @@ -29,33 +29,53 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le Voici un exemple d'arborescence d'organisation des scripts et des fichiers json pour l'exploitation des informations sur les pyramides de tuiles de données raster ou vecteur : ```sh -tree ../../Pyramide/ -../../Pyramide/ + tree ../../../Pyramide/ +../../../Pyramide/ ├── JSON -│ ├── layers -│ │ └── pente.json -│ ├── pyramides -│ │ └── ALTI.json -│ ├── styles -│ │ └── pente.json -│ └── tilematrixsets -│ └── PM.json +│   ├── layers +│   │   └── pente.json +│   ├── pyramides +│   │   └── ALTI.json +│   ├── styles +│   │   └── pente.json +│   └── tilematrixsets +│   └── PM.json ├── RASTER -│ ├── ALTI -│ │ ├── DATA_0_0_0 -│ │ └── DATA_11_42_58 -│ └── BDORTHO -│ ├── DATA_11_42_58 -│ └── DATA_14_338_470 +│   ├── ALTI +│   │   ├── 01 +│   │   │   ├── DATA_10_21_29 +│   │   │   └── DATA_11_42_58 +│   │   ├── 02 +│   │   │   ├── DATA_10_21_29 +│   │   │   ├── DATA_11_42_58 +│   │   │   └── DATA_12_84_117 +│   │   ├── 03 +│   │   │   ├── DATA_10_21_29 +│   │   │   ├── DATA_11_42_58 +│   │   │   ├── DATA_12_84_117 +│   │   │   └── DATA_13_168_234 +│   │   ├── 04 +│   │   │   ├── DATA_1_0_0 +│   │   │   └── DATA_13_168_234 +│   │   └── DATA_12_84_117.tif +│   └── BDORTHO +│   ├── BDORTHO.json +│   ├── DATA_11_42_58 +│   ├── DATA_13_168_234 +│   └── DATA_14_338_470 ├── scripts -│ ├── data_tilesmatrix_launcher.py -│ └── envvar.sh +│   ├── data_tilesmatrix_launcher.py +│   └── envvar.sh └── VECTEUR - └── BDPARCELLAIRE - ├── DATA_11_21_29 - └── DATA_14_169_235 - -11 directories, 12 files + ├── BDPARCELLAIRE + │   ├── BDPARCELLAIRE.json + │   ├── DATA_11_21_29 + │   └── DATA_14_169_235 + └── LIMITES_ADMINISTRATIVES + ├── DATA_15_678_940 + └── LIMADM.json + +16 directories, 27 files ``` En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les variables d'environnement du projet `ROK4`: @@ -184,30 +204,88 @@ try : # Exploitation de la classe Pyramid print ("\nExploitation de la classe Pyramid\n") + # POUR l'ALTI : + print ("\npour des données ALTI\n") # chemin de la dalle ou du bloc de tuiles - slab_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" + slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" # chemin du descriptor de la pyramide alti path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" # descriptor de la pyramide ALTI pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) - slab_indexes_1 = (SlabType.DATA, "12", 159, 367) - slab_indexes_2 = (SlabType.MASK, "15", 9164, 5846) - print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") - slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_path) - slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_path) - print (slab_indexes) - slab_indexes_3 = ("SlabType.MASK", "15", 9164, 5846, True) + print(f"type de pyramide {pyr_alti_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") + print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") + print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") + slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) + slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) + print (f"données du slab: \n") + print (f" type de slab {slab_indexes[0]}") + print (f" identifiant du niveau {slab_indexes[1]}") + print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") + print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") + level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") + + data_binary = pyr_alti_descriptor.get_tile_data_binary(level, col, row) + data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) + + #print(data_binary) + print(data_raster) + for (slab_type, level, column, row), infos in pyr_alti_descriptor.list_generator(): + print(infos) + + # pour la BDORTHO + print ("\npour des données raster BDORTHO\n") + pyramid_ortho_descriptor = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") + slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" + + print (f"créer une pyramide à partir du path de son descriptor {pyramid_ortho_descriptor}") + print(f"type de pyramide {pyramid_ortho_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") + print(f"niveau le plus bas de la pyramide : {pyramid_ortho_descriptor.bottom_level}") + print(f"niveau le plus haut de la pyramide : {pyramid_ortho_descriptor.top_level}") + print () + slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_ortho_path) + slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_ortho_path) + print ("données du slab: \n") + print (f" type de slab {slab_indexes[0]}") + print (f" identifiant du niveau {slab_indexes[1]}") + print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") + print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") + level, col, row, pcol, prow = pyramid_ortho_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") + + data_binary = pyramid_ortho_descriptor.get_tile_data_binary(level, col, row) + data_raster = pyramid_ortho_descriptor.get_tile_data_raster(level, col, row) + + #print(data_binary) + print(data_raster) - pyramid_ortho = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") - level, col, row, pcol, prow = pyramid_ortho.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") + # for (slab_type, level, column, row), infos in pyramid_ortho_descriptor.list_generator(): + # print(infos) - data_binary = pyramid_ortho.get_tile_data_binary(level, col, row) - data_raster = pyramid_ortho.get_tile_data_raster(level, col, row) + print("\n\n") + + # pour les limites ADMINISTRATIVES + print ("\npour des données VECTEUR LES LIMITES ADMINISTRATIVES\n") + pyramid_limits_administratives_descriptor = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") + slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" + + slab_indexes = pyramid_limits_administratives_descriptor.get_infos_from_slab_path(slab_limits_administratives_path) + print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") + print(f"niveau le plus bas de la pyramide : {pyramid_limits_administratives_descriptor.bottom_level}") + print(f"niveau le plus haut de la pyramide : {pyramid_limits_administratives_descriptor.top_level}") + print (f"créer une pyramide à partir du path de son descriptor : {pyramid_limits_administratives_descriptor}") + print ("données du slab: \n") + print (f" type de slab {slab_indexes[0]}") + print (f" identifiant du niveau {slab_indexes[1]}") + print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") + print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") + print("\n") + """ for (slab_type, level, column, row), infos in pyramid_limits_administratives_descriptor.list_generator(): + print(infos) """ - print(data_binary) - print(data_raster) except Exception as exc : @@ -276,11 +354,51 @@ coordonnées du point origine : [-20037508.3427892, 20037508.3427892] taille de la cellule : 156543.033928041 nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : 22 -Exploitation de la classe Vector +EExploitation de la classe Pyramid + + +pour des données ALTI + +créer une pyramide à partir du path de son descriptor RASTER pyramid 'ALTI' (S3 storage) +type de pyramide PyramidType.RASTER +format des tuiles de données vecteur : TIFF_ZIP_FLOAT32 +niveau le plus bas de la pyramide : RASTER pyramid's level '13' (S3 storage) +niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) +données du slab: + + type de slab SlabType.DATA + identifiant du niveau 10 + nombre de tuiles en largeur par slab 21 + nombre de tuiles en hauteur par slab : 29 + + pour des données raster BDORTHO + +créer une pyramide à partir du path de son descriptor RASTER pyramid 'BDORTHO' (S3 storage) +type de pyramide PyramidType.RASTER +format des tuiles de données vecteur : TIFF_JPG_UINT8 +niveau le plus bas de la pyramide : RASTER pyramid's level '15' (S3 storage) +niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) + +données du slab: + + type de slab SlabType.DATA + identifiant du niveau 13 + nombre de tuiles en largeur par slab 168 + nombre de tuiles en hauteur par slab : 234 + + pour des données VECTEUR LES LIMITES ADMINISTRATIVES + +type de pyramide PyramidType.VECTOR +format des tuiles de données vecteur : TIFF_PBF_MVT +niveau le plus bas de la pyramide : VECTOR pyramid's level '18' (S3 storage) +niveau le plus haut de la pyramide : VECTOR pyramid's level '0' (S3 storage) +créer une pyramide à partir du path de son descriptor : VECTOR pyramid 'LIMADM' (S3 storage) +données du slab: -le path donnant accès aux données de la pyramide de tuile vecteur est : ~/Documents/Pyramide/VECTEUR/BDPARCELLAIRE/DATA_14_169_235 -la boundary box de la pyramide de tuile vecteur est : (10.6, 6.6, 3.3, 3.7) -les couches vectorielles avec leur nom, le nombre d'objets et leurs attributs [('vector1', 10, [('attribute1', 'attribute2')])] + type de slab SlabType.DATA + identifiant du niveau 15 + nombre de tuiles en largeur par slab 678 + nombre de tuiles en hauteur par slab : 940 ``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From fea9bb32695358fd76dd93cca3dbb8476bacc91f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 15:48:49 +0000 Subject: [PATCH 020/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 45f4cf0..dbf9d09 100644 --- a/README.md +++ b/README.md @@ -207,15 +207,15 @@ try : # POUR l'ALTI : print ("\npour des données ALTI\n") # chemin de la dalle ou du bloc de tuiles - slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" + slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" # chemin du descriptor de la pyramide alti path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" # descriptor de la pyramide ALTI pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") - print(f"type de pyramide {pyr_alti_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") + print(f"type de pyramide {pyr_alti_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) @@ -238,11 +238,11 @@ try : # pour la BDORTHO print ("\npour des données raster BDORTHO\n") pyramid_ortho_descriptor = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") - slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" + slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" print (f"créer une pyramide à partir du path de son descriptor {pyramid_ortho_descriptor}") - print(f"type de pyramide {pyramid_ortho_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") + print(f"type de pyramide {pyramid_ortho_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyramid_ortho_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyramid_ortho_descriptor.top_level}") print () @@ -269,11 +269,11 @@ try : # pour les limites ADMINISTRATIVES print ("\npour des données VECTEUR LES LIMITES ADMINISTRATIVES\n") pyramid_limits_administratives_descriptor = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") - slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" + slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" slab_indexes = pyramid_limits_administratives_descriptor.get_infos_from_slab_path(slab_limits_administratives_path) - print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") + print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyramid_limits_administratives_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyramid_limits_administratives_descriptor.top_level}") print (f"créer une pyramide à partir du path de son descriptor : {pyramid_limits_administratives_descriptor}") @@ -364,7 +364,7 @@ type de pyramide PyramidType.RASTER format des tuiles de données vecteur : TIFF_ZIP_FLOAT32 niveau le plus bas de la pyramide : RASTER pyramid's level '13' (S3 storage) niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) -données du slab: +données du slab: type de slab SlabType.DATA identifiant du niveau 10 @@ -379,7 +379,7 @@ format des tuiles de données vecteur : TIFF_JPG_UINT8 niveau le plus bas de la pyramide : RASTER pyramid's level '15' (S3 storage) niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) -données du slab: +données du slab: type de slab SlabType.DATA identifiant du niveau 13 @@ -393,7 +393,7 @@ format des tuiles de données vecteur : TIFF_PBF_MVT niveau le plus bas de la pyramide : VECTOR pyramid's level '18' (S3 storage) niveau le plus haut de la pyramide : VECTOR pyramid's level '0' (S3 storage) créer une pyramide à partir du path de son descriptor : VECTOR pyramid 'LIMADM' (S3 storage) -données du slab: +données du slab: type de slab SlabType.DATA identifiant du niveau 15 From e425b46efa5c221e71611bda6fe6ea171df74f3a Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 12:04:39 +0100 Subject: [PATCH 021/108] =?UTF-8?q?README.md=20:=20mise=20=C3=A0=20jour=20?= =?UTF-8?q?utiliser=20la=20librairie=20suite=20retour=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 356 ++++-------------------------------------------------- 1 file changed, 25 insertions(+), 331 deletions(-) diff --git a/README.md b/README.md index 45f4cf0..43a5daa 100644 --- a/README.md +++ b/README.md @@ -27,57 +27,6 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ## Utiliser la librairie -Voici un exemple d'arborescence d'organisation des scripts et des fichiers json pour l'exploitation des informations sur les pyramides de tuiles de données raster ou vecteur : -```sh - tree ../../../Pyramide/ -../../../Pyramide/ -├── JSON -│   ├── layers -│   │   └── pente.json -│   ├── pyramides -│   │   └── ALTI.json -│   ├── styles -│   │   └── pente.json -│   └── tilematrixsets -│   └── PM.json -├── RASTER -│   ├── ALTI -│   │   ├── 01 -│   │   │   ├── DATA_10_21_29 -│   │   │   └── DATA_11_42_58 -│   │   ├── 02 -│   │   │   ├── DATA_10_21_29 -│   │   │   ├── DATA_11_42_58 -│   │   │   └── DATA_12_84_117 -│   │   ├── 03 -│   │   │   ├── DATA_10_21_29 -│   │   │   ├── DATA_11_42_58 -│   │   │   ├── DATA_12_84_117 -│   │   │   └── DATA_13_168_234 -│   │   ├── 04 -│   │   │   ├── DATA_1_0_0 -│   │   │   └── DATA_13_168_234 -│   │   └── DATA_12_84_117.tif -│   └── BDORTHO -│   ├── BDORTHO.json -│   ├── DATA_11_42_58 -│   ├── DATA_13_168_234 -│   └── DATA_14_338_470 -├── scripts -│   ├── data_tilesmatrix_launcher.py -│   └── envvar.sh -└── VECTEUR - ├── BDPARCELLAIRE - │   ├── BDPARCELLAIRE.json - │   ├── DATA_11_21_29 - │   └── DATA_14_169_235 - └── LIMITES_ADMINISTRATIVES - ├── DATA_15_678_940 - └── LIMADM.json - -16 directories, 27 files -``` - En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les variables d'environnement du projet `ROK4`: ```sh export ROK4_TMS_DIRECTORY=s3://tilematrixsets @@ -86,279 +35,32 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` - Dans un script nommé par exemple `data_tilesmatrix_launcher.py` -Le script `data_tilesmatrix_launcher.py` contient les lignes suivantes : -```python -#!/usr/bin/env python3 -# Nom : data_tilesmatrix_launcher.py -# But : récupérer des informations sur les pyramides de tuiles que l'on analyse -# Dossier cible : pyramide tuiles de données raster ALTI et BDORTHO par exemple, et de données vecteur BDPARCELLAIRE - -from enum import Enum -import json - -# import des packages de rok4 -from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat -from rok4.pyramid import Pyramid, Level -from rok4.layer import Layer -from rok4.vector import Vector -from rok4.raster import Raster, RasterSet -from rok4.style import Colour, Palette, Slope, Exposition, Estompage, Legend, Style -from rok4.storage import (copy, - get_data_binary, - get_data_str, - get_infos_from_path, - get_path_from_infos, - put_data_str, - remove, - size_path) -from rok4.utils import srs_to_spatialreference, bbox_to_geometry, reproject_bbox, reproject_point, compute_bbox, compute_format -from rok4.tile_matrix_set import TileMatrix, TileMatrixSet -from rok4.exceptions import MissingEnvironmentError, StorageError, MissingAttributeError, FormatError - - -try : - - tms = TileMatrixSet("PM") - print(f"le nom du tms est le suivant : {tms.name}") - print(f"le nom du tms est le suivant : {tms.path}") - print(f"le code srs associé au système de projection planimétrique est le suivant : {tms.srs}") - - typePyramid = PyramidType("RASTER") - slabType = SlabType("MASK") - storageType = StorageType("s3://") - - print (f"type de pyramide : {typePyramid}") - print (f"type de slab : {slabType}") - print (f"type de stockage : {storageType}") - - couleur = Colour({ - "value": 600, - "red": 220, - "green": 179, - "blue": 99, - "alpha": 255 - }, "Style") - print(f"les canaux rouge, vert, bleu et alpha : {couleur.rgba}") - print(f"les canaux rouge, vert, bleu : {couleur.rgb}") - - # Ouverture d'un fichier JSON d'une couche - print(f"\nOuverture d'un fichier JSON d'une couche\n") - with open("~/Documents/Pyramide/JSON/layers/pente.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - print(f'mots-clefs : {data["keywords"]}') - print(f'niveau le plus bas de la pyramide : {data["pyramids"][0]["bottom_level"]}') - print(f'niveau le plus haut de la pyramide : {data["pyramids"][0]["top_level"]}') - print(f'le chemin d accès à la pyramide : {data["pyramids"][0]["path"]}') - print(f'le style choisi : {data["styles"][0]}') - print(f'code srs de la projection planimétrique : {data["extra_crs"][0]}') - - # Ouverture d'un fichier JSON d'une pyramide - print ("\nOuverture d'un fichier JSON d'une pyramide\n") - with open("~/Documents/Pyramide/JSON/pyramides/ALTI.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - #print(data) - print(f'nombre de niveaux de la pyramide : {len(data["levels"])}') - #print(data["levels"]) - #print(data["levels"]["tile_limits"]) - print(data["levels"][0]["tile_limits"]) - print(f'niveau zéro de stockage de la pyramide : {data["levels"][0]["storage"]}') - print(f'nom de la tuile de la pyramide : {data["tile_matrix_set"]}') - #print(f'niveaux de la tuile de la pyramide : {data["levels"]}') - print(f'niveau zéro de la tuile de la pyramide : {data["levels"][0]}') - print(f'max de la colonne en limite de tuile niveau zéro de la tuile de la pyramide : {data["levels"][0]["tile_limits"]["max_col"]}') - print(f'données de stockage du niveau zéro de la tuile de la pyramide : {data["levels"][0]["storage"]}') - print(f'type de stockage : {data["levels"][0]["storage"]["type"]}') - print(f'préfixe de l image : {data["levels"][0]["storage"]["image_prefix"]}') - print(f'nom du bucket de stockage : {data["levels"][0]["storage"]["bucket_name"]}') - print(f'nombre de tuiles par hauteur : {data["levels"][0]["tiles_per_height"]}') - - # Ouverture d'un fichier JSON d'un style - print ("\nOuverture d'un fichier JSON d'un style\n") - with open("~/Documents/Pyramide/JSON/styles/pente.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - print(f'le titre : {data["title"]}') - print(f'pente : {data["keywords"][0]}') - print(f'ce dont il s"agit : {data["keywords"][1]}') - print(f'niveau le plus bas : {data["pyramids"][0]["bottom_level"]}') - print(f'niveau le plus haut : {data["pyramids"][0]["top_level"]}') - print(f'type de palette : {data["styles"][0]}') - print(f'code srs associé à la projection planimétrique : {data["extra_crs"][0]}') - - # Ouverture d'un fichier JSON d'un tilematrixset - print ("\nOuverture d'un fichier JSON d'un tilematrixset\n") - with open("~/Documents/Pyramide/JSON/tilematrixsets/PM.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - print(f'nom de la pyramide : {data["id"]}') - print(f'code srs projection planimétrique : {data["crs"]}') - print(f'nombre de tuiles de la pyramide : {len(data["tileMatrices"])}') - print(f'coordonnées du point origine : {data["tileMatrices"][0]["pointOfOrigin"]}') - print(f'taille de la cellule : {data["tileMatrices"][0]["cellSize"]}') - print(f'nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : {len(data["tileMatrices"])}') - - - # Exploitation de la classe Pyramid - print ("\nExploitation de la classe Pyramid\n") - # POUR l'ALTI : - print ("\npour des données ALTI\n") - # chemin de la dalle ou du bloc de tuiles - slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" - # chemin du descriptor de la pyramide alti - path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" - # descriptor de la pyramide ALTI - pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) - - print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") - print(f"type de pyramide {pyr_alti_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") - print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") - print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") - slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) - slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) - print (f"données du slab: \n") - print (f" type de slab {slab_indexes[0]}") - print (f" identifiant du niveau {slab_indexes[1]}") - print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") - print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") - - data_binary = pyr_alti_descriptor.get_tile_data_binary(level, col, row) - data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) - - #print(data_binary) - print(data_raster) - for (slab_type, level, column, row), infos in pyr_alti_descriptor.list_generator(): - print(infos) - - # pour la BDORTHO - print ("\npour des données raster BDORTHO\n") - pyramid_ortho_descriptor = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") - slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" - - print (f"créer une pyramide à partir du path de son descriptor {pyramid_ortho_descriptor}") - print(f"type de pyramide {pyramid_ortho_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") - print(f"niveau le plus bas de la pyramide : {pyramid_ortho_descriptor.bottom_level}") - print(f"niveau le plus haut de la pyramide : {pyramid_ortho_descriptor.top_level}") - print () - slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_ortho_path) - slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_ortho_path) - print ("données du slab: \n") - print (f" type de slab {slab_indexes[0]}") - print (f" identifiant du niveau {slab_indexes[1]}") - print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") - print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - level, col, row, pcol, prow = pyramid_ortho_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") - - data_binary = pyramid_ortho_descriptor.get_tile_data_binary(level, col, row) - data_raster = pyramid_ortho_descriptor.get_tile_data_raster(level, col, row) - - #print(data_binary) - print(data_raster) - - # for (slab_type, level, column, row), infos in pyramid_ortho_descriptor.list_generator(): - # print(infos) - - print("\n\n") - - # pour les limites ADMINISTRATIVES - print ("\npour des données VECTEUR LES LIMITES ADMINISTRATIVES\n") - pyramid_limits_administratives_descriptor = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") - slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" - - slab_indexes = pyramid_limits_administratives_descriptor.get_infos_from_slab_path(slab_limits_administratives_path) - print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") - print(f"niveau le plus bas de la pyramide : {pyramid_limits_administratives_descriptor.bottom_level}") - print(f"niveau le plus haut de la pyramide : {pyramid_limits_administratives_descriptor.top_level}") - print (f"créer une pyramide à partir du path de son descriptor : {pyramid_limits_administratives_descriptor}") - print ("données du slab: \n") - print (f" type de slab {slab_indexes[0]}") - print (f" identifiant du niveau {slab_indexes[1]}") - print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") - print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - print("\n") - """ for (slab_type, level, column, row), infos in pyramid_limits_administratives_descriptor.list_generator(): - print(infos) """ - - -except Exception as exc : - - print (exc) -``` - Puis exécuter le programme : ```sh python3 data_tilesmatrix_launcher.py ``` -Le résultat donne : + +### Comment lire une tuile de pyramide de données raster ? + +* On doit passer le bucket s3 de stockage exemple : ```"s3://pyramids/ALTI.json"``` en paramètre d'entrée de la méthode de classe ```from_descriptor()``` appliquée à la classe ```Pyramid()``` tel que : +```py + # descriptor de la pyramide ALTI + pyr_alti_descriptor = Pyramid.from_descriptor("s3://pyramids/ALTI.json") +``` + +* Si l'on veut obtenir les indices d'une tuile de pyramide raster, on utilise la fonction ```get_tiles_indices(x_point, y_point, pyramid_level,srs_coords)``` +```py +level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") +``` +* Si l'on veut récupérer les données raster d'une tuile de Pyramide : +```py +data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) +``` + +* Cas d'usage: données ALTI ```sh myusername@pcname:~$ python3 data_tilesmatrix_launcher.py -le nom du tms est le suivant : PM -le nom du tms est le suivant : s3://tilematrixsets/PM.json -le code srs associé au système de projection planimétrique est le suivant : EPSG:3857 -type de pyramide : PyramidType.RASTER -type de slab : SlabType.MASK -type de stockage : StorageType.S3 -les canaux rouge, vert, bleu et alpha : (220, 179, 99, 255) -les canaux rouge, vert, bleu : (220, 179, 99) - -Ouverture d'un fichier JSON d'une couche - -type de structure de données de data : -mots-clefs : ['Pente', 'Dérivé de la BD Alti'] -niveau le plus bas de la pyramide : 13 -niveau le plus haut de la pyramide : 0 -le chemin d accès à la pyramide : s3://pyramids/PENTE.json -le style choisi : montagne_palette -code srs de la projection planimétrique : EPSG:4559 - -Ouverture d'un fichier JSON d'une pyramide - -type de structure de données de data : -nombre de niveaux de la pyramide : 14 -{'max_col': 0, 'max_row': 0, 'min_col': 0, 'min_row': 0} -niveau zéro de stockage de la pyramide : {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'} -nom de la tuile de la pyramide : PM -niveau zéro de la tuile de la pyramide : {'tile_limits': {'max_col': 0, 'max_row': 0, 'min_col': 0, 'min_row': 0}, 'storage': {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'}, 'tiles_per_width': 16, 'id': '0', 'tiles_per_height': 16} -max de la colonne en limite de tuile niveau zéro de la tuile de la pyramide : 0 -données de stockage du niveau zéro de la tuile de la pyramide : {'type': 'S3', 'image_prefix': 'ALTI/DATA_0', 'bucket_name': 'pyramids'} -type de stockage : S3 -préfixe de l image : ALTI/DATA_0 -nom du bucket de stockage : pyramids -nombre de tuiles par hauteur : 16 - -Ouverture d'un fichier JSON d'un style - -type de structure de données de data : -le titre : Pente -pente : Pente -ce dont il s"agit : Dérivé de la BD Alti -niveau le plus bas : 13 -niveau le plus haut : 0 -type de palette : montagne_palette -code srs associé à la projection planimétrique : EPSG:4559 - -Ouverture d'un fichier JSON d'un tilematrixset - -type de structure de données de data : -nom de la pyramide : PM -code srs projection planimétrique : EPSG:3857 -nombre de tuiles de la pyramide : 22 -coordonnées du point origine : [-20037508.3427892, 20037508.3427892] -taille de la cellule : 156543.033928041 -nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : 22 - -EExploitation de la classe Pyramid - - -pour des données ALTI - créer une pyramide à partir du path de son descriptor RASTER pyramid 'ALTI' (S3 storage) type de pyramide PyramidType.RASTER format des tuiles de données vecteur : TIFF_ZIP_FLOAT32 @@ -370,23 +72,14 @@ données du slab: identifiant du niveau 10 nombre de tuiles en largeur par slab 21 nombre de tuiles en hauteur par slab : 29 + ``` - pour des données raster BDORTHO +### Comment lire une tuile de pyramide de données vecteur ? -créer une pyramide à partir du path de son descriptor RASTER pyramid 'BDORTHO' (S3 storage) -type de pyramide PyramidType.RASTER -format des tuiles de données vecteur : TIFF_JPG_UINT8 -niveau le plus bas de la pyramide : RASTER pyramid's level '15' (S3 storage) -niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) +Cas d'usage : données VECTEUR : LIMITES ADMINISTRATIVES -données du slab: - - type de slab SlabType.DATA - identifiant du niveau 13 - nombre de tuiles en largeur par slab 168 - nombre de tuiles en hauteur par slab : 234 - - pour des données VECTEUR LES LIMITES ADMINISTRATIVES +```sh +pour des données VECTEUR LES LIMITES ADMINISTRATIVES type de pyramide PyramidType.VECTOR format des tuiles de données vecteur : TIFF_PBF_MVT @@ -401,6 +94,7 @@ données du slab: nombre de tuiles en hauteur par slab : 940 ``` + Les variables d'environnement suivantes peuvent être nécessaires, par module : * `storage` : plus de détails dans la documentation technique du module From b2008d30728570e68d2ceda5b14e19a4ac7845f5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 11:09:05 +0000 Subject: [PATCH 022/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 2c102fa..b990f78 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -87,15 +87,15 @@ try : # POUR l'ALTI : print ("\npour des données ALTI\n") # chemin de la dalle ou du bloc de tuiles - slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" + slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" # chemin du descriptor de la pyramide alti path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" # descriptor de la pyramide ALTI pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") - print(f"type de pyramide {pyr_alti_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") + print(f"type de pyramide {pyr_alti_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) @@ -118,11 +118,11 @@ try : # pour la BDORTHO print ("\npour des données raster BDORTHO\n") pyramid_ortho_descriptor = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") - slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" + slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" print (f"créer une pyramide à partir du path de son descriptor {pyramid_ortho_descriptor}") - print(f"type de pyramide {pyramid_ortho_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") + print(f"type de pyramide {pyramid_ortho_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyramid_ortho_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyramid_ortho_descriptor.top_level}") print () @@ -149,11 +149,11 @@ try : # pour les limites ADMINISTRATIVES print ("\npour des données VECTEUR LES LIMITES ADMINISTRATIVES\n") pyramid_limits_administratives_descriptor = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") - slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" + slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" slab_indexes = pyramid_limits_administratives_descriptor.get_infos_from_slab_path(slab_limits_administratives_path) - print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") + print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") + print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyramid_limits_administratives_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyramid_limits_administratives_descriptor.top_level}") print (f"créer une pyramide à partir du path de son descriptor : {pyramid_limits_administratives_descriptor}") @@ -165,5 +165,3 @@ try : print("\n") """ for (slab_type, level, column, row), infos in pyramid_limits_administratives_descriptor.list_generator(): print(infos) """ - - From 764b9755aa61a82791ae544b0c97f2064825352b Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 13:15:56 +0100 Subject: [PATCH 023/108] =?UTF-8?q?HOWTO.md=20:=20explication=20donn=C3=A9?= =?UTF-8?q?e=20par=20un=20cas=20d'usage=20simple=20=3D>=20exemple=20avec?= =?UTF-8?q?=20des=20donn=C3=A9es=20ALTI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 156 +++++-------------------------------------------------- 1 file changed, 12 insertions(+), 144 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index b990f78..8cb4977 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,167 +1,35 @@ -try : - tms = TileMatrixSet("PM") - print(f"le nom du tms est le suivant : {tms.name}") - print(f"le nom du tms est le suivant : {tms.path}") - print(f"le code srs associé au système de projection planimétrique est le suivant : {tms.srs}") +# Cas d'usage simple : exemple avec des données ALTI +```py + #!/usr/bin/env python3 - typePyramid = PyramidType("RASTER") - slabType = SlabType("MASK") - storageType = StorageType("s3://") + # import des packages de rok4 + from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat + from rok4.pyramid import Pyramid, Level - print (f"type de pyramide : {typePyramid}") - print (f"type de slab : {slabType}") - print (f"type de stockage : {storageType}") - - couleur = Colour({ - "value": 600, - "red": 220, - "green": 179, - "blue": 99, - "alpha": 255 - }, "Style") - print(f"les canaux rouge, vert, bleu et alpha : {couleur.rgba}") - print(f"les canaux rouge, vert, bleu : {couleur.rgb}") - - # Ouverture d'un fichier JSON d'une couche - print(f"\nOuverture d'un fichier JSON d'une couche\n") - with open("~/Documents/Pyramide/JSON/layers/pente.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - print(f'mots-clefs : {data["keywords"]}') - print(f'niveau le plus bas de la pyramide : {data["pyramids"][0]["bottom_level"]}') - print(f'niveau le plus haut de la pyramide : {data["pyramids"][0]["top_level"]}') - print(f'le chemin d accès à la pyramide : {data["pyramids"][0]["path"]}') - print(f'le style choisi : {data["styles"][0]}') - print(f'code srs de la projection planimétrique : {data["extra_crs"][0]}') - - # Ouverture d'un fichier JSON d'une pyramide - print ("\nOuverture d'un fichier JSON d'une pyramide\n") - with open("~/Documents/Pyramide/JSON/pyramides/ALTI.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - #print(data) - print(f'nombre de niveaux de la pyramide : {len(data["levels"])}') - #print(data["levels"]) - #print(data["levels"]["tile_limits"]) - print(data["levels"][0]["tile_limits"]) - print(f'niveau zéro de stockage de la pyramide : {data["levels"][0]["storage"]}') - print(f'nom de la tuile de la pyramide : {data["tile_matrix_set"]}') - #print(f'niveaux de la tuile de la pyramide : {data["levels"]}') - print(f'niveau zéro de la tuile de la pyramide : {data["levels"][0]}') - print(f'max de la colonne en limite de tuile niveau zéro de la tuile de la pyramide : {data["levels"][0]["tile_limits"]["max_col"]}') - print(f'données de stockage du niveau zéro de la tuile de la pyramide : {data["levels"][0]["storage"]}') - print(f'type de stockage : {data["levels"][0]["storage"]["type"]}') - print(f'préfixe de l image : {data["levels"][0]["storage"]["image_prefix"]}') - print(f'nom du bucket de stockage : {data["levels"][0]["storage"]["bucket_name"]}') - print(f'nombre de tuiles par hauteur : {data["levels"][0]["tiles_per_height"]}') - - # Ouverture d'un fichier JSON d'un style - print ("\nOuverture d'un fichier JSON d'un style\n") - with open("~/Documents/Pyramide/JSON/styles/pente.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - print(f'le titre : {data["title"]}') - print(f'pente : {data["keywords"][0]}') - print(f'ce dont il s"agit : {data["keywords"][1]}') - print(f'niveau le plus bas : {data["pyramids"][0]["bottom_level"]}') - print(f'niveau le plus haut : {data["pyramids"][0]["top_level"]}') - print(f'type de palette : {data["styles"][0]}') - print(f'code srs associé à la projection planimétrique : {data["extra_crs"][0]}') - - # Ouverture d'un fichier JSON d'un tilematrixset - print ("\nOuverture d'un fichier JSON d'un tilematrixset\n") - with open("~/Documents/Pyramide/JSON/tilematrixsets/PM.json") as json_file: - data = json.load(json_file) - print(f"type de structure de données de data : {type(data)}") - print(f'nom de la pyramide : {data["id"]}') - print(f'code srs projection planimétrique : {data["crs"]}') - print(f'nombre de tuiles de la pyramide : {len(data["tileMatrices"])}') - print(f'coordonnées du point origine : {data["tileMatrices"][0]["pointOfOrigin"]}') - print(f'taille de la cellule : {data["tileMatrices"][0]["cellSize"]}') - print(f'nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : {len(data["tileMatrices"])}') - - - # Exploitation de la classe Pyramid - print ("\nExploitation de la classe Pyramid\n") - # POUR l'ALTI : - print ("\npour des données ALTI\n") - # chemin de la dalle ou du bloc de tuiles - slab_alti_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_10_21_29" # chemin du descriptor de la pyramide alti path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" + # descriptor de la pyramide ALTI pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") + print(f"type de pyramide {pyr_alti_descriptor.type}") print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") + slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) - print (f"données du slab: \n") - print (f" type de slab {slab_indexes[0]}") - print (f" identifiant du niveau {slab_indexes[1]}") - print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") - print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") - - data_binary = pyr_alti_descriptor.get_tile_data_binary(level, col, row) - data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) - - #print(data_binary) - print(data_raster) - for (slab_type, level, column, row), infos in pyr_alti_descriptor.list_generator(): - print(infos) - - # pour la BDORTHO - print ("\npour des données raster BDORTHO\n") - pyramid_ortho_descriptor = Pyramid.from_descriptor("s3://pyramids/BDORTHO.json") - slab_ortho_path = "~/Documents/Pyramide/RASTER/ALTI/01/DATA_13_168_234" - print (f"créer une pyramide à partir du path de son descriptor {pyramid_ortho_descriptor}") - print(f"type de pyramide {pyramid_ortho_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_ortho_descriptor.format}") - print(f"niveau le plus bas de la pyramide : {pyramid_ortho_descriptor.bottom_level}") - print(f"niveau le plus haut de la pyramide : {pyramid_ortho_descriptor.top_level}") - print () - slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_ortho_path) - slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_ortho_path) print ("données du slab: \n") print (f" type de slab {slab_indexes[0]}") print (f" identifiant du niveau {slab_indexes[1]}") print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - level, col, row, pcol, prow = pyramid_ortho_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") - - data_binary = pyramid_ortho_descriptor.get_tile_data_binary(level, col, row) - data_raster = pyramid_ortho_descriptor.get_tile_data_raster(level, col, row) + level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") + data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) - #print(data_binary) print(data_raster) - - # for (slab_type, level, column, row), infos in pyramid_ortho_descriptor.list_generator(): - # print(infos) - - print("\n\n") - - # pour les limites ADMINISTRATIVES - print ("\npour des données VECTEUR LES LIMITES ADMINISTRATIVES\n") - pyramid_limits_administratives_descriptor = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") - slab_limits_administratives_path = "~/Documents/Pyramide/VECTEUR/LIMITES_ADMINISTRATIVES/DATA_15_678_940" - - slab_indexes = pyramid_limits_administratives_descriptor.get_infos_from_slab_path(slab_limits_administratives_path) - print(f"type de pyramide {pyramid_limits_administratives_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyramid_limits_administratives_descriptor.format}") - print(f"niveau le plus bas de la pyramide : {pyramid_limits_administratives_descriptor.bottom_level}") - print(f"niveau le plus haut de la pyramide : {pyramid_limits_administratives_descriptor.top_level}") - print (f"créer une pyramide à partir du path de son descriptor : {pyramid_limits_administratives_descriptor}") - print ("données du slab: \n") - print (f" type de slab {slab_indexes[0]}") - print (f" identifiant du niveau {slab_indexes[1]}") - print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") - print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - print("\n") - """ for (slab_type, level, column, row), infos in pyramid_limits_administratives_descriptor.list_generator(): - print(infos) """ + ``` \ No newline at end of file From 2b492eca38ae3f6032436364cb892db25fe57aaf Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 12:16:05 +0000 Subject: [PATCH 024/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 8cb4977..d83b758 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -32,4 +32,4 @@ data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) print(data_raster) - ``` \ No newline at end of file + ``` From d06cc277f804f94d95f35b23269999c66804f0d9 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 13:42:20 +0100 Subject: [PATCH 025/108] README.md : utilisation de tilesmatrixset --- README.md | 54 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 8f03012..2362bd3 100644 --- a/README.md +++ b/README.md @@ -76,31 +76,51 @@ données du slab: ### Comment lire une tuile de pyramide de données vecteur ? +* Même principe qu'avec le cas RASTER, si l'on veut récupérer les données vecteur d'une tuile de Pyramide : + * Cas d'usage : données VECTEUR : LIMITES ADMINISTRATIVES +```py +pyramid_vector = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") +level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, tile_row) +data_vector = pyramid.get_tile_data_vector(level, col, row) +``` -```sh -données du slab: +### Comment définit-on une matrice de tuiles à partir des niveau de jeux de matrice de tuile ? - type de slab SlabType.DATA - identifiant du niveau 13 - nombre de tuiles en largeur par slab 168 - nombre de tuiles en hauteur par slab : 234 +On utilise la classe ```TileMatrix()``` avec laquelle on instancie un objet lié à cette classe à partir du bucket de stockage ```s3:// - pour des données VECTEUR LES LIMITES ADMINISTRATIVES +tilematrixsets/PM.json"``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: -type de pyramide PyramidType.VECTOR -format des tuiles de données vecteur : TIFF_PBF_MVT -niveau le plus bas de la pyramide : VECTOR pyramid's level '18' (S3 storage) -niveau le plus haut de la pyramide : VECTOR pyramid's level '0' (S3 storage) -créer une pyramide à partir du path de son descriptor : VECTOR pyramid 'LIMADM' (S3 storage) -données du slab: +```json - type de slab SlabType.DATA - identifiant du niveau 15 - nombre de tuiles en largeur par slab 678 - nombre de tuiles en hauteur par slab : 940 +tileMatrices +0 +id "0" +tileWidth 256 +scaleDenominator 559082264.028718 +matrixWidth 1 +cellSize 156543.033928041 +matrixHeight 1 +tileHeight 256 +pointOfOrigin +0 -20037508.3427892 +1 20037508.3427892 ``` +On peut ainsi aisément accéder : + +* à son identifiant, + +* à son chemin, + +* aux coordonnées de l'origine X et Y, + +* à la résolution (niveau) + +* à la taille de la tuile en largeur et et en hauteur, + +* à la taille de la matrice en largeur et en hauteur + Les variables d'environnement suivantes peuvent être nécessaires, par module : From 79dcd236eeed5315e578c53456ed8e692b3e4c1b Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 13:45:40 +0100 Subject: [PATCH 026/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 2362bd3..a94959d 100644 --- a/README.md +++ b/README.md @@ -92,19 +92,23 @@ On utilise la classe ```TileMatrix()``` avec laquelle on instancie un objet lié tilematrixsets/PM.json"``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: ```json - -tileMatrices -0 -id "0" -tileWidth 256 -scaleDenominator 559082264.028718 -matrixWidth 1 -cellSize 156543.033928041 -matrixHeight 1 -tileHeight 256 -pointOfOrigin -0 -20037508.3427892 -1 20037508.3427892 +{ + "tileMatrices" : [ + { + "id" : "0", + "tileWidth" : 256, + "scaleDenominator" : 559082264.028718, + "matrixWidth" : 1, + "cellSize" : 156543.033928041, + "matrixHeight" : 1, + "tileHeight" : 256, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ] + }, + {},.. +} ``` On peut ainsi aisément accéder : From cdb8cc65f245052be63ab9c532242be8c8fd0db7 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 13:46:37 +0100 Subject: [PATCH 027/108] =?UTF-8?q?README.md=20:=20correction=20esth=C3=A9?= =?UTF-8?q?tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a94959d..0b276d9 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) On utilise la classe ```TileMatrix()``` avec laquelle on instancie un objet lié à cette classe à partir du bucket de stockage ```s3:// -tilematrixsets/PM.json"``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: +tilematrixsets/PM.json``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: ```json { From bfe0662d6636fd07c77ff7abcb58b2e041b8c220 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:08:00 +0100 Subject: [PATCH 028/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20mise=20?= =?UTF-8?q?=C3=A0=20jour=20avec=20le=20recours=20au=20'TileMatrixSet'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 40 ++++++++++++++++++++++++++++++++++++++++ README.md | 10 +++++++--- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index d83b758..92827f1 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -33,3 +33,43 @@ print(data_raster) ``` + +# Cas d'usage simple avec le TileMatrixSet "PM": bucket de stockage : ```s3://tilematrixsets/PM.json``` + +```py +#!/usr/bin/env python3 +import json +# import des packages de rok4 +from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat +from rok4.tile_matrix_set import TileMatrix, TileMatrixSet +try: + tms = TileMatrixSet("PM") + print ("\nExploitation de la classe TileMatrixSet\n") + print(f"le nom du tms est le suivant : {tms.name}") + print(f"le nom du tms est le suivant : {tms.path}") + print(f"le code srs associé au système de projection planimétrique est le suivant : {tms.srs}") + + typePyramid = PyramidType("RASTER") + slabType = SlabType("MASK") + storageType = StorageType("s3://") + + print (f"type de pyramide : {typePyramid}") + print (f"type de slab : {slabType}") + print (f"type de stockage : {storageType}") + + # Ouverture d'un fichier JSON d'un tilematrixset + print ("\nOuverture d'un fichier JSON d'un tilematrixset\n") + + with open("s3://tilematrixsets/PM.json") as json_file: + data = json.load(json_file) + print(f"type de structure de données de data : {type(data)}") + print(f'nom de la pyramide : {data["id"]}') + print(f'code srs projection planimétrique : {data["crs"]}') + print(f'nombre de tuiles de la pyramide : {len(data["tileMatrices"])}') + print(f'coordonnées du point origine : {data["tileMatrices"][0]["pointOfOrigin"]}') + print(f'taille de la cellule : {data["tileMatrices"][0]["cellSize"]}') + print(f'nombre d"éléments de la matrices de tuiles cad le nombre de tuiles : {len(data["tileMatrices"])}') + +except Exception as exc : + print (exc) +``` \ No newline at end of file diff --git a/README.md b/README.md index 0b276d9..c8b383e 100644 --- a/README.md +++ b/README.md @@ -85,11 +85,11 @@ level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, data_vector = pyramid.get_tile_data_vector(level, col, row) ``` -### Comment définit-on une matrice de tuiles à partir des niveau de jeux de matrice de tuile ? +### Comment définit-on une matrice de tuiles à partir des niveaux de jeux de matrice de tuile ? -On utilise la classe ```TileMatrix()``` avec laquelle on instancie un objet lié à cette classe à partir du bucket de stockage ```s3:// +On utilise la classe ```TileMatrixSet()``` avec laquelle on instancie un objet lié à cette classe, -tilematrixsets/PM.json``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: +à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: ```json { @@ -125,6 +125,10 @@ On peut ainsi aisément accéder : * à la taille de la matrice en largeur et en hauteur +On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction ```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et max) + +On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(self, x: float, y: float) -> Tuple[int, int, int, int]``` + Les variables d'environnement suivantes peuvent être nécessaires, par module : From c6ebac75b145f281695cc0102a34638c82644b47 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:09:45 +0100 Subject: [PATCH 029/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20mise=20?= =?UTF-8?q?=C3=A0=20jour=20partie=20'TileMatrixSet()'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 22 ++++++++++++++++++++++ README.md | 22 +--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 92827f1..ab2cd6c 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -36,6 +36,28 @@ # Cas d'usage simple avec le TileMatrixSet "PM": bucket de stockage : ```s3://tilematrixsets/PM.json``` +voici une partie de sa structure en objet json pour le tms ```PM```: + +```json +{ + "tileMatrices" : [ + { + "id" : "0", + "tileWidth" : 256, + "scaleDenominator" : 559082264.028718, + "matrixWidth" : 1, + "cellSize" : 156543.033928041, + "matrixHeight" : 1, + "tileHeight" : 256, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ] + }, + {},.. +} +``` + ```py #!/usr/bin/env python3 import json diff --git a/README.md b/README.md index c8b383e..c9cc45e 100644 --- a/README.md +++ b/README.md @@ -89,27 +89,7 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) On utilise la classe ```TileMatrixSet()``` avec laquelle on instancie un objet lié à cette classe, -à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple voici une partie de sa structure en objet json pour le tms ```PM```: - -```json -{ - "tileMatrices" : [ - { - "id" : "0", - "tileWidth" : 256, - "scaleDenominator" : 559082264.028718, - "matrixWidth" : 1, - "cellSize" : 156543.033928041, - "matrixHeight" : 1, - "tileHeight" : 256, - "pointOfOrigin" : [ - -20037508.3427892, - 20037508.3427892 - ] - }, - {},.. -} -``` +à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple On peut ainsi aisément accéder : From 8957f82e277303ad069e5c410cffee01f323662f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:11:06 +0000 Subject: [PATCH 030/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index ab2cd6c..05c017c 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -94,4 +94,4 @@ try: except Exception as exc : print (exc) -``` \ No newline at end of file +``` diff --git a/README.md b/README.md index c9cc45e..fbb584d 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) On utilise la classe ```TileMatrixSet()``` avec laquelle on instancie un objet lié à cette classe, -à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple +à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple On peut ainsi aisément accéder : From f7c48c94472ec2a72035b23af8ba007e8db6fc34 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:13:49 +0100 Subject: [PATCH 031/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 22 ++++++++++++++++++++++ README.md | 16 ---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index ab2cd6c..8baca69 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,5 +1,25 @@ # Cas d'usage simple : exemple avec des données ALTI + +* Cas d'usage: résultats obtenus avec l'exemple des données ALTI + +```sh +myusername@pcname:~$ python3 data_tilesmatrix_launcher.py +créer une pyramide à partir du path de son descriptor RASTER pyramid 'ALTI' (S3 storage) +type de pyramide PyramidType.RASTER +format des tuiles de données vecteur : TIFF_ZIP_FLOAT32 +niveau le plus bas de la pyramide : RASTER pyramid's level '13' (S3 storage) +niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) +données du slab: + + type de slab SlabType.DATA + identifiant du niveau 10 + nombre de tuiles en largeur par slab 21 + nombre de tuiles en hauteur par slab : 29 + ``` + +## Comment l'obtenir ? + ```py #!/usr/bin/env python3 @@ -58,6 +78,8 @@ voici une partie de sa structure en objet json pour le tms ```PM```: } ``` +## Exploitation des données d'un fichier JSON d'un tilematrixset exemple : PM.json + ```py #!/usr/bin/env python3 import json diff --git a/README.md b/README.md index c9cc45e..e870383 100644 --- a/README.md +++ b/README.md @@ -58,22 +58,6 @@ level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) ``` -* Cas d'usage: données ALTI -```sh -myusername@pcname:~$ python3 data_tilesmatrix_launcher.py -créer une pyramide à partir du path de son descriptor RASTER pyramid 'ALTI' (S3 storage) -type de pyramide PyramidType.RASTER -format des tuiles de données vecteur : TIFF_ZIP_FLOAT32 -niveau le plus bas de la pyramide : RASTER pyramid's level '13' (S3 storage) -niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) -données du slab: - - type de slab SlabType.DATA - identifiant du niveau 10 - nombre de tuiles en largeur par slab 21 - nombre de tuiles en hauteur par slab : 29 - ``` - ### Comment lire une tuile de pyramide de données vecteur ? * Même principe qu'avec le cas RASTER, si l'on veut récupérer les données vecteur d'une tuile de Pyramide : From 6f7aa4dc685a2506bca2d7a96c526a7fa88698bb Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:15:25 +0100 Subject: [PATCH 032/108] README.md : petite correction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dd4e38..1507959 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ On peut ainsi aisément accéder : On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction ```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et max) -On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(self, x: float, y: float) -> Tuple[int, int, int, int]``` +On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(x: float, y: float)``` Les variables d'environnement suivantes peuvent être nécessaires, par module : From 3b35be5b576da6368595165ec82ff08c46249fcf Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:16:49 +0100 Subject: [PATCH 033/108] README.md : expression --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1507959..fc59dfc 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,7 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` -Dans un script nommé par exemple `data_tilesmatrix_launcher.py` -Puis exécuter le programme : +Dans un script nommé par exemple `data_tilesmatrix_launcher.py`, on exécute le programme comme suit : ```sh python3 data_tilesmatrix_launcher.py ``` From 32a86bdd9b680145573b4f05f9cc7d5eef4bbc5d Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:18:19 +0100 Subject: [PATCH 034/108] README.md : ponctuation --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc59dfc..52bb788 100644 --- a/README.md +++ b/README.md @@ -82,11 +82,11 @@ On peut ainsi aisément accéder : * aux coordonnées de l'origine X et Y, -* à la résolution (niveau) +* à la résolution (niveau), * à la taille de la tuile en largeur et et en hauteur, -* à la taille de la matrice en largeur et en hauteur +* à la taille de la matrice en largeur et en hauteur. On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction ```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et max) From 39ca9c37e8ffc6b9c411fedb46a66a69eeb1b1cb Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:21:24 +0100 Subject: [PATCH 035/108] =?UTF-8?q?README.md=20:=20pr=C3=A9cision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 52bb788..6e18db4 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) * Même principe qu'avec le cas RASTER, si l'on veut récupérer les données vecteur d'une tuile de Pyramide : -* Cas d'usage : données VECTEUR : LIMITES ADMINISTRATIVES +* Cas d'usage : données VECTEUR : pyramide LIMITES ADMINISTRATIVES ```py pyramid_vector = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, tile_row) From 7c94e856a6244a18cb694f3d880ec0b6d5aaaada Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:34:26 +0100 Subject: [PATCH 036/108] =?UTF-8?q?HOWTO.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 2438930..cc214ca 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -74,7 +74,32 @@ voici une partie de sa structure en objet json pour le tms ```PM```: 20037508.3427892 ] }, - {},.. + { + "matrixHeight" : 2, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ], + "tileHeight" : 256, + "cellSize" : 78271.5169640205, + "scaleDenominator" : 279541132.014359, + "matrixWidth" : 2, + "tileWidth" : 256, + "id" : "1" + }, + { + "cellSize" : 39135.7584820102, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ], + "tileHeight" : 256, + "matrixHeight" : 4, + "tileWidth" : 256, + "matrixWidth" : 4, + "scaleDenominator" : 139770566.007179, + "id" : "2" + },{},{},... } ``` From 70e270224353a13134c037da1ffd191726d1a550 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:36:51 +0100 Subject: [PATCH 037/108] HOWTO.md : correction --- HOWTO.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index cc214ca..6947f50 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -54,7 +54,9 @@ données du slab: print(data_raster) ``` -# Cas d'usage simple avec le TileMatrixSet "PM": bucket de stockage : ```s3://tilematrixsets/PM.json``` +## Cas d'usage simple avec le TileMatrixSet "PM": + +emplacement du bucket de stockage : ```s3://tilematrixsets/PM.json``` voici une partie de sa structure en objet json pour le tms ```PM```: From 70289324d2917e32f746ed6da9cc6c7e92429736 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:38:04 +0100 Subject: [PATCH 038/108] HOWTO.md : correction --- HOWTO.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 6947f50..42f845c 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,7 +1,7 @@ -# Cas d'usage simple : exemple avec des données ALTI +## Cas d'usage simple : exemple avec des données ALTI -* Cas d'usage: résultats obtenus avec l'exemple des données ALTI +* ci-dessous les résultats obtenus avec l'exemple des données ALTI : ```sh myusername@pcname:~$ python3 data_tilesmatrix_launcher.py From 30c89ce28c62300af0715aaf24997aa0091a2f82 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:47:46 +0100 Subject: [PATCH 039/108] HOWTO.md : description des descripteurs de couches --- HOWTO.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index 42f845c..7e77aea 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -144,3 +144,67 @@ try: except Exception as exc : print (exc) ``` + +## Descripteur de couches des "layers" => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` + +```list.txt``` contient tous les noms des buckets de stockage des listes sous forme de liste : + +```txt +s3://layers/bdortho.json +s3://layers/alti.json +s3://layers/limadm.json +s3://layers/pente.json +s3://layers/bdparcellaire.json +``` + +* Ci-jointe sa structure en objet json : + +```json +{ + "title": "Photographies aériennes", + "abstract": "Données BD Ortho", + "keywords": + [ + "Ortho-photographies", + "Données RGB" + ], + "pyramids": + [ + { + "bottom_level": "15", + "top_level": "0", + "path": "s3://pyramids/BDORTHO.json" + } + ], + "resampling": "bicubic", + "styles": + [ + "normal" + ], + "extra_crs": + [ + "EPSG:4559" + ], + "extra_tilematrixsets": + [ + "4326", + "UTM20W84MART_2.5m" + ], + "wms": + { + "enabled": true + }, + "wmts": + { + "enabled": true + }, + "tms": + { + "enabled": true + }, + "tiles": + { + "enabled": true + } +} +``` \ No newline at end of file From 14ab94133550f2018c0aac18b0b7c51d342910ea Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 14:49:40 +0100 Subject: [PATCH 040/108] HOWTO.md : vocabulaire --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 7e77aea..188135b 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -147,7 +147,7 @@ except Exception as exc : ## Descripteur de couches des "layers" => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` -```list.txt``` contient tous les noms des buckets de stockage des listes sous forme de liste : +```list.txt``` contient tous les noms des buckets de stockage des listes sous forme d'une liste : ```txt s3://layers/bdortho.json From cb97c4c806414b663d1a5cfb63729feb8840eb5e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:50:52 +0000 Subject: [PATCH 041/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 188135b..e7bdb5b 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -207,4 +207,4 @@ s3://layers/bdparcellaire.json "enabled": true } } -``` \ No newline at end of file +``` From 79f06202b85953e94a20714afccf93f7ece4f4a4 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 15:23:28 +0100 Subject: [PATCH 042/108] HOWTO.md : vocabulaire --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 188135b..349a5d4 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -147,7 +147,7 @@ except Exception as exc : ## Descripteur de couches des "layers" => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` -```list.txt``` contient tous les noms des buckets de stockage des listes sous forme d'une liste : +```list.txt``` contient tous les noms des buckets de stockage des couches sous forme d'une liste : ```txt s3://layers/bdortho.json From 702aab9b67d45b1979adc4bf1b57a8f35ad80a58 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 15:24:26 +0100 Subject: [PATCH 043/108] =?UTF-8?q?HOWTO.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 2632737..95adbf9 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -145,7 +145,9 @@ except Exception as exc : print (exc) ``` -## Descripteur de couches des "layers" => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` +## Descripteur de couches des "layers" : + +=> exemple pour la BDORTHO : ```s3://layers/bdortho.json``` ```list.txt``` contient tous les noms des buckets de stockage des couches sous forme d'une liste : From 52416ab2bdf1b802f608c36cb35e6222dc843836 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 15:31:52 +0100 Subject: [PATCH 044/108] HOWTO.md : rajout partie 'styles' du projet rok4 --- HOWTO.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index 95adbf9..9165ebf 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -210,3 +210,44 @@ s3://layers/bdparcellaire.json } } ``` + +## Exemple de style du projet rok4 : + +* Exemple du stytle de la montagne palette parmi les onze styles stockés sur le s3 : + +* Ci-jointe la structure en objet json dont l'emplacement est le suivant ```s3://styles/montagne_palette.json```: + +```json +{ + "identifier": "montagne_palette", + "title": "Pente par paliers standards", + "abstract": "Pente affichée par parlier standard de 30 a 90 degres", + "keywords": ["MNT"], + "legend": { + "format": "image/png", + "url": "http://ign.fr", + "height": 100, + "width": 100, + "min_scale_denominator": 0, + "max_scale_denominator": 30 + }, + "palette": { + "max_value": 91, + "rgb_continuous": true, + "alpha_continuous": true, + "colours": [ + { "value": 0, "red": 255, "green": 255, "blue": 255, "alpha": 0 }, + { "value": 29, "red": 255, "green": 255, "blue": 255, "alpha": 0 }, + { "value": 30, "red": 242, "green": 229, "blue": 0, "alpha": 255 }, + { "value": 34, "red": 242, "green": 229, "blue": 0, "alpha": 255 }, + { "value": 35, "red": 243, "green": 148, "blue": 25, "alpha": 255 }, + { "value": 39, "red": 243, "green": 148, "blue": 25, "alpha": 255 }, + { "value": 40, "red": 225, "green": 0, "blue": 0, "alpha": 255 }, + { "value": 44, "red": 225, "green": 0, "blue": 0, "alpha": 255 }, + { "value": 45, "red": 200, "green": 137, "blue": 187, "alpha": 255 }, + { "value": 90, "red": 200, "green": 137, "blue": 187, "alpha": 255 }, + { "value": 91, "red": 255, "green": 255, "blue": 255, "alpha": 0 } + ] + } +} +``` \ No newline at end of file From 0cd240684d81ae9be1ed0376cdf0171ce5c7c248 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 14:32:05 +0000 Subject: [PATCH 045/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 9165ebf..10b7ca5 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -250,4 +250,4 @@ s3://layers/bdparcellaire.json ] } } -``` \ No newline at end of file +``` From bb2930456e4c9b85f92f75550013f260acdc83e8 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 15:58:21 +0100 Subject: [PATCH 046/108] =?UTF-8?q?README.md=20:=20autres=20parties=20rest?= =?UTF-8?q?antes=20=C3=A0=20faire=20=3D>=20compl=C3=A9ter=20les=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 6e18db4..7a20dac 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,17 @@ On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(x: float, y: float)``` +### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? + +### Comment définir un style ? + +### Comment définir une couche à partir du descripetur de couche + +* Cas d'usage couche ALTI : + +### Comment définir des données VECTEUR ? + +### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? Les variables d'environnement suivantes peuvent être nécessaires, par module : From 9ae350349aeaee22479408f40ed9cf7d6f0b2709 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 14:58:33 +0000 Subject: [PATCH 047/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a20dac..7040651 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir un style ? -### Comment définir une couche à partir du descripetur de couche +### Comment définir une couche à partir du descripetur de couche * Cas d'usage couche ALTI : From 22c8a44222947e53d1e7b12bfa9fa0e1bd73bd86 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 27 Mar 2025 15:59:41 +0100 Subject: [PATCH 048/108] README.md : orthographe --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a20dac..15d2344 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir un style ? -### Comment définir une couche à partir du descripetur de couche +### Comment définir une couche à partir du descripteur de couche ? * Cas d'usage couche ALTI : From e8b505feee35813516a1b020ec04db799f92706b Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 09:17:40 +0100 Subject: [PATCH 049/108] =?UTF-8?q?README.md=20:=20ajout=20partie=20exploi?= =?UTF-8?q?ter=20un=20jeu=20de=20donn=C3=A9es=20raster?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/README.md b/README.md index 15d2344..b8dab46 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,65 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? +On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster à partir du descriptor tel que : + +```py +from rok4.raster import RasterSet +raster_set = RasterSet.from_descriptor( + "file:///data/images/descriptor.json" + ) +``` + +* ou bien à partir d'une liste d'images et de code srs tel que : + +```py +from rok4.raster import RasterSet +raster_set = RasterSet.from_list( + path="file:///data/SC1000.list", + srs="EPSG:3857" + ) +``` + +On part de la classe 'Raster()' qui définit des données raster : + +* à partir d'informations d'un fichier stocké en image TIFF tel que : + +```py +from rok4.raster import Raster +raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") +``` + +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF: + +```py +from rok4.raster import Raster +raster = Raster.from_parameters( + path="file:///data/SC1000/_0040_6150_L93.tif", + mask="file:///data/SC1000/0040_6150_L93.msk", + bands=3, + format=ColorFormat.UINT8, + dimensions=(2000, 2000), + bbox=(40000.000, 5950000.000, 240000.000, 6150000.000) +) +``` + +Ces deux méthodologies permettent de retourner un sortie les éléments suivants décrivant le jeu de données raster : + +* chemin d'accès au fichier/objet (ex: file:///path/to/image.tif or s3://bucket/image.tif) + +* nombre de bandes colorées, + +* la boundary box, + +* les dimensions de l'image en pixel, + +* le format numérique des valeurs des couleurs, + +* le chemin d'accès au masque associé, + +* l'extension du masque et du fichier au format TIFF. (ex: file:///path/to/image.msk or s3://bucket/image.msk) + + Les variables d'environnement suivantes peuvent être nécessaires, par module : * `storage` : plus de détails dans la documentation technique du module From 1964479cb5342085e51de449046c5c8ae9a41891 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 09:18:49 +0100 Subject: [PATCH 050/108] README.md : vocabulaire --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8dab46..dcf6c0a 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ from rok4.raster import Raster raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") ``` -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF: +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : ```py from rok4.raster import Raster From 050c5ecd21e13ad0d3dea53401186046351cbe5f Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 09:22:21 +0100 Subject: [PATCH 051/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dcf6c0a..d5bfc4c 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ On peut ainsi aisément accéder : On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction ```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et max) -On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(x: float, y: float)``` +On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(x, y)``` ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? From 9a6f36eb48cbc1c47cb87297add7a3ab528c712c Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 09:59:31 +0100 Subject: [PATCH 052/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20ajout=20?= =?UTF-8?q?partir=20comment=20lire=20des=20donn=C3=A9es=20Vecteur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 55 ++++++++++++++++++++---------------------------- 2 files changed, 84 insertions(+), 33 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 10b7ca5..3cc1603 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -251,3 +251,65 @@ s3://layers/bdparcellaire.json } } ``` + +# Comment exploiter des données vecteur ? + +* A partir d'un fichier vecteur (shapefile, csv ou geopackage) comme suit : + +```py +from rok4.vector import Vector +vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") +vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) +vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) +``` + +* A partir des paramètres comme suit : + +```py +from rok4.vector import Vector +vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) +``` + +# Comment exploiter des données raster ? + +On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster à partir du descriptor tel que : + +```py +from rok4.raster import RasterSet +raster_set = RasterSet.from_descriptor( + "file:///data/images/descriptor.json" + ) +``` + +* ou bien à partir d'une liste d'images et de code srs tel que : + +```py +from rok4.raster import RasterSet +raster_set = RasterSet.from_list( + path="file:///data/SC1000.list", + srs="EPSG:3857" + ) +``` + +On part de la classe 'Raster()' qui définit des données raster : + +* à partir d'informations d'un fichier stocké en image TIFF tel que : + +```py +from rok4.raster import Raster +raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") +``` + +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : + +```py +from rok4.raster import Raster +raster = Raster.from_parameters( + path="file:///data/SC1000/_0040_6150_L93.tif", + mask="file:///data/SC1000/0040_6150_L93.msk", + bands=3, + format=ColorFormat.UINT8, + dimensions=(2000, 2000), + bbox=(40000.000, 5950000.000, 240000.000, 6150000.000) +) +``` \ No newline at end of file diff --git a/README.md b/README.md index d5bfc4c..b0e3823 100644 --- a/README.md +++ b/README.md @@ -102,49 +102,38 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données VECTEUR ? -### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? +* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), + * path : path to the file/object + * csv : dictionnary of CSV parameters : + -srs : spatial reference system of the geometry + -column_x : field of the x coordinate + -column_y : field of the y coordinate + -column_wkt : field of the WKT of the geometry + +* A partir des paramètres : + * path : path to the file/object + * bbox : bounding rectange in the data projection + * layers : Vector layers with their name, their number of objects and their attributes -On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster à partir du descriptor tel que : +### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? -```py -from rok4.raster import RasterSet -raster_set = RasterSet.from_descriptor( - "file:///data/images/descriptor.json" - ) -``` +On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : -* ou bien à partir d'une liste d'images et de code srs tel que : +* à partir du descriptor ```"file:///data/images/descriptor.json"``` -```py -from rok4.raster import RasterSet -raster_set = RasterSet.from_list( +* ou bien à partir d'une liste d'images et de code srs ```( path="file:///data/SC1000.list", srs="EPSG:3857" - ) -``` + )``` -On part de la classe 'Raster()' qui définit des données raster : -* à partir d'informations d'un fichier stocké en image TIFF tel que : +On part de la classe 'Raster()' qui définit des données raster : -```py -from rok4.raster import Raster -raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") -``` + ) +* à partir d'informations d'un fichier stocké en image TIFF ```file:///data/SC1000/0040_6150_L93.tif``` -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` -```py -from rok4.raster import Raster -raster = Raster.from_parameters( - path="file:///data/SC1000/_0040_6150_L93.tif", - mask="file:///data/SC1000/0040_6150_L93.msk", - bands=3, - format=ColorFormat.UINT8, - dimensions=(2000, 2000), - bbox=(40000.000, 5950000.000, 240000.000, 6150000.000) -) -``` Ces deux méthodologies permettent de retourner un sortie les éléments suivants décrivant le jeu de données raster : @@ -152,7 +141,7 @@ Ces deux méthodologies permettent de retourner un sortie les éléments suivant * nombre de bandes colorées, -* la boundary box, +* la boundary box (le rectangle), * les dimensions de l'image en pixel, From a740aaf0e870a3fc12c1745fb20bff7f9c5cee5b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 28 Mar 2025 08:59:40 +0000 Subject: [PATCH 053/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 3cc1603..0ef70d0 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -312,4 +312,4 @@ raster = Raster.from_parameters( dimensions=(2000, 2000), bbox=(40000.000, 5950000.000, 240000.000, 6150000.000) ) -``` \ No newline at end of file +``` diff --git a/README.md b/README.md index b0e3823..a5a8b7d 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données VECTEUR ? -* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), +* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), * path : path to the file/object * csv : dictionnary of CSV parameters : -srs : spatial reference system of the geometry From 2de06c3f6e6404da1542082526a3256dcb76b692 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 10:00:35 +0100 Subject: [PATCH 054/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index b0e3823..37645b3 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,6 @@ On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données On part de la classe 'Raster()' qui définit des données raster : - ) * à partir d'informations d'un fichier stocké en image TIFF ```file:///data/SC1000/0040_6150_L93.tif``` * à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` From 1c2093756b107f349ac18a8c4c7e5332a05974f0 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 10:11:32 +0100 Subject: [PATCH 055/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 ++ README.md | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 0ef70d0..d0ee20a 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -145,6 +145,8 @@ except Exception as exc : print (exc) ``` +## Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? + ## Descripteur de couches des "layers" : => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` diff --git a/README.md b/README.md index 037a4a3..933be83 100644 --- a/README.md +++ b/README.md @@ -103,17 +103,17 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données VECTEUR ? * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), - * path : path to the file/object - * csv : dictionnary of CSV parameters : - -srs : spatial reference system of the geometry - -column_x : field of the x coordinate - -column_y : field of the y coordinate - -column_wkt : field of the WKT of the geometry + * le chemin d'accès au fichier/objet, + * csv : le dictionnaire des paramètres CSV : + -srs : système de référence spatiale de la géométrie, + -column_x : le champ de coordonnée X + -column_y : le champ de coordonnée Y + -column_wkt : le champ du WKT(Well Known Text) de la géométrie * A partir des paramètres : - * path : path to the file/object - * bbox : bounding rectange in the data projection - * layers : Vector layers with their name, their number of objects and their attributes + * le chemin d'accès au fichier/objet, + * bbox : le rectangle de la boundary box dans la projection des données + * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? @@ -148,7 +148,7 @@ Ces deux méthodologies permettent de retourner un sortie les éléments suivant * le chemin d'accès au masque associé, -* l'extension du masque et du fichier au format TIFF. (ex: file:///path/to/image.msk or s3://bucket/image.msk) +* l'extension du masque et du fichier au format TIFF. (ex: ```file:///path/to/image.msk``` or ```s3://bucket/image.msk```) Les variables d'environnement suivantes peuvent être nécessaires, par module : From f7d239398e6aaceb26a6ffdd37f71a48a0ffa871 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 10:13:54 +0100 Subject: [PATCH 056/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 933be83..6d475c6 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,10 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ## Utiliser la librairie -En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les variables d'environnement du projet `ROK4`: +En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les + +variables d'environnement du projet `ROK4`: + ```sh export ROK4_TMS_DIRECTORY=s3://tilematrixsets export ROK4_S3_KEY=rok4 @@ -43,12 +46,14 @@ python3 data_tilesmatrix_launcher.py ### Comment lire une tuile de pyramide de données raster ? * On doit passer le bucket s3 de stockage exemple : ```"s3://pyramids/ALTI.json"``` en paramètre d'entrée de la méthode de classe ```from_descriptor()``` appliquée à la classe ```Pyramid()``` tel que : + ```py # descriptor de la pyramide ALTI pyr_alti_descriptor = Pyramid.from_descriptor("s3://pyramids/ALTI.json") ``` * Si l'on veut obtenir les indices d'une tuile de pyramide raster, on utilise la fonction ```get_tiles_indices(x_point, y_point, pyramid_level,srs_coords)``` + ```py level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") ``` @@ -88,9 +93,15 @@ On peut ainsi aisément accéder : * à la taille de la matrice en largeur et en hauteur. -On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction ```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et max) +On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction -On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(x, y)``` +```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et + +max) + +On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : + +```point_to_indices(x, y)``` ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? @@ -102,17 +113,26 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données VECTEUR ? -* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), +* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), + * le chemin d'accès au fichier/objet, + * csv : le dictionnaire des paramètres CSV : + -srs : système de référence spatiale de la géométrie, + -column_x : le champ de coordonnée X + -column_y : le champ de coordonnée Y + -column_wkt : le champ du WKT(Well Known Text) de la géométrie * A partir des paramètres : + * le chemin d'accès au fichier/objet, + * bbox : le rectangle de la boundary box dans la projection des données + * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? @@ -131,7 +151,9 @@ On part de la classe 'Raster()' qui définit des données raster : * à partir d'informations d'un fichier stocké en image TIFF ```file:///data/SC1000/0040_6150_L93.tif``` -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un + +masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` Ces deux méthodologies permettent de retourner un sortie les éléments suivants décrivant le jeu de données raster : From dffb96ecd77d705e0cfbf374c8d4f3bf817e3afd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 28 Mar 2025 09:14:03 +0000 Subject: [PATCH 057/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 6d475c6..86a2bd9 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ## Utiliser la librairie -En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les +En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les variables d'environnement du projet `ROK4`: @@ -93,13 +93,13 @@ On peut ainsi aisément accéder : * à la taille de la matrice en largeur et en hauteur. -On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction +On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction -```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et +```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et max) -On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : +On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : ```point_to_indices(x, y)``` @@ -113,26 +113,26 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données VECTEUR ? -* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), - +* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), + * le chemin d'accès au fichier/objet, - + * csv : le dictionnaire des paramètres CSV : - + -srs : système de référence spatiale de la géométrie, - + -column_x : le champ de coordonnée X - + -column_y : le champ de coordonnée Y - + -column_wkt : le champ du WKT(Well Known Text) de la géométrie * A partir des paramètres : - + * le chemin d'accès au fichier/objet, - + * bbox : le rectangle de la boundary box dans la projection des données - + * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? @@ -151,7 +151,7 @@ On part de la classe 'Raster()' qui définit des données raster : * à partir d'informations d'un fichier stocké en image TIFF ```file:///data/SC1000/0040_6150_L93.tif``` -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` From 8887715a89d547b34e1a36bc843af1e315fe2359 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 10:15:02 +0100 Subject: [PATCH 058/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 6d475c6..7aaae74 100644 --- a/README.md +++ b/README.md @@ -113,26 +113,26 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir des données VECTEUR ? -* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), - +* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), + * le chemin d'accès au fichier/objet, - + * csv : le dictionnaire des paramètres CSV : - + -srs : système de référence spatiale de la géométrie, - + -column_x : le champ de coordonnée X - + -column_y : le champ de coordonnée Y - + -column_wkt : le champ du WKT(Well Known Text) de la géométrie * A partir des paramètres : - + * le chemin d'accès au fichier/objet, - + * bbox : le rectangle de la boundary box dans la projection des données - + * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? From ac68fc3f2404f9fcd113f5d20c42405ece2b560c Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 11:33:43 +0100 Subject: [PATCH 059/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 127 ++++++++++++++++++++++++++++-------------------------- README.md | 17 +++++--- 2 files changed, 76 insertions(+), 68 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index d0ee20a..e1270d3 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,4 +1,68 @@ +# Comment exploiter des données vecteur ? + +* A partir d'un fichier vecteur (shapefile, csv ou geopackage) comme suit : + +```py +from rok4.vector import Vector +vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") +vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) +vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) +``` + +* A partir des paramètres comme suit : + +```py +from rok4.vector import Vector +vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) +``` + +# Comment exploiter des données raster ? + +On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : + +* à partir du descriptor tel que : + +```py +from rok4.raster import RasterSet +raster_set = RasterSet.from_descriptor( + "file:///data/images/descriptor.json" + ) +``` + +* ou bien à partir d'une liste d'images et de code srs tel que : + +```py +from rok4.raster import RasterSet +raster_set = RasterSet.from_list( + path="file:///data/SC1000.list", + srs="EPSG:3857" + ) +``` + +On part de la classe 'Raster()' qui définit des données raster : + +* à partir d'informations d'un fichier stocké en image TIFF tel que : + +```py +from rok4.raster import Raster +raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") +``` + +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : + +```py +from rok4.raster import Raster +raster = Raster.from_parameters( + path="file:///data/SC1000/_0040_6150_L93.tif", + mask="file:///data/SC1000/0040_6150_L93.msk", + bands=3, + format=ColorFormat.UINT8, + dimensions=(2000, 2000), + bbox=(40000.000, 5950000.000, 240000.000, 6150000.000) +) +``` + ## Cas d'usage simple : exemple avec des données ALTI * ci-dessous les résultats obtenus avec l'exemple des données ALTI : @@ -215,7 +279,7 @@ s3://layers/bdparcellaire.json ## Exemple de style du projet rok4 : -* Exemple du stytle de la montagne palette parmi les onze styles stockés sur le s3 : +* Exemple du stytle de la **montagne palette** parmi les **onze styles** stockés sur le s3 : * Ci-jointe la structure en objet json dont l'emplacement est le suivant ```s3://styles/montagne_palette.json```: @@ -254,64 +318,3 @@ s3://layers/bdparcellaire.json } ``` -# Comment exploiter des données vecteur ? - -* A partir d'un fichier vecteur (shapefile, csv ou geopackage) comme suit : - -```py -from rok4.vector import Vector -vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") -vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) -vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) -``` - -* A partir des paramètres comme suit : - -```py -from rok4.vector import Vector -vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) -``` - -# Comment exploiter des données raster ? - -On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster à partir du descriptor tel que : - -```py -from rok4.raster import RasterSet -raster_set = RasterSet.from_descriptor( - "file:///data/images/descriptor.json" - ) -``` - -* ou bien à partir d'une liste d'images et de code srs tel que : - -```py -from rok4.raster import RasterSet -raster_set = RasterSet.from_list( - path="file:///data/SC1000.list", - srs="EPSG:3857" - ) -``` - -On part de la classe 'Raster()' qui définit des données raster : - -* à partir d'informations d'un fichier stocké en image TIFF tel que : - -```py -from rok4.raster import Raster -raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") -``` - -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : - -```py -from rok4.raster import Raster -raster = Raster.from_parameters( - path="file:///data/SC1000/_0040_6150_L93.tif", - mask="file:///data/SC1000/0040_6150_L93.msk", - bands=3, - format=ColorFormat.UINT8, - dimensions=(2000, 2000), - bbox=(40000.000, 5950000.000, 240000.000, 6150000.000) -) -``` diff --git a/README.md b/README.md index 86a2bd9..8ece812 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,15 @@ python3 data_tilesmatrix_launcher.py ```py level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") ``` + +où : +* pcol : indice de colonne de pixels à partir des coordonnées du point, +* prow : indice de rangée de pixels à partir des coordonnées du point, +* level : niveau de la tuile, +* col : colonne de la tuile, +* row : rangée de la tuile. + + * Si l'on veut récupérer les données raster d'une tuile de Pyramide : ```py data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) @@ -85,7 +94,7 @@ On peut ainsi aisément accéder : * à son chemin, -* aux coordonnées de l'origine X et Y, +* aux coordonnées de l'origine X et Y du point, * à la résolution (niveau), @@ -94,14 +103,10 @@ On peut ainsi aisément accéder : * à la taille de la matrice en largeur et en hauteur. On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction - ```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et - max) -On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction : - -```point_to_indices(x, y)``` +On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction ```point_to_indices(x, y)``` ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? From 335e150f0efe17a05d80864a09d489bcb2c77f56 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 28 Mar 2025 10:34:23 +0000 Subject: [PATCH 060/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 1 - 1 file changed, 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index e1270d3..7edcbad 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -317,4 +317,3 @@ s3://layers/bdparcellaire.json } } ``` - From e90740bf326d8826db4b17a26d524c1dd056eda7 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 12:00:26 +0100 Subject: [PATCH 061/108] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index e1270d3..7a7480f 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,7 +1,7 @@ # Comment exploiter des données vecteur ? -* A partir d'un fichier vecteur (shapefile, csv ou geopackage) comme suit : +* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage) comme suit : ```py from rok4.vector import Vector From bf215a3e20a27525ca89e341f77e76989391484b Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 12:29:19 +0100 Subject: [PATCH 062/108] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j=20partie=20donn?= =?UTF-8?q?=C3=A9es=20Vecteur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index db8ce3c..1d5a219 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -3,6 +3,10 @@ * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage) comme suit : + * le chemin d'accès au fichier/objet, + + * csv : le dictionnaire des paramètres CSV. + ```py from rok4.vector import Vector vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") @@ -12,6 +16,12 @@ vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delim * A partir des paramètres comme suit : + * le chemin d'accès au fichier/objet, + + * bbox : le rectangle de la boundary box dans la projection des données, + + * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs. + ```py from rok4.vector import Vector vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) From 6eb6883205826a166341c827ec40b56b57a92d74 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 13:17:07 +0100 Subject: [PATCH 063/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 65 +++++++++++++++++++++++++------------------------------ README.md | 2 +- 2 files changed, 31 insertions(+), 36 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 1d5a219..9519e2f 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -80,52 +80,48 @@ raster = Raster.from_parameters( ```sh myusername@pcname:~$ python3 data_tilesmatrix_launcher.py créer une pyramide à partir du path de son descriptor RASTER pyramid 'ALTI' (S3 storage) -type de pyramide PyramidType.RASTER format des tuiles de données vecteur : TIFF_ZIP_FLOAT32 niveau le plus bas de la pyramide : RASTER pyramid's level '13' (S3 storage) niveau le plus haut de la pyramide : RASTER pyramid's level '0' (S3 storage) données du slab: - - type de slab SlabType.DATA - identifiant du niveau 10 - nombre de tuiles en largeur par slab 21 - nombre de tuiles en hauteur par slab : 29 +type de slab SlabType.DATA +identifiant du niveau 10 +nombre de tuiles en largeur par slab 21 +nombre de tuiles en hauteur par slab : 29 ``` ## Comment l'obtenir ? ```py - #!/usr/bin/env python3 - - # import des packages de rok4 - from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat - from rok4.pyramid import Pyramid, Level +#!/usr/bin/env python3 - # chemin du descriptor de la pyramide alti - path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" +# import des packages de rok4 +from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat +from rok4.pyramid import Pyramid, Level - # descriptor de la pyramide ALTI - pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) +# chemin du descriptor de la pyramide alti +path_to_pyramid_alti_descriptor = "s3://pyramids/ALTI.json" - print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") +# descriptor de la pyramide ALTI +pyr_alti_descriptor = Pyramid.from_descriptor(path_to_pyramid_alti_descriptor) +print (f"créer une pyramide à partir du path de son descriptor {pyr_alti_descriptor}") - print(f"type de pyramide {pyr_alti_descriptor.type}") - print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") - print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") - print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") +print(f"format des tuiles de données vecteur : {pyr_alti_descriptor.format}") +print(f"niveau le plus bas de la pyramide : {pyr_alti_descriptor.bottom_level}") +print(f"niveau le plus haut de la pyramide : {pyr_alti_descriptor.top_level}") - slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) - slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) +slab_type, level, column, row = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) +slab_indexes = pyr_alti_descriptor.get_infos_from_slab_path(slab_alti_path) - print ("données du slab: \n") - print (f" type de slab {slab_indexes[0]}") - print (f" identifiant du niveau {slab_indexes[1]}") - print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") - print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") - level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") - data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) +print ("données du slab: \n") +print (f" type de slab {slab_indexes[0]}") +print (f" identifiant du niveau {slab_indexes[1]}") +print (f" nombre de tuiles en largeur par slab {slab_indexes[2]}") +print (f" nombre de tuiles en hauteur par slab : {slab_indexes[3]}") +level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") +data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) - print(data_raster) +print(data_raster) ``` ## Cas d'usage simple avec le TileMatrixSet "PM": @@ -189,10 +185,9 @@ from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat from rok4.tile_matrix_set import TileMatrix, TileMatrixSet try: tms = TileMatrixSet("PM") - print ("\nExploitation de la classe TileMatrixSet\n") - print(f"le nom du tms est le suivant : {tms.name}") - print(f"le nom du tms est le suivant : {tms.path}") - print(f"le code srs associé au système de projection planimétrique est le suivant : {tms.srs}") + print(f"le nom du tms : {tms.name}") + print(f"le chemin du tms : {tms.path}") + print(f"le code srs : {tms.srs}") typePyramid = PyramidType("RASTER") slabType = SlabType("MASK") @@ -289,7 +284,7 @@ s3://layers/bdparcellaire.json ## Exemple de style du projet rok4 : -* Exemple du stytle de la **montagne palette** parmi les **onze styles** stockés sur le s3 : +* Exemple du style : la **montagne palette** parmi les **onze styles** stockés sur le bucket de stockage s3 : * Ci-jointe la structure en objet json dont l'emplacement est le suivant ```s3://styles/montagne_palette.json```: diff --git a/README.md b/README.md index 8ece812..93bdff4 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ On peut ainsi aisément accéder : * aux coordonnées de l'origine X et Y du point, -* à la résolution (niveau), +* à la résolution (taille de la cellule), * à la taille de la tuile en largeur et et en hauteur, From e6295714ca394c94deebba303a6662ebacca6134 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 13:48:02 +0100 Subject: [PATCH 064/108] HOWTO.md : vocabulaire --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 9519e2f..fcd7a1d 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -230,7 +230,7 @@ s3://layers/pente.json s3://layers/bdparcellaire.json ``` -* Ci-jointe sa structure en objet json : +* Ci-jointe sa structure en objet json du descripteur de couche BDORTHO: ```json { From 8933617c147bddf84f329c864d0951acf32a2c3e Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 14:52:01 +0100 Subject: [PATCH 065/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= =?UTF-8?q?=20=3D>=20lien=20vers=20documentation=20'HOWTO.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 ++ README.md | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index fcd7a1d..78482a9 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -27,6 +27,8 @@ from rok4.vector import Vector vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) ``` +![ROK4 DATA VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) + # Comment exploiter des données raster ? On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : diff --git a/README.md b/README.md index 93bdff4..a141e27 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ où : ```py data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) ``` +![ROK4 pyramide ALTI](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#cas-dusage-simple--exemple-avec-des-donn%C3%A9es-alti) ### Comment lire une tuile de pyramide de données vecteur ? @@ -82,12 +83,16 @@ level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, data_vector = pyramid.get_tile_data_vector(level, col, row) ``` +![ROK4 pyramide VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) + ### Comment définit-on une matrice de tuiles à partir des niveaux de jeux de matrice de tuile ? On utilise la classe ```TileMatrixSet()``` avec laquelle on instancie un objet lié à cette classe, à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple +![ROK4 TMS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#cas-dusage-simple-avec-le-tilematrixset-pm) + On peut ainsi aisément accéder : * à son identifiant, @@ -177,6 +182,7 @@ Ces deux méthodologies permettent de retourner un sortie les éléments suivant * l'extension du masque et du fichier au format TIFF. (ex: ```file:///path/to/image.msk``` or ```s3://bucket/image.msk```) +![ROK4 data RASTER] (https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) Les variables d'environnement suivantes peuvent être nécessaires, par module : From 16e9873af637500c5ec3ec966bd3b3282b277950 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:01:14 +0100 Subject: [PATCH 066/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= =?UTF-8?q?=20lien=20vers=20documentation=20HOWTO.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a141e27..ac1300d 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,8 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs +![ROK4 DATA VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) + ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : @@ -182,7 +184,7 @@ Ces deux méthodologies permettent de retourner un sortie les éléments suivant * l'extension du masque et du fichier au format TIFF. (ex: ```file:///path/to/image.msk``` or ```s3://bucket/image.msk```) -![ROK4 data RASTER] (https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) +![ROK4 RASTERSET] (https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) Les variables d'environnement suivantes peuvent être nécessaires, par module : From 97aad07b6765232d921ab03823c87c255b4cf04e Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:01:35 +0100 Subject: [PATCH 067/108] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 78482a9..fcd7a1d 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -27,8 +27,6 @@ from rok4.vector import Vector vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) ``` -![ROK4 DATA VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) - # Comment exploiter des données raster ? On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : From 9324383d6cb78f5c1fe48fe48a40d6ba58518d34 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:03:00 +0100 Subject: [PATCH 068/108] README.md : erratum --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac1300d..4c6b3e0 100644 --- a/README.md +++ b/README.md @@ -184,7 +184,7 @@ Ces deux méthodologies permettent de retourner un sortie les éléments suivant * l'extension du masque et du fichier au format TIFF. (ex: ```file:///path/to/image.msk``` or ```s3://bucket/image.msk```) -![ROK4 RASTERSET] (https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) +![ROK4 RASTERSET](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) Les variables d'environnement suivantes peuvent être nécessaires, par module : From 7e3a5f53c1f4490c0b5e1eb1fb7d4e70b02b4e1e Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:06:54 +0100 Subject: [PATCH 069/108] =?UTF-8?q?README.md=20:=20m=C3=A0j=20lien=20docum?= =?UTF-8?q?entation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4c6b3e0..bad3381 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,8 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de * Cas d'usage couche ALTI : +![ROK4 LAYER DESCRIPTOR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) + ### Comment définir des données VECTEUR ? * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), From a481b4534f8226511e153f553ed1f7bbc2048ce2 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:08:37 +0100 Subject: [PATCH 070/108] =?UTF-8?q?README.md=20:=20m=C3=A0j=20lien=20docum?= =?UTF-8?q?entation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index bad3381..42c1a3f 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,8 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir un style ? +![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) + ### Comment définir une couche à partir du descripteur de couche ? * Cas d'usage couche ALTI : From 1f95b64a96dee83ce907d288773daad324821477 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:09:44 +0100 Subject: [PATCH 071/108] README.md : correction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42c1a3f..c244e12 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir une couche à partir du descripteur de couche ? -* Cas d'usage couche ALTI : +* Cas d'usage couche BDORTHO : ![ROK4 LAYER DESCRIPTOR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) From 3d2c74f4bb9b54a1622a126cc5824189432bc1dd Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 28 Mar 2025 15:10:51 +0100 Subject: [PATCH 072/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index c244e12..0306b17 100644 --- a/README.md +++ b/README.md @@ -167,9 +167,7 @@ On part de la classe 'Raster()' qui définit des données raster : * à partir d'informations d'un fichier stocké en image TIFF ```file:///data/SC1000/0040_6150_L93.tif``` -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un - -masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` Ces deux méthodologies permettent de retourner un sortie les éléments suivants décrivant le jeu de données raster : From cf09f7d3b621f9f15e443b723212563993016a36 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Mon, 31 Mar 2025 10:14:44 +0200 Subject: [PATCH 073/108] README.md : suppression car trivial --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 0306b17..1cd6a79 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,6 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` -Dans un script nommé par exemple `data_tilesmatrix_launcher.py`, on exécute le programme comme suit : -```sh -python3 data_tilesmatrix_launcher.py -``` ### Comment lire une tuile de pyramide de données raster ? From 5c012ee4c161b164acf0b2eccb9e837cda33037e Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Mon, 31 Mar 2025 16:30:34 +0200 Subject: [PATCH 074/108] HOWTO.md : description des couches --- HOWTO.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index fcd7a1d..f7d5603 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -218,6 +218,15 @@ except Exception as exc : ## Descripteur de couches des "layers" : +* elle est définie par son nom technique, +* la liste des chemins de la pyramide utilisée +* la grille utilisée, +* les mots-clefs, +* les niveaux de pyramide utilisés +* le meilleur niveau des pyramides utilisés +* l'interpolation pour utiliser le ré-échantillonnage, +* les données de la boundary box avec le système de coordonnées du TMS + => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` ```list.txt``` contient tous les noms des buckets de stockage des couches sous forme d'une liste : From 29dd7483857d96f8fb4a0024d447961502f2ea16 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Mon, 31 Mar 2025 16:41:24 +0200 Subject: [PATCH 075/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= =?UTF-8?q?=20partie=20stockage=20buckets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 151 ++++++++++++++++++++++++++---------------------------- README.md | 13 +++++ 2 files changed, 87 insertions(+), 77 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index f7d5603..aea8ff7 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -73,6 +73,80 @@ raster = Raster.from_parameters( ) ``` + +## Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? + +=> exemple pour la BDORTHO : ```s3://layers/bdortho.json``` + +```list.txt``` contient tous les noms des buckets de stockage des couches sous forme d'une liste : + +```txt +s3://layers/bdortho.json +s3://layers/alti.json +s3://layers/limadm.json +s3://layers/pente.json +s3://layers/bdparcellaire.json +``` + +* Pour obtenir le niveau le plus bas et le niveau le plus haut des pyramides de tuile à partir du descriptor: +```py +pyramid = Pyramid.from_descriptor(p["path"]) +bottom_level = p.get("bottom_level", None) +top_level = p.get("top_level", None) +``` + +* Ci-jointe un exemple de sa structure en objet json du descripteur de couche BDORTHO : + +```json +{ + "title": "Photographies aériennes", + "abstract": "Données BD Ortho", + "keywords": + [ + "Ortho-photographies", + "Données RGB" + ], + "pyramids": + [ + { + "bottom_level": "15", + "top_level": "0", + "path": "s3://pyramids/BDORTHO.json" + } + ], + "resampling": "bicubic", + "styles": + [ + "normal" + ], + "extra_crs": + [ + "EPSG:4559" + ], + "extra_tilematrixsets": + [ + "4326", + "UTM20W84MART_2.5m" + ], + "wms": + { + "enabled": true + }, + "wmts": + { + "enabled": true + }, + "tms": + { + "enabled": true + }, + "tiles": + { + "enabled": true + } +} +``` + ## Cas d'usage simple : exemple avec des données ALTI * ci-dessous les résultats obtenus avec l'exemple des données ALTI : @@ -214,83 +288,6 @@ except Exception as exc : print (exc) ``` -## Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? - -## Descripteur de couches des "layers" : - -* elle est définie par son nom technique, -* la liste des chemins de la pyramide utilisée -* la grille utilisée, -* les mots-clefs, -* les niveaux de pyramide utilisés -* le meilleur niveau des pyramides utilisés -* l'interpolation pour utiliser le ré-échantillonnage, -* les données de la boundary box avec le système de coordonnées du TMS - -=> exemple pour la BDORTHO : ```s3://layers/bdortho.json``` - -```list.txt``` contient tous les noms des buckets de stockage des couches sous forme d'une liste : - -```txt -s3://layers/bdortho.json -s3://layers/alti.json -s3://layers/limadm.json -s3://layers/pente.json -s3://layers/bdparcellaire.json -``` - -* Ci-jointe sa structure en objet json du descripteur de couche BDORTHO: - -```json -{ - "title": "Photographies aériennes", - "abstract": "Données BD Ortho", - "keywords": - [ - "Ortho-photographies", - "Données RGB" - ], - "pyramids": - [ - { - "bottom_level": "15", - "top_level": "0", - "path": "s3://pyramids/BDORTHO.json" - } - ], - "resampling": "bicubic", - "styles": - [ - "normal" - ], - "extra_crs": - [ - "EPSG:4559" - ], - "extra_tilematrixsets": - [ - "4326", - "UTM20W84MART_2.5m" - ], - "wms": - { - "enabled": true - }, - "wmts": - { - "enabled": true - }, - "tms": - { - "enabled": true - }, - "tiles": - { - "enabled": true - } -} -``` - ## Exemple de style du projet rok4 : * Exemple du style : la **montagne palette** parmi les **onze styles** stockés sur le bucket de stockage s3 : diff --git a/README.md b/README.md index 1cd6a79..1410a0e 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,19 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? +## Descripteur des couches des "layers" : + +* elle est définie par son nom technique, +* la liste des chemins de la pyramide utilisée +* la grille utilisée, +* les mots-clefs, +* les niveaux de pyramide utilisés +* le meilleur niveau des pyramides utilisés +* l'interpolation pour utiliser le ré-échantillonnage, +* les données de la boundary box avec le système de coordonnées du TMS + +![ROK4 LAYERS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) + ### Comment définir un style ? ![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) From 962b813b9f5122703e709562aeda2f890b967250 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Mon, 31 Mar 2025 16:44:54 +0200 Subject: [PATCH 076/108] =?UTF-8?q?README.md=20:=20esth=C3=A9tique=20=3D>?= =?UTF-8?q?=20mise=20en=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1410a0e..8d6991f 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? -## Descripteur des couches des "layers" : +### Descripteur des couches des "layers" : * elle est définie par son nom technique, * la liste des chemins de la pyramide utilisée From a435561db34d425ea995439432e3861dcea5547f Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 09:31:53 +0200 Subject: [PATCH 077/108] =?UTF-8?q?README.md=20&=20HOWTO.md=20:=20ajout=20?= =?UTF-8?q?descriptions=20des=20param=C3=A8tres=20d=C3=A9crivant=20les=20c?= =?UTF-8?q?ouches=20ALTI,=20BDORTHO=20ou=20autres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 6 ++++++ README.md | 23 +++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index aea8ff7..7062a16 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -90,9 +90,15 @@ s3://layers/bdparcellaire.json * Pour obtenir le niveau le plus bas et le niveau le plus haut des pyramides de tuile à partir du descriptor: ```py +from rok4.pyramid import Pyramid +from rok4.storage import get_data_str, get_infos_from_path, put_data_str +from rok4.utils import reproject_bbox pyramid = Pyramid.from_descriptor(p["path"]) +data = json.loads(get_data_str(descriptor)) +storage_type, path, root, base_name = get_infos_from_path(descriptor) bottom_level = p.get("bottom_level", None) top_level = p.get("top_level", None) +levels = pyramid.get_levels(bottom_level, top_level) ``` * Ci-jointe un exemple de sa structure en objet json du descripteur de couche BDORTHO : diff --git a/README.md b/README.md index 8d6991f..4c81c60 100644 --- a/README.md +++ b/README.md @@ -114,13 +114,28 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Descripteur des couches des "layers" : * elle est définie par son nom technique, -* la liste des chemins de la pyramide utilisée + +* la liste des chemins de la pyramide utilisée, + * la grille utilisée, + * les mots-clefs, -* les niveaux de pyramide utilisés -* le meilleur niveau des pyramides utilisés + +* les niveaux de pyramide utilisés, + +* le meilleur niveau des pyramides utilisés, + * l'interpolation pour utiliser le ré-échantillonnage, -* les données de la boundary box avec le système de coordonnées du TMS + +* les données de la boundary box avec le système de coordonnées du TMS, + +* les niveaux extrêmes de la couche, + +* le titre de la couche, + +* l'abstraction de la couche, + +* les identifiants des styles autorisés pour la couche. ![ROK4 LAYERS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) From 0ea2139835ac4203820781e4d88c90f72d614178 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 09:37:24 +0200 Subject: [PATCH 078/108] REDAME.md : rajout des onze styles du projet rok4 dans le README --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 4c81c60..eb8cdf8 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,30 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir un style ? +Le projet rok4 comportent onze styles qui sont les suivants: + +* aspect, + +* blanc, + +* epandage, + +* estompage, + +* hypso, + +* inspire, + +* montagne_palette, + +* montagne, + +* normal, + +* orange, + +* pente. + ![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) ### Comment définir une couche à partir du descripteur de couche ? From 24fb62b56bd3e76ebaa455e154a01fd9f64054ff Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 09:53:04 +0200 Subject: [PATCH 079/108] =?UTF-8?q?README.md=20:=20m=C3=A0j=20styles=20pro?= =?UTF-8?q?jet=20rok4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index eb8cdf8..2cb04c1 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,9 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de * les identifiants des styles autorisés pour la couche. -![ROK4 LAYERS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) +* Cas d'usage couche BDORTHO : + +![ROK4 LAYER DESCRIPTOR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) ### Comment définir un style ? @@ -165,13 +167,31 @@ Le projet rok4 comportent onze styles qui sont les suivants: * pente. -![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) +Pour la palette des couleurs, on a les 4 canaux: rouge, bleu, vert et alpha. -### Comment définir une couche à partir du descripteur de couche ? +L'objet Style contient la palette à créer. + +Les paramètres de pente contiennent une valeur maximale de pente et des valeurs "flag" ou nodata "9999". + +Les paramètres d'exposition contiennent des paramètres de valeur de pente pour laquelle l'exposition est calculée, le nom de l'algorithme de calcul + +de la pente. + +Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur d'exagération de + +la pente, et des valeurs flag pour l'estompage. + +POur la légende du style, elle contient : + +* la légende et l'url de l'image, + +* la hauteur et la largeur du pixel de l'image, + +* l'échelle minimale et maximale pour laquelle la légende est appliquée./ + +![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) -* Cas d'usage couche BDORTHO : -![ROK4 LAYER DESCRIPTOR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) ### Comment définir des données VECTEUR ? From 00d6da2715c5dab26af3086fc81860cd70061f92 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 07:53:14 +0000 Subject: [PATCH 080/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2cb04c1..e3a9c11 100644 --- a/README.md +++ b/README.md @@ -173,11 +173,11 @@ L'objet Style contient la palette à créer. Les paramètres de pente contiennent une valeur maximale de pente et des valeurs "flag" ou nodata "9999". -Les paramètres d'exposition contiennent des paramètres de valeur de pente pour laquelle l'exposition est calculée, le nom de l'algorithme de calcul +Les paramètres d'exposition contiennent des paramètres de valeur de pente pour laquelle l'exposition est calculée, le nom de l'algorithme de calcul de la pente. -Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur d'exagération de +Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur d'exagération de la pente, et des valeurs flag pour l'estompage. From 1c14f6d8d745b0616573e5ba19f009e316f56f37 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 10:03:41 +0200 Subject: [PATCH 081/108] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 7062a16..6d450b7 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -155,8 +155,6 @@ levels = pyramid.get_levels(bottom_level, top_level) ## Cas d'usage simple : exemple avec des données ALTI -* ci-dessous les résultats obtenus avec l'exemple des données ALTI : - ```sh myusername@pcname:~$ python3 data_tilesmatrix_launcher.py créer une pyramide à partir du path de son descriptor RASTER pyramid 'ALTI' (S3 storage) @@ -170,7 +168,7 @@ nombre de tuiles en largeur par slab 21 nombre de tuiles en hauteur par slab : 29 ``` -## Comment l'obtenir ? +## Comment obtenir ces résultats ? ```py #!/usr/bin/env python3 From dce69f6c243f23e34f5d39ea845b148f3fb19881 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 10:15:46 +0200 Subject: [PATCH 082/108] =?UTF-8?q?README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e3a9c11..c66c7aa 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,9 @@ max) On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction ```point_to_indices(x, y)``` +![ROK4 EXPLOITATION JSON TMS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exploitation-des-donn%C3%A9es-dun-fichier-json-dun-tilematrixset-exemple--pmjson) + + ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? ### Descripteur des couches des "layers" : From c620821296bf82429dcd985ae3f408f3f0ba34a1 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 11:10:49 +0200 Subject: [PATCH 083/108] =?UTF-8?q?README.md=20:=20m=C3=A0j=20stockage=20b?= =?UTF-8?q?uckets=20lien=20vers=20HOWTO.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c66c7aa..c5ea71b 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,8 @@ On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? +![ROK4 STOCKAGE BUCKET](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-d%C3%A9finir-le-stockage-de-tous-les-buckets-du-projet-rok4-sur-le-bucket-s3-) + ### Descripteur des couches des "layers" : * elle est définie par son nom technique, From ef5e0c8fafdd819f06d12eb005e1dd3d3d83fcbc Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 1 Apr 2025 11:16:10 +0200 Subject: [PATCH 084/108] =?UTF-8?q?README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c5ea71b..6c47c06 100644 --- a/README.md +++ b/README.md @@ -178,21 +178,21 @@ L'objet Style contient la palette à créer. Les paramètres de pente contiennent une valeur maximale de pente et des valeurs "flag" ou nodata "9999". -Les paramètres d'exposition contiennent des paramètres de valeur de pente pour laquelle l'exposition est calculée, le nom de l'algorithme de calcul +Les paramètres d'exposition contiennent des paramètres de valeur de pente pour laquelle l'exposition est calculée, le nom de -de la pente. +l'algorithme de calcul de la pente. -Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur d'exagération de +Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur -la pente, et des valeurs flag pour l'estompage. +d'exagération de la pente, et des valeurs flag pour l'estompage. -POur la légende du style, elle contient : +Pour la légende du style, elle contient : * la légende et l'url de l'image, * la hauteur et la largeur du pixel de l'image, -* l'échelle minimale et maximale pour laquelle la légende est appliquée./ +* l'échelle minimale et maximale pour laquelle la légende est appliquée. ![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) From 0e81e8474009b5b579ba007939b9729a181da283 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:16:19 +0000 Subject: [PATCH 085/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c47c06..ced630c 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ Les paramètres d'exposition contiennent des paramètres de valeur de pente pour l'algorithme de calcul de la pente. -Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur +Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur d'exagération de la pente, et des valeurs flag pour l'estompage. From 137fb290a4f85f65cc0896eff725e979ed072f36 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 3 Apr 2025 10:02:45 +0200 Subject: [PATCH 086/108] =?UTF-8?q?pyproject.toml=20:=20ajout=20de=20la=20?= =?UTF-8?q?librairie=20python=20pydeps=20pour=20g=C3=A9n=C3=A9rer=20automa?= =?UTF-8?q?tiquement=20le=20graphe=20des=20d=C3=A9pendances=20des=20progra?= =?UTF-8?q?mmes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 3e9fcf9..6ebe9f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ dependencies = [ [project.optional-dependencies] doc = [ "pdoc3 >= 0.10.0" + "pydeps" ] dev = [ From 356b808479f5ab4126a6d1d3c3a0766cd7d7bfea Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 3 Apr 2025 10:05:20 +0200 Subject: [PATCH 087/108] =?UTF-8?q?pyproject.toml:=20ajout=20de=20la=20vir?= =?UTF-8?q?gule=20car=20on=20ajoute=20un=20=C3=A9l=C3=A9ment=20=C3=A0=20la?= =?UTF-8?q?=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6ebe9f3..da11537 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ [project.optional-dependencies] doc = [ - "pdoc3 >= 0.10.0" + "pdoc3 >= 0.10.0", "pydeps" ] From e005f8931b2df9b9e0d74f584a73c27d60a5e320 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 13 May 2025 12:51:10 +0200 Subject: [PATCH 088/108] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20premi?= =?UTF-8?q?=C3=A8res=20corrections=20suite=20retour=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 58 +++++++++++++++++++--- README.md | 145 ++++-------------------------------------------------- 2 files changed, 60 insertions(+), 143 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 6d450b7..00de1b2 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,5 +1,47 @@ +### Comment lire une tuile de pyramide de données raster ? -# Comment exploiter des données vecteur ? +* On doit passer le bucket s3 de stockage exemple : ```"s3://pyramids/ALTI.json"``` en paramètre d'entrée de la méthode de classe ```from_descriptor()``` appliquée à la classe ```Pyramid()``` tel que : + +```py + # descriptor de la pyramide ALTI + pyr_alti_descriptor = Pyramid.from_descriptor("s3://pyramids/ALTI.json") +``` + +* Si l'on veut obtenir les indices d'une tuile de pyramide raster, on utilise la fonction ```get_tiles_indices(x_point, y_point, pyramid_level,srs_coords)``` + +```py +level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") +``` + +où : +* pcol : indice de colonne de pixels à partir des coordonnées du point, +* prow : indice de rangée de pixels à partir des coordonnées du point, +* level : niveau de la tuile, +* col : colonne de la tuile, +* row : rangée de la tuile. + + +* Si l'on veut récupérer les données raster d'une tuile de Pyramide : +```py +data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) +``` +![ROK4 pyramide ALTI](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#cas-dusage-simple--exemple-avec-des-donn%C3%A9es-alti) + +### Comment lire une tuile de pyramide de données vecteur ? + +* Même principe qu'avec le cas RASTER, si l'on veut récupérer les données vecteur d'une tuile de Pyramide : + +* Cas d'usage : données VECTEUR : pyramide LIMITES ADMINISTRATIVES +```py +pyramid_vector = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") +level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, tile_row) +data_vector = pyramid.get_tile_data_vector(level, col, row) +``` + +![ROK4 pyramide VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) + + +### Comment exploiter des données vecteur ? * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage) comme suit : @@ -27,7 +69,7 @@ from rok4.vector import Vector vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) ``` -# Comment exploiter des données raster ? +### Comment exploiter des données raster ? On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : @@ -74,7 +116,7 @@ raster = Raster.from_parameters( ``` -## Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? +### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` @@ -153,7 +195,7 @@ levels = pyramid.get_levels(bottom_level, top_level) } ``` -## Cas d'usage simple : exemple avec des données ALTI +### Cas d'usage simple : exemple avec des données ALTI ```sh myusername@pcname:~$ python3 data_tilesmatrix_launcher.py @@ -168,7 +210,7 @@ nombre de tuiles en largeur par slab 21 nombre de tuiles en hauteur par slab : 29 ``` -## Comment obtenir ces résultats ? +### Comment obtenir ces résultats ? ```py #!/usr/bin/env python3 @@ -202,7 +244,7 @@ data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) print(data_raster) ``` -## Cas d'usage simple avec le TileMatrixSet "PM": +### Cas d'usage simple avec le TileMatrixSet "PM": emplacement du bucket de stockage : ```s3://tilematrixsets/PM.json``` @@ -253,7 +295,7 @@ voici une partie de sa structure en objet json pour le tms ```PM```: } ``` -## Exploitation des données d'un fichier JSON d'un tilematrixset exemple : PM.json +### Exploitation des données d'un fichier JSON d'un tilematrixset exemple : PM.json ```py #!/usr/bin/env python3 @@ -292,7 +334,7 @@ except Exception as exc : print (exc) ``` -## Exemple de style du projet rok4 : +### Exemple de style du projet rok4 : * Exemple du style : la **montagne palette** parmi les **onze styles** stockés sur le bucket de stockage s3 : diff --git a/README.md b/README.md index ced630c..ffd6243 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,6 @@ Installations système requises : * debian : `apt install python3-rados python3-gdal` -Depuis [PyPI](https://pypi.org/project/rok4/) : `pip install rok4` - -Depuis [GitHub](https://github.com/rok4/core-python/releases/) : `pip install https://github.com/rok4/core-python/releases/download/x.y.z/rok4-x.y.z-py3-none-any.whl` - Puis passer en mode superutilisateur pour taper cette ligne de commande et installer l'environnement virtuel de python : ```sh sudo apt install python3.10-venv @@ -25,6 +21,10 @@ source .venv/bin/activate L'environnement d'exécution doit avoir accès aux librairies système. Dans le cas d'une utilisation au sein d'un environnement python, précisez bien à la création `python3 -m venv --system-site-packages .venv`. +Depuis [PyPI](https://pypi.org/project/rok4/) : `pip install rok4` + +Depuis [GitHub](https://github.com/rok4/core-python/releases/) : `pip install https://github.com/rok4/core-python/releases/download/x.y.z/rok4-x.y.z-py3-none-any.whl` + ## Utiliser la librairie En dehors du dépôt `core-python`, tapez les ligne de commande suivantes dans un fichier shell `envvar.sh` contenant l'export de toutes les @@ -38,69 +38,20 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` - -### Comment lire une tuile de pyramide de données raster ? - -* On doit passer le bucket s3 de stockage exemple : ```"s3://pyramids/ALTI.json"``` en paramètre d'entrée de la méthode de classe ```from_descriptor()``` appliquée à la classe ```Pyramid()``` tel que : - -```py - # descriptor de la pyramide ALTI - pyr_alti_descriptor = Pyramid.from_descriptor("s3://pyramids/ALTI.json") -``` - -* Si l'on veut obtenir les indices d'une tuile de pyramide raster, on utilise la fonction ```get_tiles_indices(x_point, y_point, pyramid_level,srs_coords)``` - -```py -level, col, row, pcol, prow = pyr_alti_descriptor.get_tile_indices(16, 16, "0", srs = "IGNF:LAMB93") -``` - -où : -* pcol : indice de colonne de pixels à partir des coordonnées du point, -* prow : indice de rangée de pixels à partir des coordonnées du point, -* level : niveau de la tuile, -* col : colonne de la tuile, -* row : rangée de la tuile. - - -* Si l'on veut récupérer les données raster d'une tuile de Pyramide : -```py -data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) -``` -![ROK4 pyramide ALTI](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#cas-dusage-simple--exemple-avec-des-donn%C3%A9es-alti) - -### Comment lire une tuile de pyramide de données vecteur ? - -* Même principe qu'avec le cas RASTER, si l'on veut récupérer les données vecteur d'une tuile de Pyramide : - -* Cas d'usage : données VECTEUR : pyramide LIMITES ADMINISTRATIVES -```py -pyramid_vector = Pyramid.from_descriptor("s3://pyramids/LIMADM.json") -level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, tile_row) -data_vector = pyramid.get_tile_data_vector(level, col, row) -``` - -![ROK4 pyramide VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) - ### Comment définit-on une matrice de tuiles à partir des niveaux de jeux de matrice de tuile ? On utilise la classe ```TileMatrixSet()``` avec laquelle on instancie un objet lié à cette classe, à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple -![ROK4 TMS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#cas-dusage-simple-avec-le-tilematrixset-pm) +![ROK4 TMS](./HOWTO.md#cas-dusage-simple-avec-le-tilematrixset-pm) On peut ainsi aisément accéder : - * à son identifiant, - * à son chemin, - * aux coordonnées de l'origine X et Y du point, - * à la résolution (taille de la cellule), - * à la taille de la tuile en largeur et et en hauteur, - * à la taille de la matrice en largeur et en hauteur. On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction @@ -109,69 +60,16 @@ max) On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction ```point_to_indices(x, y)``` -![ROK4 EXPLOITATION JSON TMS](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exploitation-des-donn%C3%A9es-dun-fichier-json-dun-tilematrixset-exemple--pmjson) +![ROK4 EXPLOITATION JSON TMS](./HOWTO.md#exploitation-des-donn%C3%A9es-dun-fichier-json-dun-tilematrixset-exemple--pmjson) ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? -![ROK4 STOCKAGE BUCKET](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-d%C3%A9finir-le-stockage-de-tous-les-buckets-du-projet-rok4-sur-le-bucket-s3-) - -### Descripteur des couches des "layers" : - -* elle est définie par son nom technique, - -* la liste des chemins de la pyramide utilisée, - -* la grille utilisée, - -* les mots-clefs, - -* les niveaux de pyramide utilisés, - -* le meilleur niveau des pyramides utilisés, - -* l'interpolation pour utiliser le ré-échantillonnage, - -* les données de la boundary box avec le système de coordonnées du TMS, +![ROK4 STOCKAGE BUCKET](./HOWTO.md#comment-d%C3%A9finir-le-stockage-de-tous-les-buckets-du-projet-rok4-sur-le-bucket-s3-) -* les niveaux extrêmes de la couche, - -* le titre de la couche, - -* l'abstraction de la couche, - -* les identifiants des styles autorisés pour la couche. - -* Cas d'usage couche BDORTHO : - -![ROK4 LAYER DESCRIPTOR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#descripteur-de-couches-des-layers-) ### Comment définir un style ? -Le projet rok4 comportent onze styles qui sont les suivants: - -* aspect, - -* blanc, - -* epandage, - -* estompage, - -* hypso, - -* inspire, - -* montagne_palette, - -* montagne, - -* normal, - -* orange, - -* pente. - Pour la palette des couleurs, on a les 4 canaux: rouge, bleu, vert et alpha. L'objet Style contient la palette à créer. @@ -187,49 +85,35 @@ Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la d'exagération de la pente, et des valeurs flag pour l'estompage. Pour la légende du style, elle contient : - * la légende et l'url de l'image, - * la hauteur et la largeur du pixel de l'image, - * l'échelle minimale et maximale pour laquelle la légende est appliquée. -![ROK4 STYLE](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#exemple-de-style-du-projet-rok4-) - +![ROK4 STYLE](./HOWTO.md#exemple-de-style-du-projet-rok4-) ### Comment définir des données VECTEUR ? * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), - * le chemin d'accès au fichier/objet, - * csv : le dictionnaire des paramètres CSV : - -srs : système de référence spatiale de la géométrie, - -column_x : le champ de coordonnée X - -column_y : le champ de coordonnée Y - -column_wkt : le champ du WKT(Well Known Text) de la géométrie * A partir des paramètres : - * le chemin d'accès au fichier/objet, - * bbox : le rectangle de la boundary box dans la projection des données - * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs -![ROK4 DATA VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) +![ROK4 DATA VECTEUR](./HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) ### Comment définir des données RASTER et une structure décrivant un jeu de données RASTER ? On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : * à partir du descriptor ```"file:///data/images/descriptor.json"``` - * ou bien à partir d'une liste d'images et de code srs ```( path="file:///data/SC1000.list", srs="EPSG:3857" @@ -237,29 +121,20 @@ On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données On part de la classe 'Raster()' qui définit des données raster : - * à partir d'informations d'un fichier stocké en image TIFF ```file:///data/SC1000/0040_6150_L93.tif``` - * à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF ```file:///data/SC1000/_0040_6150_L93.tif``` couplée à un masque d'image TIFF ```file:///data/SC1000/0040_6150_L93.msk``` Ces deux méthodologies permettent de retourner un sortie les éléments suivants décrivant le jeu de données raster : - * chemin d'accès au fichier/objet (ex: file:///path/to/image.tif or s3://bucket/image.tif) - * nombre de bandes colorées, - * la boundary box (le rectangle), - * les dimensions de l'image en pixel, - * le format numérique des valeurs des couleurs, - * le chemin d'accès au masque associé, - * l'extension du masque et du fichier au format TIFF. (ex: ```file:///path/to/image.msk``` or ```s3://bucket/image.msk```) -![ROK4 RASTERSET](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) +![ROK4 RASTERSET](./HOWTO.md#comment-exploiter-des-donn%C3%A9es-raster-) Les variables d'environnement suivantes peuvent être nécessaires, par module : From 611477795bc7e1c55bdd765ab137ec186e07ac28 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 13 May 2025 13:59:31 +0200 Subject: [PATCH 089/108] =?UTF-8?q?HOWTO.md=20:=20premi=C3=A8res=20correct?= =?UTF-8?q?ions=20suite=20retour=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 00de1b2..d6e29c7 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,3 +1,5 @@ +## Exemple de cas d'utilisations des librairies du projet ROK4 + ### Comment lire une tuile de pyramide de données raster ? * On doit passer le bucket s3 de stockage exemple : ```"s3://pyramids/ALTI.json"``` en paramètre d'entrée de la méthode de classe ```from_descriptor()``` appliquée à la classe ```Pyramid()``` tel que : @@ -25,7 +27,7 @@ où : ```py data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) ``` -![ROK4 pyramide ALTI](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#cas-dusage-simple--exemple-avec-des-donn%C3%A9es-alti) +![ROK4 pyramide ALTI](./HOWTO.md#cas-dusage-simple--exemple-avec-des-donn%C3%A9es-alti) ### Comment lire une tuile de pyramide de données vecteur ? @@ -38,7 +40,7 @@ level, col, row, pcol, prow = pyramid.get_tile_indices(tile_level, tile_column, data_vector = pyramid.get_tile_data_vector(level, col, row) ``` -![ROK4 pyramide VECTEUR](https://github.com/rok4/core-python/blob/feature/doc-new-users/HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) +![ROK4 pyramide VECTEUR](./HOWTO.md#comment-exploiter-des-donn%C3%A9es-vecteur-) ### Comment exploiter des données vecteur ? @@ -51,9 +53,9 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) ```py from rok4.vector import Vector -vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") -vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) -vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) +vector = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp") +vector_csv1 = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) +vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) ``` * A partir des paramètres comme suit : @@ -66,7 +68,7 @@ vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delim ```py from rok4.vector import Vector -vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) +vector = Vector.from_parameters("https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) ``` ### Comment exploiter des données raster ? @@ -120,26 +122,17 @@ raster = Raster.from_parameters( => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` -```list.txt``` contient tous les noms des buckets de stockage des couches sous forme d'une liste : - -```txt -s3://layers/bdortho.json -s3://layers/alti.json -s3://layers/limadm.json -s3://layers/pente.json -s3://layers/bdparcellaire.json -``` - * Pour obtenir le niveau le plus bas et le niveau le plus haut des pyramides de tuile à partir du descriptor: ```py from rok4.pyramid import Pyramid from rok4.storage import get_data_str, get_infos_from_path, put_data_str from rok4.utils import reproject_bbox pyramid = Pyramid.from_descriptor(p["path"]) -data = json.loads(get_data_str(descriptor)) storage_type, path, root, base_name = get_infos_from_path(descriptor) -bottom_level = p.get("bottom_level", None) -top_level = p.get("top_level", None) +pyramids = [{"pyramid1": pyramid1}, {"pyramid2": pyramid2}, {"pyramid3": pyramid3}, {"pyramid4": pyramid4}, {"pyramid5": pyramid5}] +for p in pyramids : + bottom_level = p.get("bottom_level", None) + top_level = p.get("top_level", None) levels = pyramid.get_levels(bottom_level, top_level) ``` From d9358bcf82d7cd3da367672eece88b07e844aae0 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 13 May 2025 14:39:36 +0200 Subject: [PATCH 090/108] =?UTF-8?q?HOWTO.md=20&=20layer.py=20:=20correctio?= =?UTF-8?q?ns=20suite=20retour=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 57 ----------------------------------------------- src/rok4/layer.py | 49 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 57 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index d6e29c7..515b029 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -46,9 +46,7 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) ### Comment exploiter des données vecteur ? * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage) comme suit : - * le chemin d'accès au fichier/objet, - * csv : le dictionnaire des paramètres CSV. ```py @@ -59,11 +57,8 @@ vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop ``` * A partir des paramètres comme suit : - * le chemin d'accès au fichier/objet, - * bbox : le rectangle de la boundary box dans la projection des données, - * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs. ```py @@ -136,58 +131,6 @@ for p in pyramids : levels = pyramid.get_levels(bottom_level, top_level) ``` -* Ci-jointe un exemple de sa structure en objet json du descripteur de couche BDORTHO : - -```json -{ - "title": "Photographies aériennes", - "abstract": "Données BD Ortho", - "keywords": - [ - "Ortho-photographies", - "Données RGB" - ], - "pyramids": - [ - { - "bottom_level": "15", - "top_level": "0", - "path": "s3://pyramids/BDORTHO.json" - } - ], - "resampling": "bicubic", - "styles": - [ - "normal" - ], - "extra_crs": - [ - "EPSG:4559" - ], - "extra_tilematrixsets": - [ - "4326", - "UTM20W84MART_2.5m" - ], - "wms": - { - "enabled": true - }, - "wmts": - { - "enabled": true - }, - "tms": - { - "enabled": true - }, - "tiles": - { - "enabled": true - } -} -``` - ### Cas d'usage simple : exemple avec des données ALTI ```sh diff --git a/src/rok4/layer.py b/src/rok4/layer.py index c6c21ed..07ab570 100644 --- a/src/rok4/layer.py +++ b/src/rok4/layer.py @@ -53,6 +53,55 @@ def from_descriptor(cls, descriptor: str) -> "Layer": Returns: Layer: a Layer instance + + Example : + * Ci-jointe un exemple de sa structure en objet json du descripteur de couche BDORTHO : + + ```json + { + "title": "Photographies aériennes", + "abstract": "Données BD Ortho", + "keywords": + [ + "Ortho-photographies", + "Données RGB" + ], + "pyramids": + [ + { + "bottom_level": "15", + "top_level": "0", + "path": "s3://pyramids/BDORTHO.json" + } + ], + "resampling": "bicubic", + "styles": + [ + "normal" + ], + "extra_crs": + [ + "EPSG:4559" + ], + "extra_tilematrixsets":["4326","UTM20W84MART_2.5m"], + "wms": + { + "enabled": true + }, + "wmts": + { + "enabled": true + }, + "tms": + { + "enabled": true + }, + "tiles": + { + "enabled": true + } + } + ``` """ try: data = json.loads(get_data_str(descriptor)) From 5e068bb537e0b6260af0379335aea7f2057ca803 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 13 May 2025 14:42:20 +0200 Subject: [PATCH 091/108] HOWTO.md : orthographe --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 515b029..8ce7986 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,4 +1,4 @@ -## Exemple de cas d'utilisations des librairies du projet ROK4 +## Exemples de cas d'utilisations des librairies du projet ROK4 ### Comment lire une tuile de pyramide de données raster ? From 8e52433c5874a57f6a163838e971293c355c1619 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Tue, 13 May 2025 16:22:01 +0200 Subject: [PATCH 092/108] README.md : suppression des parties 'tms' et 'styles' car inutiles ici --- README.md | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) diff --git a/README.md b/README.md index ffd6243..e8ffb7e 100644 --- a/README.md +++ b/README.md @@ -38,60 +38,12 @@ export ROK4_S3_SECRETKEY=rok4S3storage export ROK4_S3_URL=http://localhost:9000 ``` -### Comment définit-on une matrice de tuiles à partir des niveaux de jeux de matrice de tuile ? - -On utilise la classe ```TileMatrixSet()``` avec laquelle on instancie un objet lié à cette classe, - -à partir du bucket de stockage ```s3://tilematrixsets/PM.json``` par exemple - -![ROK4 TMS](./HOWTO.md#cas-dusage-simple-avec-le-tilematrixset-pm) - -On peut ainsi aisément accéder : -* à son identifiant, -* à son chemin, -* aux coordonnées de l'origine X et Y du point, -* à la résolution (taille de la cellule), -* à la taille de la tuile en largeur et et en hauteur, -* à la taille de la matrice en largeur et en hauteur. - -On peut récupérer aussi l'emprise d'une boundary box avec les extrémités des coordonnées de rangées et de colonnes des tuiles à l'aide la fonction -```bbox_to_tiles(bounding box (xmin, ymin, xmax, ymax)``` dans le système de coordonnées du TMS c'est-à-dire longitude min, max et latitude min et -max) - -On peut aussi récupérer dans un tuple les indices de la tuile et des pixels de la pyramide à partir des coordonnées des points avec la fonction ```point_to_indices(x, y)``` - -![ROK4 EXPLOITATION JSON TMS](./HOWTO.md#exploitation-des-donn%C3%A9es-dun-fichier-json-dun-tilematrixset-exemple--pmjson) - ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? ![ROK4 STOCKAGE BUCKET](./HOWTO.md#comment-d%C3%A9finir-le-stockage-de-tous-les-buckets-du-projet-rok4-sur-le-bucket-s3-) -### Comment définir un style ? - -Pour la palette des couleurs, on a les 4 canaux: rouge, bleu, vert et alpha. - -L'objet Style contient la palette à créer. - -Les paramètres de pente contiennent une valeur maximale de pente et des valeurs "flag" ou nodata "9999". - -Les paramètres d'exposition contiennent des paramètres de valeur de pente pour laquelle l'exposition est calculée, le nom de - -l'algorithme de calcul de la pente. - -Les paramètres d'estompage contiennnet les valeurs azimuthales du soleil et la position zénithale du Soleil en degrés, le facteur - -d'exagération de la pente, et des valeurs flag pour l'estompage. - -Pour la légende du style, elle contient : -* la légende et l'url de l'image, -* la hauteur et la largeur du pixel de l'image, -* l'échelle minimale et maximale pour laquelle la légende est appliquée. - -![ROK4 STYLE](./HOWTO.md#exemple-de-style-du-projet-rok4-) - - ### Comment définir des données VECTEUR ? * A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage), From 0a09acb905844b5d3dd922a6b2631d83eff4fcf5 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Wed, 14 May 2025 08:42:52 +0200 Subject: [PATCH 093/108] =?UTF-8?q?HOWTO.md=20:=20suite=20corrections=20su?= =?UTF-8?q?ite=20retour=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 8ce7986..d1e2863 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -45,9 +45,9 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) ### Comment exploiter des données vecteur ? -* A partir d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage) comme suit : - * le chemin d'accès au fichier/objet, - * csv : le dictionnaire des paramètres CSV. +* A partir du chargement d'un fichier vecteur (shapefile, csv, GeoJSON ou Geopackage) comme suit : + * le chemin d'accès au fichier/objet, + * csv : le dictionnaire des paramètres CSV. ```py from rok4.vector import Vector @@ -57,9 +57,9 @@ vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop ``` * A partir des paramètres comme suit : - * le chemin d'accès au fichier/objet, - * bbox : le rectangle de la boundary box dans la projection des données, - * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs. + * le chemin d'accès au fichier/objet, + * bbox : le rectangle de la boundary box dans la projection des données, + * layers : le nom des couches vecteurs, leur nombre d'objets avec leurs attributs. ```py from rok4.vector import Vector @@ -70,7 +70,7 @@ vector = Vector.from_parameters("https://github.com/rok4/core-python/blob/develo On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données raster : -* à partir du descriptor tel que : +* à partir du descriptor tel que : ```py from rok4.raster import RasterSet @@ -79,7 +79,7 @@ raster_set = RasterSet.from_descriptor( ) ``` -* ou bien à partir d'une liste d'images et de code srs tel que : +* ou bien à partir d'une liste d'images et de code srs tel que : ```py from rok4.raster import RasterSet @@ -91,14 +91,14 @@ raster_set = RasterSet.from_list( On part de la classe 'Raster()' qui définit des données raster : -* à partir d'informations d'un fichier stocké en image TIFF tel que : +* à partir d'informations d'un fichier stocké en image TIFF tel que : ```py from rok4.raster import Raster raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") ``` -* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : +* à partir d'un chargement d'informations à partir de paramètres liées à une image TIFF couplée à un masque d'image TIFF tel que : ```py from rok4.raster import Raster @@ -117,15 +117,16 @@ raster = Raster.from_parameters( => exemple pour la BDORTHO : ```s3://layers/bdortho.json``` -* Pour obtenir le niveau le plus bas et le niveau le plus haut des pyramides de tuile à partir du descriptor: +* Pour obtenir le niveau le plus bas et le niveau le plus haut des pyramides de tuile à partir du descriptor: ```py from rok4.pyramid import Pyramid from rok4.storage import get_data_str, get_infos_from_path, put_data_str from rok4.utils import reproject_bbox -pyramid = Pyramid.from_descriptor(p["path"]) + storage_type, path, root, base_name = get_infos_from_path(descriptor) pyramids = [{"pyramid1": pyramid1}, {"pyramid2": pyramid2}, {"pyramid3": pyramid3}, {"pyramid4": pyramid4}, {"pyramid5": pyramid5}] for p in pyramids : + pyramid = Pyramid.from_descriptor(p["path"]) bottom_level = p.get("bottom_level", None) top_level = p.get("top_level", None) levels = pyramid.get_levels(bottom_level, top_level) From 1922aef7faf0154719684f6d6287be6e07e7adf9 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 09:36:28 +0200 Subject: [PATCH 094/108] HOWTO.md : correction exemple d'utilisation avec une liste de dictionnaire --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index d1e2863..d9ef4b9 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -124,7 +124,7 @@ from rok4.storage import get_data_str, get_infos_from_path, put_data_str from rok4.utils import reproject_bbox storage_type, path, root, base_name = get_infos_from_path(descriptor) -pyramids = [{"pyramid1": pyramid1}, {"pyramid2": pyramid2}, {"pyramid3": pyramid3}, {"pyramid4": pyramid4}, {"pyramid5": pyramid5}] +pyramids = [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/BDORTHO.json"}] for p in pyramids : pyramid = Pyramid.from_descriptor(p["path"]) bottom_level = p.get("bottom_level", None) From abbd8e868588758b2d7ebb36725ebf4bfc78ca24 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 11:39:57 +0200 Subject: [PATCH 095/108] =?UTF-8?q?HOWTO.md=20:=20esth=C3=A9tique=20suite?= =?UTF-8?q?=20remarques=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index d9ef4b9..8fd10af 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -51,6 +51,7 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) ```py from rok4.vector import Vector + vector = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp") vector_csv1 = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) @@ -63,6 +64,7 @@ vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop ```py from rok4.vector import Vector + vector = Vector.from_parameters("https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) ``` @@ -74,15 +76,17 @@ On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données ```py from rok4.raster import RasterSet + raster_set = RasterSet.from_descriptor( "file:///data/images/descriptor.json" - ) +) ``` * ou bien à partir d'une liste d'images et de code srs tel que : ```py from rok4.raster import RasterSet + raster_set = RasterSet.from_list( path="file:///data/SC1000.list", srs="EPSG:3857" @@ -95,6 +99,7 @@ On part de la classe 'Raster()' qui définit des données raster : ```py from rok4.raster import Raster + raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") ``` @@ -102,6 +107,7 @@ raster = Raster.from_file("file:///data/SC1000/0040_6150_L93.tif") ```py from rok4.raster import Raster + raster = Raster.from_parameters( path="file:///data/SC1000/_0040_6150_L93.tif", mask="file:///data/SC1000/0040_6150_L93.msk", @@ -240,6 +246,7 @@ import json # import des packages de rok4 from rok4.enums import PyramidType, SlabType, StorageType, ColorFormat from rok4.tile_matrix_set import TileMatrix, TileMatrixSet + try: tms = TileMatrixSet("PM") print(f"le nom du tms : {tms.name}") From 639a8d46fc1e1eabad81975a4f9ca59401b306dd Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 11:43:10 +0200 Subject: [PATCH 096/108] =?UTF-8?q?HOWTO.md=20:=20correction=20suite=20rem?= =?UTF-8?q?arque=20de=20Th=C3=A9o=20sur=20l'export=20des=20variables=20d'e?= =?UTF-8?q?nvironnement=20avant=20d'ex=C3=A9cuter=20le=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index 8fd10af..cf96657 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,5 +1,14 @@ ## Exemples de cas d'utilisations des librairies du projet ROK4 +tapez les ligne de commande suivantes afin d'exporter toutes les variables d'environnement du projet `ROK4`: + +```sh +export ROK4_TMS_DIRECTORY=s3://tilematrixsets +export ROK4_S3_KEY=rok4 +export ROK4_S3_SECRETKEY=rok4S3storage +export ROK4_S3_URL=http://localhost:9000 +``` + ### Comment lire une tuile de pyramide de données raster ? * On doit passer le bucket s3 de stockage exemple : ```"s3://pyramids/ALTI.json"``` en paramètre d'entrée de la méthode de classe ```from_descriptor()``` appliquée à la classe ```Pyramid()``` tel que : From d0116fb6246422bc1451e7233954097720391a48 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 11:47:46 +0200 Subject: [PATCH 097/108] =?UTF-8?q?HOWTO.md=20:=20esth=C3=A9tique=20suite?= =?UTF-8?q?=20remarque=20de=20Th=C3=A9o=20sur=20l'indentation=20du=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index cf96657..917f507 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -62,8 +62,14 @@ data_vector = pyramid.get_tile_data_vector(level, col, row) from rok4.vector import Vector vector = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp") -vector_csv1 = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) -vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) +vector_csv1 = Vector.from_file( + "https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector.csv", + csv={"delimiter":";", "column_x":"x", "column_y":"y"} +) +vector_csv2 = Vector.from_file( + "https://github.com/rok4/core-python/blob/develop/tests/fixtures/vector2.csv", + csv={"delimiter":";", "column_wkt":"WKT"} +) ``` * A partir des paramètres comme suit : @@ -74,7 +80,12 @@ vector_csv2 = Vector.from_file("https://github.com/rok4/core-python/blob/develop ```py from rok4.vector import Vector -vector = Vector.from_parameters("https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) +vector = Vector.from_parameters( + "https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp", + (1,2,3,4), + [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')] + )] +) ``` ### Comment exploiter des données raster ? @@ -139,7 +150,11 @@ from rok4.storage import get_data_str, get_infos_from_path, put_data_str from rok4.utils import reproject_bbox storage_type, path, root, base_name = get_infos_from_path(descriptor) -pyramids = [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/BDORTHO.json"}] +pyramids = [{ + "bottom_level": "13", + "top_level": "0", + "path": "s3://pyramids/BDORTHO.json" + }] for p in pyramids : pyramid = Pyramid.from_descriptor(p["path"]) bottom_level = p.get("bottom_level", None) From 38ce70af36d53268d511464354a6b9af77482db4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 09:47:55 +0000 Subject: [PATCH 098/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 917f507..573f080 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -81,8 +81,8 @@ vector_csv2 = Vector.from_file( from rok4.vector import Vector vector = Vector.from_parameters( - "https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp", - (1,2,3,4), + "https://github.com/rok4/core-python/blob/develop/tests/fixtures/ARRONDISSEMENT.shp", + (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')] )] ) @@ -151,8 +151,8 @@ from rok4.utils import reproject_bbox storage_type, path, root, base_name = get_infos_from_path(descriptor) pyramids = [{ - "bottom_level": "13", - "top_level": "0", + "bottom_level": "13", + "top_level": "0", "path": "s3://pyramids/BDORTHO.json" }] for p in pyramids : From 936a94bca889bad6a7039e3a28b2a548dcd82b0c Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 15:29:40 +0200 Subject: [PATCH 099/108] =?UTF-8?q?HOWTO.md=20:=20correction=20esth=C3=A9t?= =?UTF-8?q?ique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 917f507..f2cc61b 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -110,7 +110,7 @@ from rok4.raster import RasterSet raster_set = RasterSet.from_list( path="file:///data/SC1000.list", srs="EPSG:3857" - ) +) ``` On part de la classe 'Raster()' qui définit des données raster : From fa69d102a38662683cb53d2be09b17f034b9e0f4 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 15:59:44 +0200 Subject: [PATCH 100/108] HOWTO.md : vocabulaire --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 24e0541..3ee8e7f 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,4 +1,4 @@ -## Exemples de cas d'utilisations des librairies du projet ROK4 +## Exemples de cas d'utilisations des librairies génériques du projet ROK4 tapez les ligne de commande suivantes afin d'exporter toutes les variables d'environnement du projet `ROK4`: From ea6a34b3bf2440a5c065a7ec4aca42ece4972df5 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 07:34:46 +0200 Subject: [PATCH 101/108] HOWTO.md : indentation --- HOWTO.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 3ee8e7f..6c0b857 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -98,7 +98,7 @@ On part de la classe 'RasterSet()' qui décrit la structure d'un jeu de données from rok4.raster import RasterSet raster_set = RasterSet.from_descriptor( - "file:///data/images/descriptor.json" + "file:///data/images/descriptor.json" ) ``` @@ -108,8 +108,8 @@ raster_set = RasterSet.from_descriptor( from rok4.raster import RasterSet raster_set = RasterSet.from_list( - path="file:///data/SC1000.list", - srs="EPSG:3857" + path="file:///data/SC1000.list", + srs="EPSG:3857" ) ``` From d591cd3ca5d32cb8f217e6d8285f86e3f56a5202 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 07:58:10 +0200 Subject: [PATCH 102/108] HOWTO.md : mettre le code avant l'exemple d'utilisation --- HOWTO.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index 6c0b857..32e245a 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -141,8 +141,6 @@ raster = Raster.from_parameters( ### Comment définir le stockage de tous les buckets du projet rok4 sur le bucket s3 ? -=> exemple pour la BDORTHO : ```s3://layers/bdortho.json``` - * Pour obtenir le niveau le plus bas et le niveau le plus haut des pyramides de tuile à partir du descriptor: ```py from rok4.pyramid import Pyramid @@ -162,6 +160,8 @@ for p in pyramids : levels = pyramid.get_levels(bottom_level, top_level) ``` +=> exemple pour la BDORTHO : ```s3://layers/bdortho.json``` + ### Cas d'usage simple : exemple avec des données ALTI ```sh From 4824d57d154836588bfb6cf9d4f5f786f2cf1a18 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 08:03:54 +0200 Subject: [PATCH 103/108] =?UTF-8?q?HOWTO.md=20:=20petite=20pr=C3=A9cision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 32e245a..f8a13fa 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,6 +1,6 @@ ## Exemples de cas d'utilisations des librairies génériques du projet ROK4 -tapez les ligne de commande suivantes afin d'exporter toutes les variables d'environnement du projet `ROK4`: +Pour le chargement d'un tilematrixset par exemple, tapez les ligne de commande suivantes afin d'exporter toutes les variables d'environnement du projet `ROK4`: ```sh export ROK4_TMS_DIRECTORY=s3://tilematrixsets From 299eb8b391f1804940711d1962947f01e18af563 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 10:04:37 +0200 Subject: [PATCH 104/108] =?UTF-8?q?HOWTO.md,=20style.py=20=20:=20=20d?= =?UTF-8?q?=C3=A9placement=20de=20bloc=20dans=20les=20docstring=20de=20con?= =?UTF-8?q?structeur=20de=20style?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 94 +---------------------------------------------- src/rok4/style.py | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 93 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index f8a13fa..a0e516a 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -211,57 +211,6 @@ data_raster = pyr_alti_descriptor.get_tile_data_raster(level, col, row) print(data_raster) ``` -### Cas d'usage simple avec le TileMatrixSet "PM": - -emplacement du bucket de stockage : ```s3://tilematrixsets/PM.json``` - -voici une partie de sa structure en objet json pour le tms ```PM```: - -```json -{ - "tileMatrices" : [ - { - "id" : "0", - "tileWidth" : 256, - "scaleDenominator" : 559082264.028718, - "matrixWidth" : 1, - "cellSize" : 156543.033928041, - "matrixHeight" : 1, - "tileHeight" : 256, - "pointOfOrigin" : [ - -20037508.3427892, - 20037508.3427892 - ] - }, - { - "matrixHeight" : 2, - "pointOfOrigin" : [ - -20037508.3427892, - 20037508.3427892 - ], - "tileHeight" : 256, - "cellSize" : 78271.5169640205, - "scaleDenominator" : 279541132.014359, - "matrixWidth" : 2, - "tileWidth" : 256, - "id" : "1" - }, - { - "cellSize" : 39135.7584820102, - "pointOfOrigin" : [ - -20037508.3427892, - 20037508.3427892 - ], - "tileHeight" : 256, - "matrixHeight" : 4, - "tileWidth" : 256, - "matrixWidth" : 4, - "scaleDenominator" : 139770566.007179, - "id" : "2" - },{},{},... -} -``` - ### Exploitation des données d'un fichier JSON d'un tilematrixset exemple : PM.json ```py @@ -300,45 +249,4 @@ try: except Exception as exc : print (exc) -``` - -### Exemple de style du projet rok4 : - -* Exemple du style : la **montagne palette** parmi les **onze styles** stockés sur le bucket de stockage s3 : - -* Ci-jointe la structure en objet json dont l'emplacement est le suivant ```s3://styles/montagne_palette.json```: - -```json -{ - "identifier": "montagne_palette", - "title": "Pente par paliers standards", - "abstract": "Pente affichée par parlier standard de 30 a 90 degres", - "keywords": ["MNT"], - "legend": { - "format": "image/png", - "url": "http://ign.fr", - "height": 100, - "width": 100, - "min_scale_denominator": 0, - "max_scale_denominator": 30 - }, - "palette": { - "max_value": 91, - "rgb_continuous": true, - "alpha_continuous": true, - "colours": [ - { "value": 0, "red": 255, "green": 255, "blue": 255, "alpha": 0 }, - { "value": 29, "red": 255, "green": 255, "blue": 255, "alpha": 0 }, - { "value": 30, "red": 242, "green": 229, "blue": 0, "alpha": 255 }, - { "value": 34, "red": 242, "green": 229, "blue": 0, "alpha": 255 }, - { "value": 35, "red": 243, "green": 148, "blue": 25, "alpha": 255 }, - { "value": 39, "red": 243, "green": 148, "blue": 25, "alpha": 255 }, - { "value": 40, "red": 225, "green": 0, "blue": 0, "alpha": 255 }, - { "value": 44, "red": 225, "green": 0, "blue": 0, "alpha": 255 }, - { "value": 45, "red": 200, "green": 137, "blue": 187, "alpha": 255 }, - { "value": 90, "red": 200, "green": 137, "blue": 187, "alpha": 255 }, - { "value": 91, "red": 255, "green": 255, "blue": 255, "alpha": 0 } - ] - } -} -``` +``` \ No newline at end of file diff --git a/src/rok4/style.py b/src/rok4/style.py index 0074f1c..2ed4614 100644 --- a/src/rok4/style.py +++ b/src/rok4/style.py @@ -59,6 +59,7 @@ def __init__(self, palette: Dict, style: "Style") -> None: Raises: MissingAttributeError: Attribute is missing in the content Exception: Invalid colour's band + """ try: @@ -423,6 +424,43 @@ def __init__(self, id: str) -> None: FormatError: Provided path is not a well formed JSON MissingAttributeError: Attribute is missing in the content Exception: No colour in the palette or invalid colour + + Exemple du style : la **montagne palette** parmi les **onze styles** stockés sur le bucket de stockage s3 : + + ```json + { + "identifier": "montagne_palette", + "title": "Pente par paliers standards", + "abstract": "Pente affichée par parlier standard de 30 a 90 degres", + "keywords": ["MNT"], + "legend": { + "format": "image/png", + "url": "http://ign.fr", + "height": 100, + "width": 100, + "min_scale_denominator": 0, + "max_scale_denominator": 30 + }, + "palette": { + "max_value": 91, + "rgb_continuous": true, + "alpha_continuous": true, + "colours": [ + { "value": 0, "red": 255, "green": 255, "blue": 255, "alpha": 0 }, + { "value": 29, "red": 255, "green": 255, "blue": 255, "alpha": 0 }, + { "value": 30, "red": 242, "green": 229, "blue": 0, "alpha": 255 }, + { "value": 34, "red": 242, "green": 229, "blue": 0, "alpha": 255 }, + { "value": 35, "red": 243, "green": 148, "blue": 25, "alpha": 255 }, + { "value": 39, "red": 243, "green": 148, "blue": 25, "alpha": 255 }, + { "value": 40, "red": 225, "green": 0, "blue": 0, "alpha": 255 }, + { "value": 44, "red": 225, "green": 0, "blue": 0, "alpha": 255 }, + { "value": 45, "red": 200, "green": 137, "blue": 187, "alpha": 255 }, + { "value": 90, "red": 200, "green": 137, "blue": 187, "alpha": 255 }, + { "value": 91, "red": 255, "green": 255, "blue": 255, "alpha": 0 } + ] + } + } + ``` """ self.id = id From bdd6bdb5e6d13b32514960d1587db378fb1ff0f3 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 10:05:27 +0200 Subject: [PATCH 105/108] =?UTF-8?q?tile=5Fmatrix=5Fset.py=20:=20ajout=20d'?= =?UTF-8?q?un=20exmple=20de=20json=20pour=20un=20tms=20dans=20le=20constru?= =?UTF-8?q?cteur=20de=20la=20classe=20associ=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rok4/tile_matrix_set.py | 51 +++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/rok4/tile_matrix_set.py b/src/rok4/tile_matrix_set.py index f0ac68a..2b57fb8 100644 --- a/src/rok4/tile_matrix_set.py +++ b/src/rok4/tile_matrix_set.py @@ -212,6 +212,57 @@ def __init__(self, name: str) -> None: FileNotFoundError: TMS file or object does not exist FormatError: Provided path is not a well formed JSON MissingAttributeError: Attribute is missing in the content + + Exemple : + + emplacement du bucket de stockage : ```s3://tilematrixsets/PM.json``` + + voici une partie de sa structure en objet json pour le tms ```PM```: + + ```json + { + "tileMatrices" : [ + { + "id" : "0", + "tileWidth" : 256, + "scaleDenominator" : 559082264.028718, + "matrixWidth" : 1, + "cellSize" : 156543.033928041, + "matrixHeight" : 1, + "tileHeight" : 256, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ] + }, + { + "matrixHeight" : 2, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ], + "tileHeight" : 256, + "cellSize" : 78271.5169640205, + "scaleDenominator" : 279541132.014359, + "matrixWidth" : 2, + "tileWidth" : 256, + "id" : "1" + }, + { + "cellSize" : 39135.7584820102, + "pointOfOrigin" : [ + -20037508.3427892, + 20037508.3427892 + ], + "tileHeight" : 256, + "matrixHeight" : 4, + "tileWidth" : 256, + "matrixWidth" : 4, + "scaleDenominator" : 139770566.007179, + "id" : "2" + },{},{},... + } + ``` """ self.name = name From 7624be125fe46b1859b569a53a176236eef3fbc2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 08:05:38 +0000 Subject: [PATCH 106/108] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automat?= =?UTF-8?q?iques=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- src/rok4/style.py | 6 +++--- src/rok4/tile_matrix_set.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index a0e516a..9c88ff0 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -249,4 +249,4 @@ try: except Exception as exc : print (exc) -``` \ No newline at end of file +``` diff --git a/src/rok4/style.py b/src/rok4/style.py index 2ed4614..6e08630 100644 --- a/src/rok4/style.py +++ b/src/rok4/style.py @@ -429,10 +429,10 @@ def __init__(self, id: str) -> None: ```json { - "identifier": "montagne_palette", + "identifier": "montagne_palette", "title": "Pente par paliers standards", - "abstract": "Pente affichée par parlier standard de 30 a 90 degres", - "keywords": ["MNT"], + "abstract": "Pente affichée par parlier standard de 30 a 90 degres", + "keywords": ["MNT"], "legend": { "format": "image/png", "url": "http://ign.fr", diff --git a/src/rok4/tile_matrix_set.py b/src/rok4/tile_matrix_set.py index 2b57fb8..9b2b5ab 100644 --- a/src/rok4/tile_matrix_set.py +++ b/src/rok4/tile_matrix_set.py @@ -212,7 +212,7 @@ def __init__(self, name: str) -> None: FileNotFoundError: TMS file or object does not exist FormatError: Provided path is not a well formed JSON MissingAttributeError: Attribute is missing in the content - + Exemple : emplacement du bucket de stockage : ```s3://tilematrixsets/PM.json``` From 3f909d89140cf00d2a2a6c2c4c2ae2135de523e5 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Wed, 21 May 2025 08:47:42 +0200 Subject: [PATCH 107/108] =?UTF-8?q?pyproject.toml=20:=20ajout=20de=20l'opt?= =?UTF-8?q?ion=20--max-module-depth=20fix=C3=A9=20=C3=A0=202=20pour=20limi?= =?UTF-8?q?ter=20la=20visualisation=20des=20modules=20externes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index da11537..fb1c046 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,7 @@ dependencies = [ [project.optional-dependencies] doc = [ "pdoc3 >= 0.10.0", - "pydeps" + "pydeps --max-module-depth=2 -x" ] dev = [ From 6601873273c3980c7274a3f24c74d00bd2709195 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Wed, 21 May 2025 09:04:57 +0200 Subject: [PATCH 108/108] =?UTF-8?q?pyproject.toml:=20avec=20l'option=20--m?= =?UTF-8?q?ax-bacon=20fix=C3=A9=20=C3=A0=204=20et=20l'option=20cluster?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fb1c046..1ca47e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,7 @@ dependencies = [ [project.optional-dependencies] doc = [ "pdoc3 >= 0.10.0", - "pydeps --max-module-depth=2 -x" + "pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2 --keep-target-cluster" ] dev = [