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é ?

#1 Wed 17 February 2021 15:05

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

[PostGIS] - Ajustement de polygones - remplissage des vides

Voici un cas typique. Je dois comparer deux tables polygonales (multi-polygon) stockées sous PostGIS. Une table "commune" (Niveau admin 2, 2811 entrées) et une table "province" (Niveau admin 1, 785 entrées). Un attribut de la table "commune" renseigne en outre le code de la province d'appartenance.

Chaque province contient plusieurs communes. Lorsqu'une commune touche une province, les limites de la communes doivent coïncider totalement aux limites de la province. Suite à des erreurs de digitalisation, ce n'est pas le cas et on constate des chevauchements / trous (voir PJ image 1 - commune_vs_prov - avec la commune "target" en vert et les limites des communes en pointillé rouge)

L'objectif est d'ajuster la limite des communes touchant une province pour que cette limite coïncide avec celle de la province d'appartenance. L’intégralité des traitements est à réaliser via PostGIS (avec contrôle visuel sur QGIS).

J'ai déjà essayé certaines traitements

1 - Snapping

J'ai exécuté la commande ST_SNAP via

Code:

SELECT a.cod_mun, st_snap(a.geom, b.geom, tolerance) AS st_snap  FROM municipality a, province b  WHERE mun_cod_prov = cod_prov

La résultat n'est cependant pas acceptable (cf. PJ Image 2 - 2_st_snap)

2 - Buffer et découpage

L'autre option investiguée est la suivante:
Développement d'une fonction PL/pgSQL qui réalise les traitements suivants en boucle
- Sélection d'une commune target
- Création d'une vue de la table des communes sans la commune target: commune_sans_target (ne nécessite pas de traitements spatiaux)
- réaliser un buffer assez large sur la commune target commune et découpage de ce polygone à la frontière provinciale: comm_target_mask

Code:

 SELECT a.cod_mun,
    st_intersection(st_buffer(a.geom, 500), b.geom) AS st_intersection
   FROM commune a,
   province b
  WHERE a.cod_mun = 'COD_COMM_TARGET' AND a.mun_cod_prov = b.cod_prov

- Ajuster la limite du polygone comm_target_mask pour quelle coïncide avec les limites des communes voisines. Cela revient à faire une union entre comm_target_mask et commune_sans_target puis à éliminer la partie du masque qui se superpose aux communes voisines

Je suis sur le dernier point mais ai des difficultés à "remplir" correctement le trou avec mon masque pour que les limites collent entre elles.

Je suis preneur d'un retour/idée si quelqu'un a réalisé un traitement similaire dans PostGIS.

Ma config : PostgreSQL 10.7 Postgis 2.4

Merci


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

Hors ligne

 

#2 Wed 17 February 2021 16:49

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonjour,

Vous pouvez aussi travailler avec les sommets composants les contours des pg (communes et provinces).
st_dumpoints vous permet d'extraire les points composants les pg. (index spatial sur ces points)
Pour chaque point d'une commune, vous chercher le point de province le plus proche (avec l'operateur <-> knn, ultra rapide.

