Vous pouvez lire le billet sur le blog La Minute pour plus d'informations sur les RSS !
Feeds
61210 items (0 unread) in 112 feeds
-
Directions Magazine : A la une
-
Directions Magazine : Blogue
-
SIG la lettre : à la une
-
SIG la lettre : actualité
-
SIG la lettre : Produits et Services
-
Les Rencontres de SIG-la-Lettre
-
SIG la lettre : divers
-
Directions Magazine : Communiqués de presse
-
BalizMedia : Communiqués de presse
-
PortailSIG - Actualité
-
Revue Internationale de Géomatique : Numeros de 2012
-
magazine CARTO
-
Imagerie Géospatiale
-
Virtual Earth in Europe by Arnaud
-
Geospatial made in France
-
GéoTrouveTout
-
Humblogue
-
le blog decigeo
-
Articque - Les Sytèmes d'Analyse Géographique, la cartographie, le géomarketing et la géostatistique
-
GeoConcept
-
arcOrama, un blog sur les SIG, ceux d ESRI en particulier
-
arcOpole - Actualité du Programme
-
arcUtilisateurs
-
Geomatys
-
Blog Géoclip O3, générateur d'observatoires
-
Le blog TIC » Information Géographique
-
Geospatial air du temps by Géo212
-
Monde géonumérique
-
Le petit blog cartographique - Article
-
ReLucBlog - SIG, MOZILLA & NTIC
-
TerrImago "Le temps du monde fini commence" (Paul Valéry)
-
GeoInWeb
-
Le monde de la Géomatique et des SIG ... tel que je le vois
-
Géographie 2.0
-
BloGoMaps - google maps france
-
GeoRezo.net - Géoblogs
-
Geotribu
-
Benjamin Chartier
-
neogeo
-
OpenSource, Geospatial et Web ?.0
-
Faire joujou avec son GPS
-
Géomatique et Topographie
-
HelioMap
-
La chronique de la parallaxe
-
Remote In Every Sense
-
UrbaLine
-
GEMTICE
-
Serial Mapper
-
SIG-o-Matic
-
Cybergeo
-
Librairie La GéoGraphie • Actualité internationale
-
Les Cafés géographiques
-
Une carte du monde.
-
Mappemonde
-
Les blogs du Diplo - Visions cartographiques
-
Oslandia
-
Le Forum français de l'OGC
-
Inventis Géomarketing
-
Blogue de la géomatique du MSP
-
Blog technique de Nicolas Boonaert
-
WebMapping
-
A GeoSpatial World
-
Cartes et Cartographie / Maps and Mapping
-
Sample Digital Orthophoto Images
-
Silatitudes - Accueil
-
RSS Libre@vous
-
Blog d'Intelli3
-
Audissey
-
GeoReader's Digest
-
Michael TRANCHANT
-
Le blog d'Henri Pornon
-
Le blog de l'image satellite - CNES
-
Data and GIS tips
-
Geo By The Cloud
-
123 Opendata
-
ReLucBlog
-
L'Atelier de Cartographie
-
AdrienVH.fr, le blog » Cartographie
-
Cartes et figures du monde
-
Baptiste Coulmont » cartographie
-
l'aménagerie » SIG
-
geomarketing.ca
-
-
My Geomatic
-
OpenStreetMap France
-
Sigea : actualités
-
Sigea : Quoi de neuf
-
Géoportail.fr
-
Géosource
-
www.touraineverte.com
-
archeomatic
-
Geographica » Cartographica
-
Tutoriels et formations gratuits des logiciels SIG ArcGIS, MapInfo, ArcView GIS etc.
-
simon mercier
-
Planet Geospatial - http://planetgs.com
-
Google Maps Mania
-
All Points Blog
-
Directions Media - Podcasts
-
Navx
-
James Fee GIS Blog
-
OGC News Feed
A GeoSpatial World
-
12:55
CityGML vers PostGIS 2.0
sur A GeoSpatial WorldIntégration de CityGML dans PostGIS 2.0
Introduction
Après les trois billets précédents parlant de l’intégration de fichiers BIM/IFC dans PostgreSQL et sa cartouche spatiale PostGIS 2.0, voici un nouveau billet dans lequel je continue à expérimenter les nouvelles possibilités 3D de PostGIS, pour cela je vais vous présenter un outil permettant l’import du format CityGML dans PostGIS (dont la version 2.0 est devenue disponible le 3 Avril 2012, une release vient de sortir le 22 Juin release 2.0.1) .
J’ai développé cet outil en C# 2010 avec :
- la librairie GDAL/OGR
- BS Contact Geo (version d’évaluation) de Bitmanagement Software GmbH
Ci-dessous un extrait de l’article Wikipedia sur GDAL [fr.wikipedia.org]
GDAL est une bibliothèque libre permettant de lire et de traiter un très grand nombre de format d'images géographiques (notamment GeoTIFF et ECW) depuis des langages de programmation tels que C, C++, C sharp / .Net, Java, Ruby, VB6, Perl, Python, ou encore le langage statistique R. Un sous-ensemble de cette bibliothèque est la bibliothèque OGR permettant d'accéder à la plupart des formats courants de cartes vectorielles (à l'exception notable d'AutoCAD).
La version binaire inclut de nombreux utilitaires de conversion et de transformation et de reprojection pour traiter directement les photos ou les vecteurs.
Cette bibliothèque est un des piliers des systèmes d'informations géographique libres, car elle permet d'assurer la compatibilité avec de nombreux systèmes commerciaux reposant sur des formats propriétaires tout autant que sur les normes de l'Open Geospatial Consortium.
Logiciels utilisant GDAL/OGR- Quantum GIS
- UMN Mapserver
- GRASS GIS
- gvSIG
- JMap
Quelques liens :
BS Contact Geo permet la visualisation de données au format CityGML,VRML, X3D, KMZ, COLLADA, Open JT.
Lien : BS Contact Geo

Le format CityGML (qui est un standard de l’OGC) est la référence pour l’échange de modèles 3D de villes, on parle de villes numériques, de cités virtuelles. CityGML est basé sur le format XML , il est implémenté comme un schéma d’application pour le langage ‘Geography Markup Language version 3.1.1 (GML3). ‘ , la norme internationale pour l’échange de données spatiales délivré par ‘Open Geospatial Consortium (OGC)’ et le ‘TC211 ISO’ . CityGML est un standard officiel de l’OGC et peut utilisé gratuitement.
Ci-dessous la traduction de la première page du document :
OGC ® City Geography Markup Language (CityGML) Norme d'encodage
1 Champ d'application
Ce document est la norme d’encodage de l'OGC pour la représentation, le stockage et l'échange de vile 3D virtuelle et de modèles de paysage. CityGML est implémenté comme un schéma d'application de la version 3.1.1 Geography Markup Language (GML3).
Les modèles CityGML partagent des données complexes et géoréférencées du vecteur 3D avec la sémantique liée aux données. Contrairement à d'autres formats vectoriels 3D, CityGML est basé sur un riche modèle d'information générale en plus de la géométrie et d’une information sur l’apparence. Pour les zones spécifiques à un domaine, CityGML fournit également un mécanisme d’extension pour enrichir les données avec des objets identifiables en vertu de la préservation de l'interopérabilité sémantique.
Les domaines d'application visés incluent explicitement la planification urbaine et paysagère; la conception architecturale; les activités touristiques et de loisirs; les cadastres 3D; des simulations environnementales; les télécommunications mobiles; la gestion des catastrophes; la sécurité civile; la navigation par véhicule et piétonne; les simulateurs d’entrainement et la robotique mobile.
CityGML est considéré comme source de format pour la 3D portraying. Les informations sémantiques contenues dans le modèle peuvent être utilisées dans le processus de définition du style de représentation lors de la génération de fichiers au format KML/COLLADA ou X3D. Le service approprié pour ce processus est l'OGC Web 3D Service (W3DS). Un service basé sur l'image pour les paysages virtuel en 3D et pour les modèles de ville celui-ci est assurée par le Service OGC Web View (WVS).
Caractéristiques du CityGML:
- L'information géospatiale modèle (ontologie) pour les paysages urbains est basé sur la famille ISO 191xx
- GML3 représentation de géométrie 3D, sur le modèle de la norme ISO 19107
- Représentation des caractéristiques d'objets surfacique (textures, matériaux)
- Les taxonomies et les agrégations
o Modèles Numériques de Terrain comme une combinaison de (y compris imbriquée) réseaux triangulés irréguliers (TINs), les rasters réguliers, cassures et les lignes de squelettisation,
o Sites (actuellement bâtiments, ponts et tunnels)
o Végétation (surfaces, volumes, et objets isolés avec classification de la végétation)
o Hydrographie (volumes, surfaces)
o Réseaux de transport (structures de graphes et surfaces de données 3D )
o Occupation du sol (représentation thématique des zones d’occupation du sol)
o Matériel urbain
o objets génériques et attributs de la ville
o groupes (récursif) définissable par l'utilisateur - modèle multi-échelle de 5 niveaux de détail (LOD):
o LOD0 - régionale, le paysage
o LOD1 - ville, région
o LOD2 – quartiers (ville), projets
o LOD3 - modèles architecturaux (extérieur), points de repère
o LOD4 - modèles architecturaux (intérieur) - visualiser simultanément différents niveaux de détail , généralisation des relations entre des objets de différent niveaux de détail
- connexions topologiques optionnelles entre les objets (sous) géométrique
- Extensions de domaine d'application (ADE): ajouts spécifiques dans CityGML, le schéma permet de définir des extensions spécifiques, par exemple la simulation de la pollution sonore, ou pour enrichir CityGML par les propriétés de la nouvelle Norme nationale du bâtiment ‘National Building Information Model Standard’ (NBIMS) des États-Unis
Ci-dessous des extrait du document ‘OGC City Geography Markup Language (CityGML) Encoding Standard’ matérialisant les différents niveaux de détail.
Quelques liens pour plus d’informations :
- CityGML
- CitygmlWiki
- OGC-CityGML
- CityGML : un standard fédérateur de modélisation et d’échange de données urbaines 3D
- CityGML : et si la ville numérique était interopérable ?
A venir… un peu de patience, je terminerais ce papier début janvier.
UtilisationA venir…
-
23:52
IFC2PG 3D: Industry Foundation Classes vers PostGIS 3ème Partie
sur A GeoSpatial World
IFC2PG 3D: Industry Foundation Classes vers PostGIS 3ème Partie
IntroductionCe billet est la suite de la seconde partie que vous trouverez ici IFC vers PostGIS 2ème partie , prenez en connaissance avant de continuer votre lecture.
Pour cette troisième partie nous allons entrer dans le monde de la 3D grace à PostGIS 2.0, cette version nous ouvre les portes de la troisième dimension car elle permet le stockage de données géométries volumiques avec ces nouveaux types :
- TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )
- POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0
0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )
Cela ouvre beaucoup de perspectives, j’ai déjà d’autres idées pour de prochains billets, mais revenons à l’outil d’export IFC2PG qui va exporter les objets IFC en 3D, un champ geom3d de type geometry devrait apparaitre dans les tables issues de l’opération d’export et ce uniquement si vous êtes sous PostGIS 2.0
InstallationSi vous n’avez pas installé PostGIS 2.0 , rendez-vous à ce lien [www.postgis.org]
Et choisissez entre ces deux liens suivant la version de PostgreSQL 9 que vous utilisez :
Pour ma part j’ai une version 9.0 de PostgreSQL.
Ouvrez l’archive que vous avez téléchargée :
- Copier le contenu de l’archive sous C:\Program Files\PostgreSQL\9.0\share
- Lire les consignes des fichiers textes README
- Éditer le fichier makepostgisdb.bat
-
set PGPORT=5432
set PGHOST=localhost
set PGUSER=postgres
set PGPASSWORD=yourpasswordhere
set THEDB=template_postgis20
set PGBIN=C:\Program Files\PostgreSQL\9.0\bin\
set PGLIB=C:\Program Files\PostgreSQL\9.0\lib\
set POSTGISVER=2.0
xcopy bin\*.* "%PGBIN%"
xcopy /I /S bin\postgisgui\* "%PGBIN%\postgisgui"
xcopy lib\*.* "%PGLIB%"
"%PGBIN%\psql" -c "CREATE DATABASE %THEDB%"
"%PGBIN%\psql" -d "%THEDB%" -c "CREATE LANGUAGE plpgsql"
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\postgis.sql"
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\spatial_ref_sys.sql"
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\postgis_comments.sql"
REM installs raster support
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\rtpostgis.sql"
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\raster_comments.sql"
REM installs topology support
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\topology\topology.sql"
"%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\topology\topology_comments.sql"
REM Uncomment the below line if this is a template database
REM "%PGBIN%\psql" -d "%THEDB%" -c "UPDATE pg_database SET datistemplate = true WHERE datname = '%THEDB%';GRANT ALL ON geometry_columns TO PUBLIC; GRANT ALL ON spatial_ref_sys TO PUBLIC"
pause
Préciser le mot de passe de connexion en remplaçant yourpasswordhere par votre mot de passe,
Décommenter la ligne pour les templates, si nécessaire
Lancer makepostgisdb.bat
La base de données template_postgis20 est créée.
Puis sous PgAdmin III créez une base IFCBD (par exemple) à partir du template_postgis20.

