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

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

vendredi 4 juin 2010

Plugin PgAdmin III : PostGISViewer suite

Plugin PgAdmin III : PostGISViewer  suite

Nouvelle version


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.
 Exemple

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...

19 commentaires:

  1. Marvellous ... I am using it, but utils are not working (i.e. Buffer)

    RépondreSupprimer
  2. thank you trap,

    I tried the buffer tool, and it's work.
    to perform it :
    select the tools tab,
    double clicked on the buffer tool,

    In the Input part :
    - select the input feature set in the combobox,
    - i don't change Buffer Distance,Quadrant segments and End cap style,

    In the output part :
    - click on the plus button and select the output directory and give a shape name for the result computation.

    Click on the OK button to execute the computation, a ToolProgress dialog box appears with some results.
    Click on the Close Button and now click on the plus icon in the main toolbar to load the new shape.

    RépondreSupprimer
  3. Formidable, je n'ai eu qu'a créer un dossier "data" dans le répertoire "postgisviewer" pour éliminer l'erreur générée à la première visualisation de table. Il faut penser à vider ce répertoire en fin de session de tous les "shp" qui sont générés à la volée indépendamment des "export".
    Je relève que les vues ne s'affichent pas dans le visualisateur bien qu'elles soient référencées dans "geometry_columns", est-ce normal, pensez-vous y remédier ?
    Pas de problème pour des query basiques, bravo cela facilite grandement le travail courant avec postgis.
    Cebe734

    RépondreSupprimer
  4. Cebe734,

    Je viens de créer une vue dans ma base de test, puis de la référencer dans la table geometry_columns. Si je sélectionne cette vue dans le navigateur d'objets, puis lance PostGISViewer, rien ne se passe. J'ai vérifié dans le fichier plugins.ini de PgAdmin III, aucune variable ne permet de pointer sur une vue, contrairement aux tables pour lesquelles existe une variable $$TABLE, donc a ce niveau je ne peux rien faire actuellement.
    Par contre une requête permet d'afficher le contenu de la vue.

    RépondreSupprimer
  5. bonjour,
    j'essai de lancer le plug in sur une table contenant un champ geom de type point et rien ne se passe. je pense avoir suivi à la lettre la proc d'install.
    xavier

    RépondreSupprimer
  6. bonjour, j ai testé avec pgadmin III et j'ai une fenêtre Microsoft.NET FRAMEWORK avec l'exception System.ArgumentOutOfRangeException : " l index était hors limites. il ne doit pas être négatif et doit être inférieur à la taille de la collection
    Nom du paramètre: index .
    Ou Puis je vous envoyer la suite du fichier ?
    Cordialement
    -------
    windows 7 premium 64 bit, .net 3.5 et 4.0, pgadmin 1.21.1 ( oct 3 2010,rev REL-1_12_1), Postgresql 9.0 ( x86) compile with VS 1500 32 bit , pgviewer 1.000 pixelius France 2010

    RépondreSupprimer
  7. I too am getting the same error as Anonyme a dit. I'm using 1.14 pgAdmin III standalone to PostgreSQL 9.1. Tried with embedded pgAdmin but got same error. I'm running Windows 7 64bit.
    ** Exception Text **
    System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    at System.ThrowHelper.ThrowArgumentOutOfRangeException()
    at System.Collections.Generic.List`1.get_Item(Int32 index)
    at MapWindow.Main.BaseList`1.get_Item(Int32 index)
    at MapWindow.Map.MapLayerCollection.get_Item(Int32 index)
    at pgviewer.mainmod.main(frmMain frm) in C:\Documents and Settings\jel\Mes documents\Visual Studio 2008\Projects\pgviewer\pgviewer\mainmod.vb:line 487
    at System.EventHandler.Invoke(Object sender, EventArgs e)
    at System.Windows.Forms.Form.OnLoad(EventArgs e)
    at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    at System.Windows.Forms.Control.CreateControl()
    at System.Windows.Forms.Control.WmShowWindow(Message& m)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    ** Loaded Assemblies **
    mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5448 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
    pgviewer
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/pgAdmin%20III/1.14/PostGisViewer/PGViewer.exe
    Microsoft.VisualBasic
    Assembly Version: 8.0.0.0
    Win32 Version: 8.0.50727.5420 (Win7SP1.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
    System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5447 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
    System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5446 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
    System.Runtime.Remoting
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
    MapWindow
    Assembly Version: 6.0.0.0
    Win32 Version: 6.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/pgAdmin%20III/1.14/PostGisViewer/MapWindow.DLL
    System.Core
    Assembly Version: 3.5.0.0
    Win32 Version: 3.5.30729.5420 built by: Win7SP1
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll
    Npgsql
    Assembly Version: 2.0.9.0
    Win32 Version: 2.0.9.0
    CodeBase: file:///C:/Program%20Files%20(x86)/pgAdmin%20III/1.14/PostGisViewer/Npgsql.DLL
    System.Data
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_64/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
    Mono.Security
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/pgAdmin%20III/1.14/PostGisViewer/Mono.Security.DLL

    RépondreSupprimer
  8. In the error stack above there is:

    at pgviewer.mainmod.main(frmMain frm) in C:\Documents and Settings\jel\Mes documents\Visual Studio 2008\Projects\pgviewer\pgviewer\mainmod.vb:line 487

    Why is this referring to a directory etc that simply does not exist on my computer?

    Simon

    RépondreSupprimer
  9. Pareil pour moi, les tables c'est ok mais pas les requêtes avec l'erreur suivante :
    Consultez la fin de ce message pour plus de détails sur l'appel du débogage
    juste-à-temps (JIT) à la place de cette boîte de dialogue.

    ************** Texte de l'exception **************
    System.ArgumentOutOfRangeException: L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : index
    à System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
    à System.ThrowHelper.ThrowArgumentOutOfRangeException()
    à System.Collections.Generic.List`1.get_Item(Int32 index)
    à MapWindow.Map.MapLayerCollection.get_Item(Int32 index)
    à pgviewer.mainmod.main(frmMain frm) dans C:\Documents and Settings\jel\Mes documents\Visual Studio 2008\Projects\pgviewer\pgviewer\mainmod.vb:ligne 487
    à pgviewer.frmMain.frmMain_Load(Object sender, EventArgs e) dans C:\Documents and Settings\jel\Mes documents\Visual Studio 2008\Projects\pgviewer\pgviewer\frmMain.vb:ligne 28
    à System.EventHandler.Invoke(Object sender, EventArgs e)
    à System.Windows.Forms.Form.OnLoad(EventArgs e)
    à System.Windows.Forms.Form.OnCreateControl()
    à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    à System.Windows.Forms.Control.CreateControl()
    à System.Windows.Forms.Control.WmShowWindow(Message& m)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    à System.Windows.Forms.ContainerControl.WndProc(Message& m)
    à System.Windows.Forms.Form.WmShowWindow(Message& m)
    à System.Windows.Forms.Form.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    RépondreSupprimer
    Réponses
    1. Après avoir testé les releases 1.10, 1.12.3, 1.14.0 et 1.14.1, le problème survient avec les releases 1.14.x

      j'attends avec impatience votre correctif

      Supprimer
    2. Pour continuer sur mes tests, à l'ouverture de la fenêtre query votre programme ne la reconnait pas et donc pour lui il n'y a pas de requête chargée d'où le plantage

      En espérant vous avoir aidé

      Supprimer
  10. For days I'm finding impossible to download the plug-in because there is a bug in the download page, the word of the captcha is not shown. I have read that it is wrong is happening to more people. Please, can you put a copy on another server?

    RépondreSupprimer
  11. Bravo pour ce travail, j'ai hâte de le tester mais le lien de téléchargement du viewer renvoie sur un fichier inexistant dans dl.free. Merci par avance.

    RépondreSupprimer
  12. Bonjour, je voulais savoir si il était possible de sortir les coordonnées de points ou de polygones à partir d'une table ou la colonne geometry est codée... Si oui, comment faire???

    RépondreSupprimer
  13. Il y a un virus dans le link. Please fix?

    RépondreSupprimer
  14. Link die please fix it.

    RépondreSupprimer
  15. Будьте так добры, постройте новую версию с последним изданием Npgsql.dll

    Библиотека более не требует mono.security и пользуется Microsoft .NET System.Numerics, разгружает систему и улучшает скорость работы.

    Madamme and Monsigniore, the powers that be,

    Can you please create new build for pgviewer.exe using latest edition of Npgsql.dll.

    It switched to Microsoft's .NET System.Numerics from mono.security. Which helps to lighter weight and better system speed.

    Гит адрес библиотеки ( Git address of the library )

    https://github.com/npgsql/npgsql

    RépondreSupprimer