PostGIS Snippets 🔗

Posted by MĂ©dĂ©ric Ribreux 🗓 In kb/snippets/

#GIS #sql #snippets

Récupérer l'emprise d'une couche

Vous avez une couche qui contient des objets géographiques et vous voulez récupérer la géométrie du polygone qui englobe l'ensemble des objets de la couche. Vous allez devoir combiner quelques fonctions de PostGIS:

SELECT ST_Envelope(ST_Collect(table.wkb_geometry)) from table;

Importer un fichier avec un encodage différent de celui du serveur PostgreSQL

De temps à autre, lors de l'import d'une couche géographique issue d'un tiers, PostgreSQL nous jette en indiquant que le contenu de la table n'est pas livré dans un jeu de caractÚres valides. C'est souvent le cas pour les utilisateurs qui travaillent sous MS-Windows et dont l'encodage par défaut n'est pas UTF-8. En effet, les bases de données d'un serveur postgreSQL sont souvent configurées par défaut pour travailler en UTF-8. Dans ces conditions, l'import avec ogr2ogr echoue: la table est bien créée mais elle est vide.

Voici une petite astuce pour gĂ©rer ce problĂšme: il suffit d'indiquer l'encodage du fichier source au client postgreSQL. C'est assez dĂ©concertant car ogr2ogr n'est pas censĂ© ĂȘtre psql. Toutefois, il utilise bien les variables d'environnement de psql. Donc, il suffit d'ajouter un PGCLIENTENCODING=LATIN1 suivi de la commande OGR pour que tout se passe bien (avec les fichiers encodĂ©s en ISO-8859-1):

PGCLIENTENCODING=LATIN1 ogr2ogr -s_srs EPSG:2154 -f "PostgreSQL" PG:"host=server user=sid_admin dbname=GEOBASE password=password" ./COUCHE_QUI_VA_BIEN.TAB

Pas plus compliqué que ça !

Si ça ne fonctionne pas, vous pouvez utiliser d'autres encodages.

Importer une couche Ă©tiquette au format TAB

Il s'agit de rĂ©cupĂ©rer les Ă©lĂ©ments de style qui vont permettre d'afficher la couche (de points) avec les bonnes Ă©tiquettes dans QGis via PostGIS. Il s'agit d'une simple requĂȘte SQL via OGR qui va rĂ©cupĂ©rer les Ă©lĂ©ments de style de la couche TAB et les affecter dans des colonnes. Ensuite, on utilisera QGis et son outil d'Ă©tiquettes pour affecter les colonnes aux Ă©lĂ©ments de gestion des Ă©tiquettes.

Nous sommes obligés de procéder en deux étapes:

PGCLIENTENCODING=LATIN1 \
ogr2ogr -s_srs EPSG:2154 -f  "PostgreSQL" \
PG:"host=localhost user=admin dbname=GEOBASE password=password" \
-sql "SELECT *, OGR_STYLE FROM c49004_ecritures" -nln tmp_couche couche.tab \
&& ogr2ogr -f "PostgreSQL" \
PG:"host=localhost user=admin dbname=GEOBASE password=password" \
-nln couche \
PG:"host=localhost user=admin dbname=GEOBASE password=password" \
-sql "SELECT *, substring(ogr_style, 't:\"([^\"]+)\"[\\),]') As label_text, \
substring(ogr_style, 'c:([^,]+)[\\),]') As label_color, \
substring(ogr_style, 'a:([^,]+)[\\),]') As label_angle, \
substring(ogr_style, 'f:\"([^\"]+)\"[\\),]') As label_font, \
substring(ogr_style, 's:([0-9.]+).+[\\),]') As label_size, \
St_X(wkb_geometry) As label_X, \
St_Y(wkb_geometry) As label_Y \
FROM tmp_couche"

Ensuite, vous pouvez ouvrir QGis et sélectionner l'icÎne de l'outil d'étiquettes. Ensuite, il vous reste à affecter les champs suivants:

Dans l'onglet "Source de définition des paramÚtres":

On peut bien entendu amĂ©liorer cette requĂȘte et sortir plus de champs de styles (comme le fait que les caractĂšres soient en gras ou non). MĂȘme s'il paraĂźt aberrant d'utiliser un champ X/Y pour dĂ©finir l'emplacement de l'Ă©tiquette, c'est obligatoire dans QGis si on veut pouvoir utiliser le champ qui dĂ©finit la rotation de l'Ă©tiquette.

Si vous désirez aller plus en ajoutant plus de champs de style, vous pouvez consultez la référence sur les styles gérés par OGR.