PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : PHP » Problème de lenteur avec st_intersection (novice) » 01/12/2020 13:05:34

Un grand merci... effectivement, c'est un très gros polygone. Au lieu de le supprimer, existe t-il un moyen de le "couper" en plusieurs partie ?

#2 Re : PHP » Problème de lenteur avec st_intersection (novice) » 01/12/2020 10:39:38

Merci pour votre disponibilité ! Qu'entendez-vous par un dump ? Sinon, voici les données au format .sql : https://drive.google.com/file/d/1P4_C_5 … sp=sharing

#3 Re : PHP » Problème de lenteur avec st_intersection (novice) » 01/12/2020 10:03:06

Oups ! J'ai du mal avec le Drive ... voilà c'est bon. Merci.

#4 PHP » Problème de lenteur avec st_intersection (novice) » 30/11/2020 22:27:39

preliator
Réponses : 7

Bonjour,

Je dispose 2 couches d'occupation du sol (2006 et 2018) de type Multipolygon, et une grille de polygones de 100*100m de type Polygon.
Ces 2 couches sont coupées sur un cercle de 10 000 m², sont sur le Lambert 93, et ont un index spatial.

https://zupimages.net/viewer.php?id=20/49/dlkk.png

La couche d'occupation du sol de 2006 contient 14 320 entrées, celle de 2018 environ 13 000, et la grille 31 000.



Dans chaque cellule de ma grille (et dans sa stricte emprise), je souhaite découper les éléments d'occupation du sol, de manière séparée pour les 2 dates différentes (pour commencer). Pour cela, je me suis dirigé vers st_intersection :

select grille.id as id_carr, 2006 as annee, code, st_intersection(occ_2006_test.geom, grille.geom) as geom
from grille, occ_2006_test
where st_intersects(occ_2006_test.geom, grille.geom);

select grille.id as id_carr, 2018 as annee, code, st_intersection(occ_2018_test.geom, grille.geom) as geom
from grille, occ_2018_test
where st_intersects(occ_2018_test.geom, grille.geom);

La première requête, celle sur la couche de 2006, dure 12 secondes et me retourne 110 000 lignes. La seconde, pour une raison inconnue, tourne encore après 10 minutes....

Comment expliquer cette différence de performance ? (le lien pour accéder à mes couches, si jamais https://drive.google.com/file/d/1P4_C_5 … sp=sharing

Merci.

#5 Re : Général » Mobilités professionnelles (novice) » 24/03/2020 11:20:51

Je vous dis un énorme merci. En somme, vous m'avez montré une syntaxe que je ne connaissais pas, je vais pouvoir progresser.
Cordialement.

#6 Re : Général » Mobilités professionnelles (novice) » 24/03/2020 10:13:09

Bonjour et merci de votre réponse.

Disons que je prendrais la ligne qui possède la valeur d'Ipondi la plus élevée pour la valeur d'aller.


Ainsi, entre ces deux lignes :

La Ciotat; Marseille; 99
Marseille; La Ciotat; 73

Je garde La Ciotat; La Marseille; 99.

#7 Général » Mobilités professionnelles (novice) » 23/03/2020 21:41:33

preliator
Réponses : 4

Bonjour,

Travaillant avec la mobilité professionnelle de l'Insee, je cherche à faire la somme d'un champ nommé Ipondi seulement sur les trajets commune de résidence à travail, et non pas travail à commune de résidence.

Admettons la colonne de commune de résidence nommée "Départ", et commune de travail nommée "Arrivée", et le champ que je souhaite faire la somme nommée "Ipondi", et admettons le cas suivant :

départ; arrivée; ipondi

La Ciotat; Marseille; 84
La Ciotat; Marseille; 15
Aubagne; Ceyreste; 12
Marseille; La Ciotat; 73

En effectuant la formule suivante ...

select départ, arrivée, sum(ipondi)
from trajets
group by départ, arrivée

J'obtiens donc le résultat suivant :

La Ciotat; Marseille; 99
Aubagne; Ceyreste; 12
Marseille; La Ciotat; 73

Ce qui est normal. Je voudrais cependant "supprimer" la ligne Marseille; La Ciotat car c'est le trajet retour des deux premières lignes.
Ceci étant pour arriver à ce résultat :

départ; arrivée; ipondi

La Ciotat; Marseille; 99
Aubagne; Ceyreste; 12

Comment faire cela sur PostgreSQL ?

Merci.

#8 PL/pgSQL » Jointure reflexive » 12/10/2019 21:12:28

preliator
Réponses : 1

Bonjour à tous,

Ayant commencé à apprendre les jointures avec la formule NATURAL JOIN, je me demandais quelle devait être la syntaxe d'une jointure reflexive cette dernière.

Ainsi, j'aimerais transformer cette requete qui affiche les employes et leur supérieur hiérarchique, avec une Natural join :

select a.nom, a.prenom, b.nom as nom_superieur, b.prenom as prenom_superieur
from employe a, employe b
where (a.dependde = b.employeid)

Merci à vous.

Pied de page des forums

Propulsé par FluxBB