organiser spatialement la répartition d’un identifiant

Dans la gestion d’un cimetière, il est pratique que l’identifiant des concessions soit cohérent avec la position géographique. Dans notre cas, lorsque nous créons des concessions, nous passons par GRASS et les concessions sont créées successivement. L’application successive de traitements nous amène à disposer du numéro 10 à côté du numéro 124. Pas facile, dès lors que nous sommes dans le cimetière d’utiliser cet identifiant pour nous repérer.

Nous avons donc travaillé avec la commune de Faux-la-Montagne afin de déterminer une manière d’ordonner les identifiants uniques. Au lieu de saisir à la main les identifiants, nous avons cherché un moyen d’ordonner l’identifiant d’une concession.

concessions

Avant, on pouvait orienter la concession dans le sens qu’on voulait. Mais ça, c’était avant.

Seulement, dans un cimetière, les concessions ne sont pas nécessairement ordonnées de manière cohérente. En effet, entre la dureté du sol et les souhaits des familles, nous nous sommes aperçus qu’attribuer l’identifiant par position géographique n’est pas pertinent.

Donc, en explorant les fonctions Postgis, nous avons trouvé la fonction « st_locate_line » qui permet d’indiquer la distance d’un point sur une ligne depuis le début de celle-ci. Cette fonction a été imaginée pour faire de la numération de rue de manière automatisée.

Comme nous avions à répondre à un besoin d’ordonner les concessions d’une certaine manière, nous avons donc fait le choix de réaliser un magnifique serpentin dans le cimetière. Celui-ci nous permet de donner un identifiant aux concessions qui respecte le souhait de la collectivité.

Voici le déroulé du traitement ainsi que les fonctions utilisées dans le script de démo.

diag_traitement

Lien interactif vers le déroulé

 

/*Donner un identifiant unique ordonné à des concessions de cimetière.
Version de postgres 9.6 - postgres 2.3.2
les fonctions utilisées sont:
-ST_centroid(geom) pour extraire le centroïde des concessions https://postgis.net/docs/ST_Centroid.html
-st_closestpoint(line.geom, centroid.geom) pour trouver sur la ligne, le point le plus proche du centroïde https://postgis.net/docs/ST_ClosestPoint.html
-ST_LineLocatePoint(line.geom,closestpoint.geom) pour classer dans le sens de la ligne, les différents points https://postgis.net/docs/ST_LineLocatePoint.html
-ROW_NUMBER () OVER (ORDER BY ) Pour donner un identifant numérique à partir du numéro de ligne classé dans le sens du classement issu de line_locate_point http://www.postgresqltutorial.com/postgresql-row_number/
-ST_intersect(a.geom,b.geom) pour faire la jointure (privilégier une jointure attributaire s'il y a beaucoup de données).
*/
with numeros as (with closestpoint as (
with centroid as (select id, 
st_centroid(test.polygon.geom) as geom
from test.polygon)
select centroid.id, st_closestpoint(test.line.geom, centroid.geom) as geom
from centroid, test.line)
select closestpoint.id, ST_LineLocatePoint(test.line.geom,closestpoint.geom) interpolate, closestpoint.geom
from test.line, closestpoint)
select test.polygon.*, 
 ROW_NUMBER () OVER (ORDER BY interpolate) numero
 from numeros, test.polygon
where st_intersects(numeros.geom, test.polygon.geom)
attribution spatialisée d'identifiants

Next Post

Previous Post

Leave a Reply

© 2018

Theme by Anders Norén