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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 05 September 2016 14:12

michCarto
Participant actif
Date d'inscription: 8 Sep 2009
Messages: 106

recuperer la geometrie de st_touch pour calculer son perimetre

Bonjour ,
J'aimerais recuperer que la géometrie qui se touchent pour en calculer le perimetre

select  a.id_patch_1987,a.geom1987,geom,b.dn as touch_ocsol_1987,
st_perimeter(ST_intersection(geom1987,geom))/10000 as geom_inter-- ?? ici comment faire
from w_med_publi2.p1  a ,
w_med_publi2.p2
b where st_touches(geom1987,geom)  limit 50
Merci

Hors ligne

 

#2 Mon 05 September 2016 19:04

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1159

Re: recuperer la geometrie de st_touch pour calculer son perimetre

st_perimeter ne fonctionne qu'avec des géométries de type surface.
Or, le résultat de l'intersection de votre requête ne sera jamais de type
surface,  étant donné que celle ci n'est effectuée que sur des géométries
ne partageant que leur limites, les géométries seront de type point ou ligne.

Si ce que vous voulez récupérer est effectivement la longueur des limites partagées
entre vos géométries, je pense que vous devriez remplacer st_perimeter par st_length.
(st_length renvoie 0 quand il est utilisé avec un (multi)point comme paramètre).

Dernière modification par tumasgiu (Mon 05 September 2016 19:12)

Hors ligne

 

#3 Tue 06 September 2016 09:36

michCarto
Participant actif
Date d'inscription: 8 Sep 2009
Messages: 106

Re: recuperer la geometrie de st_touch pour calculer son perimetre

Merci tumasgiu je vais tester cela , je te tiens au courant

Hors ligne

 

#4 Mon 12 September 2016 16:54

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

Re: recuperer la geometrie de st_touch pour calculer son perimetre

Bonjour michcarto,

tu peux aussi essayer ceci :

Code:

st_length(st_collection_extract(st_collect(ST_intersection(geom1987,geom)),2))/10000

On force la création d'une collection à partir de l'intersection, et on en extrait que les lignes (2).


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#5 Mon 12 September 2016 18:18

michCarto
Participant actif
Date d'inscription: 8 Sep 2009
Messages: 106

Re: recuperer la geometrie de st_touch pour calculer son perimetre

Merci Mathieu , demain je teste

Hors ligne

 

#6 Mon 12 September 2016 20:12

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1159

Re: recuperer la geometrie de st_touch pour calculer son perimetre

Pour info st_length renvoie 0 pour les géométries de type (multi)point/polygones.
Pour les geometrycollection, elle est capable de retrouver les lignes
mêmes dans des collections imbriquées.
Exemple :

Code:

SELECT st_length(
              st_geomfromtext(
                     'GEOMETRYCOLLECTION(
                        POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)), 
                        GEOMETRYCOLLECTION(
                           LINESTRING(0 0, 0 1), 
                           POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))), 
                           MULTILINESTRING((0 0, 0 1), (0 0, 0 1)))'
                       )
                     ); 
--  trois lignes dans la collection, renvoie 3.0

En tout cas c'est le comportement de st_length sous Postgis.

Dernière modification par tumasgiu (Mon 12 September 2016 22:27)

Hors ligne

 

#7 Tue 13 September 2016 15:28

michCarto
Participant actif
Date d'inscription: 8 Sep 2009
Messages: 106

Re: recuperer la geometrie de st_touch pour calculer son perimetre

j'ai opté pour st_length(ST_intersection(geom1987,geom),true) , car c'est les lignes qui touches 2 geometries (polygone) qui m'interessent et la requete va plus vite ,
merci pour st_collection mais la requete prends plus de temps et comme j'ai beaucoup de polygones,
je peux me tromper aussi .... merci en tout cas

Hors ligne

 

Pied de page des forums

Powered by FluxBB