Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 10 October 2013 13:57

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Règle "ON INSERT DO INSTEAD"

Bonjour à tous,

J'ai dans ma base de données une table qui gère l'information relatives à des contrats.
Ces contrats concernent une ou plusieurs parcelles, dont les identifiants sont stockés dans un attribut de type int[]

Cette table n'est pas spatialisée. J'utilise pour la spatialiser et la renseigner depuis QGis une vue qui contient l’ensemble des colonnes de cette table et en plus l'union des géométries des parcelles concernées.

Le problème que je rencontre se situe au niveau de la règle appliquée lors de l'insertion d'un enregistrement à ma vue.

Mon objectif est de calculer la liste des parcelles concernée grâce à la géométrie de l'objet dessiné dans QGIS.

Ceci fonctionne :

Code:

CREATE OR REPLACE RULE insert_emprise_echeance_contrat AS
    ON INSERT TO administratif.emprise_et_echeance_contrat 
DO INSTEAD  
INSERT INTO administratif.contrat (signataires, date_debut, duree, tacite_reconduction, date_fin, notaire, lien_convention_pdf, type_contrat, parcelles_concernees, site_concerne, remarque) 
VALUES (new.signataires, new.date_debut, new.duree, new.tacite_reconduction, new.date_fin, new.notaire, new.lien_convention_pdf, new.type_contrat, 
(SELECT array_agg(distinct id_parcelle) FROM foncier.parcelle_cadastrale WHERE st_intersects(parcelle_cadastrale.geometrie, new.geometrie)), new.site_concerne, new.remarque);

Mais n'est pas tout à fait juste. Pour cela il faudrait que la liste des parcelles concernées soit calculée à partir de l'intersection entre l'objet que j'ai dessiné, et les centroïdes des parcelles sous-jacentes.

Cette règle ne fonctionne pas (champ vide à l'issue de l'insertion) :

Code:

CREATE OR REPLACE RULE insert_emprise_echeance_contrat AS
    ON INSERT TO administratif.emprise_et_echeance_contrat 
DO INSTEAD  
INSERT INTO administratif.contrat (signataires, date_debut, duree, tacite_reconduction, date_fin, notaire, lien_convention_pdf, type_contrat, parcelles_concernees, site_concerne, remarque) 
VALUES (new.signataires, new.date_debut, new.duree, new.tacite_reconduction, new.date_fin, new.notaire, new.lien_convention_pdf, new.type_contrat, (SELECT array_agg(distinct id_parcelle) FROM foncier.parcelle_cadastrale WHERE st_intersects(st_centroid(parcelle_cadastrale.geometrie), new.geometrie)), new.site_concerne, new.remarque);

J'ai l'impression de tourner autour d'une évidence mais je ne trouve pas.

Merci d'avance pour votre aide éventuelle!


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#2 Thu 10 October 2013 14:36

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Règle "ON INSERT DO INSTEAD"

Bonjour,

N'est-ce pas dû à la conformation des données ?

Des polygones peuvent se recouper sans que le centroid de l'un n'intersecte l'autre polygone.
D'autre part, dans le cas de polygones a trou ou de polygones en demie lune par exemple, le centroid de la surface ne sera pas contenu dans la surface.

Peut etre que st_pointOnSurface(geom) marcherait mieux: un point garantit d'etre contenu dans la geom.

Nicolas

Hors ligne

 

#3 Thu 10 October 2013 14:58

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: Règle "ON INSERT DO INSTEAD"

Merci Nicolas,

j'avais écarté ce problème en affichant les centroïdes de mes polygones, qui ne sont en outre pas complexes, ou en dessinant par exemple un objet qui englobe les deux parcelles qui m'intéressent.

Par acquis de conscience je viens de tester avec st_point_on_surface(geometrie) et j'ai obtenu la même "absence de résultat".


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#4 Thu 10 October 2013 15:00

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: Règle "ON INSERT DO INSTEAD"

En creusant un peu plus j'ai trouvé la source de mon problème!

Cela vient des options d'accrochage de QGis.
Une autre couche du projet interdisait les intersections ert donc modifiait la géométrie que je dessinais.

Merci encore.

Mathieu.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB