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 09 April 2020 22:21

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

diviser polygone par x polygones de surface égale

Bonsoir,

je cherche a diviser une surface qui fait x m² par un nombre de surface égale de ym&, est ce qu'il y a un outil qui existe sur postgis pour faire ce genre d'opération ? J'ai vu qu'il y avait une fonction st_subdivide, mais j'ai un peu de mal à la comprendre, et je ne crois pas qu'elle renvoi des polygones égaux.  Merci à vous

Hors ligne

 

#2 Fri 10 April 2020 11:15

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

Re: diviser polygone par x polygones de surface égale

Bonjour,

Non, st_subdivide ne renvoie pas des polygones égaux:
elle découpe des polygones pour faire en sorte que le nombre de sommets du pg soit inférieure à la valeur passée avec subdivide (256 points par défaut)

Il n'y a pas de fonctions toutes faites pour cela dans PostGIS. Peut etre avec l'extension raster en rasterizant le polygone avec pixel = surface voulue. ?

Nicolas

Hors ligne

 

#3 Fri 10 April 2020 11:52

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

Re: diviser polygone par x polygones de surface égale

Qgis a un plugin polygon divider je vois sur google, a essayer.

Nico

Hors ligne

 

#4 Fri 10 April 2020 15:42

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

Re: diviser polygone par x polygones de surface égale

Bonjour, oui j'ai regardé et installer une version 2.16 pour installer le plugin mais il ne fonctionne pas. Je ne sais pas comment sont geres les anciennes bibliotheque sous Qgis...c'est dommage. Merci pour l'idée

Hors ligne

 

#5 Sat 11 April 2020 10:52

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

Re: diviser polygone par x polygones de surface égale

Hors ligne

 

#6 Sat 11 April 2020 11:41

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

Re: diviser polygone par x polygones de surface égale

Ca peut facilement se mettre dans une fonction:

Code:

create or replace function st_dividePolygon(pg geometry, num_parts int default 10, num_points int default 4000)
returns geometry[]
language sql
as $$
    with pg_pts as (
        SELECT (ST_Dump(ST_GeneratePoints(pg, num_points))).geom AS geom
    ), pg_pts_clustered AS (
        SELECT geom, ST_ClusterKMeans(geom, num_parts) over () AS cluster
        FROM pg_pts
    ), pg_centers AS (
        SELECT cluster, ST_Centroid(ST_collect(geom)) AS geom
        FROM pg_pts_clustered
        GROUP BY cluster
    ), pg_voronoi AS (
        SELECT (ST_Dump(ST_VoronoiPolygons(ST_collect(geom)))).geom AS geom
        FROM pg_centers
    ) SELECT array_agg(ST_Intersection(pg, b.geom))
    FROM pg_voronoi b;
$$;

Pour calculer le nombre de morceaux, st_area(geom)/max_area
La méthode ne fabrique pas des morceaux qui ont tous la meme surface, mais ont des surfaces approchantes (ca peut qd meme varier du simple au double sur des pg a la forme complexe, quand meme wink )

Il existe des méthodes exactes (cf lien dans le blog de Paul Ramsey).

En image: les dept de france découpés pour avoir, pour chacun, des morceaux de surface ~ 55 km2:
(seuls les dept qui seraient découpés sont calculés)

Code:

create table deptcut_ea as
with tmp as (
    select gid, round(st_area(geom) / 550000000)::int as num_parts, geom
    from dept2154
) select gid, num_parts, unnest(st_dividePolygon(geom, num_parts)) as geom
from tmp
where num_parts > 1;

Nico


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#7 Mon 13 April 2020 23:14

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

Re: diviser polygone par x polygones de surface égale

Whaa c'est vraiment top, merci pour le coup de main. J'arrive a diviser mon polygone mais les surfaces ne sont pas exactement les mêmes et varien entre 400m² et 1100m². Je vais voir si je peux pas utiliser un autre système que voronoi, mais en tout cas c'est une sacré avancé ! Merci pour le coup de main Nicolas ;-)

Hors ligne

 

Pied de page des forums

Powered by FluxBB