Matheoia / Plugin-QGIS-Reconstruction-3D-de-batiments

3 stars 0 forks source link

Fusionner deux json en un pour visualiser sur un json deux bâtiments #21

Open Matheoia opened 1 year ago

Matheoia commented 1 year ago

Le but étant de visualiser plusieurs bâtiments et étant donné que Geoflow reconstruit bâtiment par bâtiment, il faut effectivement avoir un moyen de fusionner plusieurs json pour obtenir un grand json qui comporte plusieurs bâtiments.

Pour cela, on a la possibilité de voir à quoi ressemble le json d'un quartier grâce à 3D Bag, par exemple en téléchargeant sur : https://3dbag.nl/en/download?tid=5910

Et c'est en analysant ce json que l'on pourra déplacer certaines parties des deux json en Python pour créer LE json. On se contente dans un premier temps de fusionner deux json ensemble avec des données test.

ArnaudBreillad commented 1 year ago

Dans ce code python, il y a une fonction qui créer des bâtiments en à l'aide de leur footprint (index) Une fois ces bâtiments construit, le code permet de fusionner 2 bâtiments en un seul fichier .json. Le code va lire chaque json et adapter les boundaries. Il va aussi ajouter à chaque point, une translation selon le vecteur "translate" du bâtiment en question. La version du 17/04 n'est pas fonctionnelle, le fichier .json crée ne peut pas s'ouvrir sur ninja.cityjson.org Version du 26/04 est fonctionnelle, l'erreur principale se situait au niveau du renommage des parents et enfants de chaque objet cityjson.

https://github.com/Matheoia/Plugin-QGIS-Reconstruction-3D-de-batiments/blob/dc636a3225814ef6ef8a9c03d786cd3d73a012fc/constr.py

Matheoia commented 1 year ago

@tmuguet, je me permets de te taguer ici pour attirer ton attention sur les invites de commandes que l'on utilise et ce que l'on est arrivé à reconstruire grâce au retour.

Pour répondre à cette issue, il faut d'abord donner dans un premier temps et quelque part une première explication des invites de commande Geoflow. Tout cela est effectivement compréhensible sur https://github.com/geoflow3d/geoflow-bundle. Dans l'invite de commande, on retrouve au moins alors :

ce que l'on obtient si l'on met en globals le geopackage et le nuage de tout un quartier :

image

on a alors ce bout de code : https://github.com/Matheoia/Plugin-QGIS-Reconstruction-3D-de-batiments/blob/9b035ca999ed0ab3d992fb0aded71ae5ee883583/shift.py qui permet le décalage des bâtiments où le bâtiment au sol le plus bas sera la base de hauteur 0 ; voilà le quartier décalé devenu facilement observable sur QGIS : Avec Ninja :

image

Sur QGIS :

image

La première question qui me vient est alors : est ce que LoD 1.3 vous va ? je ne pense pas pouvoir réaliser avec cette flowchart le quartier en 2.2.. dans ce cas il faudrait alors finir ce script fusion.py qui pourrait réaliser la fusion de différents bâtiments LoD2.2

tmuguet commented 1 year ago

@Matheoia excellent! Je ne vais pas pouvoir tester avant au moins ce soir, mais ça a l'air très bien. @benoitblanc si jamais tu veux jeter un oeil 😉 Question bête, en LoD1.x, il n'y a que le 1.3 en sortie? Ou s'il y en a d'autres, est-ce qu'ils fonctionnent aussi? Il faudrait s'assurer de cela avant de passer au LoD2.

Matheoia commented 1 year ago

@tmuguet Avec la flowchart runner.json, il y a aussi le LoD 1.2

Voici une capture de tout l'écran pour y voir plus clair :

image

et le lien vers les fichiers json du quartier : https://github.com/Matheoia/Plugin-QGIS-Reconstruction-3D-de-batiments/tree/Matheo/quartier

Le LoD 2.2 reste donc quand même souhaité ? Si oui, @ArnaudBreillad avait bien commencé un script qui essaie justement de fusionner deux json, je te laisse alors peut-être avec lui pour voir si cela t'intéresserait.

tmuguet commented 1 year ago

Ok top! D'un point de vue utilisateur, je pense qu'il est préférable d'avoir un comportement identique quel que soit le niveau de LoD, donc ça serait bien d'essayer d'avoir le LoD 2 dans un seul fichier également. A regarder aussi si QGIS serait capable de le faire, auquel cas on aurait "juste" à appeler son API pour le faire.

tmuguet commented 1 year ago

En bonus, à faire après #17 et #25