A la précision près, dépendant de votre dataset (et tout le pb est là, il faudra surement faire varier cette précision en fonction de la topologie locale, et ce n'est pas facile), vous garder les points des provinces à la place des points des communes, puis vous reconstruisez les pg avec ces points: les communes adopteront alors le tracé des provinces là où les deux contours sont proches.

Vous auriez un dataset d'exemple à fournir ?

Nicolas

Hors ligne

 

#3 Wed 17 February 2021 23:29

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonsoir,

Je vais tester l'option décrite par Nicolas, à savoir ajuster sur base des paires de points proches. Je ferai un retour des résultats.

A toute fin utile, j'ai extrait un subset de 4 provinces et 13 communes présentant le cas que je décris (divergences de limites avec gap/overlap - la couche des provinces est la référence). Il n'y a pas de relation de clé étrangère entre les deux tables donc elles peuvent être chargées dans l'ordre souhaité. Les séquences SQL entrainent la création des tables dans le schéma public.

Merci pour le retour

Geoffroy


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

Hors ligne

 

#4 Thu 18 February 2021 10:02

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonjour,

Merci pour ce dataset.

Nicolas

Hors ligne

 

#5 Thu 18 February 2021 10:57

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Elle est un peu pourrie ma méthode je pense smile

Ce qui marcherait bien c'est de travailler avec les arcs des communes et provinces, et reconstruire le set des arcs provinces pour l'exterieur et arc communes internes aux provinces, puis de reconstruire les pg avec st_polygonize.

... a suivre

Nicolas

Hors ligne

 

#6 Thu 18 February 2021 12:09

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Alors voila une méthode qui marche mieux:

Le principe est de travailler avec les arcs des deux couches (arc au sens topologique: linestrings connectées entre elles aux extrémités) et de reconstruire les polygones à partir de ces arcs:
   • on veut tous les arcs des provinces (car contours de référence)
   • et les arcs des communes internes aux provinces (ne suivant pas le contour des provinces)

Pour obtenir ces arcs, st_linemerge, st_union et st_boundary sont utilisées (les boundaries d'un pg sont des linestrings):

Code:

-- prepa tables ajout clé primaire (id plus facile
alter table com add column id serial primary key ;
alter table province add column id serial primary key ;

select * from spatial_ref_sys where srid = 25830;

-- ajout clés primaires
alter table dts_commune add column id serial primary key ;
alter table dts_province add column id serial primary key ;

-- on tente de travailler avec les segments (arcs) connectés des commune:
-- union et dump.
select st_numgeometries(geom) from dts_province;
select st_numgeometries(geom) from dts_commune;
-- ok pg simple, on utilise st_geometryN(1) pour extraire le pg.

drop table dts_com_arcs;
create table dts_com_arcs as
    select (st_dump(st_lineMerge(st_union(st_boundary(st_geometryN(geom, 1)))))).geom
    from dts_commune;

alter table dts_com_arcs add column id serial primary key ;

-- et des provinces
drop table dts_prov_arcs;
create table dts_prov_arcs as
    select (st_dump(st_lineMerge(st_union(st_boundary(st_geometryN(geom, 1)))))).geom
    from dts_province;

alter table dts_prov_arcs add column id serial primary key ;

Ensuite on trouve une méthode pour garder les arcs des communes internes aux provinces: par ex avec une distance moyenne des points de l'arc aux contours de la province: les arcs internes auront une grande distance moyenne par rapport aux arcs suivant le contour des provinces:

Code:

-- on veut faire la reconstruction des arcs des provinces avec les arcs internes des communes
-- il faut identifier les arcs internes des communes:
-- plusieurs méthodes, par ex distance moyenne des points de l'arc au arcs des communes

create table dts_com_arcs_pt as
    select id as idarc, (st_dumppoints(geom)).geom
    from dts_com_arcs;

-- pk
alter table dts_com_arcs_pt add column id serial primary key ;

-- spatial index:
create index on dts_com_arcs_pt using gist(geom);
-- et sur les arcs province
create index on dts_prov_arcs using gist(geom);

vacuum analyse dts_prov_arcs;
vacuum analyse dts_com_arcs_pt;

-- methode empirique ici: on determine quelle dist moyenne permet de choisir les arcs internes:
-- disons 62m :)

drop table dts_com_internal_arc;
create table dts_com_internal_arc as
with tmp as (
    select p.idarc, avg(t.dist) as avg_dist
    from dts_com_arcs_pt p
             cross join lateral (
        select a.geom <-> p.geom as dist
        from dts_prov_arcs a
        order by a.geom <-> p.geom
        limit 1
        ) as t
    group by p.idarc
) select tmp.*, a.geom
from tmp join dts_com_arcs a on tmp.idarc = a.id
where avg_dist > 62;

On corrige un peu la topologie en forcant la connexion des arcs internes des communes avec les arcs des provinces, pour etre sur que notre réseau soit fermé: les fn de réf linéaires marchent bien pour ca: on ajoute alors des points aux arcs internes, ce qui les connecte aux arcs des provinces.
Il faut penser à cette étape à garder tous les arcs internes des communes: ceux prolongés et ceux qui ne le sont pas

Une fois qu'on a les arcs internes prolongés et les arcs des provinces, on passe par st_polygonize pour reconstruire les polygones.
A cette étape, les erreurs topo des communes peuvent engendrer des petits pg supplémentaires:
pas grave, on fait une jointure spatiale entre les communes initiales et les centroid des communes corrigées, on retrouve alors nos communes: un st_union finale group by commune permet de nettoyer les petits polygones en erreurs:

Code:

-- on corrige les erreurs topo éventuelles des arcs en prolongeant les arcs internes sur les contours des provinces,
-- sauf si l'arc interne est connecté à un autre arc interne:
-- on cherche l'arc province le plus proche de chaque start/end de nos arcs internes
-- on reprend notre distance de 100m: si dist <, on snape ce point sur l'arc:
-- ce snap est fait avec les fn de référencement linéaire, qui sont rapides et précises
-- idx code le startpoint/endpoint: 0 pour start, -1 pour end: ca permettra de faire
-- un addpoint avec cet idx.
-- une fois les arcs internes prolongés, on peut construire le réseau de lignes
-- arcs internes + arcs province et reconstruire les pg communes avec les arcs province
-- on peut faire en 1 seule requete, ou détailler par étape, suivant le dataset
-- attention a l'etape tmp1: on filtre certains arcs => il faut etre sur qu'on travaille avec tous les arcs
-- internes avant la reconstruction des pg:
drop table dts_newcom;
create table dts_newcom as
with tmp as (
    select idarc, 0 as idx, st_startpoint(geom) as geom
    from dts_com_internal_arc
    UNION ALL
    select idarc, -1, st_endpoint(geom) as geom
    from dts_com_internal_arc
), tmp1 as (
    select t.idarc, t.idx, t.geom,
           st_lineinterpolatepoint(b.geom, st_linelocatepoint(b.geom, t.geom)) as newpt
    from tmp t
             cross join lateral (
        select a.id as idarcprov, t.geom <-> a.geom as dist, geom
        from dts_prov_arcs a
        order by t.geom <-> a.geom
        limit 1
        ) as b
    where dist < 100
), tmp2 as (
    select st_addPoint(a.geom, t.newpt, t.idx) as geom
    from tmp1 t
             join dts_com_arcs a on t.idarc = a.id
    UNION ALL
    select geom
    from dts_prov_arcs
    -- on ajoute les éventuels arcs internes filtrés à l'étape précédente:
    UNION ALL
    select geom
    from dts_com_internal_arc a
    where not exists (
        select null
        from tmp1
        where a.idarc = tmp1.idarc
        )
), tmp3 as (
    select st_union(geom) as geom
    from tmp2
) select (st_dump(st_polygonize(geom))).geom
from tmp3;

-- plus de pg que de communes:
-- les erreurs topo entrainent la création de petits pg: facile a merger avec leur voisin
-- pour les faire disparaitre: par ex en refaisant le lien spatial avec les communes et en faisant l'union des pg par commune:

-- on peut faire un lien spatial (st_pointOnSurface pour retrouver les communes initiales:
-- table finale des communes:
select cod_mun, mun_cod_prov, nombre_com, c.id, st_union(n.geom) as geom
from dts_commune c join dts_newcom n on st_contains(c.geom, st_pointOnSurface(n.geom))
group by 1, 2, 3, 4;

Et en image avec la piece jointe.

Nico


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

Hors ligne

 

#7 Thu 18 February 2021 23:32

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonsoir Nico,

Elle est un peu pourrie ma méthode je pense


J'ai trouvé l'idée séduisante et avait débuté une implémentation sur cette base. Une première chose que j'ai faite est de ne retenir que les vertex "candidats" de la limite "commune", c'est-à-dire les vertex qui s'intersectent avec une commune voisine qui elle-même appartient à une province différente (en focalisant l'analyse sur la cod_mun='189110001', on dégage 70 points candidats qui doivent s'ajuster)

Ensuite, je n'ai pas eu de difficultés à trouver les vertex correspondants les plus proches sur la limite provinciale.

Évidemment, un des manquements de la méthode est qu'on ne tient pas compte du comportement même de la limite provinciale entre deux points "les plus proches" (cf. PJ). Des vertex sont donc manquants pour voir la limite de commune s'adapter à la limite de province.

En étudiant le cas, je me suis dit qu'il y avait moyen de récupérer tous les vertex du tronçon de limite provinciale situés entre le premier et le dernier point "les plus proche sur la limite provinciale", ces deux points étant connus par le traitement KNN. Cet ensemble de vertex viendrait remplacer le tronçon de limite communale situé entre le premier et dernier point "les plus proches sur la limite communale". Ensuite on reconstruit le polygone.

J'en étais là quand j'ai vu ton second post, que je vais lire attentivement. Je n'ai donc pas implémenté la recherche de tous les vertex provinciaux, mais en tout cas cela pourrait théoriquement tenir la route.

Je place ici l'implémentation SQL permettant de retrouver le vertex provincial le plus proche pour chacun des 70 vertex communaux candidats. Le code n'est pas optimisé du tout et des trucs ne servent à rien mais je le mets tel qu'il est en construction (pour si ça intéresse qq)

Code:

WITH 
com_target as (
    select cod_mun, mun_cod_prov, nombre_com, geom from dts_commune where cod_mun='189110001'
),
com_target_pt as (
    select cod_mun, mun_cod_prov, nombre_com, (ST_DumpPoints(geom)).geom as geom_com_pt from com_target 
),
com_neigh as (
    select cod_mun, mun_cod_prov, nombre_com, geom as geom_com_neigh from  dts_commune
    where st_intersects(geom, (select geom from com_target)) and mun_cod_prov<> (select mun_cod_prov from com_target)
),
-- Vertex candidats de la commune = vertex qui s'interesectent avec une commune voisine qui appartiene à une province différente
com_target_pt_cand as (
 SELECT row_number() OVER (ORDER BY com_target_pt.geom_com_pt) AS gid, com_target_pt.geom_com_pt
   FROM com_target_pt, com_neigh
  WHERE st_intersects(com_target_pt.geom_com_pt, com_neigh.geom_com_neigh)
),
prov_target as (
    select * from dts_province where cod_prov = '18911'
),
prov_target_pt as (
    select cod_prov, nom_prov, (ST_DumpPoints(geom)).geom as geom_prov_pt from dts_province where cod_prov = '18911'
),
prov_neigh as (
    select * from dts_province where st_intersects(geom, (select geom from dts_province where cod_prov='18911')) and cod_prov <> '18911'
)
select gid,  geom_com_pt, geom_prov_pt, dist
from com_target_pt_cand 
CROSS JOIN LATERAL 
  (SELECT
      cod_prov, geom_prov_pt,
      ST_Distance(geom_prov_pt, geom_com_pt) as dist
      FROM prov_target_pt
      ORDER BY geom_com_pt <-> geom_prov_pt
     LIMIT 1
   ) AS closest_vert_prov

Je garde l'idée de la sélection des vertex au frais et je vais étudier le travail réalisé à partir des arcs des deux couches. En tout cas merci beaucoup pour ce retour très détaillé, vraiment super. Je passe à l'action et ferai un retour

Geoffroy


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

Hors ligne

 

#8 Fri 19 February 2021 10:56

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonjour,

le problème en traitant les vertex vient de la gestion des cas particuliers: ca devient vite super lourd.
En prenant les arcs, on s'affranchit de beaucoup de ces problèmes. Ca permet de travailler dans un modele plus proche d'une vraie topologie, avec des arcs connectés entre eux pour définir des faces.

Après avoir pas mal tatonné en travaillant avec les vertex, sans jamais obtenir un super résultat, je trouve la méthode avec les arcs plus directe et plus simple.

Nicolas

Hors ligne

 

#9 Sat 20 February 2021 01:58

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonsoir,

J'ai reproduit la méthode d'arcs décrites par Nicolas. Très clair et avec la garantie de respecter la géométrie de la couche référence.

L'enjeu est de bien sélectionner les arcs internes. Pour généraliser la méthodologie à l'ensemble du dataset, je partirai sur un critère de sélection du style "arc communal interne = arc touchant le contour communal en maximum deux points. En effet je crains que la méthode basée sur la distance moyenne d'un arc communal à un arc provincial ne sélectionne pas tous les tronçon du dataset global. Je vais tester cela.

Par contre, j'ai été attiré par un autre élément. Lors de la reconstruction des polygones à partir de la multiligne (via ST_Polygonize), je m'aperçois qu'une limite n'est pas prise en compte et donc qu'un polygone plus important est créé, au lieu d'être séparé en deux (cf. PJ). Pourtant, ladite limite est bien dans la polyligne retournée en "tmp3" et topologiquement tout semble correct.

Dans le screenshot proposé par Nicolas, on retrouve bien les deux polygones.

J'ai examiné ce tronçon pour comprendre ce qu'il se passait mais sans vraiment trouver une explication, si ce n'est que la séquence des vertex ferait en sorte que la polyligne n'est pas considérée comme fermée.

@Nicolas, si vous avez l'occasion, pouvez-vous confirmer que chez vous, le polygone que j'identifie en rouge dans le screenshot est bien coupé en deux? Cela me permettrait de voir si il s'agit d'une limitation

Merci

Geoffroy


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

Hors ligne

 

#10 Sat 20 February 2021 11:51

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonjour,

Oui j'ai bien le polygone découpé.
J'ai du jouer avec la distance moyenne pour garder les arcs internes: 62m, puis 100m pour choisir les arcs province sur lesquels snapper les arcs internes.

Si l'arc est là, mais que le polygone ne se crée pas, c'est effectivement que l'arc ne doit pas bien etre connecté aux autres arcs: vous pouvez tester la distance des start/end points de cet arc avec les autres arcs.

J'ai fait mes tests sur PG 13, postgis 3.1, avec la derniere version de geos. Ca peut expliquer les différences, car cette nouvelle version est plus robuste topologiquement (ca vaut le coup d'essayer avec cette version chez vous).

Pour raffiner le process, vous pouvez tester si les arcs internes touchent les autres arcs apres snapping (st_touches). si ce n'est pas le cas, vous pouvez prolonger artificiellement ces arcs pour forcer l'intersection avec les autres arcs: st_polygonize pourra alors reconstruire les pg.

Nicolas

Hors ligne

 

#11 Mon 22 February 2021 10:28

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

J'avais justement un PG13 / PostGIS 3.1.1 – Geos 3.8.1 sous la main pour des tests.

Après y avoir passé le WE, on observe clairement des différences de comportement entre les deux versions de PostGIS. Sur la v2.4, le résultat du st_polygonize ne renvoie pas un polygone et sur le v3.1, ce sont deux polygones qui sont absents (le même que sur la v2.4 + un petit autre situé juste à sa droite).

Je partage en PJ le dataset des arcs après snapping sur la v Postgis 3.1. Les polygones "à problème" reposent sur les arcs internes idarc = 18 et idarc=29

Si on détermine la distance de ces arcs à l'arc provincial le plus proche à partir des nœuds début-fin, le résultat indique 0m pour les deux arcs

Code:

with tmp as (
select idarc, st_startpoint(geom) as startpt_geom, 
    st_endpoint(geom) as endpt_geom
    from dts_arc_snap
    )
     select p.idarc, t.dist_start_prov,dist_end_prov
    from tmp p
             cross join lateral (
        select a.geom <-> p.startpt_geom as dist_start_prov                
        from dts_prov_arcs a
        order by a.geom <-> p.startpt_geom
        limit 1)t
            cross join lateral (
        select a.geom <-> p.endpt_geom as dist_end_prov                
        from dts_prov_arcs a
        order by a.geom <-> p.endpt_geom
        limit 1)s
        where idarc in (18,29)

Par contre l'exécution de ST_Touches renvoie false sauf pour le point d'arrivée de l'arc 18. Mais c'est également valable pour d'autres arcs qui se ferment correctement

Code:

select *, st_touches(a.geom, b.geom) from dts_arc_snap a,  dts_prov_arcs b where idarc in(18,29)

Et donc les deux polygones sont absents

Code:

        
with
 tmp as (
    select st_union(geom) as geom
    from dts_arc_snap
) select (st_dump(st_polygonize(geom))).geom
from tmp;

J'ai prolongé un des arcs pour le faire s'intersecter avec les limites provinciales (aux pts start/end). Le polygone est alors correctement construit.

Je vais continuer à investiguer  afin d'améliorer la qualité du snapping avant d'envisager de prolonger les arcs artificiellement.

Geoffroy


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

Hors ligne

 

#12 Mon 22 February 2021 11:04

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Bonjour,

Merci pour ce dataset.
L'arc 14 n'est pas connecté: il faut regarder pourquoi le snapping n'a pas marché pour lui.

Si je polygonize dts_arc_snap:

Code:

with tmp as (
    select st_union(geom) as geom
    from dts_arc_snap
)
select (st_dump(st_polygonize(geom))).geom
from tmp;

J'obtiens bien les polygones construits (notamment ceux dépendant des arcs 18 et 29)
Le seul pg manquant est celui lié à l'arc 14 non connecté. (cf image jointe)

Ma version de postgis:

Code:

POSTGIS="3.1.0 5e2af69" [EXTENSION] PGSQL="130" GEOS="3.10.0dev-CAPI-1.15.0" SFCGAL="1.3.9" PROJ="7.2.0" GDAL="GDAL 3.2.0, released 2020/10/26" LIBXML="2.9.4" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" TOPOLOGY RASTER

Nico

Hors ligne

 

#13 Mon 22 February 2021 11:19

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Sur cette version:

Code:

POSTGIS="3.0.3 6660953" [EXTENSION] PGSQL="120" GEOS="3.8.1-CAPI-1.13.3" SFCGAL="1.3.9" PROJ="7.2.0" GDAL="GDAL 3.2.0, released 2020/10/26" LIBXML="2.9.4" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.4.3 (Internal)" TOPOLOGY RASTER

J'obtiens le meme résultat que vous (pg manquants)
ca semble lié à la version de GEOS: soit vous mettez à jour, soit vous prolongez artificiellement les extrémités des arcs internes (ex ici: https://lists.osgeo.org/pipermail/postg … 6831.html)

(Mon conseil: mettez à jour: la derniere version postgis/geos est vraiment chouette !)

Nicolas

Hors ligne

 

#14 Mon 22 February 2021 11:28

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

Merci Nicolas pour cette analyse.

Je vais mettre à jour ma version de PostGIS/GEOS sur le serveur PG13 car je suis admin serveur. Par contre, ne contrôlant pas le PG10_12 où se trouve la BD de production, je vais sans doute devoir implémenter la prolongation des axes.

Merci encore pour la méthodologie d'axes et les vérifications qui ont montré les évolutions de GEOS 3.10.

Geoffroy

Hors ligne

 

#15 Mon 22 February 2021 12:07

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

Re: [PostGIS] - Ajustement de polygones - remplissage des vides

De rien wink

Vous pouvez aussi rapatrier les données depuis la prod sur votre serveur local, faire le traitement, et renvoyer le tout sur la prod (pg_dump ... | psql ...)

Nico

Hors ligne

 

Pied de page des forums

Powered by FluxBB