PosGIS Viewer 3D suite
| ntroduction |
Comme je vous l’annoncez dans mon précédent billet j’ai fait évoluer le pg3DViewer pour qu’il puisse gérer les géométries de type POINT, et pour mes test je me suis intéressé aux nuages de points ‘Points Clouds’'
Pour la suite de ce tutorial nous utiliserons deux fichiers de données dont voici les liens de téléchargement :
| nstallation |
| Cliquez sur le lien pg3DViewer_setup.exe pour télécharger le programme d’installation de la nouvelle version, si vous aviez installé la version précédente désinstallez la, puis lancer l’exécution. Cliquer sur le bouton Suivant à chaque étape, puis sur le bouton Terminer. |
Dans le précédent billet vous avez tous les écrans de l’installation : http://ageoguy.blogspot.fr/2014/07/postgis-3d-viewer.html
| 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.
| 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
| Commencez par cliquer sur cet icône pour vous connecter a une base de données PostgreSQL/PostGIS version 2.0 ou supérieur contenant des données 3D ou prête à en recevoir. |
| - Choisissez localhost pour serveur si votre base de données est en local sur votre machine ou bien saisissez l’adresse IP de votre serveur
- le port est par défaut 5432, changez le si nécessaire
- saisissez l’utilisateur
- saisissez le mot de passe
- choisissez une base de donnée dans la combobox
- cliquez sur le bout OK pour valider votre saisie.
|
Traitement d’un fichier Ascii XYZ
Nous allons utiliser le fichier bunny.xyz que vous avez téléchargé dans l’introduction.
Nous allons créer la table qui va accueillir les donnés. Dans PgAdmin III ouvrez l’outil de requêtes puis copiez la requête suivante : -- Table: bunny -- DROP TABLE bunny; CREATE TABLE bunny ( x double precision, y double precision, z double precision, id bigserial NOT NULL, CONSTRAINT bunny_pkey PRIMARY KEY (id) ) WITH ( OIDS=FALSE ); ALTER TABLE bunny OWNER TO postgres; Puis exécuter la.
| |
Puis nous allons insérer les données dans la table. Copiez la requête suivante dans l’éditeur de requêtes : copy lidar_test(x,y,z,classification) from 'C:/temp/bunny.txt' with delimiter ' ' puis exécuter la. | |
Maintenant nous allons pouvoir visualiser les données. Dans le panneau Query copiez la requête suivante : SELECT x,y,z FROM bunny AS points_xyz Cliquez sur l’icone ‘Execute query’ | |
Et voici le résultat après Zoom et Rotation. Comme vous avez du le remarquer le temps d’affichage est très rapide pour une table contenant 34835 points.
| |
Nous allons maintenant essayer une nouvelle requête.Dans le panneau Query copiez la requête suivante : SELECT st_geomfromtext('POINT Z('||x||' '||y||' '||z||')',0) as geom,'255:0:0'::text AS rgb FROM bunny Cliquez sur l’icone ‘Execute query’ | |
Et voici le résultat après Zoom et Rotation. Le temps d’affichage est beaucoup plus long parce que dans cette requête nous construisons la géométrie à la volée. La différence avec la requête précédente est que celle-ci génère un fichier de points au format xyz (grâce à la commande COPY TO de PostgreSQL) qu’exploite un ‘reader’ de la bibliothèque VTK. Tout cela ce fait avec l’ajout de ‘A'S points_xyz’ a la fin de la requête et la sélection des champs x,y et z.
| |
Traitement d’un fichier LAS
Ouvrez une fenêtre DOS, allez dans le répertoire ou vous avez installé LASTOOLS, puis dans le sous répertoire bin. Copiez la commande suivante : las2txt -i "C:\temp\2013 LiDAR 5105_54480.las" -parse xyzc -sep semicolon Cette commande va générer un fichier Ascii (.txt) au format x,y,z et classification avec pour séparateur de colonne le caractère ‘;’ (point virgule).
| |
Nous disposons à présent d’un fichier que nous allons pouvoir insérer dans notre base de données. Pour cela nous allons commencer par créer la table qui recevra les données, dans la fenêtre de requêtes de PgAdmin III copiez la requête suivante: -- Table: lidar_test -- DROP TABLE lidar_test; CREATE TABLE lidar_test ( x double precision, y double precision, z double precision, classification integer ) WITH ( OIDS=FALSE ); ALTER TABLE lidar_test OWNER TO postgres; puis exécuter la.
| |
Puis nous allons insérer les données dans la table. Copiez la requête suivante dans l’éditeur de requêtes : copy lidar_test(x,y,z,classification) from 'C:/temp/2013 LiDAR 5105_54480.txt' with delimiter ';' puis exécuter la. | |
Maintenant nous allons pouvoir visualiser les données. Dans le panneau Query copiez la requête suivante : select x,y,z, CASE WHEN classification=2 then '128:0:0' WHEN classification=3 then '0:64:0' WHEN classification=4 then '0:128:0' WHEN classification=5 then '0:255:0' WHEN classification=6 then '255:128:64' WHEN classification=11 then '128:128:128' END as rgb from lidar_test as points_xyzrgb
Cliquez sur l’icone ‘Execute query’ | |
Et voici le résultat
| |
Les valeurs de classification utilisées dans la requête sont issues de cette requête : select distinct classification from lidar_test order by 1 Vous pouvez également obtenir des informations sur le fichier LAS avec l’outil lasinfo, dans une fenêtre DOS tapez la commande suivante : lasinfo c:\temp\2013 LiDAR 5105_54480.las a la fin du rapport vous obtenez la définition de la classification. | lasinfo for c:\temp\2013 LiDAR 5105_54480.las reporting all LAS header entries: file signature: 'LASF' file source ID: 0 global_encoding: 1 project ID GUID data 1-4: 00000000-0000-0000-0000-000000000000 version major.minor: 1.2 system identifier: '' generating software: 'TerraScan' file creation day/year: 156/2013 header size: 227 offset to point data: 447 number var. length records: 2 point data format: 1 point data record length: 28 number of point records: 7938187 number of points by return: 6742290 914660 231891 44542 4804 scale factor x y z: 0.001 0.001 0.001 offset x y z: 510499.94 5447999.8799999999 0 min x y z: 510499.940 5447999.880 34.110 max x y z: 511000.110 5448500.100 275.690 variable length header record 1 of 2: reserved 43707 user ID 'LASF_Projection' record ID 34735 length after header 88 description 'Georeferencing Information' GeoKeyDirectoryTag version 1.1.0 number of keys 10 key 1024 tiff_tag_location 0 count 1 value_offset 1 - GTModelTypeGeoKey: ModelTypeProjected key 2048 tiff_tag_location 0 count 1 value_offset 4269 - GeographicTypeGeoKey: GCS_NAD83 key 2054 tiff_tag_location 0 count 1 value_offset 9102 - GeogAngularUnitsGeoKey: Angular_Degree key 2056 tiff_tag_location 0 count 1 value_offset 7019 - GeogEllipsoidGeoKey: Ellipse_GRS_1980 key 2057 tiff_tag_location 34736 count 1 value_offset 0 - GeogSemiMajorAxisGeoKey: 6378137 key 2058 tiff_tag_location 34736 count 1 value_offset 1 - GeogSemiMinorAxisGeoKey: 6356752.314 key 2059 tiff_tag_location 34736 count 1 value_offset 2 - GeogInvFlatteningGeoKey: 298.2572221 key 3072 tiff_tag_location 0 count 1 value_offset 26910 - ProjectedCSTypeGeoKey: UTM 10 northern hemisphere key 3076 tiff_tag_location 0 count 1 value_offset 9001 - ProjLinearUnitsGeoKey: Linear_Meter key 4099 tiff_tag_location 0 count 1 value_offset 9001 - VerticalUnitsGeoKey: Linear_Meter variable length header record 2 of 2: reserved 43707 user ID 'LASF_Projection' record ID 34736 length after header 24 description 'Double Param Array' GeoDoubleParamsTag (number of doubles 3) 6.37814e+006 6.35675e+006 298.257 reporting minimum and maximum for all LAS point record entries ... X 0 500170 Y 0 500220 Z 34110 275690 intensity 0 255 return_number 1 5 number_of_returns 1 5 edge_of_flight_line 0 0 scan_direction_flag 0 1 classification 2 11 scan_angle_rank -19 22 user_data 79 79 point_source_ID 10217 10238 gps_time 49786940.848411 49796462.877692 WARNING: there is coordinate resolution fluff (x10) in XYZ overview over number of returns of given pulse: 5825940 1363444 563503 160908 24392 0 0 histogram of classification of points: 2030423 ground (2) 1836807 low vegetation (3) 234836 medium vegetation (4) 1811842 high vegetation (5) 2022021 building (6) 2258 road surface (11) |
| onclusion. |
Nous sommes arrivés à la fin de ce billet, je vous conseille la lecture d’un excellent tutorial de Paul Ramsey concernant les données LIDAR que vous trouverez a cette adresse http://workshops.boundlessgeo.com/tutorial-lidar/ , il ne vous restera plus qu’a afficher les données en utilisant les fonctions présentées dans ce ‘tutorial lidar’.