n viewer 3D pour PostGIS |
ntroduction |
Avec la version 2.0 PostGIS est entré dans le monde de la 3D, il est possible de stocker des géométries 3D avec l’ajout de la coordonnée Z dans toutes les géométries existantes et de stocker des géométries volumétriques avec l’introduction de deux nouveaux type :
| |
|
Cela fait déjà un an que la création d’un viewer pour visualiser les géométries 3D de PostGIS me trottait dans la tête suite à un échange avec Claus Nagel et Felix Kunde de virtualcitySYSTEMS à propos de l’outil d’import du format CityGML que j’avais réalisé CityGML vers PostGIS 2.0 , ils m’avaient conseillé alors de me diriger vers le développement d’un viewer 3D. Lorsque récemment j’ai repris contact avec eux pour leur parler de mon développement en cours, ils ont accueilli la nouvelle avec enthousiasme et ont bénéficié de versions beta, ce qui m’a grandement aidé pour mes choix dans la finalisation de mon application.
Aujourd’hui la 3D est de plus en plus présente dans le monde SIG avec le format CityGML et dans le monde de l’architecture avec le format IFC, importer ces formats dans une base de données PosgtgreSQL/PostGIS est une démarche naturelle car cela apporte toute la puissance de traitement des bases de données spatiale pour la gestion de ces données.
Pour le format CityGML la société virtualcitySYSTEMS met à disposition un schéma de base de données Open Source et gratuit pour le stockage et la gestion de ‘3D City Models’. Ce schéma de base de données est le reflet du modèle de données CityGML. Les données peuvent être importées via un outil d’import/export . le lien pour accéder à leur site : http://virtualcitysystems.de/en/solutions.html#3dcitydb |
A ce stade du développement je n’affiche que des géométries de type POLYGON, MULTIPOLYGON, TIN et POLYHEDRALSURFACE. Ce qui permet d’afficher toutes type de géométries volumétriques répondant à cette contrainte. Je vais travailler rapidement sur les autres type de géométrie POINT, LINESTRING… , ce qui fera l’objet d’une nouvelle version de l’application dans les prochaines semaines.
J’ai développé cet outil en C# 2013 avec :
| GDAL - Geospatial Data Abstraction Library | |
| ActiViz .Net | |
| VTK | |
| PostgreSQL Windows | |
| Postgis http://winnie.postgis.net/download/windows/pg92/buildbot/postgis-pg92-binaries-2.2.0devw32.zip http://winnie.postgis.net/download/windows/pg92/buildbot/postgis-pg92-binaries-2.2.0devw64.zip |
Pour l’intégration de données 3D j’ai testé l’outil 3DCityDB-Importer-Exporter http://http://www.3dcitydb.org/3dcitydb/downloads/ qui permet d’importer des fichiers au format CityGML dans une base de données PostgreSQL avec PostGIS (a partir de la version 2.0).
Voici une extraction du document 3DCityDB-v2_0_6-postgis-Tutorial.pdf concernant la partie PostGIS (en anglais ) :
nstallation |
Cliquez sur le lien pg3DViewer_setup.exe pour télécharger le programme d’installation, puis lancer l’exécution. Cliquer sur le bouton Suivant à chaque étape, puis sur le bouton Terminer. |
tilisation |
Avant de commencer à utiliser pg3Dviewer vous devez avoir une base de données PostgreSQL avec la cartouche spatiale PostGIS version 2.0 ou supérieure. Cette base de données doit contenir des données 3D, l’idéal serait que vous ayez créé une base 3DCityDB et importé un ou plusieurs fichiers CityGML. Voici un lien ou vous pourrez télécharger des données CityGML Rotterdam 3D, demandez à notre ami Google de traduire la page cela peut aider, cela permet de découvrir un lien sur le site permettant de télécharger un fichier pdf contenant une carte avec tous les nom des quartiers téléchargeables http://www.rotterdam.nl/GW/Images/Gemeentewerken%20Home/Landmeten/overzicht%20buurten.pdf , il ne vous reste plus qu’a choisir les quartiers dans la liste sous le lien.
Vous pouvez quand même faire les premiers tests sans avoir téléchargé de données.
Double cliquez sur l’icone créé par le programme d’installation sur le bureau pour lancer l’application. |
Connecter vous à votre base de données 3D
Visualiser une géométrie de type POLYHEDRALSURFACE
Avant de continuer une petite explication sur la requête utilisé précédemment : SELECT st_force_collection( | Comme vous avez du le remarquer la fonction ST_GeomFromText est encadré par la fonction ST_Force_Collection. Pourquoi rajouter cette fonction. Si vous exécuter cette requête sous pgAdmin III en encadrant le tout par ST_AsText vous obtenez comme résultat ceci : "GEOMETRYCOLLECTION Z ( POLYGON Z ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)), POLYGON Z ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)), POLYGON Z ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)), POLYGON Z ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)), POLYGON Z ((1 0 0,1 1 0,1 1 1,1 0 1,1 0 0)), POLYGON Z ((1 1 0,0 1 0,0 1 1,1 1 1,1 1 0)))" Nous sommes passé d’une géométrie de type POLYHEDRALSURFACE à une géométrie de type GEOMETRYCOLLECTION Z contenant des POLYGON Z, mais rappelez vous une géométrie de type POLYHEDRALSURFACE est aussi une collection de POLYGON donc jusque la tout va bien. Revenons à la question initiale pourquoi utiliser la fonction ST_Force_Collection, tout simplement parce la librairie GDAL que j’utilise dans mon développement ne reconnait pas encore les géométries de type POLYHDERALSURFACE. Cette astuce permet de contourner la limitation présente. |
Visualiser une géométrie de type TIN
La requête utilisée nécessite une explication : WITH res AS | Comme pour la requête concernant une géométrie de type POLYHEDRALSURFACE, les géométries de type TIN ne sont pas encore reconnues par la librairie GDAL. Pour rappel une géométrie de type TIN est aussi une collection de TRIANGLE que ne reconnait pas la librairie GDAL ce qui explique la requête légèrement plus complexe. Si vous exécutez la requête suivante sous PgAdmin III : SELECT St_AsText(st_force_collection( Vous obtenez ceci : "GEOMETRYCOLLECTION Z ( Que ne reconnait pas la librairie GDAL, ce qui explique la première partie de la requête qui recrée des géométries de type POLYGON à partir des géométries de type TRIANGLE. La seconde partie de la requête (ou l’on retrouve la fonction ST_Force_Collection) recrée une GEOMETRYCOLLECTION Z contenant des POLYGON Z donc interprétable par la librairie GDAL. Pour simplifier les requêtes sur des géométries de type TIN, la création d’une fonction opérant la transformation me parait indispensable. |
Fonction passant d’une géométrie de type TIN à une géométrie de type GEOMETRYCOLLECTION Z
-- Function: ST_TinToGeomCollection(geometry, INTEGER) -- DROP FUNCTION ST_TinToGeomCollection(geometry, INTEGER); CREATE OR REPLACE FUNCTION ST_TinToGeomCollection(geometry, integer) |
Vous allez créer la fonction dans votre base de données 3D :
- Copier le contenu du cadre ci-dessus et collez dans la fenêtre de requêtes de PgAdmin III
- lancez l’exécution, la fonction est créée.
la requête pour l’affichage de géométrie de type TIN devient alors:
select st_astext(ST_TinToGeomCollection(
st_geomFromText
(
'TIN(
((0 0 0, 1 0 0, 0 1 0, 0 0 0)),
((0 0 0, 1 0 0, 0 0 1, 0 0 0)),
((0 0 0, 0 0 1, 0 1 0, 0 0 0)),
((0 0 1, 1 0 0, 0 1 0, 0 0 1))
)'
) ,0))
le second paramètre de la fonction ST_TinToGeomCollection étant le SRID de la géométrie, 4326 par exemple si vous êtes dans un système de coordonnées WGS84. Si vous ne le connaissez pas saisissez la valeur 0.
Affichage de données dans une base 3DCityDB contenant des données au format CityGML
Interface
onclusion. |
Ce billet met à votre disposition un outil permettant de visualiser des géométries 3D stockées dans une base de données PostGIS 2.0 ou supérieure. Il me reste à implémenter l’affichage des points et des lignes.
Toutes suggestions d’amélioration seront les bienvenues, j’attends vos retours.
Bonjour,
RépondreSupprimerPlutôt que multiplier les efforts pour implémenter des outils similaires, ce serait certainement une très bonne idée d unir nos forces autour d'une solution de visualisation open-source dédiée a postgis 3d.
Nous avons déjà effectué un travail sur horao, un client lourd dédié a cela, qui est intégrable également dans QGIS.
Nous travaillons actuellement sur un viewer pour le web.
Nous sommes bien sur ouverts a toute collaboration, les sources de nos développements sont sur le github Oslandia.
Cdt,
Vincent Picavet, pour l équipe de devs Oslandia.
Bonjour,
SupprimerPourquoi pas, nous devrions en parler.
Cordialement,
Jérôme
Hi Jérôme,
RépondreSupprimeri've already said it to you but I have to repeat it again. This is a great commit for PostGIS 3D. Thanks for all the work! I also agree with Vincent: Join forces. As CityGML is becoming more popular nowadays - also in France - there will be more potential users for the 3DCityDB. And for them having a quick live view on the 3D content of the database (or just some parts of it) would a very helpful feature. Loooking forward to it.
All the best
Felix, virtualcitySYSTEMS
PS: About the 3DCityDB dev. The schema and tools were a result of a research project at the TU Berlin. Thomas Kolbe and his team (incl. Claus) were responsible for that. For the next major release (plannend Q3 2014) we also did joint forces and developped a new schema for CityGML 2.0 together with him and another company.
Hi Jérôme ROLLAND
RépondreSupprimerThanks for your great post.
I do carefully step by step to install 3D City Database into PostgreSQL and everything seems right
But when connect to the database in Importer/ Exporter, it returns an error:
"the column name SRID was not found in this ReSultSet"
Please help me, any suggestions
Thanks and best regards!
Hi Quách Đồng Thắng,
SupprimerGo to this link : http://www.3dcitydb.org/3dcitydb/contact/
Contact Felix Kunde or Claus Nagel to explain your problem.
best regards.
Thanks Jérôme
RépondreSupprimerBonjour,
RépondreSupprimerfélicitations pour ce gros travail qui permet de gérer la visualisation d'objets 3D issus de postgis..
Je sais que ce n'est pas dans cet article qu'il faut en parler mais est-ce qu'il serait possible de remettre le lien de téléchargement du plugin Postgis viewer pour pgadmin III ? car il n'est plus disponible dans l'article.
Cordialement
Bonjour,
SupprimerJ'ai remis a jour le lien de téléchargement du plugin PostGis Viewer pour pgAdmin III : http://ageoguy.blogspot.fr/2010/06/plugin-pgadmin-iii-postgisviewer-suite.html
Cordialement,
Jérôme
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerBonjour Monsieur Rolland,
RépondreSupprimerMerci beaucoup pour ce Viewer qui me rend un grand service.
Toutefois je rencontre une difficulté pour laquelle je sollicite vos lumières. Tout se passe bien pour les installations (aucun message d'erreur), mais lorsque j'ai executé la commande pour visualiser les bâtiments, j'ai eu le pop-up "ERROR: la colonne b.type n'existe pas LINE 6: AND b.type='WallSurface'". J'ai donc vérifié dans la table en question (thematic_surface) et, en effet, il n'y a pas de champ 'type'. La table est en outre complètement vide, comme toutes les autres... Ai-je oublié une étape de remplissage? Ai-je accidentellement dropé une colonne?
Je vous remercie par avance pour votre aide,
Bien cordialement,
Delphine
Bonjour Delphine,
SupprimerAvez-vous utilisé l'outil '3DCityDB-Importer-Exporter' pour l'import des données ?
Cordialement,
Jérôme