Nouvelle version de l’outil IFC2PGCliquez sur le lien ifc2pg_3.rar pour télécharger le fichier rar, puis décompressez le sous C:\
Utilisation
Lancez l’application par un double-clic sur le raccourci.

- Arborescence du fichier IFC,
- Zone d’affichage 3D du fichier IFC (IFCEngine OCX) ,
- Gestion des niveaux (DoSpatial),
- Zone d’affichage 2D des objets exportés (DotSpatial)
Cet icône permet d’ouvrir un fichier IFC.
Cet icône permet de se connecter à une base de données PostgreSQL/PostGIS.
Ouvrez le fichier qui se trouve dans le répertoire IFC
Export des donnéesPour que les objets soient transférés dans PostGIS, il faut se connecter à une base de données:

- Cliquez sur le bouton OK,
- Sélectionnez un objet IfcBuildingStorey,
- faites un clic droit, puis choisissez Export de tous les murs dans le menu contextuel,
Visualisation des donnéesOuvrez PgAdmin, ouvrez le requêteur et exécutez la requête suivante : SELECT * FROM ifcwallstandardcase;

Vous pouvez voir qu’il y a un champ géométrique supplémentaire dans la table ifcwallstandardcase, le champ geom3 qui contient des géométries de type TIN. Nous allons utiliser une nouvelle fonction de PostGIS 2.0 ST_AsX3D pour créer un document X3D qui sera visualisable dans tous les outils permettant d’afficher un document X3D.
Voici des liens pour plus d’information sur le format X3D :
Création du fichier X3DDans un éditeur de texte, insérez le texte suivant :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" " [www.web3d.org]
<X3D profile='Immersive' version='3.2' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.2.xsd'>
<Scene>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }Dans le requêteur de PgAdmin :
- tapez la requête suivante :
SELECT '<Viewpoint position='||quote_literal(((st_xmin(St_3DExtent(geom3d))+st_xmax(St_3DExtent(geom3d)))/2)::text||' '||
((st_ymin(St_3DExtent(geom3d))+st_ymax(St_3DExtent(geom3d)))/2)::text||' '||
(st_zmax(St_3DExtent(geom3d))+10)::text)||'/>'
FROM ifcwallstandardcase;
- Sélectionnez le résultat, puis copiez le.
- collez le résultat dans l’éditeur de texte, sélectionnez ce bloc et remplacez le caractère “ par un espace.
- tapez la requête suivante :
SELECT '<Shape>
<Appearance>
<Material emissiveColor=''0 0 1''/>
</Appearance>
' || ST_AsX3d(geom3d) ||
'
</Shape>
' as x3dgeom
FROM ifcwallstandardcase;- Sélectionnez le résultat, puis copiez le.

- collez le résultat dans l’éditeur de texte, sélectionnez ce bloc et remplacez le caractère “ par un espace.
- rendez vous à la fin à la dernière ligne et insérez le texte suivant :
</Scene>
</X3D>
puis enregistrez le avec l’extension x3d
Voici le lien pour télécharger le fichier x3d correspondant à cet exemple : fichier X3D
Afficher le fichier X3D avec MeshLabPour visualiser le fichier X3D vous pouvez utiliser


téléchargeable à cette adresse : [meshlab.sourceforge.net]

Afficher le fichier X3D sous Mozilla Firefox ou Google ChromeVous pouvez également afficher le fichier X3D sous un explorateur internet comme Google Chrome ou Mozilla Firefox, ce sont les deux browser sur lesquels j’ai testé l’affichage d’un fichier X3D. Pour cela vous installer un plugin compatible avec le format X3D, j’ai installé BS Contact de la société Bitmanagement. Pour le télécharger, rendez vous à ce lien : [www.bitmanagement.de] puis cliquez sur download, vous devrez remplir un mini formulaire pour pouvoir lancer le téléchargement :

Après le téléchargement, lancer l’installation.
Cliquez sur ce lien [ifcx3d.netau.net] pour vérifier le bon fonctionnement du plugin, vous devriez voir ceci :

vous pouvez cliquer dans la vue, puis zoomez avec la molette de la souris. Un clic droit fait apparaitre un menu contextuel. Pour plus d’informations, consulter le guide de l’utilisateur de BS Contact à cette adresse : [www.bitmanagement.com]
Voici un extrait du guide utilisateur :
BS Contact - Guide de l'utilisateur
Pour bien débuter
Ce document traite de la Navigation. La navigation est l'action de se déplacer dans un environnement virtuel ou de voir un object depuis différentes vues.
Pour savoir ce qu'est un environnement virtuel - ou scène VR -, réferrez-vouz à la page Vue d'ensemble.
Général
Ceci est l'aperçu principal de la façon dont BS Contact opère:
BS Contact se conduit principalement avec la souris. Vous pouvez:
- bouton gauche: se déplace dans la scène VR.
- bouton droit: ouvre le menu de BS Contact.
La molette a des fonctionnalités additionnelles:
- tournée: ajuste votre point de vue.
- pressée: ouvre le menu de navigation.
Il existe des fonctionnalités pour les utilisateurs expérimentés, qui sont discutées plus loin.
Se déplacer avec la souris:
Se déplacer avec la souris dans une scène VR sera appelé naviguer. Celà marche comme ci-dessous:
D'abord, vous cliquez dans la scène et gardez le bouton appuyé. Puis, vous déplacez la souris depuis le point où vous avec cliqué. La distance dont la souris a bougé détermine votre vitesse en 3D. Déplacez la souris...
...vers le haut
pour avancer.
...vers la gauche
pour tourner à gauche.
déplacez
la souris...
...vers la droite
pour tourner à droite.
...vers le bas
pour reculer.
De plus, la molette de la souris vous permet d'ajuster votre direction de regard verticalement:
...en avant
pour lever le regard.
déplacez la molette...
...en arrière
pour baisser le regard.
Essayer:
Vous pouvez essayer tout ceci dans cet exemple: cyberhood.
...La suite:
Parfois, le curseur prend la forme d'une main, celà signifie alors qu'il est au-dessus d'un object interactif. Pour naviguer, déplacez le curseur vers un endroit où il redevient une croix.
Plus d'informations sur l'interactivité...
Astuce:
Perdu ? Pressez la touche ECHAP.
(Dans Netscape: bouton droit de la souris → 'Vues' → 'Réinitialisation')
Astuce:
Les touches PagePrecedente et PageSuivante vous transportent à des positions predéfinies par l'auteur.
Plus d'informations à propos des vues...
Examiner un Objet:
Les explications ci-dessus se réferraient à un mode de navigation appelé MARCHE (WALK). Un autre mode important est EXAMINER, qui est décrit ici. Pour en apprendre plus sur les autres modes, réferrez-vous à la section Modes de Navigation.
Le mode EXAMINER fonctionne de façon similaire au mode MARCHE: vous cliquez un object et déplacez la souris en maintenant le bouton de la souris pressé. Les mouvements de la souris sont intimement liés aux mouvements de l'object: il tourne uniquement lorsque vous déplacez la souris.
Fonctions additionnelles:
- Pour déplacer un objet sur l'écran, pressez la touche CTRL, cliquez sur l'objet en la maintenant appuyée, et déplacez la souris.
- Pour se rapprocher ou s'éloigner, utilisez la molette de la souris.
Essayer:
Essayez avec le configurateur de voiture.
Astuce:
BS Contact vous aide en alignant l'objet en douceur pendant que vous le tournez. Si vous souhaitez aligner parfaitement un objet, déplacez la souris de droite à gauche ou de haut en bas quelques fois.
Astuce:
Les touches PagePrecedente et PageSuivante, ainsi que ECHAP vous aident dans la presque totalité des scènes.
Modes de Navigation
Il y a différentes manières de modifier votre point de vue dans la scène lorsque vous déplacez la souris. Ces manières sont appelées modes de navigation et remplissent les besoins de différents types d'applications VR. Une application peut préselectionner un mode et l'utilisateur en choisir un autre.
Pour sélectionner un mode de navigation:
- cliquez sur le bouton central, ou
- cliquez sur le bouton droit et sélectionnez Déplacement.
Voici les modes de navigation disponibles dans BS Contact:
MARCHE (WALK):
Le mode MARCHE est actif dans la plupart des scènes. Il vous permet de vous déplacer de la façon dont vous le faites dans le monde réel.
avancer
tourner à gauche
souris
tourner à droite
reculer
baisser le regard
molette
lever le regard
VOL (FLY):
Le mode VOL se comporte comme le mode MARCHE, à celà près qu'il ne vous garde pas au sol, d'où la possibilité de voler. Utilisez la molette pour monter ou descendre, ou utilisez la touche CTRL pour vous déplacer directement en haut ou en bas avec la souris.
avancer
tourner à gauche
souris
tourner à droite
reculer
baisser le regard
molette
lever le regard
EXAMINER (EXAMINE):
Le mode EXAMINER vous permet de faire tourner un objet et de l'examiner de différentes positions. Il est activé par défaut si l'on regarde un objet seul.
tourner vers le haut
tourner vers la gauche
souris
tourner vers la droite
tourner vers le bas
se rapprocher
molette
s'éloigner
Les modes de navigation suivants sont des extensions de BS Contact, en plus de ceux de la norme VRML.
PANORAMIQUE (PAN):
Dans le mode PANORAMIQUE, l'utilisateur peut facilement regarder autour de soi. Se déplacer est également possible, mais requiert de presser la touche CTRL en même temps que déplacer la souris.
lever le regard
tourner à gauche
souris
tourner à droite
baisser le regard
avancer
molette
reculer
DECALER (SLIDE):
Ce mode vous permet de vous déplacer en translation, sans changer votre direction de regard.
monter
allez à gauche
sourise
aller à droite
descendre
avancer
molette
reculer
JEU VIDEO (GAME):
Le mode JEU VIDEO est une alternative au mode MARCHE. Vous pouvez controller les mouvements comme dans un jeu:
- changer votre direction de regard via la souris sans la presser,
- et vous déplacer avec l'autre main sur le clavier.
Plus d'informations sur le mode JEU...
lever les yeux
regarder à gauche
souris
regarder à droite
baisser les yeux
accelérer
molette
ralentir
SAUTER (JUMP):
C'est un mode spécial qui vous permet de cliquer sur un objet, vous transportant alors à cet endroit automatiquement.
Néanmoins vous pouvez vous déplacer en navigation similaire à MARCHE ou PANORAMIQUE. Selon lequel de ces deux sous-modes est actif dépend la présence ou non de la gravité.
SIMILI-PANORAMIQUE (sans gravité):
lever les yeux
regarder à gauche
souris
regarder à droite
baisser les yeux
avancer
molette
reculer
SIMILI-MARCHE (avec gravité):
lever les yeux
regarder à gauche
souris
regarder à droite
baisser les yeux
avancer
molette
reculer
© 2005 Bitmanagement Software GmbH All rights reserved.
Le fichier testx3d3.htmlCi dessous le contenu du fichier testx3d3.html qui est l’adaptation d’un exemple trouvé sur internet :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h1> ifcwallstandardcase X3D </h1>
<!-- TODO: * authors need to replace the X3D filename (along with relative or online location) in the next two lines * -->
<object data="test2.x3d" type="model/x3d+xml" height="600" width="600">
<param name="src" value="test2.x3d"/>
<!-- the remaining HTML that follows should not need further modification -->
<param name="DASHBOARD" value="FALSE"/>
<param name="SPLASHSCREEN" value="FALSE"/>
<!-- the following anchor-link text is only shown if no X3D plugin is already installed -->
<div class="noX3dPluginInstalled">
<a href=" [www.web3d.org] target="helpPage">Select an X3D plugin to see this example...</a>
<!-- alternate url: [www.web3d.org] -->
</div>
</object>
</body>
</html>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
ConclusionCe billet nous a permis de mettre un pied dans le monde de la 3D sous PostGIS en intégrant des données issues d’un fichier IFC. Il reste bien sur à enrichir les tables de champs porteur d’informations supplémentaires, rajouter des fonctionnalités pour faciliter l’import des objets dans PostGIS, finaliser le traitement des objets non encore traités.
Mais le plus passionnant reste à faire, mettre en place un nouvel outil pour l’exploitation des objets stockés dans la base de données, une interface développée en HTML utilisant le plugin BS Contact pour l’affichage des données au format X3D. Je vais réfléchir à cette interface et je vous la présenterait dans un prochain billet.
Les domaines d’applications sont vastes, jusqu’a présent les SIG,base de données spatiales nous amenait aux portes des batiments via une adresse ou une requête spatiale et ne permettait pas d’entrer directement dans ce bâtiment ou alors cela nécessitait une extension, aujourd’hui il devient possible grâce à PostGIS 2.0 de pénétrer dans ce bâtiment, puis de vous promener à l’intérieur de celui-ci étage par étage, pièce par pièce. Vous avez sans doute des idées sur ce sujet, n’hésitez pas à m’en faire part.
-
15:22
Export IFC vers PostGIS 2ème Partie
sur A GeoSpatial WorldIFC2PG : Industry Foundation Classes vers PostGIS 2ème Partie
IntroductionCe billet est la suite de la première partie que vous trouverez ici IFC vers PostGIS 1ère partie, prenez en connaissance avant de poursuivre votre lecture.
Le développement de l’outil est réalise dorénavant sous Visual Studio 2010 en VB.Net.
Nouveau composantJ’ai ajouté un nouveau composant DotSpatial qui permet de visualiser l’export 2D des objets du fichier IFC.
DotSpatial est développé par les membres de l'équipe open source SIG de MapWindow, et la communauté de développeurs d'OSGeo .NET
EvolutionJ’ai rajouté les objets suivants dans l’export :
- IfcSpace
- IfcSlab
- IfcColumn
- IfcDoor
- IfcWindow
Ces objets sont exportés sous forme de géométrie de type polygon.
J’ai modifié l’export de l’objet IfcWall qui maintenant donne une géométrie de type polygon.
L’interface s’est enrichi d’une vue 2D permettant de visualiser le résultat des exports.
InstallationTéléchargez l’outil IFC2PG : ifc2pg.rar
Décompressez l’archive sous c:\
Créez un raccourci sur le bureau.
Utilisation
Lancez l’application par un double-clic sur le raccourci.

- Arborescence du fichier IFC,
- Zone d’affichage 3D du fichier IFC (IFCEngine OCX) ,
- Gestion des niveaux (DoSpatial),
- Zone d’affichage 2D des objets exportés (DotSpatial)
Cet icône permet d’ouvrir un fichier IFC.
Ouvrez le fichier qui se trouve dans le répertoire IFC
Cet icône permet de se connecter à une base de données PostgreSQL/PostGIS.
Export des données
Pour réaliser l’export des données, sélectionner un objet IfcBuildingStorey puis faites un clic droit pour faire apparaitre un menu contextuel.

Ce menu permet de réaliser un export par type d’objet (IfcWallStandardCase, IfcSpace, IfcSlab, IfcColumn, IfcDoor, IfcWindow) en sélectionnant la ligne correspondante dans le menu, ou bien un export par IfcBuildindStorey, tous les objets seront alors exportés.
Ce menu permet également de gérer l’affichage des objets dans la vue 3D par type d’objet ou pour tous les objets contenus par l’objet IfcBuildingStorey.
Choisissez Export de tous les Objets dans le menu, vous devriez obtenir ceci :

Pour que les objets soient transférés dans PostGIS, il faut se connecter à une base de données:

- Cliquez sur le bouton OK,
- Sélectionnez un objet IfcBuildingStorey,
- faites un clic droit, puis choisissez Export de tous les Objets dans le menu,
Il ne vous reste plus qu’a allez visualiser le contenu tables avec par exemple OpenJump.

Important
Je ne vide pas les tables avant export, donc pensez à les vider pour ne pas vous retrouvez avec des doublons, je vais réfléchir à comment gérer ce risque de doublons.
ConclusionNous voila à la fin de cette seconde partie, je vais continuer à améliorer l’interface de l’outil, ajouter de nouveaux objets… Rendez-vous prochainement dans une troisième partie.
Je vais également réfléchir à un export 3D sous PostGIS 2.0

-
22:37
Export IFC vers PostGIS 1ere Partie
sur A GeoSpatial World
IFC2PG : Industry Foundation Classes vers PostGIS 1ere Partie
IntroductionJe vais vous présenter l’outil de conversion de fichier IFC vers PostGIS que je suis en train de réaliser, outil développé sous en VB.Net 2008 avec :
- le composant IFCsvr ActiveX de SECOM Co. Ltd.,
- la librairie IFC Engine DLL de TNO Building Research .
Cet outil doit permettre d’exporter les données d’un fichier IFC vers une base de données PostGIS, ce billet s’enrichira au fur et à mesure de l’évolution du développement de l’outil.
IFCsvr ActiveXLe composant ActiveX IFCsvr est un composant ActiveX pour le traitement de données IFC(Industry Foundation Classes) . Ce composant fournit un environnement de programmation compatible IFC avec Microsoft Visual Basic, Visual Basic pour Application, VC + +, C #, Visual Basic.Net, ...
Ce composant est gratuit pour un usage non commercial.
Voici le lien pour le groupe ifcsvr-users : ifcsvr-users · IFCsvr ActiveX Component
Il vous faudra vous référencer sur le groupe pour pouvoir télécharger le composant (IFCsvrR300) et autres documents.
IFC Engine DLL
Voici les lien pour la librairie IFC Engine : IFCEngine ou IFCdll
Cette librairie est gratuite pour un usage non commercial.
Industry Foundation Classes
Ci-dessous des extraits de l’article Wikipédia sur le format IFC :
Source : Article Industry Foundation Classes de Wikipédia en français ( [fr.wikipedia.org] ).
Début citation.
“Le format IFC (Industry Foundation Classes) est un format de fichier orienté objet utilisé par l'industrie du bâtiment pour échanger et partager des informations entre logiciels.
Origine des IFCCe standard est né de l'initiative de l'IAI (International Alliance for Interoperability), associant des entreprises du secteur de la construction et des éditeurs de logiciels. Cette organisation est divisée en chapitres nationaux dont BuildingSmart est le représentant français. Elle a pour objectif principal de favoriser l'interopérabilité des logiciels dans le secteur de la Construction.
Building Information ModelingIFC est le format usé communément par le BIM (Building Information Modeling)
Dans l'acceptation du BIM, le format IFC, standard ouvert compréhensible de tous les acteurs de la construction, organise les objets de l'industrie de la construction, les familles, autour d'un modèle informatique 3D, le BIM . Ces objets supportent le cycle de vie complet d'un bâtiment incluant les débuts-la conception, la documentation et la construction-, l'exploitation des bâtiments, la gestion des installations (facility management) et, enfin, la démolition et l'élimination2.
Spécification des IFCLe modèle de données IFC est spécifié en langage EXPRESS, conforme à la norme ISO 10303-11 (STEP part 11). C'est un modèle orienté objet qui définit des classes associées à tous les objets de construction. Un modèle d'ouvrage est donc un ensemble hiérarchisé d'instances de classes du modèle IFC. Les échanges s'effectuent par l'intermédiaire de fichiers STEP-21 (ISO 10303-21) ou de fichiers XML (ifcXML).
Par exemple, la hiérarchisation d'un bâtiment s'effectue ainsi :
- une zone contient plusieurs bâtiments.
- un bâtiment contient plusieurs étages
- un étage contient plusieurs salles etc.
…
FormatsFormats IFC4
Format Définition .ifc Fichier IFC utilisant la structure STEP conformément à ISO10303-21. Structuration des données selon les spécifications Express. C'est le format d'échange par défaut .ifcXML Fichier IFC utilisant la structure XML. Le format .ifcXML peut être généré directement par l'application ou à partir d'un fichier .ifc, conformément à ISO10303-28, la représentation XML des schémas et données Express. Le format .ifcXML est normalement 300-400% plus gros que le fichier .ifc
.ifcZIP Fichier IFC utilisant l'algorithm de compression PKzip 2.04g …
Lien externe
- Site du chapitre francophone de l'IAI (International Alliance for Interoperability)
- Site technique de l'IAI
- Wiki dédié au ifc
- Site du Projet Expert En france, le projet Expert rassemble les principaux acteurs du monde de la construction et du Bâtiment, il vise à promouvoir l'utilisation des IFC et de la BIM dans ce secteur. Il est soutenu par l'État (ministère chargé de la construction).
“
Fin citation.
InstallationTéléchargez l’outil IFC2PG : ifcpg.rar
Décompressez l’archive sous c:\
Créez un raccourci sur le bureau.
Utilisation Lancez l’application par un double-clic sur le raccourci.

L’interface s’enrichira au fur a mesure du développement, la barre d’outil principal ne comporte que deux icônes :
Cet icône permet d’ouvrir un fichier IFC.
Ouvrez le fichier qui se trouve dans le répertoire IFC
Cet icône permet de se connecter à une base de données PostgreSQL/PostGIS.
- Arborescence du fichier IFC, les icônes avec une ampoule peuvent être éteints (dé affichage de tous les objets enfants) ou allumés (affichage de tous les objets enfants)
- Zone d’affichage du fichier IFC (IFCEngine OCX)
- Barre d’outils pour interagir avec l’affichage :

- Rotation 3D
- Zoom
- Déplacement
- Vue de Face
- Vue de Coté
Connecter vous à une base PostGIS
Export des données vers PostGIS
A ce stade du développement, pour réaliser un export il faut faire un clic droit sur un objet pour ouvrir un menu qui contiendra l’ordre d’export. Seul les objets IfcWallStandardCase (Mur) peuvent être exportés, un par un en sélectionnant chaque IfcWallStandardCase ou bien en sélectionnant l’objet IfcBuildingStorey (Etage) pour exporter tous les objets IfcWallStandarCase.
Lorsque vous cliquez sur un objet appartenant à un objet IfcBuildingStorey, celui-ci passe en surbrillance.
Sélectionnez le 4eme objet IfcBuildingStorey, faites un clic droit et sélectionnez “Export de tous les murs” dans le menu.

La fonction va créer la table IfcWallStandardCase si elle n’existe pas, dans la base de données PostGIS à laquelle vous êtes connecté, il n’y a pas encore de gestion de doublons. La structure de la table pourra changer avec les prochaines version de l’outil. Faites moi savoir si vous avez des suggestions quand à son contenu.
Il ne vous reste plus qu’a allez visualiser le contenu de la table avec par exemple OpenJump.

Le champ géométrique de la table contient les axes des murs, un second champ géométrique pourrait contenir le contour, a voir.
ConclusionNous voila à la fin de cette première partie, l’outil réalise l’export des axes des murs (IfcWallstandardCase), je vais rajouter petit à petit l’export des autres objets.
J’attends vos remarques, suggestions ce premier jet d’un outil permettant d’exporter les objets d’un fichier IFC vers une bas de données PostGIS.
-
22:48
AutoHotKey, OpenJump, PgAdmin3,PostGIS et Google Earth…
sur A GeoSpatial WorldPrésentation
AutoHotKeyest un utilitaire open-source pour Windows. Avec lequel, vous pouvez :![clip_image001[7]](http://lh3.ggpht.com/_xHnTOBfj_HY/TXf9mXCOpvI/AAAAAAAAAK4/gw0Ctjc5whA/clip_image001%5B7%5D_thumb.gif?imgmax=800)
- Automatiser presque n'importe quelle tâche en envoyant des frappes clavier et des clics souris. Vous pouvez écrire des macros à la main ou utiliser l’enregistreur de macro.
- Créez des raccourcis pour le clavier et la souris. Pratiquement n'importe quelle touche, bouton, ou combinaison peuvent devenir une touche directe.
- Réaliser des substitutions de chaînes de caractères, par exemple en tapant «cad» vous pouvez automatiquement obtenir « c’est à dire».
- Créer des formes de saisie de données, des interfaces utilisateurs et des barres de menu faites sur commande.
- Remappage des touches et des boutons sur votre clavier, et souris.
- Convertir n’importe quelle macro en un exécutable pouvant fonctionner sur un ordinateur ne possédant pas AutoHotKey.
http://www.autohotkey.com
Installation Téléchargez la version 1.0.48.05 de AutoHotKey à l’adresse suivante : [www.autohotkey.com]
Téléchargez SciTE4autoHotKey Version 3 ; l’editeur gratuit de script AutoHotKey à l’adresse suivante :
http://www.autohotkey.net/~fincs/SciTE4AutoHotkey_3/BetaInstall_v3_beta4.exe
IntroductionVoici les version des outils que nous utiliserons dans ce tutorial :- AutoHotKey 1.0.48.05 ,
- SciTE4AutoHotKey Version 3 ,
- OpenJump 1.4.0.3,
- PgAdmin III 1.12.1 ,
- PostgreSQL 9.0.1,
- PostGIS 1.5.2
Script 1 : Lancer OpenJump, PgAdmin III par une combinaison de touches
Ce premier script une fois compilé permettra de lancer :- OpenJump 1.4.0.3avec la combinaison de touche suivantes :

+ 
- PgAdmin III avec la combinaison de touches suivantes :
Ouvrir SciTE4AutoHotkey (C:\Program Files\AutoHotkey\SciTE_beta4\scite.exe), copier le texte ci dessous dans l’éditeur.
+ 
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
Sauvegarder le fichier sous AH_ToolsExec.ahk, puis appuyer sur la touche F5 pour lancer l’exécution.
#Persistent
#SingleInstance
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
;--- touche Windows+o : lance OpenJump ----
#o::
run C:\Program Files\OpenJUMP1.4.0.3\bin\bin\OpenJUMP.exe
return
;--- touche Windows+p : lance PgAdmin III ---
#p::
run,C:\Program Files\PostgreSQL\9.0\bin\pgAdmin3.exe
return
lien pour télécharger AH_ToolsExec.ahk
Vous devriez voir apparaitre un icône en forme de H dans la barre de tâches.
L’appui des séquences de touches définis dans le script lancera son programme associé.
Pour arrêter le script, faites un clic droit sur l’icône, puis choisissez exit dans le menu.
Nous avons vu comment lancer l’exécution de programmes à partir de combinaisons de touches, vous pouvez enrichir ce script en rajoutant d’autres programmes.
Script 2 : Piloter OpenJump
Nous allons créer le script AH_OpenJump.ahk qui va permettre de piloter OpenJump par le biais de combinaison de touches, mais c’est un des intérêts de ce script, qui ne seront actives que si la présence d’OpenJump est détecté.
Touche Windows + Touche F1
+ 
Cette combinaison de touche va permettre d’ouvrir la boite “Exécuter une requête SQL” et définir une Connexion, il ne vous restera plus qu’a taper une requête puis l’exécuter.
La première chose à vérifier, est que vous disposez d’une connexion. Pour cela sous OpenJump, allez dans le menu Couche, puis Exécuter une requête SQL, puis cliquez sur l’icône Gestionnaire de connexion.

Le gestionnaire de connexion s’affiche, si la liste est vide, cliquez sur le bouton Ajouter.

Créez alors une connexion en remplissant tous les champs, puis cliquez sur le bouton OK. Le nom que vous allez choisir sera utilisé dans le script, il est peut être différent du champ Database. Vous pouvez créer autant de connexion que vous avez de bases de données.

Cliquez sur le bouton OK dans le Gestionnaire de connexion, puis fermez “Exécuter une requête SQL”
Ouvrir SciTE4AutoHotkey (C:\Program Files\AutoHotkey\SciTE_beta4\scite.exe), copier le texte ci dessous dans l’éditeur.
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#Persistent
#SingleInstance
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetTitleMatchMode,1
DetectHiddenWindows,on
SetTimer, checkOpenJump, 250
return
checkOpenJump:
OpenJumpID := WinExist("OpenJUMP")
If OpenJumpID > 0
{
;----------------------------------------------------------------------------
;--- ces combinaisons de touche ne fonctionne que si OpenJump est ouvert ---
;----------------------------------------------------------------------------
;--- touche Windows+F1 : Ouvre la Fenêtre "Exécuter une requête SQL" ---
#F1::
IfWinNotActive, OpenJUMP, , WinActivate, OpenJUMP,
WinWaitActive, OpenJUMP,
;WinActivate, ahk_id %OpenJumpID%
;Sleep 100
WinGetPos, X, Y, Width, Height
ToolTip, Ouverture de la fenêtre "Exécuter une requête SQL",(%X%+%Width%)/2,(%Y%+%Heigth%)/2
SetTimer, RemoveToolTip, 5000
;--- menu Couche ---
send !c
sleep 30
;--- Exécuter une requête SQL... ---
send {Down}
send e
;--- attente ouverture fenêtre ---
WinWaitActive,Exécuter une requête SQL
;--- Connexion ---
MouseClick, left, 528, 39
sleep 30
send {Esc}
sleep 30
send MYBD ;--- Le nom que vous avez saisi dans ajouter une connexion
sleep 30
;--- Requête ---
MouseClick, left, 201, 122
sleep 30
WinGetPos, X, Y, Width, Height
ToolTip, Tapez votre requête,(%X%+%Width%)/2,(%Y%+%Heigth%)/2
SetTimer, RemoveToolTip, 5000
return
;--- insérer ci-dessous la suite du script ---
}
return
RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
returnSauvegarder le fichier sous AH_OpenJump.ahk, puis appuyer sur la touche F5 pour lancer l’exécution, puis appuyez simultanément sur la touche Windows et la touche F1, cela doit déclencher l’ouverture de la boite de dialogue “Exécuter une requête SQL”
Touche Windows + Touche F2
+ 
Cette combinaison de touche va permettre d’ouvrir la boite “Exécuter une requête SQL” ,définir une Connexion, puis exécuter toutes les requêtes contenues. Le fichier de requêtes (requetes_OpenJump.txt )doit se trouver dans le même répertoire que le script.
Insérer la suite du script dans le fichier AH_OpenJump.ahk.;--- touche Windows+F2 : Ouvre la Fenêtre "Exécuter une requête SQL" ---
; Exécute chaque requête contenue dans le fichier requetes.txt, ---
; chaque requête doit être séparée par ";"
#F2::
;--- vide le presse papier --
clipboard =
;--- lit le fichier requête ---
ligne=
tabRequetes=
sep:=";" ;--- séparateur de requêtes
Loop, Read, requetes_OpenJump.txt ;--- le fichier de requêtes
{
ligne = %A_LoopReadLine%
tabRequetes = %tabRequetes%%ligne% `n
Sleep,100IfInString, tabRequetes, %sep%
{
clipboard = %clipboard%%tabRequetes% `n
ClipWait
Sleep,500
;------------------
WinActivate, ahk_id %OpenJumpID%
Sleep 100
;--- menu Couche ---
send !c
sleep 30
;--- Exécuter une requête SQL... ---
send {Down}
send e
;--- attente ouverture fenêtre ---
WinWaitActive,Exécuter une requête SQL
;--- Connexion ---
MouseClick, left, 528, 39
sleep 30
send {Esc}
sleep 30
send MYBD;--- Le nom que vous avez saisi dans ajouter une connexion
sleep 30
;--- Requête ---
MouseClick, left, 201, 122
sleep 30
;--- si l'éditeur de requêtes est présent ---
queryID := WinExist("Exécuter une requête SQL")
if queryID > 0
{
WinActivate
;--- colle le contenu du presse papier dans le requêteur ---
send ^a
sleep 100
send ^v
Sleep,100
;--- bouton OK ---
send !o
sleep 100
}
clipboard =
tabRequetes=
ligne=
sleep 100
}
}
returnCréez le fichier requetes_OpenJump.txt, avec une ou plusieurs requêtes, ci-dessous un exemple. Il y a deux contraintes, utiliser la fonction ST_Asbinary pour les géométries et séparer chaque requête par un point virgule.
SELECT st_asbinary(wkb_geometry) as geom,ogc_fid,nom
FROM commune;
SELECT st_asbinary(wkb_geometry) as geom,ogc_fid
FROM batiment;Sauvegarder le fichier sous AH_OpenJump.ahk, puis appuyer sur la touche F5 pour lancer l’exécution, puis appuyez simultanément sur la touche Windows et la touche F2, cela doit déclencher l’ouverture de la boite de dialogue “Exécuter une requête SQL”, choisir une connexion, puis exécuter les requêtes que vous aurez écrites.
voici le lien pour télécharger AH_OpenJump.ahk
Script 3 : Exporter le résultat d’une requête dans un fichier KML et l’ouvrir sous Google EarthNous allons créer le script AH_PG2GE.ahk qui va permettre d’exécuter une requête contenue dans un fichier, exporter le résultat de la requête dans un fichier KML et l’ouvrir sous Google Earth.
Pour pouvoir utiliser ce script, vous devez avoir un pilote ODBC pour PostgreSQL d’installé, si ce n’est pas le cas, voici un lien pour le télécharger :
psqlodbc_09_00_0200
Touche Windows + Touche g
+ 
Ouvrir SciTE4AutoHotkey (C:\Program Files\AutoHotkey\SciTE_beta4\scite.exe), copier le texte ci dessous dans l’éditeur.
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#Persistent
#SingleInstance
#Include Com.ahk
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
;--- touche Windows+g :
;--- execute le contenu du fichier exportkml.txt , cree le fichier kml et l'ouvre dans googleearth
#g::
COM_init()
sQuery =
;--- lit le fichier de requêtes ---
Loop, Read, exportkml.txt
{
ligne = %A_LoopReadLine%
sQuery = %sQuery%%ligne%`n
}
if strlen(sQuery)>0
{
;--- Chaine de connection ---
sConnect := "Driver={PostgreSQL ANSI};Server=localhost;Port=5432;Database=MYBD;Uid=postgres;Pwd=****;"
sConnect.= "cache Size=100, Max Varchar=254, Max LongVarChar=-4;Extended Properties=""MaxVarcharSize=1000000;MaxLongVarcharSize=300000"""
;---- cree un objet recordset que va remplir la requête ---
prs := COM_CreateObject("ADODB.Recordset")
COM_Invoke(prs, "Open", sQuery, sConnect)
;--- suppression fichier ---
FileDelete,result.kml
;--- ouverture fichier kml ---
FileAppend, <?xml version="1.0" encoding="utf-8" ?>`n, result.kml
FileAppend, <kml xmlns="http://earth.google.com/kml/2.1">`n, result.kml
FileAppend, <Document><Folder><name>result</name>`n, result.kml
;--- lecture recordset ---
Loop
{
sData =
isData:=0
If COM_Invoke(prs, "EOF")
Break
FileAppend, <Placemark>`n, result.kml
FileAppend, <description><![CDATA[`n, result.kml
;--- lecture des champs de l'enregistrement courant ---
pFields := COM_Invoke(prs, "Fields")
nNumFields := COM_Invoke(pFields, "Count")
Loop, % nNumFields
{
pField := COM_Invoke(pFields, "Item", A_Index-1)
sName := COM_Invoke(pField, "Name")
sName = %sName%
sData := COM_Invoke(pField, "Value")
sData = %sData%
IfInString,sData, <coordinates>
{
if isData = 1
FileAppend, ]]></description>`n, result.kml
FileAppend, %sData%`n, result.kml
}
else
{
FileAppend,<b> %sName% :</b> <i> %sData%</i><br />`n, result.kml
isData:=1
}
COM_Release(pField)
}
COM_Release(pFields)
FileAppend, </Placemark>`n, result.kml
;--- on passe a l'enregistrement suivant ---
COM_Invoke(prs, "MoveNext")
}
;--- fermeture recordset ---
COM_Invoke(prs, "Close")
COM_Release(prs)
;--- fermeture fichier kml ---
FileAppend, </Folder></Document></kml>`n, result.kml
;--- ouverture dans Google Earth ---
run,result.kml
}
COM_Term()
returnCréez le fichier exportkml.txt, avec une requête, ci-dessous un exemple :
SELECT nom,ST_Askml(2,wkb_geometry,6)
FROM commune;Sauvegarder le fichier sous AH_PG2GE.ahk, puis appuyer sur la touche F5 pour lancer l’exécution, puis appuyez simultanément sur la touche Windows et la touche g.
Vous devriez voir apparaitre le résultat sous Google Earth, le fichier kml est créé dans le répertoire du script.
ConclusionVoilà, j’espère que ces quelques scripts vous auront donné envie d’aller plus loin, allez sur le site d’AutoHotKey, consultez le forum, épluchez la documentation, créez vos propres scripts.
Et pourquoi ne pas lancer un concours de scripts, ici ou ailleurs, j’attend vos propositions.
a vos claviers, prêt, partez….
-
19:30
Comment utiliser AutoHotKey sous PostGISPrésentation
sur A GeoSpatial WorldComment utiliser AutoHotKey sous PostGIS
Présentation

AutoHotKeyest un utilitaire open-source pour Windows. Avec lequel, vous pouvez :
- Automatiser presque n'importe quelle tâche en envoyant des frappes clavier et des clics souris. Vous pouvez écrire des macros à la main ou utiliser l'enregistreur de macro.
- Créez des raccourcis pour le clavier et la souris. Pratiquement n'importe quelle touche, bouton, ou combinaison peuvent devenir une touche directe.
- Réaliser des substitutions de chaînes de caractères, par exemple en tapant «cad» vous pouvez automatiquement obtenir « c'est à dire».
- Créer des formes de saisie de données, des interfaces utilisateurs et des barres de menu faites sur commande.
- Remappage des touches et des boutons sur votre clavier, et souris.
- Convertir n'importe quelle macro en un exécutable pouvant fonctionner sur un ordinateur ne possédant pas AutoHotKey.
Vous trouverez plus d'informations sur le site AutoHotKey au lien suivant :
Installation
Téléchargez la version 1.0.48.05 de AutoHotKey à l'adresse suivante : http://www.autohotkey.com/download/AutoHotkeyInstall.exe
Téléchargez SciTE4autoHotKey Version 3 ; l'editeur gratuit de script AutoHotKey à l'adresse suivante :
http://www.autohotkey.net/~fincs/SciTE4AutoHotkey_3/BetaInstall_v3_beta4.exe
Introduction
Voici les version des outils que nous utiliserons dans ce tutorial :
- AutoHotKey 1.0.48.05 ,
- SciTE4AutoHotKey Version 3 ,
- OpenJump 1.4.0.3,
- PgAdmin III 1.12.1 ,
- PostgreSQL 9.0.1,
- PostGIS 1.5.2
Je vais vous présenter des scripts dont vous pourrez tirer profit dans l'utilisation quotidienne de vos bases de données PostGIS.
Script 1 : Lancer OpenJump, PgAdmin III par une combinaison de touches
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#Persistent
#SingleInstance
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
;--- touche Windows+o : lance OpenJump ----
#o::
run C:\Program Files\OpenJUMP1.4.0.3\bin\bin\OpenJUMP.exe
return
;--- touche Windows+p : lance PgAdmin III ---
#p::
run,C:\Program Files\PostgreSQL\9.0\bin\pgAdmin3.exe
return

- Automatiser presque n'importe quelle tâche en envoyant des frappes clavier et des clics souris. Vous pouvez écrire des macros à la main ou utiliser l'enregistreur de macro.
-
17:28
Squelettisation
sur A GeoSpatial WorldDu diagramme de Voronoï à la Squelettisation de polygone
Présentation
Boston GIS (pour Boston Geographic Information Systems [www.bostongis.com] ) est un excellent site que je consulte régulièrement. Il y a environ deux ans, j'ai lu une série de trois tutoriels présentant PL/R. Ces lectures ont fait germer en moi l'idée de la mise en place d'un algorithme de squelettisation de cours d'eau surfacique (POLYGON) dans l'environnement PostGIS.
J'ai mis au point cet algorithme il y a un an, et très récemment en téléchargeant l'extension Skeletonizer 1.0 pour OpenJump , j'ai eu la surprise après la lecture du guide utilisateur de remarquer une approche similaire pour la réalisation de cette fonctionnalité de squelettisation.
Je vais donc vous présenter la mise en place de l'algorithme tel que je l'ai défini, mais je vous invite à étudier celui défini dans le guide utilisateur de Skeletonizer, en sachant que l'équipe de développement est issue de Refractions Research , a qui l'on doit PostGIS, uDig, Geotools, Geoserver.
PostgreSQL/PostGIS quelles versions ?
La version de PostgreSQL que j'utilise est 9.0.1 (32 bit).
La version de PostGIS que j'utilise est la 1.5.2.3 (32 bit).
Qu'est-ce que la Squelettisation ?
La squelettisation consiste à réduire une forme en un ensemble de courbes, appelées squelettes, centrées dans la forme d'origine.
Qu'est-ce qu'est PL/R ?
PL / R est une extension du langage PostgreSQL qui permet d'écrire des fonctions PostgreSQL et des fonctions d'agrégation dans le langage de calcul statistique R.
Qu'est-ce que le langage R ?
R est à la fois un langage ainsi qu'un environnement pour faire de l'analyse statistique. R est disponible en logiciel libre sous licence GPL. Pour ceux qui connaissent des environnements tels que S, MatLab, et SAS - R a le même objectif. Pour plus d'informations sur R consulter le lien suivant :
[www.r-project.org]
Lien pour chaque tutorial de BostonGIS :
PL/R Part 1
PL/R partie 1 (traduction automatique par Google)
PL/R Part 2 : PL/R and PostGIS
PL/R partie 2 (traduction automatique par Google)
PL/R Part 3
PL/R partie 3 (traduction automatique par Google)
Je vous recommande la lecture de chaque tutorial, mais plus particulièrement :- le premier (PL/R Part 1) qui vous permettra d'installer R, ainsi que l'extension PL/R.
- le second (PL/R Part 2) qui vous permettra d'installer le package deldir pour R, qui est indispensable pour la réalisation de ce qui va suivre.
Ce package permet de réaliser :- Une triangulation de Delaunay,
- Un diagramme de Voronoï. C'est cette fonctionnalité que nous allons utiliser.
Un diagramme de voronoï forme une partition de l'espace qui attribue à chaque point une parcelle englobante qui comprend tout l'espace où l'on se trouve plus proche de ce point que de tout autre. Il doit son nom au mathématicien russe Georgi Fedoseevich Voronoï (1868 - 1908).
La figure ci-dessous montre la construction d'un diagramme de Voronoï à partir d'un ensemble de points.
Introduction
Voila le décor est planté nous allons pouvoir passer aux choses sérieuses, dans un premier temps nous allons créer un schéma sous PostgreSQL qui contiendra les fonctions et les tables nécessaire à la réalisation de ce tutoriel. Nous utiliserons PgAdmin III 1.12.1 qui est compatible avec la version de PostgreSQL 9.0, pour la connexion à la base de données et la réalisation de toutes les requêtes.
A la fin de chaque étape de création d'objets géométriques nous visualiserons le résultat sous OpenJump (à télécharger impérativement) dont la dernière version est compatible avec PostgreSQL 9.0. A la fin de ce tutoriel nous verrons comment utiliser le plugin PostGisViewer que j'ai développé pour PgAdmin III, pour réaliser l'enchainement de toutes les requêtes et en visualiser le résultat. Plugin qui a été présenté à ma grande satisfaction dans le Posgres on line journal en même temps que la version 1.13 de PgAdmin III (encore en phase de développement) qui apporte entre autre une nouvelle gestion des plugins, vous pouvez consultez cet article à l'adresse suivante :
[www.postgresonline.com]
Etape 1 : Création du Schéma
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III et exécutez la
-- Schema: skeleton
-- DROP SCHEMA skeleton;
CREATE SCHEMA skeleton
AUTHORIZATION postgres;
GRANT ALL ON SCHEMA skeleton TO postgres;
GRANT ALL ON SCHEMA skeleton TO public;
Etape 2 : Création de la table avec insertion d'une géométrie
Téléchargez la requête suivante et exécutez la dans l'éditeur de requêtes de PgAdmin III
CREATE TABLE skeleton.water_area...
Visualisation du contenu de la table
Nous allons visualiser le contenu de notre table sous OpenJump, pour cela allez dans le menu Couche
Puis exécuter la requête suivante :
Et voilà à quoi ressemble le polygone que nous allons squelettiser, c'est une partie de cours d'eau avec deux iles, donc nous avons un POLYGON composé de deux « interioring » et d'un « exteriorring ».
Etape 3 : Création des fonctions
Nous allons créer maintenant les fonctions nécessaires au traitement de squelettisation.1) skeleton.vronoiCette première fonction est adaptée de la fonction voronoi tirée du tutorial PL/R Part 2 : PL/R and PostGIS de BostonGis.
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III et exécutez la
/*--- fonction pour créer le diagramme de voronoi ---*/
-- Function: skeleton.voronoi(text, text, text)
CREATE OR REPLACE FUNCTION skeleton.voronoi(text, text, text)
RETURNS void AS
$BODY$
library(deldir)
# select the point x/y coordinates into a data frame...
points <- pg.spi.exec(sprintf("select x(%2$s) as x, y(%2$s) as y from %1$s;",arg1,arg2))
voro = deldir(points$x, points$y, digits=22, frac=0.00000000000000000000000001,list(ndx=2,ndy=2,fctr=0.000001), rw=c(min(points$x)-abs(min(points$x)-max(points$x)), max(points$x)+abs(min(points$x)-max(points$x)), min(points$y)-abs(min(points$y)-max(points$y)), max(points$y)+abs(min(points$y)-max(points$y))))
# dirsgs
for (i in 1:length(voro$dirsgs[[1]]))
{
#--- voronoi ---
pg.spi.exec(sprintf("INSERT INTO skeleton.%1$s (id,idedge,wkb_geometry) VALUES (%2$d,%2$d,GeomFromtext('LINESTRING(%3$f %4$f, %5$f %6$f)',4326));",
arg3,i,
voro$dirsgs[i,1],voro$dirsgs[i,2],
voro$dirsgs[i,3],voro$dirsgs[i,4]))
}
$BODY$
LANGUAGE plr VOLATILE
COST 100;
ALTER FUNCTION skeleton.voronoi(text, text, text) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION skeleton.voronoi(text, text, text) TO postgres;
GRANT EXECUTE ON FUNCTION skeleton.voronoi(text, text, text) TO public;
2) skeleton.sridUtmByLongitude
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III et exécutez la
/*--- fonction pour obtenir le srid UTM zone de la geometrie ---*/
-- Function: skeleton.sridUtmByLongitude(geometry)
CREATE OR REPLACE FUNCTION skeleton.sridUtmByLongitude(geometry)
RETURNS integer AS
$BODY$
DECLARE
gg ALIAS FOR $1; -- Geometrie
pt geometry; -- Geometrie de type POINT
sr int4; -- srid
BEGIN
sr := 0;
IF GeometryType(gg)='POINT' THEN
pt := gg;
ELSE
pt := ST_Centroid(ST_Envelope(gg));
END IF;
sr := SRID(pt);
IF sr = 4326 THEN
SELECT srid into sr FROM spatial_ref_sys
WHERE srtext like
(
SELECT
CASE
WHEN int2(y(pt)) >= 0
THEN '%WGS 84 / UTM zone '||int2((x(pt)+180)/6+1)||'N%'::text
ELSE '%WGS 84 / UTM zone '||int2((x(pt)+180)/6+1)||'S%'
END
AS utmzone
);
END IF;
RETURN sr;
END;
$BODY$
LANGUAGE plpgsql VOLATILE STRICT
COST 100;
ALTER FUNCTION skeleton.sridUtmByLongitude(geometry) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION skeleton.sridUtmByLongitude(geometry) TO postgres;
GRANT EXECUTE ON FUNCTION skeleton.sridUtmByLongitude(geometry) TO public;
3) skeleton.smoothvoronoiline
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III et exécutez la
/*--- fonction lissage ---*/
-- Function: skeleton.smoothvoronoiline(geometry)
-- DROP FUNCTION skeleton.smoothvoronoiline(geometry);
CREATE OR REPLACE FUNCTION skeleton.smoothvoronoiline(geometry)
RETURNS geometry AS
$BODY$
DECLARE
geom ALIAS FOR $1; -- geometry
sql1 text;
rec1 RECORD;
BEGIN
IF ST_NumPoints(geom)>2 THEN
sql1:='SELECT ST_LineFromMultiPoint(ST_Collect(a.geom )) as geom
FROM
(
SELECT ST_PointN(geometry('||quote_literal(geom::text)||'),generate_series(1,ST_NumPoints(geometry('||quote_literal(geom::text)||')),2)) as geom
) a;';
FOR rec1 IN EXECUTE sql1 LOOP END LOOP;
IF FOUND THEN
RETURN ST_AddPoint(rec1.geom,ST_EndPoint(geom));
END IF;
ELSE
RETURN geom;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE STRICT
COST 100;
ALTER FUNCTION skeleton.smoothvoronoiline(geometry) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION skeleton.smoothvoronoiline(geometry) TO postgres;
GRANT EXECUTE ON FUNCTION skeleton.smoothvoronoiline(geometry) TO public;
Etape 4 : Squelettisation
Nous allons utiliser la requête suivante pour générer un diagramme de voronoï, pour cela nous utilisons la fonction skeleton.voronoi créée précédemment qui reçoit deux paramètres :1) Création du diagramme de voronoï
Paramètre 1 : une liste de points que l'on extrait de l'exteriorring et de chaque interiorring,
SELECT ST_PointN(wkb_geometry,generate_series(1, ST_NumPoints(wkb_geometry))) as geom
FROM
(
SELECT st_exteriorring(wkb_geometry) as wkb_geometry,
ST_Length(ST_Transform(st_exteriorring(wkb_geometry),skeleton.sridUtmByLongitude(wkb_geometry))) as length
FROM skeleton.water_area
) as a
UNION ALL
SELECT ST_PointN(wkb_geometry,generate_series(1, ST_NumPoints(wkb_geometry))) as geom
FROM
(
SELECT ST_InteriorRingN(wkb_geometry,generate_series(1,ST_NumInteriorRings(wkb_geometry))) as wkb_geometry,
ST_Length(ST_Transform(ST_InteriorRingN(wkb_geometry,generate_series(1,ST_NumInteriorRings(wkb_geometry))),skeleton.sridUtmByLongitude(wkb_geometry))) as length
FROM skeleton.water_area WHERE id=1
) as b
Paramètre 2 : la table qui contiendra les lignes composant le diagramme de voronoï.
'b.geom','voronoi_line'
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III et exécutez la
SELECT skeleton.voronoi('(
SELECT ST_PointN(wkb_geometry,generate_series(1, ST_NumPoints(wkb_geometry))) as geom
FROM
(
SELECT st_exteriorring(wkb_geometry) as wkb_geometry,
ST_Length(ST_Transform(st_exteriorring(wkb_geometry),skeleton.sridUtmByLongitude(wkb_geometry))) as length
FROM skeleton.water_area
) as a
UNION ALL
SELECT ST_PointN(wkb_geometry,generate_series(1, ST_NumPoints(wkb_geometry))) as geom
FROM
(
SELECT ST_InteriorRingN(wkb_geometry,generate_series(1,ST_NumInteriorRings(wkb_geometry))) as wkb_geometry,
ST_Length(ST_Transform(ST_InteriorRingN(wkb_geometry,generate_series(1,ST_NumInteriorRings(wkb_geometry))),skeleton.sridUtmByLongitude(wkb_geometry))) as length
FROM skeleton.water_area WHERE id=1
) as b
) as b','b.geom','voronoi_line');
Visualisez le contenu la table skeleton.voronoi_line sous OpenJump, pour cela allez dans le menu Couche
Puis exécutez la requête suivante :
Et voici le resultat :

Vous pouvez remarquer qu'au centre du cours d'eau se dessine un squelette, pour le rendre plus visible, exécutez la requête suivante qui va le renforcer.

Le squelette qui apparait est très irrégulier, en forme de dent de scie, et disparait dans certaines zones, plus précisément autour des deux iles. Si l'on zoom sur l'ile la plus haute, voici ce que l'on peut voir :
Le squelette sur le bras le plus étroit n'est pas présent, alors que sur le bras plus large celui est présent. A ce stade du tutoriel, il semblerait que la squelettisation de ce cours d'eau n'est pas sur la bonne voie….
Pourtant rien n'est perdu, en analysant la figure ci-dessus, il apparait que la densité de points n'est pas assez importante, PostGIS va nous fournir la fonction qui va permettre d'augmenter cette densité, et plus précisément de placer des points sur le contour extérieur ainsi que les contours intérieurs avec un espacement déterminé.
Cette fonction est la fonction ST_Line_Interpolate dont voici la définition (extraite du site www.postgis.fr ) :
Line_Interpolate(LINESTRING, location)
Retourne un point interpolé le long d'une ligne. Le premier argument doit être une LINESTRING. Le second argument est de type float8 dont la valeur doit être comprise entre 0 et 1 et qui représente une fraction de la longueur 2d totale où le point doit être localisé.Nous allons placer des points tout les 10m le long de chaque contour.
Copiez/Collez les requêtes suivante dans l'éditeur de requêtes de PgAdmin III et exécutez les
TRUNCATE TABLE skeleton.voronoi_line;
SELECT skeleton.voronoi('(
SELECT ST_Transform(ST_Line_Interpolate_Point(wkb_geometry,generate_series(10, floor(length)::int, 10)/length),4326) as geom
FROM
(
SELECT ST_Transform(st_exteriorring(wkb_geometry),skeleton.sridUtmByLongitude(wkb_geometry)) as wkb_geometry,
ST_Length(ST_Transform(st_exteriorring(wkb_geometry),skeleton.sridUtmByLongitude(wkb_geometry))) as length
FROM skeleton.water_area
) as a
UNION ALL
SELECT ST_Transform(ST_Line_Interpolate_Point(wkb_geometry,generate_series(10, floor(length)::int, 10)/length),4326) as geom
FROM
(
SELECT ST_Transform(ST_InteriorRingN(wkb_geometry,generate_series(1,ST_NumInteriorRings(wkb_geometry))),skeleton.sridUtmByLongitude(wkb_geometry)) as wkb_geometry,
ST_Length(ST_Transform(ST_InteriorRingN(wkb_geometry,generate_series(1,ST_NumInteriorRings(wkb_geometry))),skeleton.sridUtmByLongitude(wkb_geometry))) as length
FROM skeleton.water_area WHERE id=1
) as b
) as b','b.geom','voronoi_line');
Puis exécutez la requête suivante pour en visualiser le résultat :

Puis enchainons la requête qui va renforcer le squelette.

Cela devient intéressant, le squelette apparait très nettement que ce soit dans le bras le plus étroit comme dans la partie la plus large. Nous allons zoomer sur le bras le plus étroit pour mieux se rendre compte du résultat, en désactivant auparavant l'affichage du diagramme de voronoï.
Nous pouvons constater, que le squelette apparait légèrement en dent de scie, l'application d'une fonction de lissage semble nécessaire, nous allons donc utiliser la fonction skeleton.smoothvoronoiline pour réaliser ce lissage.
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III et exécutez la
DROP TABLE IF EXISTS skeleton.skeleton_line;
CREATE TABLE skeleton.skeleton_line WITH OIDS AS
SELECT a.id,a.geom,st_Length_Spheroid(a.geom,'SPHEROID("WGS 84",6378137,298.257223563)') as longueur,ST_NumPoints(a.geom) as nbpt
FROM
(
SELECT (st_dump(ST_LineMerge(ST_Union(wkb_geometry)))).path[1] as id,skeleton.smoothvoronoiline((st_dump(ST_LineMerge(ST_Union(wkb_geometry)))).geom) as geom
FROM skeleton.voronoi_line
) a;
Puis visualisons le résultat sous OpenJump :


Après le passage de la fonction de lissage, nous obtenons un squelette ou l'effet dent de scie a disparu. Pour avoir une vue d'ensemble du squelette, zoomons sur l'étendue maximale du cours d'eau, regardons ci-dessous le résultat.
Sur cette vue d'ensemble, nous pouvons remarquer la présence de petites branches sur le squelette principale. Nous allons essayer de simplifier encore ce résultat, en éliminant certaines de ces branches. Affichons sous OpenJump les attributs de la table skeleton .skeleton_line qui sont triés sur le critère de la longueur de chaque LINESTRING.
Nous remarquons tout de suite que la longueur de certaines branches est inférieure à 10m (9 branches), inférieure à 70m (45 branches). Ce critère de longueur va nous permettre d'éliminer celles qui seront en dessous de ce critère et dont une extrémité ne sera pas connectée a une autre partie du squelette.
Avant de les supprimer, nous allons afficher les branches candidates à la suppression par le biais de la requête ci-dessous, en fixant le critère à 70m.
SELECT ST_AsBinary(geom),longueur
FROM skeleton.skeleton_line
WHERE id NOT IN(
SELECT a.id
FROM
(
SELECT a.geom,a.id,a.longueur,a.nbpt,(select count(b.*)
FROM skeleton.skeleton_line b
where (Distance(startpoint(a.geom),startpoint(b.geom))=0 or Distance(startpoint(a.geom),endpoint(b.geom))=0))-1 as nbconS,
(SELECT COUNT(b.*) FROM skeleton.skeleton_line b where (Distance(endpoint(a.geom),startpoint(b.geom))=0
or distance(endpoint(a.geom),endpoint(b.geom))=0))-1 as nbconE
FROM skeleton.skeleton_line a
) a
WHERE NOT (a.longueur < 70.0 and a.nbconS=0 or a.nbconE=0)
ORDER BY a.id
);

Les branches qui répondent au critère de longueur et dont une extrémité n'est pas connectée, apparaissent en rouge sur la figure ci-dessus. Elles peuvent être supprimées sans que la structure du squelette ne soit remise en cause, ce que nous allons réaliser avec la requête ci-dessous.
Copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III
DELETE FROM skeleton.skeleton_line
WHERE id NOT IN(
SELECT a.id
FROM
(
SELECT a.geom,a.id,a.longueur,a.nbpt,(SELECT COUNT(b.*) FROM skeleton.skeleton_line b WHERE (Distance(startpoint(a.geom),startpoint(b.geom))=0 or Distance(startpoint(a.geom),endpoint(b.geom))=0))-1 as nbconS,
(SELECT COUNT(b.*) FROM skeleton.skeleton_line b WHERE (Distance(endpoint(a.geom),startpoint(b.geom))=0 or distance(endpoint(a.geom),endpoint(b.geom))=0))-1 as nbconE
FROM skeleton.skeleton_line a
) a
WHERE NOT (a.longueur < 70.0 AND a.nbconS=0 or a.nbconE=0)
AND a.id
);
Exécutez la jusqu'à ce qu'il n'y ait plus de ligne modifiée.
La requête a été exécutée avec succés : 32 lignes modifiées. La requête a été exécutée en 177 ms.
La requête a été exécutée avec succés : 3 lignes modifiées. La requête a été exécutée en 22 ms.
La requête a été exécutée avec succés : 0 ligne modifiée. La requête a été exécutée en 27 ms.
Puis visualisons le résultat sous OpenJump :

Voila nous y sommes, le squelette est créé, il reste quelques branches qui pourraient être supprimées en augmentant le critère de longueur, pour notre exemple nous nous arrêterons là.
Utilisation du plugin PostGisViewer pour PgAdmin III
Pour la mise en place du plugin je vous renvoie à ce lien :
Plugin PostGisViewer pour PgAdmin III
Une fois la mise en place du plugin effective, si vous utilisez une version de PostgreSQL dont la version est supérieur ou égale à la 9.0, copiez/Collez la requête suivante dans l'éditeur de requêtes de PgAdmin III, exécutez la, puis fermez PgAdmin IIII .
ALTER DATABASE "NOM DE VOTRE BASE" SET bytea_output='escape';
Cette astuce est extraite de l'article « PgAdmin III 1.13 - change in plugin architecture and PostGIS Plugins » dans la partie « PostGIS plugin for displaying geometries in PgAdmin III » dont je vous conseille la lecture.- Vous pouvez maintenant rouvrir PgAdmin III, copiez/collez la requête suivante dans l'éditeur de requête (un seul éditeur ouvert à la fois)
SELECT st_asbinary(wkb_geometry) as geom,geometrytype(wkb_geometry),idFROM skeleton.water_area;
SELECT ST_AsBinary(wkb_geometry) as geom,geometrytype(wkb_geometry)
FROM skeleton.voronoi_line;
SELECT ST_AsBinary(geom) as geom, geometrytype(geom),longueur
FROM skeleton.skeleton_line
ORDER BY longueur;- Dans le navigateur d'objets de PgAdmin, vous devez être positionné sur votre base de données.
- Dans le menu plugins sélectionnez PostGisViewer, vous devriez obtenir ceci :

Sous Map Layers, chaque layer est le résultat d'une requête.
Conclusion
En premier lieu je tiens à remercier :
Georgi Fedoseevich Voronoï, sans qui rien de tout cela ne serait arrivé,
BostonGIS pour ses tutoriels,
Joe Conway pour PL/R, qui a rendu possible la mise en place de cet algorithme,
Postgres OnLine journal pour ses articles,
Refractions Research pour ses développements (PostGIS tout particulièrement),
...
Ce tutoriel est terminé, nous avons vu comment grâce au diagramme de voronoï, réaliser la squelettisation d'un cours d'eau de type POLYGON. L'enchainement de toutes ces requêtes pourrait bien sur être facilement remplacé par une fonction, à qui l'on passerait deux paramètres :- la géométrie à traiter,
- la tolérance pour la suppression des branches.
A vous de jouer…
- le premier (PL/R Part 1) qui vous permettra d'installer R, ainsi que l'extension PL/R.
-
9:10
Plugin PgAdmin III : Export PostGIS
sur A GeoSpatial World
Un plugin pour PgAdmin III : Export PostGIS
Présentation Ce plugin d'export pour PostGIS a été développé en VB.Net 2008.
Il utilise l'utilitaire ogr2ogr qui fait partie du package d'outils Open Source FWTOOLS maintenus et mis à jour par Franck Warmerdam (d'ou les initiales FW).
Pour plus d'informations, consulter ce lien :
FWTOOLS
Et celui-ci pour ogr2ogr :
ogr2ogr
Installation
La version de PgAdmin III utilisée pour ce tutorial est la 1.10.3, lien ci-dessous pour la télécharger :PgAdmin3-1.10.3
La version de FWTOOLS utilisée pour ce tutoriel est la 2.4.7, lien ci-dessous pour la télécharger :
FWTools 2.4.7
Lancer l'installation et définir le répertoire d'installation :
C:\FWTools à la place C:\Program Files\FWTools2.4.7
Le programme d'export pour PostGIS est disponible ici :
Nouvelle Version PostGisExport
Voir la fin du tutoriel pour la nouvelle version.
Configurer PgAdmin III
PgAdmin III 1.10 donne la possibilité d'ajouter très facilement des applications externes dans le menu plugins.
Pour activer la disponibilité de ces applications:- Ouvrir PgAdmin III, dans le menu Fichier sélectionner Préférences
- Dans l'onglet Général donner le chemin de l'application PgAdmin III (pgadmin3.exe)
- Sortir de PgAdmin III,
- Aller dans le répertoire C:\Program Files\pgAdmin III\1.10, faire une copie du fichier plugins.ini,
- Ouvrir le fichier plugins.ini et copier les lignes suivantes a la fin du fichier :
;
; PostGisExport (Windows)
;
[Separator]
Title=Export PostGIS
Command="$$PGBINDIR\PostGisExport\PostGisExport.exe" "host=$$HOSTNAME" "port=$$PORT" "username=$$USERNAME" "password=$$PASSWORD" "database=$$DATABASE" "schema=$$SCHEMA" "table=$$TABLE"
Description=Export PostGIS
KeyFile=$$PGBINDIR\PostGisExport\PostGisExport.exe
Platform=windows
ServerType=postgresql
Database=Yes
;AppliesTo=database
SetPassword=Yes
- Les variables utilisées, contiendront respectivement :
- $$PGBINDIR : répertoire dans lequel se trouve pgadmin3.exe,
- $$HOSTNAME : adresse du serveur,
- $$PORT : port,
- $$USERNAME : utilisateur ,
- $$PASSWORD : mot de passe,
- $$DATABASE : base de données,
- $$SCHEMA : schéma courant,
- $$TABLE : table sélectionné.
- Enregistrer le fichier,
- Ouvrir PgAdmin III et dans le menu plugins vous devriez voir ceci :


Comment utiliser le plugin
Passons maintenant à l'utilisation du plugin, pour cela ouvrir PgAdmin III :- se connecter à un serveur,
- choisir une base de données,
- sélectionner un schéma puis une table,
- lancer l'exécution du plugin

- vous devriez obtenir cette fenêtre :

- Sélectionner un format d'export parmi ceux disponibles (ESRI Shapefile est le format par défaut),
- déployer la sortie console,

- Cliquer sur le bouton export pour obtenir le format d'export sélectionné.

Un répertoire correspondant au format sélectionné est créé s'il n'existe pas, dans lequel vous trouverez le ou les fichiers créés.
Si vous le souhaitez, vous pouvez récupérer la ligne de commande dans la sortie console.
Nouvelle Version : 1ere Mise a jour- J'ai ajoute le choix du système de projection en sortie,
- La détection du chemin de FWTools, ce qui permet de gérer le cas ou l'installation n'a pas été faite sous C:\FWTools
- Ajout du format GPX

Nouvelle Version : 2eme Mise a jour- Ajout du format DXF,
- Export d'une requête, ce qui peut permettre d'exporter une vue.

Important :
La requête doit contenir la fonction srid afin de pouvoir fixer le srid source dans la boite d'export, et se terminera par un point virgule. Ne mettre qu'une seule requête dans la boîte SQL.
Exemple :
SELECT nom,code_insee,wkb_geometry,srid(wkb_geometry) FROM commune;
Dans le cas d'une requête, dans la partie destination le nom de sortie est fixé a query1, vous pouvez bien entendu le modifier en conservant l'extension, avant de cliquer sur le bouton export.
Rappel :
Le résultat de l'export sera visible sous le répertoire .\ PostGisExport\Data\"extension"
Exemple :
\ PostGisExport\Data\SHP
Conclusion
Si d'autres formats d'export vous intéressent (parmi ceux acceptés par ogr2ogr), faite m'en part, et je les rajouterais.
- Ouvrir PgAdmin III, dans le menu Fichier sélectionner Préférences
-
15:21
Plugin PgAdmin III : PostGIS vers Google Earth
sur A GeoSpatial WorldUn plugin PgAdmin III : PostGIS vers Google Earth
Présentation
Le plugin d'export de PostGIS vers Google Earth a été développé en VB.Net 2008
Installation La version de PgAdmin III utilisée pour ce tutorial est la 1.10.3, lien ci-dessous pour la télécharger :PgAdmin3-1.10.3
Le plugin d'export de PostGIS vers Google Earth est téléchargeable ici :
PostGIS2GE
et a décompresser dans le répertoire : C:\Program Files\pgAdmin III\1.10 qui correspond au répertoire d'installation de pgAdmin III.
La version de Google Earth utilisé pour ce tutorial est la 5.1.3535.3218, lien ci-dessous pour la télécharger :
Google Earth
Configurer PgAdmin III
PgAdmin III 1.10 donne la possibilité d'ajouter très facilement des applications externes dans le menu plugins.
Pour activer la disponibilité de ces applications:- Ouvrir PgAdmin III, dans le menu Fichier sélectionner Préférences
- Dans l'onglet Général donner le chemin de l'application PgAdmin III (pgadmin3.exe)
- Sortir de PgAdmin III,
- Aller dans le répertoire C:\Program Files\pgAdmin III\1.10, faire une copie du fichier plugins.ini,
- Ouvrir le fichier plugins.ini et copier les lignes suivantes a la fin du fichier :
;
; PostGIS2GE (Windows)
;
[Separator]
Title=PostGis2GE
Command="$$PGBINDIR\PostGIS2GE\PostGIS2GE.exe" "host=$$HOSTNAME" "port=$$PORT" "username=$$USERNAME" "password=$$PASSWORD" "database=$$DATABASE" "schema=$$SCHEMA" "table=$$TABLE"
Description=PostGIS vers Google Earth
KeyFile=$$PGBINDIR\PostGIS2GE\PostGIS2GE.exe
Platform=windows
ServerType=postgresql
Database=Yes
;AppliesTo=database
SetPassword=Yes
- Les variables utilisées, contiendront respectivement :
- $$PGBINDIR : répertoire dans lequel se trouve pgadmin3.exe,
- $$HOSTNAME : adresse du serveur,
- $$PORT : port,
- $$USERNAME : utilisateur ,
- $$PASSWORD : mot de passe,
- $$DATABASE : base de données,
- $$SCHEMA : schéma courant,
- $$TABLE : table sélectionné.
- Enregistrer le fichier,
- Ouvrir PgAdmin III et dans le menu plugins vous devriez voir ceci :

Comment utiliser le plugin- Ouvrir PgAdmin III, se connecter a une base de données, sélectionner un schéma, Tables, ouvrir un éditeur SQL, puis saisir une ou plusieurs requêtes séparées par des points virgules (voir )

- Puis exécuter le plugin PostGIS2GE qui va créer deux fichiers kml a partir des requêtes, et charger ces fichiers dans google Earth.

- query1.kml est le résultat de la requête :
SELECT ST_Askml(ST_Force_2D(wkb_geometry)) as geom,ogc_fid,nom
FROM commune
WHERE nom='Sainte-Croix-de-Quintillargues';- query2.kml est le résultat de la requête :
SELECT ST_Askml(ST_Force_2D(a.wkb_geometry)) as geom,a.ogc_fid,a.nature,a.hauteur as extrude
FROM batiment a,commune b
WHERE b.nom='Sainte-Croix-de-Quintillargues'
AND a.wkb_geometry && b.wkb_geometry
AND ST_Contains(b.wkb_geometry,a.wkb_geometry);- Sous Google Earth passer en mode relief et changer l'affichage de query1.kml

- Incliner la vue (touche Maj + roulette souris) et..

... les bâtiments sont extrudés, revoyons la requête:SELECT ST_Askml(ST_Force_2D(a.wkb_geometry)) as geom,a.ogc_fid,a.nature,a.hauteur as extrude
C'est le champ hauteur qui permet de réaliser cette extrusion, pour que cela soit possible, ce champ doit contenir la hauteur (ici du batiment) et avoir pour alias extrude. Le plugin saura alors qu'il doit rajouter les balises suivantes dans le kml après la balise <Polygon> :
FROM batiment a,commune b
WHERE b.nom='Sainte-Croix-de-Quintillargues'
AND a.wkb_geometry && b.wkb_geometry
AND ST_Contains(b.wkb_geometry,a.wkb_geometry);
<extrude>1</extrude><tessellate>1</tessellate><altitudeMode>relativeToGround</altitudeMode>
et donnera comme valeur Z, la valeur du champ hauteur.
A suivre.... - Ouvrir PgAdmin III, dans le menu Fichier sélectionner Préférences
-
14:38
Plugin PgAdmin III : PostGISViewer suite
sur A GeoSpatial WorldPlugin PgAdmin III : PostGISViewer suite
Nouvelle version
PostGISViewer
Multi-géométrie
J'ai mis en place la prise en compte des multi-géométries :- MULTIPOLYGON
- MULTILINESTRING
- MULTIPOINT
Requêtes
J'ai rajouté la possibilité d'exécuter les requêtes présente dans l'éditeur SQL de PgAdmin III, mais pour que cela soit possible, il faut respecter certaines règles:- Un seul éditeur SQL de PgAdmin III doit être ouvert.
- Pour que la ou les requête(s) soient exécutées, il ne faut pas être positionné sur un nom de table dans le navigateur d'objets de PgAdmin III , ou alors que la table soit déjà chargée dans le visualiseur. Une table sélectionnée prendra toujours le pas sur une ou des requêtes.
- Le premier champ doit être géométrique ou une géométrie issue d'une fonction de traitement géométrique (ST_Buffer, ST_Intersection....) par requête sera utilisé pour l'affichage. Ce champ ou cette géométrie sera encapsulé par la fonction AsBinary et aura pour alias geom :
- SELECT AsBinary(wkb_geometry) as geom ....
- SELECT AsBinary(ST_Buffer(wkb_geometry, 1.0)) as geom...
- SELECT AsBinary(ST_Intersection(a.wkb_geometry,b.wkb_geoemetry)) as geom...
- ....
- Le second champ doit permettre de déterminer le type de géométrie, il doit donc être encapsulé par la fonction GeometryType, un alias n'est pas nécessaire :
- SELECT ..., GeometryType(wkb_geometry)...
- SELECT ..., GeometryType(ST_Buffer(wkb_geometry,1.0))...
- SELECT ..., GeometryType(ST_Intersection(a.wkb_geometry,b.wkb_geometry))...
- ....
- Chaque requête devra se terminer par un point virgule, ce qui permettra de pouvoir exécuter plusieurs requêtes a la suite.
Ci-dessous deux requêtes se terminant par des points virgules :- La première requête va charger la commune qui a pour nom 'Sainte-Croix-de-Quintillargues'
- La seconde requête va charger tous les bâtiments de cette commune.

Après avoir lancé le plugin PostGISViewer, les deux requêtes sont exécutées et donne le résultat suivant :
Les couches créées portent comme nom query avec un identifiant qui s'incrémente pour toute la cession du visualiseur.
Toutes suggestions, remarques pour l'amélioration de cet outil seront les bienvenues.
A suivre... -
12:57
Un plug-in pour PgAdmin III : PostGISViewer
sur A GeoSpatial World
Un plug-in pour PgAdmin III : PostGISViewer
Présentation
Le visualiseur a été développé en VB.Net 2008 avec MapWindow 6.0 téléchargeable à cette adresse :
mapwindow 6.0
MapWindow 6.0 (Orlando) est un projet SIG Open Source ainsi qu'une librairie d'outils géospatial pour le développement en .NET, écrit en C#. Map, Legend, Toolbox ainsi que les autres contrôles sont les composants qui peuvent être utilisés pour créer une application SIG a partir de la librairie MapWindow.dll, et dans mon cas ce visualiseur.
Installation
La version de PgAdmin III utilisée pour ce tutorial est la 1.10.3, lien ci-dessous pour la télécharger :PgAdmin3-1.10.3
Le visualiseur pour PostGIS est téléchargeable ici :
PostGISViewer.
et a décompresser dans le répertoire : C:\Program Files\pgAdmin III\1.10 qui correspond au répertoire d'installation de pgAdmin III.
Configurer PgAdmin III
PgAdmin III 1.10 donne la possibilité d'ajouter très facilement des applications externes dans le menu plugins.
Pour activer la disponibilité de ces applications:- Ouvrir PgAdmin III, dans le menu Fichier sélectionner Préférences
- Dans l'onglet Général donner le chemin de l'application PgAdmin III (pgadmin3.exe)
- Sortir de PgAdmin III,
- Aller dans le répertoire C:\Program Files\pgAdmin III\1.10, faire une copie du fichier plugins.ini,
- Ouvrir le fichier plugins.ini et copier les lignes suivantes a la fin du fichier :
;
; PgViewer (Windows)
;
[Separator]
Title=PostGisViewer
Command="$$PGBINDIR\PostGisViewer\PGViewer.exe" "host=$$HOSTNAME" "port=$$PORT" "username=$$USERNAME" "password=$$PASSWORD" "database=$$DATABASE" "schema=$$SCHEMA" "table=$$TABLE"
Description=PostGIS Viewer
KeyFile=$$PGBINDIR\PostGisViewer\PGViewer.exe
Platform=windows
ServerType=postgresql
Database=Yes
;AppliesTo=database
SetPassword=Yes
- Les variables utilisées, contiendront respectivement :
- $$PGBINDIR : répertoire dans lequel se trouve pgadmin3.exe,
- $$HOSTNAME : adresse du serveur,
- $$PORT : port,
- $$USERNAME : utilisateur ,
- $$PASSWORD : mot de passe,
- $$DATABASE : base de données,
- $$SCHEMA : schéma courant,
- $$TABLE : table sélectionné.
- Enregistrer le fichier,
- Ouvrir PgAdmin III et dans le menu plugins vous devriez voir ceci :


Utilisation du visualiseur PostGIS
Passons maintenant à l'utilisation du plugin, pour cela ouvrir PgAdmin III, se connecter à un serveur et choisir une base de données.
A ce stade la, si nous lancions l'exécution du plugin PostGISViewer, les variables contiendraient :- $$PGBINDIR = C:\Program Files\pgAdmin III\1.10
- $$HOSTNAME = localhost
- $$PORT = 5432
- $$USERNAME = utilisateur connecté
- $$PASSWORD = mot de passe
- $$DATABASE = BDTEST
- $$SCHEMA = $$SCHEMA (aucun schéma de sélectionné)
- $$TABLE = $$TABLE (aucune table sélectionnée)

Lancer l'exécution du plugin :
Vous devriez obtenir la visualisation de vos données :
Si vos données n'apparaissent pas :- Vérifier que la table sélectionnée existe bien dans la table geometry_columns,
- Vérifier le type de Géométrie qui doit être un de ces types :
- POINT
- LINESTRING
- POLYGON
Conclusion
Je prépare une prochaine version qui exécutera une requête de l'éditeur SQL de PgAdmin III, afin de pouvoir visualiser le résultat d'une requête spatiale.
- Ouvrir PgAdmin III, dans le menu Fichier sélectionner Préférences



