#1 Wed 28 April 2010 14:07
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
POSTGIS : convertir polygones en points espacés de 100m
Bonjour,
j'ai des polygones que je souhaite convertir en points espacés de 100m les uns des autres. Connaissez-vous une telle fonctions sur POSTGIS.
J'ai trouvé la fonctions st_dumppoints() qui converti le polygone en point vertex. mais ce n'est pas exactement ce qhe je cherchais.
Eventuellement, savez-vous si c'est possible sur ArcGIS , même si je préfèrerais trouver une telle fonction sur postgis.
En vous remerciant d'avance,
Pascal PLUVINET
Hors ligne
#2 Wed 28 April 2010 15:02
Re: POSTGIS : convertir polygones en points espacés de 100m
Bonjour,
Sauf erreur de ma part c'est possible sous PostGIS : http://postgis.refractions.net/document … asure.html
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
En ligne
#3 Wed 28 April 2010 15:10
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: POSTGIS : convertir polygones en points espacés de 100m
Tout d'abord merci.
Mes polylignes (issus de mes polygones) n'ont pas de 'M ordinate'. or il est dit avec la fonction ST_Locate_Along_Measure:
Use this function only for geometries with an M component
Comment alors donner cette spécificité à mes polylignes ?
Pascal PLUVINET
Hors ligne
#4 Wed 28 April 2010 15:18
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: POSTGIS : convertir polygones en points espacés de 100m
Bonjour,
j'ai des polygones que je souhaite convertir en points espacés de 100m les uns des autres. Connaissez-vous une telle fonctions sur POSTGIS.
J'ai trouvé la fonctions st_dumppoints() qui converti le polygone en point vertex. mais ce n'est pas exactement ce qhe je cherchais.
Eventuellement, savez-vous si c'est possible sur ArcGIS , même si je préfèrerais trouver une telle fonction sur postgis.
En vous remerciant d'avance,
Bonjour:
oui, c'est possible, avec une petite requete:
• Extraire l'exterieur du polygone
• utiliser generate_series pour generer autant de boucles qu'il faut generer de points (longueur de la ligne/espacement voulu des points)
• diviser par la longueur de la ligne pour avoir la fraction de la ligne initiale pour laquelle generer un point
• line_interpolate_point pour calculer ce point
• makeline pour creer une ligne a partir d'un set de points.
(la requete la plus imbriquee sert juste a creer un pg de test).
cf post precedent pour faire la meme chose sur des multipg (explosion des multi en objets simples)
select st_makeline(setpoint) from
(select st_line_interpolate_point(
ln,
((generate_series(0, (st_length(ln)/100)::integer)) * 100) / st_length(ln)
) as setpoint
from
(select
st_exteriorRing(geom) as ln
from (
select geometryfromtext('POLYGON((0 0, 2500 0, 2500 2500, 0 2500, 0 0))', -1) as geom
)
as foo) as foo2) as foo3;
Nico
En ligne
#5 Wed 28 April 2010 15:38
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: POSTGIS : convertir polygones en points espacés de 100m
(le makeline ne sert a rien, si le but est d'avoir un ensemble de points, dans la requete precedente.
De meme, les sub-select peuvent etre evités)
En ligne
#6 Wed 28 April 2010 16:10
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: POSTGIS : convertir polygones en points espacés de 100m
Merci Nicolas.
j'ai un peu modifié pour caler à mon cas. Ca donne :
Code:
create table point_from_polygon_100m as select id_polygon, st_line_interpolate_point( ln, (generate_series(0, st_length(ln)::integer-1,100) ) / st_length(ln) ) as setpoint from (select id_polygon, st_exteriorRing(the_geom) as ln from ( select id_polygon, (dump(the_geom)).geom as the_geom from my_polygon ) as foo ) as foo2 group by id_polygon, ln;
Pascal PLUVINET
Hors ligne
#7 Wed 28 April 2010 16:23
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: POSTGIS : convertir polygones en points espacés de 100m
Merci Nicolas.
j'ai un peu modifié pour caler à mon cas. Ca donne :Code:
create table point_from_polygon_100m as select id_polygon, st_line_interpolate_point( ln, (generate_series(0, st_length(ln)::integer-1,100) ) / st_length(ln) ) as setpoint from (select id_polygon, st_exteriorRing(the_geom) as ln from ( select id_polygon, (dump(the_geom)).geom as the_geom from my_polygon ) as foo ) as foo2 group by id_polygon, ln;
Oui effectivement: plus direct le dump, plutot que le generate_series
un round doit etre plus juste que le cast ::integer, histoire de ne pas louper un point aux limites.
Nico
En ligne