Pages: 1
- Sujet précédent - recuperer la geometrie de st_touch pour calculer son perimetre - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - recuperer la geometrie de st_touch pour calculer son perimetre - Sujet suivant