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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème sur notre serveur une intervention a été planifiée ce  matin. La coupure, qui ne devait pas exéder 5 mn, a duré plus longtemps que prévu. L'intervention consistait à l'augmentation de l'espace disque (GeoRezo prend un peu plus de place en viellissant). Malheureusement, le serveur se faisant vieux, quelques soucis ont eu lieu.

Nous avons procédé à un gros nettoyage d'automne : augmentation de l'espace disque, mise à jour des certificats SSL pour l'utilisation des  urls en https, upgrade d'Apache et autres outils nécessaire au bon fonctionnement.

Notre volonté à long terme est de consolider la plateforme GeoRezo et nous accueillons toutes personnes intéressées pour nous aider (technologies utilisées : drupal, docker, MySQL, git, etc.) Si vous désirez contribuer à un projet dynamique et apprendre de nouvelles choses, contactez nous !

L'équipe GeoRezo

#1 mar. 27 mai 2014 14:28

Lsam
Membre
Date d'inscription: 27 nov. 2013
Messages: 98

[Spatialite] problème de performance d'une requête spatiale

Bonjour,

Je souhaite exécuter la requête spatiale suivante dans ma base Spatialite :

Code:

select "c1"."geometry" from "c1", "c2" where within("c1"."geometry",buffer("c2"."geometry",1000))

Au bout de 36 minutes, toujours pas résultat ! Je ne m'explique pas ce manque de performance.

c1 est une table avec une géométrie de type Point, comprenant 247434 enregistrements
c2 est une table avec une géométrie de type Multipolygon, comprenant 6 enregistrements

Les 2 tables ont un index spatial.

J'ai l'impression que mon passage à la version 4 de Spatialite est à l'origine du problème. Me trompe-je ou quelqu'un aurait une autre idée sur le problème ? Je ne pense pas que ma requête soit si complexe que ça pourtant ?!

Merci

Dernière modification par Lsam (mar. 27 mai 2014 17:12)

Hors ligne

 

#2 mer. 26 avril 2017 15:29

lejedi76
Membre
Date d'inscription: 8 août 2013
Messages: 234

Re: [Spatialite] problème de performance d'une requête spatiale

Bonjour,

j'arrive un peu tard mais comme ce sujet est sans réponse, je me permets de proposer une réponse.

Plutôt que d'utiliser le buffer, vous pouvez essayer ceci, si vous possédez la fonction PtDistWithin qui dépend de PROJ4:

Code:

select "c1"."geometry" from "c1", "c2" where PtDistWithin("c1"."geometry","c2"."geometry",1000)

Mais surtout pour profitez des index, il peut être intéressant de rajouter une clause.

Sous postgis il s'agit de :

Code:

AND c1.geometry && c2.geometry

Sous spatialite, c'est un peu plus compliqué :

Code:

AND c1.ROWID IN (
    SELECT ROWID
    FROM SpatialIndex
    WHERE f_table_name = 'c1' AND search_frame = c2.geometry
)

qu'on traduit par: parmi les géométries dont l'id est dans la fenêtre de recherche de la géométrie 2.

Donc d'abord, je créerai une table c3 qui est une copie de c2 dont la géométrie est le buffer.
ta requête complète sans la fonction PtDistWithin :

Code:

SELECT"c1"."geometry" from "c1", "c3" 
WHERE 
c1.ROWID IN (
    SELECT ROWID
    FROM SpatialIndex
    WHERE f_table_name = 'c1' AND search_frame = c3.geometry
)
AND within("c1"."geometry","c3"."geometry",1000))

Cordialement,

Dernière modification par lejedi76 (mer. 26 avril 2017 15:34)

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |