PyconFR 2015 — Geoalchemy

Note

Voici quelques notes prises durant la PyconFR 2015, à Pau. N'hésitez pas à les completer si besoin.

Speaker: Eric Lemoine, Camp to camp. (@elemoine)

Bibliothèque python basée sur SQL alchemy, pour interagir avec des bases de données geographiques / spatiales.

Une base de donnée optimisée pour representer et rechercher des données qui representent des objets dans un espace géométrique.

POSTGIS

POSTGIS s'appuie sur postres pour offrir des types géographiques, des fonctions et des indexes (R-Tree), qui permettent de ranger les géométries dans des "boites englobantes".

Pour créer une base de données postgis, il faut faire un "create extension postgis", ce qui installe tout ce dont on a besoin.

il est possible d'apeller GEOMETRY(POINT) par exemple.

ST_GeomFromText('POINT(lat long)') permet de convertir un point dans un objet geometrie interne à postgres.

ST_DWithin permet de trouver les personnes qui sont autour d'un rayon donné.

L'ensemble des fonctions proposées par postgres commencent par ST_*

SQLAlchemy

Il s'agit d'une bote à outil qui permet de faire des requetes de manière simple. Il y a une philosophie forte.

Deux parties: - ORM - CORE

Il est possible d'utiliser simplement le core si l'on sohaite (sans utiliser l'ORM)

Core

Il est possible d'utiliser SQL Alchemy pour générer les tables à l'origine. Core permet d'utiliser des tables, et d'executer une insertion, depuis python. Il est possible de representer les requetes avec des methodes chainées select().where() etc.

Le "core" ne fait pas de mapping du tout, il manipule des Tables SQLA directement.

ORM

L'ORM fait, lui, du mapping. C'est cette couche que l'on va utiliser dans une application Web complexe par exemple.

  • il est possible de travailler avec une session Session() puis on effectue des opérations et on commit().

GeoAlchemy

  • Créé en 2009, pour supporter uniquement postgis.
  • Depuis, d'autres bases de données (MySQL, Spatialite, MySQL server) etc.
  • Réécriture depuis grace à la nouvelle API de SQLAlechemy, mais perte du support d'autres backends.
  • Finalement, retour sur POSTGIS uniquement, pour évite d'avoir à supporter les différences de tous les backends.

Features

Très simple de s'intégrer avec les features de POSTGIS, par exemple en déclarant une colonne en tant que "Géometrie".

Exemple: session.query(Lake).filter(Lake.geom.ST_Buffer(2).ST_Area) permet de lister l'ensemble des lacs avec une aire de 2 au moins.

S'intègre bien avec des services existants (shapely, pyramid, etc).

Utilisation de geojsondumps pour representer des features en geojson.

Status

Le projet est completement documenté sur read the docs. La documentation est assez complete et solide. Il est intégralement testé, sur differentes versions de python, sqlalchemy et postgres.

3 ou 4 developeurs actifs sur le projet, ça fonctionne plutôt bien. Pour

contribuer, il est possible de faire cela sur github.

Slides de la presentation sur http://erliem.net/talks/pyconfr2015

Resources:

Question: