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 Wed 01 April 2015 08:30

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Déterminer si un sommet de polygone est situé dans un rectangle

Bonjour,

Quand on veut digitaliser des polygones de façon propre, ie faire en sorte que deux polygones partageant une limite commune aient les mêmes sommets sur cette limite, il est utile de déterminer si un sommet est situé dans un tampon, par exemple rectangulaire. Voici une requête sous postgis 2.0 qui permet de renvoyer le point concerné.

Code:

Pour faciliter la lecture on pose :rg comme paramètre avec
:rg='LINESTRING(2215251 1151939,2215251 1151941,2215253 1151941,2215251 1151939)'

qui représente ici un carré en CC42

La requête renvoyant le sommet du polygone inclus dans ce carré (si ce sommet existe !)

Code:

WITH pol AS (SELECT st_asbinary(the_geom) AS the_geom FROM schema.table WHERE
st_intersects(the_geom,st_makepolygon(st_linefromtext(:rg,3942)))),
pt as (SELECT (st_pointn(st_exteriorring(the_geom),generate_series(1, st_numpoints(st_exteriorring(the_geom))))) AS pti FROM pol)

SELECT st_astext(pti) FROM pt WHERE st_within(st_setsrid(pti,3942),
st_makepolygon(st_linefromtext(:rg,3942)));

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#2 Wed 01 April 2015 14:32

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

Re: Déterminer si un sommet de polygone est situé dans un rectangle

On peut aussi ne pas se limiter à l'anneau extérieur :

Code:

select (p).geom 
from ( select st_dumppoints(the_geom) p 
          from matable where the_geom && :rg
         ) points
where (p).geom && :rg

Dernière modification par tumasgiu (Wed 01 April 2015 15:06)

Hors ligne

 

Pied de page des forums

Powered by FluxBB