3D spatial operations and exact geometries for PostGIS

Mardi, 29 Janvier 2013

Motivation

Oslandia and IGN are involved in developping 3D spatial operations for PostGIS, with a use case focus on city modeling (CIM), and with a 3-year partial fundings from the European Union (FEDER).

CGAL

After PostGIS Paris Code Sprint, we really considered using the CGAL library, which already implements several 3D algorithms.
CGAL is also able to guarantee exact computations through the use of arbitrary precision numbers (if we choose the right CGAL kernel)

The question became: can we use CGAL as an underlying geometric computation framework for 3D operations with the additional benefit of exact computations ?

SFCGAL

We started by building an OGC Simple Feature compliant library on top of CGAL, called SFCGAL.

It is not yet complete, but main design elements have been already fixed. The class hierarchy is pretty standard and lots of commonalities may be found with other libs, like GEOS.

However, SFCGAL stores geometry coordinates using arbitrary precision numbers, as CGAL does.

On top of this class hierarchy, some 2D and 3D operations have already been implemented :

  • 2D and 3D Intersection
  • 2D and 3D Intersection test (e.g ST_Intersects)
  • 2D and 3D Convex Hull
  • 2D and 3D Triangulation
  • 2D and 3D distances
  • 3D Extrusion (from a 2D geometry)
  • 2D Minkowski Sum

PostGIS-sfcgal

A PostGIS branch is also available including SFCGAL handling. It exposes SFCGAL functions to PostGIS.

PostGIS - SFCGAL architecture

PostGIS - SFCGAL architecture

All the new functions provided are isolated in a ’sfcgal’ schema.

Here is a list of already available functions :

  • ST_Intersection / ST_3DIntersection (supporting all types of geometries, including solids)
  • ST_Intersects / ST_3DIntersects (supporting all types of geometries, including solids)
  • ST_ConvexHull / ST_3DConvexHull
  • ST_Distance / ST_3DDistance
  • ST_DelaunayTriangles / ST_3DDelaunayTriangles
  • ST_Extrude
  • (in progress) ST_Buffer

Comparison to GEOS

A simple benchmark helps us to compare GEOS-based spatial operations with SFCGAL-based ones. Comparison can only be made for 2D operations, since GEOS is mainly 2D. (Python benchmark script)

SFCGAL’s speed is comparable to GEOS’ speed (sometimes even a bit better).
However, for few non-native CGAL operations (area for instance), we rely on our own (quick) implementation, which still lacks optimizations, they are then not (yet) as fast as GEOS-based functions.

So using CGAL with maximum precision for native spatial operations could be done with keeping the same kind of performances than GEOS.
Put differently, with CGAL we gain arbitrary precision without performance loss.

Support for exact geometries

But we do not take yet the full benefit of an exact computation framework. For instance, consider this post from Paul on OpenGeo blog :

SELECT
  ST_Intersects(
    ST_Intersection(
      'LINESTRING(0 0,2 1)'::geometry,
      'LINESTRING(1 0,0 1)'::geometry),
    'LINESTRING(0 0,2 1)'::geometry);

It should answers ‘true’. However it is not the case with current PostGIS implementation, because coordinates are represented using floating points between two consecutive calls.

The SFCGAL library does not enforce floating coordinates and keep their exact representations.
But obviously we loose this precision when switching back and forth to double on each (de)serialization calls (to and from GSERIALIZED).

In order to take benefit of the exact representation within nested functions, we added a new (de)serialization format that supports arbitrary precision called ‘exact_geometry’.

Reusing the previous example, we could now write :

db=# SELECT
  sfcgal.ST_Intersects(
    sfcgal.ST_Intersection(
       'LINESTRING(0 0,2 1)'::exact_geometry,
       'LINESTRING(1 0,0 1)'::exact_geometry),
    'LINESTRING(0 0,2 1)'::exact_geometry);
st_intersection
-----------------
POINT(2/3 1/3)
(1 row)

Notice the new ‘a/b’ rational format that figures internal rational representation. SFCGAL is also able to parse this extended WKT.

Referenced geometries

When calling nested functions, we spend time serializing and deserializing on each function call. Even if the geometry output from the first function is really the same than the input of the second one.

Why do we need to serialize and then deserialize the same geometry ?

If you consider that (de)serialization from liblwgeom to CGAL exact representation really takes time, nested calls are performance evil (yeah no less).

So it implies a new geometry type called ‘ref_geometry’.
Ref_geometry only copy their memory address (converted to some integers) from functions to functions.

This implies:

  • destruction of referenced geometries is postponed,
  • they are not designed to live outside the query they first appeared in (and have to be converted back to a regular geometry type in order to be stored, using for instance sfcgal.ST_Geometry()).

Implementation considerations

The first point means, in PostgreSQL terms, that such objects must be attached to the correct memory context in order to be deleted at the ‘right’ time.

If the context is deleted too early, terminal functions might not be able to access our previously allocated geometries.
On the other hand, choosing a too static memory context will let objects dangling until late and will explode memory consumption.
The current choice (attaching to the current ExprContext when possible, to MessageContext otherwise) gives good results, but this would have to pass advanced tests where different kinds of evaluation contexts are produced by the postgresql execution engine.

The other difficulty at this point is that we are dealing with C++ objects.
Allocating something with palloc() allows it to be automatically deleted on memory context destruction. However no C++ destructors are called in that case.

But, memory contexts have support for user-supplied reset and deletion functions. Referenced geometries are then created on a custom child memory context. When this custom context is deleted (by its parent), C++ objects can be safely deleted.

Still with the same example, we get:

db=# SELECT sfcgal.ST_Intersection(
    'LINESTRING(0 0,2 1)'::ref_geometry,
    'LINESTRING(1 0,0 1)'::ref_geometry);
st_intersection
-----------------
POINT(2/3 1/3)
(1 row)

And, in order to illustrate the temporary nature of referenced geometries:

db=# CREATE TABLE temp_geo AS SELECT 'POINT(0 0)'::ref_geometry;
SELECT 1
db=# SELECT * FROM temp_geo;
NOTICE:  Referenced geometries must not be stored
ref_geometry
--------------
-deleted-
(1 row)

Referenced geometries are here made to be used with the SFCGAL::Geometry class. However, the mechanism is generic enough to be applied to other (C++) types.

Serialization comparison

A quick bench (4 nested calls to a function that does no processing, i.e sfcgal.ST_Copy), is useful to show performance differences between geometry representations.

Referenced geometries are way faster than (SFCGAL) serialized geometries and even still faster than native GSERIALIZED geometries.

Notice also that serialization of exact geometries is still slower than native serialization through GSERIALIZED. The overhead might be due to a lack of optimization on this part, but we feel this is due to the storage of arbitrary precision numbers.

Serialization becnhmark: native vs. ref_geometry

Serialization benchmark: native vs. ref_geometry

Serialization becnhmark: native vs. exact_geometry

Serialization benchmark: native vs. exact_geometry

Regarding memory consumption, the three approaches consume a comparable amount of memory.

How to test ?

To test SFCGAL and our postgis branch:

  • Get and install CGAL 4.1 from cgal.org
  • Get and install SFCGAL (setting ‘SFCGAL_USE_STATIC_LIBS’ to OFF)
  • Get and install our postgis-sfcgal branch, (run ./configure with the ‘–with-sfcgal’ flag, refer to the README.md file for the other flags)
  • Alternatively, you can apply a patch against PostGIS trunk (revision 11054 at the time of writing)
  • Run postgis.sql on a database
  • Try a 3D intersection between two cubes with (you can display the resulting WKT with the ‘DemoPlugin’ from SFCGAL’s viewer)
    WITH unit_cube AS (
        SELECT
          sfcgal.ST_MakeSolid(sfcgal.ST_Extrude(
            sfcgal.ST_Extrude(
              sfcgal.ST_Extrude('POINT(0 0)'::geometry, 1, 0, 0),
              0, 1, 0),
            0, 0, 1)
          )
        AS solid
      )
    SELECT ST_AsText(sfcgal.ST_3DIntersection( solid, ST_Translate( solid, 0.5, 0.5, 0 )))
    FROM unit_cube;
    
  • Try using ‘exact_geometry’ and ‘ref_geometry’ types through ‘::’ cast or through conversion functions (sfcgal.ST_RefGeometry() and sfcgal.ST_ExactGeometry())

3D viewer

To render 3D operations, SFCGAL is shipped with a really basic 3D viewer based on Open Scene Graph and QT. It is able to connect to a PostgreSQL base. Usage is only for dev/debug purpose, consider it also as alpha.

SFCGAL viewer demo

SFCGAL viewer demo

We are also investigating the use of QGIS (with the Globe plugin) to serve as a 3D viewer of spatial queries.

PostGIS 3D demo

PostGIS 3D demo

Discussion

Integration

We would like, as you could guess, to see PostGIS SFCGAL functions included into PostGIS.

Points to discuss/validate:

  • As a first step, PostGIS-sfcgal support could be added in a quite near future, into PostGIS trunk, since its compilation is optional, it does not interfere with existing PostGIS functions through the use of a separate schema.
  • The ‘exact_geometry’ type is important to keep the ability to nest several function calls without loosing geometry precision (and so 3D topology).
    On the long term however, what about a single geometry type that would optionally support arbitrary precision numbers ? This would probably need some efforts around GSERIALIZED functions. To be discussed.
  • The ‘ref_geometry’ may first be considered optional. However it allows to keep performance with nested functions using SFCGAL. Current implementation is still to be considered a bit experimental and would have to pass more tests to be fully qualified, before a PostGIS integration. Any feedback related to C++ objects handling within the PostgreSQL framework is welcome.
  • A quite minor point, is related to SFCGAL wrapper code written in C++. Some may find that it breaks the consistency of pure C PostGIS sources, but it was easier for early design and tests. Is keeping direct C++ calls from PostGIS not a big deal or, on the contrary, a C API is a need, for the sake of consistency ?

Roadmap

We still are involved in this project till (at least) end of 2014, so the current roadmap, for the next months, is:

  • Several spatial processing are still missing. Especially the complete set of boolean predicates and constructions (which are present in CGAL, so more an interface task)
  • There is no mechanism of geometry caching like GEOS has. This would be of interest regarding performances
  • Fine tuning of some CGAL algorithms used are still needed.
  • Hopefully, progress with PostGIS trunk integration

Feel free to share your thoughts, remarks and critics.

La première version de MapServer Suite est là !

Jeudi, 15 Novembre 2012

MapServer Suite intègre les dernières versions de MapServer, MapCache et TinyOWS, sorties toutes trois simultanément hier, au travers d’une release commune.
Bref un pas de plus vers des solutions de Web SIG de plus en plus intégrées…

La dernière version de MapServer, la 6.2 donc, apporte de nombreuses fonctionnalités supplémentaires, notamment en terme de symbologies complexes et de labellisations avancées.
Confortant encore l’avance de MapServer par rapport aux autres moteurs Web cartographique en terme de rendus complexes.

Des illustrations graphiques permettent de se rendre compte de ces nouveaux rendus, cf notamment:

On ne s’étonnera pas outre mesure, que la plupart des ces nouvelles fonctionnalités aient été mandaté par un acteur ayant des exigences fortes en matière de sémiologie, à savoir Météo France.

La conformité INSPIRE View Service a également été rajouté dans cette release de MapServer.

Une attention particulière pour Thomas Bonfort, qui a cumulé sur ce cycle de développement les casquettes de développeur de moultes fonctionnalités de rendu graphique, de release manager de cette 6.2, et de développeur principal de MapCache (excusez du peu).

MapCache, pour sa part, est une solution de cache de tuile haute performance,
dotée de fonctionnalités novatrices (assemblage vertical et horizontal), gérant de multiples protocoles (TMS, WMS, WMTS…) et capable de stocker les tuiles dans différents format de stockage.

TinyOWS rajoute quant à lui la composante WFS-T haute performance, permettant de générer des flux vectoriels GML ou GeoJSON en provenance de PostgreSQL/PostGIS et, le cas échéant, de permettre leur édition depuis un client WFS-T (QGIS, OpenLayers…).

Code source de MapServer Suite 12.11:
http://download.osgeo.org/mapserver/mapserver-suite-12.11.tar.gz

Texte de l’annonce de release officielle:
http://mapserver.org/trunk/development/announce/6-2.html

Retour du QGIS Community meeting 2012 @ Essen

Jeudi, 11 Octobre 2012

La nouvelle édition de la rencontre des développeurs QGIS, ou «QGIS community meeting»  a eu lieu du 3 au 7 octobre 2012, à Essen en Allemagne. Il s’agit d’un moment privilégié pour la communauté pendant lequel les développeurs peuvent échanger dans un même lieu et faire le point sur les projets actuels et futurs. Pour cette édition, le HackFest est hébergé au LinuxHotel de Essen. Un lieu au calme, dans un cadre arboré, conçu spécialement pour l’épanouissement des développeurs pendant leurs quelques jours passés devant un écran. L’hôtel est sponsor de l’événement en offrant de très bonnes conditions d’hébergement pour le projet. L’événement est également sponsorisé par OSGEO et FOSSGIS e. V.

Les organisateurs locaux sont, pour cette édition, GDB Consult et SourcePole.

LinuxHotel, Essen

LinuxHotel, Essen

qgis_hackers

Hackers vaillants ...

Contrairement à l’édition précédente, il y a eu peu de présentations, voici cependant un résumé des principales discussions et présentations communes.

Raster pipes

Radim Blazek a présenté la nouvelle architecture relative à la prise en charge des couches de type “raster” dans QGIS. Il s’agit pour l’essentiel d’un refactoring du code de QGIS pour ce qui a trait à la gestion des couches raster. Le code correspondant était jusqu’à présent difficile à appréhender et en constante évolution en terme de nombre de lignes de code.

La modification introduite par Radim consiste à considérer les traitements raster depuis les sources de données jusqu’à leur visualisation sous forme d’un ensemble d’opérations (de filtres) à l’interface générique enchaînées à travers un pipeline. chaque chaînon recevant les données traitées par le chaînon précédent. Cette modification engendre un code plus compact et plus extensible qu’auparavant.

Par exemple, pour une tâche de visualisation d’une couche raster, la chaîne mise en oeuvre est la suivante :

Provider -> Renderer -> Resampler -> Projector

Chacun des maillons ne modifiant les données ou n’allouant de nouvelle zone mémoire que quand ceci est nécessaire.

Cette architecture permet d’envisager un enrichissement des fonctionnalités offertes à chacun des maillons de la chaîne. En particulier, il a été évoqué l’ajout de paramètres utilisateurs pour chaque filtre et leur déclinaison sous forme d’interface graphique ainsi que le lien possible avec Sextante.

Voir la présentation sur Youtube

Point sur les finances

Paolo Cavallini a présenté un résumé des finances du projet QGIS. Les dépenses en matière de hackfest ont été relativement fixes jusqu’à présent et permettent d’accueillir dans de bonnes conditions une trentaine de contributeurs. Par ailleurs un nouveau « Gold Sponsor », la société Asia Air Survey qui a fait don de 9000€ permet d’envisager sereinement les prochains Hackfest.

Des discussions ont eu lieu quant à la possibilité de faire financer le développement de nouvelles fonctionnalités ou de travaux de fond par la communauté des utilisateurs. Les groupes d’utilisateurs de QGIS semblent constituer sur ce point, une structure efficace. L’expérience positive du groupe suisse d’utilisateurs de QGIS serait donc à multiplier dans d’autres pays.

Un autre point récurrent est la prise en charge des dons « ciblés » pour le développement d’une fonctionnalité particulière. Il a été décidé de formaliser les demandes de financement collaboratif lorsqu’elles émanent de la communauté QGIS, via des plateformes web existantes, qui restent à déterminer.

Nouvel éditeur d’attributs

La ville d’Uster a présenté une proposition concernant une modification substansielle de l’éditeur d’attributs de QGIS. Il s’agirait de prendre en compte la structure relationnelle de la couche de données sous-jacente. Notamment lorsqu’une table contient des relations avec d’autres tables (relation 1:N qui est généralement représentée dans une base de données via une contrainte de clé étrangère). L’interface graphique serait enrichie et permettrait à la fois d’avoir connaissance des éventuels champs externes liés à un champ et de les éditer.

Les premières moutures devraient se concentrer sur les sources de données qui supportent intrinsèquement la notion de relation entres tables (PostGIS par exemple), bien que des discussions en off aient abordé le possible support des relations qu’il peut exister entre différents Shapefile.

La proposition détaillée est disponible en ligne sur Google Docs.

Integration d’Atlas

print_composer_atlas

Oslandia travaillait depuis quelques jours sur l’intégration du plugin Atlas dans le coeur de QGIS, grâce à de nombreux supports financiers. Ce travail a été terminé pendant le Hackfest et a été intégré avec succès dans le coeur de QGIS ! Des échanges fructueux avec Marco Hugentobler ont permis d’améliorer au passage la qualité du code.

La fonctionnalité de génération d’atlas fait maintenant partie intégrante du gestionnaire de composition de QGIS.

Elle a par ailleurs été enrichie par :

  • le support d’un mode de rendu à échelle fixe,
  • le support des expressions dans les étiquettes et les noms de fichiers de sortie (seul le champ $FIELD(xxx) était supporté par le plugin Python)

Un tutoriel plus complet sur ces nouvelles fonctionnalités est consultable en ligne.

Remote debugger

Pirmin Kalberer a présenté un plugin permettant de débugger aisément un plugin Python pour QGIS, via l’utilisation de pydev, sans avoir à modifier le plugin en question.
Il permet essentiellement de placer des points d’arrêts dans le code Python. L’exécution est également suspendue lorsqu’une exception est levée. Cette possibilité de « remote debugging » est cependant dépendante de l’environnement de développement utilisé (fonctionne a priori uniquement pour Eclipse et ERIC4).

Plugin Globe

Pirmin a également travaillé sur le plugin Globe qui permet l’affichage d’un globe terrestre dans QGIS en utilisant osgEarth. La compilation est maintenant de nouveau fonctionnelle sur la version courante du master sous Linux ainsi que sous Windows.

Gestion des contributions

Les nombreuses contributions au projet QGIS sont une bonne chose, mais il se pourrait que les retours faits aux contributeurs soient en peu frustrants. En particulier, il peut se passer un certain temps avant qu’un « pull request » sur github soit traité par les développeurs de QGIS. Afin de rationnaliser un peu le processus et de donner un peu plus de retour aux contributeurs sur le traitement de leurs ajouts, il a été proposé qu’une seule personne soit chargée de l’aiguillage central des soumission de patchs, en les affectant si nécessaire à d’autres développeurs.

Marco Hugentobler s’est proposé pour l’exécution de cette tâche.

Architecture tentaculaire

L’ensemble des serveurs et sites web gérés par le projet QGIS devient difficile à appréhender. Une tentative d’énumération exhaustive des serveurs et de leur localisation a été initiée avec les différents participants au Hackfest. L’image suivante donne une idée de la complexité actuelle de l’architecture.

qgis_web_servers

Organisation

L’organisation globale de l’événement a été saluée par l’ensemble des participants. Le Linux Hotel étant un lieu idéal pour un tél événement. La prochaine édition pourrait avoir lieu en Lettonie. Espérons que nous puissions de nouveau y être afin de continuer à améliorer Quantum GIS !

group

QGIS Atlas generation

Mercredi, 10 Octobre 2012

Following our involvement into the QGIS open source community, we are now pleased to inform you the Atlas plugin has been integrated into a core functionality of the QGIS print composer !
This work has been done thanks to financial support mainly from :

Other financial contributors :

  • John C Tull
  • Bill Williamson
  • Ujaval Gandhi

Here is a tutorial on how to use the new atlas generation functionality. You should have a version of the development branch that is dated after 10-6-2012 (date of the QGIS Hackfest) for it to be included.

The print composer includes generation functions that allow to create map books, or series of maps, in an automated way. The concept is to use a coverage layer, which contains geometries and fields. For each geometry in the coverage layer, a new output will be generated where the content of some canvas maps will be moved to highlight the current geometry.

It is also now possible to replace text labels set up in the composer, with coverage layer’s attribute values, enabling you to set a title, comment, document name, page number, or any dynamic information you want to display on your final maps.

Let’s see the steps needed to create a map book.

Create a project

Let us begin with a classic QGIS project, import our layers and set styles according to our needs.

qgis_atlas_1

Coverage layer

We have to create a layer containing coverage geometries, which can be any type of geometries, even if polygons are best to represent a coverage. This will be read by the atlas generator and for each feature of the layer, an output map will be created.

This coverage can have any field number and names. Here, we took a squared 3×3 grid that corresponds to delimiting zones with a special name.

qgis_atlas_2

Composer template

We can now create a template for our output, in the Quantum GIS composer. The template is a classic composer document. We have to remind which map item will contain our coverages. We can know the map item name with the tooltip (”Map 0” for example).

We will here create a simple layout with a central map object where each geometry will be displayed, a smaller map that will serve as an overview frame and two labels: one displaying the current zone name and another one displaying the current page number.

Expressions can now be inserted into labels. Fields of the coverage layer can then be used. This is much more powerful than the previous $FIELD() syntax.

Four new variables have been added:

  • $feature and $numfeatures that give the current feature number and the total feature number of the coverage layer
  • $page and $numpages that give the current page number, in case of a multi page layout. These variables do not vary with the number of atlas features.

So for instance, if we have a 2-page document with a coverage layer of 10 features, and want to export everything to a single file, the expression

[% $page + ( $feature - 1 ) * $numpages %]

would give the current “real” page number.

Defining the overview map

Setting the overview map

Inserting the zone name in a label

Inserting the zone name in a label

Inserting the current feature number in a label

Inserting the current feature number in a label

Atlas generation

We are now ready to launch the generation, using the Atlas generation tab of the composer.

qgis_atlas_generation

The available options are:

  • Composer map : Item on the composer template where the map extent will be zoomed on each coverage. Use the tooltip over objects in the composer window to know the map item name
  • Coverage layer : The name of the layer containing the coverage geometries
  • Hidden coverage : If checked, the coverage layer itself will not be rendered on the output map
  • Margin around coverage : Amount of space around given coverage geometry. Default is 10% of coverage bounding box
  • Fixed scale : If checked, the composer map’s scale will not be changed for each geometry. It is up to the user to set its extent. The composer map’s will still be centered on each geometry of the coverage layer.
  • Output filename expression : Generic name of the output files. Expressions can be used here.
  • Single file export when possible : If checked, export will be done to a single file if possible. Until now, only PDF export supports this feature.

When all the options have been set, we can use the print / export features as before. These functionalities will be modified if an atlas generation has been configured.

For example, if we ask for an export to images, a dialog will ask us to select the output directory of the export as well as the output image format.

qgis_atlas_save_as

Atlas generation is supported for all rendering possibilities:

  • PDF export (either a single file for each geometry or a single file for all the geometries)
  • SVG export (one file for each page)
  • Bitmap images (one file for each page)
  • Printing

Results

Here is an example of what could be obtained when selecting the single-file export PDF :

qgis_atlas_multi_pdf

What’s next ?

