#1 Thu 29 August 2024 18:02
- Marc Gauthier
- Participant occasionnel
- Date d'inscription: 28 Sep 2009
- Messages: 15
POSTGIS : équivalent de largest-overlap de Mapshaper
Suite à l'article https://www.icem7.fr/cartographie/les-l … n-en-2024/ j'essaye avec POSTGIS mais mes essais avec ST_Intersection sont très très lent : plusieurs minutes contre quelques secondes avec Mapshaper.
Avez-vous des pistes pour avoir de bonnes performances ?
Hors ligne
#2 Fri 30 August 2024 11:18
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- Site web
Re: POSTGIS : équivalent de largest-overlap de Mapshaper
Bonjour,
Vous pouvez nous en dire plus ? Intersection de quoi avec quoi ?
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Sat 31 August 2024 08:04
- Marc Gauthier
- Participant occasionnel
- Date d'inscription: 28 Sep 2009
- Messages: 15
Re: POSTGIS : équivalent de largest-overlap de Mapshaper
J'essaye de reproduire l'article avec :
- une grille H3 qui couvre la France métropolitaine (24 883 features);
- les communes françaises 2022 (34 955 features).
Le ST_Intersection ne se termine pas après une heure.
J'explore un ST_Intersects pour ne faire le ST_Intersection que sur les géométries avec au moins un point en commun.
Hors ligne
#4 Sat 31 August 2024 14:27
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 427
Re: POSTGIS : équivalent de largest-overlap de Mapshaper
Est-ce que vous avez bien un index sur la géométrie ? Sans, les calculs sont très longs.
Hors ligne
#5 Sun 01 September 2024 07:38
- Marc Gauthier
- Participant occasionnel
- Date d'inscription: 28 Sep 2009
- Messages: 15
Re: POSTGIS : équivalent de largest-overlap de Mapshaper
J'avais oublié d'ajouter les index, le gain est impressionnant .
Merci pour ce rappel !
Code:
-- intersection entre la grille et les communes avec calcul de la surface commune DROP TABLE IF EXISTS fra_h3_res6_com2022; CREATE TABLE fra_h3_res6_com2022 AS SELECT a.*, b.codgeo, ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) AS surface FROM fra_h3_res6 a, a_com2022 b WHERE ST_INTERSECTS(a.geometry, b.geometry) ORDER BY h3, surface DESC; -- sélection de la commune avec la plus grande surface DROP TABLE IF EXISTS fra_h3_res6_com2022_codgeo; CREATE TABLE fra_h3_res6_com2022_codgeo AS SELECT DISTINCT ON (h3) * FROM fra_h3_res6_com2022 ORDER BY h3, surface DESC ;
Dernière modification par Marc Gauthier (Sun 01 September 2024 12:06)
Hors ligne