"Sans imagination il ne pourrait y avoir création."
Albert Jacquard.

"L'imagination est plus importante que le savoir."
Albert Einstein.

jeudi 10 mars 2011

AutoHotKey, OpenJump, PgAdmin3,PostGIS et Google Earth…

Présentation


clip_image001[7]
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 :
http://www.autohotkey.com

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


Ce premier script une fois compilé permettra de lancer :
  • OpenJump 1.4.0.3avec la combinaison de touche suivantes :
image
+
image
  • PgAdmin III avec la combinaison de touches suivantes :
image
+
image
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.
;--- 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
Sauvegarder le fichier sous AH_ToolsExec.ahk, puis appuyer sur la touche F5 pour lancer l’exécution.
lien pour télécharger AH_ToolsExec.ahk
script1_b

Vous devriez voir apparaitre un icône en forme de H dans la barre de tâches.
script1_c
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.
script1_d
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

image
+
image
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.
ExecQuerySql_2
Le gestionnaire de connexion s’affiche, si la liste est vide, cliquez sur le bouton Ajouter.
ExecQuerySql_3
ExecQuerySql_4
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.
ExecQuerySql_5
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
return
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 F1, cela doit déclencher l’ouverture de la boite de dialogue “Exécuter une requête SQL”

Touche Windows + Touche F2

image
+
image
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,100
            IfInString, 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
            }
        }
       
       
    return
Cré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.
result_ F2

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 Earth

Nous 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

image
+
image
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()
return
Cré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.

Conclusion

Voilà, 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….Sourire