If you like this feature and want some improvement, do not hesitate to contact us, we can develop it for you, or adapt it to your specific needs !

Sortie de QGIS 1.8 «Lisboa»

Mardi, 10 Juillet 2012

Nous avons attendu un peu avant d’annoncer cette sortie, c’est désormais chose faite : la dernière version majeure de Quantum GIS, la 1.8 est sortie officiellement, et est nommée «Lisboa».

Les binaires et les sources sont désormais disponibles dans OSGeo4W et sur la page de téléchargement de QGIS.

Parmi les nouveautés et les améliorations de cette version on trouve les points suivants.

Navigateur de données

Il s’agit d’une part d’une application séparée de qgis qui permet de naviguer dans les jeux de données disponible, et d’autre part d’un panel affichable dans QGIS. Ce dernier permet de lister toutes les données disponibles, que ce soit sur le disque local, ou à distance (PostGIS, WFS, WMS…) et de les cliquer-glisser sur le canevas. Une fonctionnalité indispensable ! Il est même possible dans cet outil de glisser des données locales vers des ressources distances, comme un shapefile vers une base PostGIS, pour faire l’import automatiquement.

DB Manager

Le DB Manager est un gestionnaire de base de données. Il permet de visualiser le contenu des bases PostGIS et Spatialite, et permet comme le navigateur de données, de cliquer-glisser des couches d’une ressource à une autre pour faire l’import/export. Il permet également d’exécuter des requêtes SQL et de visualiser le résultat en l’important directement dans le canevas QGIS. Il offre de plus des fonctionnalités de gestion des bases de données, qui si elles ne sont pas à la hauteur d’un PgAdmin, en restent néanmoins très utiles.

Symbologie

De nouvelles fonctionnalités apparaissent dans la symbologie QGIS : remplissage par lignes ou par points.


Un nouveau type de symbole apparait, nommé «ellipse» qui permet de dessiner des formes (ellipses, rectangles, triangles, croix) en donnant la largeur et la hauteur. Les paramètres peuvent être lus depuis des champs de données, afin de faire des symboles proportionnels.

Analyse de terrain

Un nouveau plugin du core a été ajouté pour faire de l’analyse de terrain et permet de faire des cartes de relief attrayantes.

Projets

Le support pour intégrer dans un projet des couches provenant d’un autre projet permet de gérer des ensembles de couches et de projets bien plus simplement.

Une nouvelle façon de regrouper les couches sélectionner simplifie également beaucoup la gestion des couches.

Logs

Un nouveau panel de messages permet de visualiser tous les messages émis par QGIS et par les plugins, afin de détecter plus facilement les problèmes et les informations données par QGIS sur son fonctionnement.

Personnalisation

Cette fonctionnalité fort attendue, permet de construire des interfaces simplifiées de QGIS en cachant divers éléments de la fenêtre principale de QGIS, afin d’aboutir à une version de l’interface simplifiée. Les fonctionnalités ne sont pas supprimées du programme, mais elles n’apparaissent plus.

Bouton d’action

Un nouvel outil d’action est disponible dans la barre d’outil. Il permet d’exécuter une des actions définies lors du clic sur un objet de la carte, comme par exemple ouvrir une page web en fonction de la valeur d’un champ.

Gestion d’échelle

Un nouvel outil de sélection d’échelle permet de se déplacer dans une liste d’échelles prédéfinies.

De plus, un nouvel outil de déplacement vers la sélection permet de se déplacer pour visualiser les objets sélectionner sans changer l’échelle courante.

Copier-coller les styles

Une nouvelle fonctionnalité développée par Oslandia est la possibilité de copier-coller les styles entre des couches. Cela permet de facilement appliquer un style à des couches qui sont similaires, pour en reprendre un et le modifier sur cette base.

Gestion des projections

Une nouvelle boite de dialogue de gestion des projections a été fournie pour cette version de QGIS. Elle permet de rechercher un CRS de façon beaucoup plus efficace.

Dépôt des plugins

QGIS ne supporte plus les anciens dépôts de plugin, et le bouton «Ajouter les dépôts-tiers» a volontairement disparu. Désormais le seul dépôt de plugins officiel est celui du projet, hébergé sur http://plugins.qgis.org . Les développeurs de plugins sont invités à migrer leurs plugins vers le nouveau dépôt. Celui ci bénéficie d’une interface web permettant de naviguer dans les plugin et de les noter.

Contrôle de l’ordre de rendu

Cette fonctionnalité avancée permet de dissocier l’ordre des couches dans la légende, de l’ordre dans lequel le rendu est fait.

De nombreuses autres améliorations ont été apportées dans cette version, comme le support de MS SQL Server, l’amélioration du support PostgreSQL/PostGIS, des nouveautés dans QGIS Server, un plugin de heat map, etc etc.

N’hésitez pas à télécharger cette version, et à profiter des nouveautés !

Lien vers l’annonce originelle en anglais

PostgreSQL Magazine

Lundi, 14 Mai 2012

pgmag

Je relaie ici l’information d’un nouveau magazine en ligne spécialement dédié à PostgreSQL, avec un contenu résolument technique.

Initiative communautaire de la très active communauté francophone PostgreSQL, où l’on retrouve sans surprises, pour ce premier numéro, certains de nos confrères et partenaires de Dalibo.

Souhaitons longue vie à ce mag !

Code Sprint PostGIS EU et Barcamp

Lundi, 30 April 2012

logo_osgeo

Les 15 et 16 mai prochain, un Code Sprint PostGIS Européen aura lieu à Paris: http://trac.osgeo.org/postgis/wiki/DevWikiEvent.

A cette occasion, un Barcamp, aura comme mission de faire se cotoyer les utilisateurs un tantinet avertis, et développeurs de PostGIS ou de librairies connexes, pour échanger sur les directions des futures versions de PostGIS.

Bref que veut-on mettre comme objectifs de la Road Map de la 3.0…

Le Barcamp aura lieu dans Paris intra Muros (quartier du Sentier), de 18h à 20h.

Le nombre de places étant volontairement limité, ne trainez pas pour manifester votre enthousiasme et vous inscrire derechef (soit directement sur la page Wiki, soit via mail: postgis@oslandia.com)

Master class PostGIS aux Rencontres SIG la lettre

Jeudi, 26 April 2012

Du 3 au 5 avril se tenaient dans les locaux de l’ENSG à Marne-La-Vallée les rencontres SIG-La-Lettre.

Dans ce cadre, Vincent Picavet a réalisé un master class sur PostGIS. Trois heures pour découvrir ce SGBD spatial, ses possibilités et la puissance des traitements réalisables. Le master class a eu un franc succès, la salle étant pleine à craquer.

Les supports du master class sont basés sur le workshop PostGIS donné au FOSS4G plusieurs années de suite, et qui a été traduit en Français. Oslandia a amélioré la traduction et publié une machine virtuelle permettant de réaliser le workshop de façon simple en utilisant VirtualBox.

Les sources de la traduction à jour sont disponibles sur GitHub (original sur PostGIS.fr), et la machine virtuelle est téléchargeable actuellement à l’adresse suivante : http://dl.free.fr/k3g8c0zkJ (attention fichier de 3.1Go).

Vous pouvez suivre ce tutoriel en toute autonomie, et n’hésitez pas à contribuer à l’amélioration des supports en forkant le projet sur GitHub. Si vous avez besoin d’aller plus loin, vous pouvez consulter le catalogue de formations Oslandia.

10e rencontres de la communauté QGIS (partie 3)

Mercredi, 25 April 2012

Le dixième Community Meeting de Quantum GIS (aka HackFest) s’est achevé la semaine passée. Après quelques jours pour se remettre de ces émotions codesques, voici la troisième et dernière partie d’un petit compte rendu (non exhaustif) de ce qui s’est déroulé pendant ce rendez vous de développeurs. Nous nous focalisons ici sur les aspects projet et structure de QGIS.

Nouveau cycle de releases

Tim Sutton a proposé de modifier l’organisation des sorties de nouvelles versions de QGIS, pour migrer vers des releases à dates fixes tous les 6 mois, en incluant une période de 3 semaines de test avant la release.

Serveur de test

Tim Sutton et Julien Malik ont également passé du temps sur la mise en place d’un serveur CDash, qui permet de remonter les informations de build de QGIS, afin de détecter les erreurs des tests unitaires sur des architectures les plus diverses possibles. C’est une avancée importante pour la qualité et la stabilité du projet, et devrait mener à une augmentation significative de la qualité du code.

«Friendly courses»

La notion de QGIS «friendly courses» a été introduite par Paolo Cavallini lors du meeting. Il s’agit de recenser sur la page wiki dédiée du projet, toutes les entreprises qui donnent des sessions de formation autour de QGIS et qui en contrepartie contribuent au projet QGIS : financement, développement, traduction…

Cette initiative permettra de sensibiliser à la fois les entreprises proposant des formations QGIS, mais aussi leurs clients, à l’écosystème Opensource. Ces derniers pourront ainsi en toute connaissance de cause favoriser les formations qui font avancer le projet.

Bien sur, en tant que contributeur de QGIS, Oslandia soutient cette initiative pour toutes ses formations liées à QGIS.

Last but not least

Le community meeting est aussi une opportunité pour les développeurs de mettre des visages sur des identifiants Git, et une soirée dans un vrai bouchon Lyonnais a permis de socialiser dans un contexte local et sympathique.

Le hackfest n’aurait pas pu voir le jour sans l’équipe d’organisation de l’OSGeo-fr, et sans les sponsors qui ont payé la salle, les pizzas, tacos, et quelques bières : 3Liz, Services Cartographiques, Camptocamp et Oslandia. Merci à eux pour leur participation nécessaire à l’avancée du projet !

10e rencontres de la communauté QGIS (partie 2)

Mardi, 24 April 2012

Le dixième Community Meeting de Quantum GIS (aka HackFest) s’est achevé la semaine passée. Après quelques jours pour se remettre de ces émotions codesques, voici la seconde partie d’un petit compte rendu (non exhaustif) de ce qui s’est déroulé pendant ce rendez vous de développeurs.

Sextante (ou : Geotraitements dans QGIS)

Un des gros sujet sur lesquels se sont concentrés les développements étaient l’intégration d’un plugin Sextante dans QGIS. Sextante est un framework, originellement disponible sous GvSig, qui se concentre sur les géotraitements. Il a été transcrit en Python par Victor Oyarla, et rendu disponible sous forme de plugin pour QGIS.


Ce framework permet de développer et d’intégrer très rapidement de nouveaux algorithmes de traitement raster ou vecteur. Victor a présenté son travail très impressionnant, avec les quelques modules déjà disponibles pour ce framework : GDAL, Ftools, Grass.. Et aussitôt de nouveaux modules se sont mis en route. La liste s’allonge chaque jour, et on trouve actuellement les modules suivants :

  • GDAL (Raster)
  • Ftools (Vecteur)
  • SAGA
  • mmqgis
  • GRASS (traitement raster et vecteurs)
  • OrfeoToolBox (Télédétection)
  • LAStools (Lidar)
  • R (geostatistiques)
  • Scripts

De futurs modules sont en cours de développement : PostGIS, WPS..

Cerise sur le gâteau, Sextante dispose également d’un modeleur, qui permet de faire des enchaînements de traitements complexes, en couplant les algorithmes de modules hétérogènes. On peut également lancer ces modèles en batch, et les utiliser en Python hors de l’interface graphique.

Il ne fait aucun doute que ce framework permettra à QGIS d’être le SIG disposant du plus grand nombre d’algorithmes de géotraitement sur le marché.

Ses capacités lui confèrent déjà quasiment le statut d’ETL spatial. Quand on sait que Victor va encore travailler neuf mois sur le sujet et que l‘inclusion dans le master de QGIS est déjà prévue, on ne peut que se réjouir et parier sans risque sur un outil stable, robuste et puissant rapidement.

Vous pouvez voir la vidéo de présentation de Victor : QGIS Sextante plugin

En attendant que le plugin soit intégré directement dans le cœur de QGIS dans la prochaine version, vous pouvez le télécharger et l’installer à partir du dépôt des plugins ou du dépôt de code subversion. Le tout est détaillé dans la page du plugin sur le projet QGIS.

À lyon, Julien Malik en a profité pour intégrer OTB dans Sextante, qui fournit désormais une panoplie large d’algorithmes de télédétection. Vous pouvez lire la description sur son blog (en anglais).

Des plugins dans le master

Il a été décidé suite à la rencontre d’intégrer des plugins Python directement dans le master de QGIS. Cela ne pourra se faire qu’à certaines conditions. Le premier plugin concerné est le DB Manager (Gestionnaire de bases de données). Cet outil gère les bases PostGIS et spatialite et permet notamment de transférer des tables de données d’une base à une autre.

Plugin Atlas

Des améliorations ont été faites par Oslandia sur le plugin Atlas, qui permet de générer des cartes au format PDF. La société Biotope a également publié un plugin compagnon qui permet de générer des synoptiques pour le plugin Atlas. Nous recherchons actuellement des financements pour ajouter de nouvelles fonctionnalités et pour stabiliser le plugin Atlas afin de pouvoir l’intégrer directement dans le master QGIS : contactez nous si vous utilisez ce plugin !

Nouvelles fonctionnalités dans le master

QGIS master supporte désormais nativement les styles SLD. Un pas de plus vers une interopérabilité avec les autres outils SIG du marché.

Le rééchantillonnage de raster a été réécrit en grande partie par Marco Hugentobler, et il est désormais possible de choisir la méthode d’échantillonnage pour le rendu (plus proche voisin, moyenne, cubique, etc). Les rendus sont bien plus lisses lorsqu’on dézoome sur une zone fortement détaillée. Ceci au prix d’un temps de rendu un peu plus long, mais la différence n’est pas significative.

Hugo Mercier d’Oslandia a ajouté dans QGIS la fonctionnalité de copier-coller des styles d’une couche QGIS à une autre. Le patch a été commité et est désormais disponible dans le master.