Correction automatique des erreurs de géométrie avec PostGIS

Ces opérations sont réalisées pour des tables comportant un champs de type géométrie, stockées dans un SGBD PostGreSQL avec l’extension PostGIS installée.

1. Comptage des erreurs GEOS, des géométries nulles et des collections

SELECT 'invalid' AS nb, count(*) FROM my_table WHERE NOT ST_IsValid(the_geom)
UNION
SELECT 'geonul' AS nb, count(*) FROM my_table WHERE the_geom is null
UNION
SELECT 'collection' AS nb, count(*) FROM ma_table WHERE not ST_IsValid(the_geom)
AND ST_GeometryType(ST_MakeValid(the_geom))='ST_GeometryCollection';

Afficher les causes des erreurs

SELECT id, ST_IsValidReason(the_geom) FROM my_table WHERE NOT ST_IsValid(the_geom);

2. Correction des géométries invalides, des collections et des nœuds doubles (sur des couches de polygones)

2.1 Requête globale

UPDATE my_table
SET the_geom =
ST_Multi(ST_Simplify(ST_Multi(ST_CollectionExtract(ST_ForceCollection(ST_MakeVa
lid(the_geom)),3)),0))
WHERE ST_GeometryType(the_geom) = 'ST_MultiPolygon';

2.2 Correction seule de la géométrie de type GEOS

UPDATE my_table SET the_geom = ST_MakeValid(the_geom) WHERE NOT ST_IsValid(the_geom);

2.3 Suppression seule des géométries nulles

DELETE FROM my_table WHERE the_geom IS NULL;

A n’effectuer que si le nombre n’est pas nul à l’étape 1.

2.4 Correction seule des nœuds doubles

UPDATE my_table SET the_geom = ST_Multi(ST_Simplify(the_geom,0));

A n’effectuer que si la liste des erreurs indique la présence de nœuds double et que l’étape 2 n’est pas réalisée.

2.5 Vérifier de nouveau le nombre d’erreurs de type GEOS

Faire des requêtes entre bases avec PostGreSQL

Deux extensions de PostGreSQL permettent d’effectuer des requêtes entre bases de données, fonctionnalité qui n’est pas présente nativement dans le SGBD, il s’agit de dblink et de Foreign Data Wrapper (FDW).

Installation des extensions

CREATE EXTENSION dblink;
CREATE EXTENSION postgres_fdw;

Utilisation de dblink

ToDo

Utilisation de Foreign Data Wrapper (FDW)

ToDo

Sources :

Exploser un champs en lignes selon un délimitateur avec PostGreSQL

On utilisera la fonction unnest() qui permet normalement de récupérer les valeurs d’un array. Si le champs contient des chaînes de caractères, on combinera avec la fonction string_to_array() :

SELECT unnest(table_name.field_name) AS alias
FROM schema_name.table_name ;

Sources :

Redémarrer un serveur Windows en ligne de commande

Il peut être nécessaire de redémarrer un poste de travail Windows à distance via la ligne de commande sous Windows :

shutdown -r -t 0 -f

Les options étant :

  • -r : redémarrage du poste suite à l’arrêt
  • -t : temps d’exécution de la commande (0 = maintenant)
  • -f : ferme les applications en cours d’exécution

Source :

Supprimer une base de données avec une session en cours dans pgAdmin

Dans certains cas, la suppression d’une base de données via l’interface graphique de pgAdmin est impossible avec l’affichage d’un message d’erreur indiquant qu’une session est en cours alors que cela n’est manifestement pas le cas.

Il faut donc au préalable exécuter la requête suivante dans la fenêtre SQL :

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = ‘database_name’;

Avant de pouvoir supprimer la base de données avec la commande suivante :

DROP DATABASE database_name;

Sources :

Paramétrer Java dans Netbeans

En cas de mise à jour de Java sur votre poste de travail, il est nécessaire de modifier le chemin dans Netbeans sous peine de voir s’afficher le message d’erreur « Invalid JDK home specified ». Ce message n’est toutefois pas  pas bloquant puisque Netbeans utilise alors la version de Java par défaut.

Pour désactiver ce message, il suffit dans le fichier suivant :

C:\Program Files\NetBeans 8.0.1\etc\netbeans.conf

de modifier la ligne :

netbeans_jdkhome="C:\Program Files\Java\jre1.8.0_121"

en indiquant le bon chemin vers le JDK.

Source :