#1 Fri 16 October 2020 10:26
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Grosse bdd géométrique et QGis
Bonjour,
Je dispose d'une bdd Postgis (nommée "STAGE") dans laquelle j'ai importé la base de données Sirene v3. (https://public.opendatasoft.com/explore … nitelegale) de 33 millions d'entrées. Etant au format CSV, je me suis servie des colonnes de Lat et Long pour créer une colonne "geom" de type geometry pour chaque ligne.
Je souhaite manipuler cette bdd sur QGis, uniquement sur une commune. Après avoir crée une table "sirene_marseille" sur Postgre, filtrée sur la ville, je rencontre une très grande lenteur de QGis pour se connecter à ma BDD. Voici ce que j'obtiens durant 5 bonnes minutes :
https://zupimages.net/viewer.php?id=20/42/ofd5.png
Je rencontre ce problème, directement après avoir crée la géométrie de ma base Sirene.
Existe t-il une alternative pour stocker une grosse bdd geometrique dans Postgis, tout en étant traitable sur QGis ?
Merci.
Hors ligne
#2 Fri 16 October 2020 10:39
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Grosse bdd géométrique et QGis
Bonjour,
Oui c'est possible de stocker de gros volumes et de s'en servir dans Postgis.
(J'utilise, avec un client, une BD de 2.5 To, avec des tables de 100M de parcelles ou 49M de batiments, et on peut s'en servir dans QGIS. Il y a aussi une fibre 200MB/s entre le client et internet, ca aide bien aussi
Coté table postgis, assurez-vous d'avoir un index spatial a jour sur la colonne geo. QGIS s'en sert pour filtrer les données à afficher: zoomez d'abord sur la commune, puis chargez la couche postgis: seules les geoms intersectant la commune seront chargées => très rapide.
Ensuite, coté QGIS, il faut faire attention aux propriétés de la connexion PostGIS:
Editez la connexion postgis que vous utilisez, et vérifiez que vous avez cocher la case "ne pas vérifier le type des colonnes "geometry"" (j'ai une version en anglais: l'intitulé français ne doit pas etre exactement celui-là.)
Si cette case est décochée, QGIS va scanner chaque colonne geometry qui n'a pas un type précis (typemod point, linestring, multipolygon, etc) pour déterminer un type éventuel unique de geometry. Ca prend juste des plombes sur les grosses tables.
Si vous ne voyez plus votre table apres avoir fait ca, pensez à typer la colonne geometry: QGIS ne sait afficher que des colonnes homogènes en type et en SRID. Si la colonne geo est de type geometry, et pas geometry(POINT, 2154), ou geometry(POINT, 4326), alterez la colonne pour changer son type, par ex:
Code:
alter table toto alter column geom type geometry(POINT, 4326) using st_setSRID(geom, 4326);
Enfin, L'outil gestionnaire de BD de QGIS sait lister ces tables sans type précis et les afficher dans QGIS.
Nico
Hors ligne
#3 Fri 16 October 2020 11:55
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Re: Grosse bdd géométrique et QGis
Un grand merci à vous, je n'ai pas précisé que je travaille en local, sur mon pc. A présent, l'affichage des couches est instantanée. Si cela peut aider d'autres personnes, voici les modifications que j'ai apportées :
Edition de la connexion de la bdd (je n'ai pas trouvé "ne pas vérifier le type des colonnes "geometry". Ces cases cochées semblent faire partir de l'option que vous m'avez citée). Par défaut, rien n'est coché : https://zupimages.net/viewer.php?id=20/42/3qst.png
A partir de la, les couches s'affichent instantanément ! Cependant, la couche en question n'apparait pas. Il faut modifier sa geometry dans Postgis :
Code:
alter table sirene alter column geom type geometry(POINT, 2154) using st_setSRID(geom, 2154);
Cependant, je n'arrive pas à comprendre comment filtrer automatiquement les éléments de ma bdd sur l'emprise d'une commune. Après avoir lancé la requête ci-dessus, j'ai crée un index spatial sur ma colonne geom, comme ceci :
Code:
create index sirene_index on public.sirene using gist(geom);
Quand je zoome sur une commune et que je double clic sur ma bdd pour la charger dans QGis, c'est l'entièreté de la couche qui se charge dans QGis (dans mon cas, à l'échelle nationale) ; j'ai d'ailleurs été bluffé de la rapidité d'affichage des 33 millions d'entités sur QGis par ailleurs
Dernière modification par preliator (Fri 16 October 2020 11:58)
Hors ligne
#4 Wed 04 November 2020 17:39
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: Grosse bdd géométrique et QGis
Aloha
De mémoire, la BD SIrene a un champ insee, non ? SI oui, dans Qgis, dans les propriétés de la couche > filtre > "insee" in (13055).
Ca devrait faire le job.
Sinon, vous pouvez faire une vue / vue matérialisée / select qui croise votre bd sirene avec uen couche geofla des communes pour ajouter les colonnes nom commune / code insee à vos objets Sirene. Et vous filtrer avec une clause. Dans QGis ou dans Postgres.
Après vous pouvez ajouter des clauses de filtre avec les user,... au besoin.
Cordialement
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne