J'ai quelques milliers de polygones dans SpatiaLite. J'essaie de faire une requête "touches":
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
et wow, c'est LENT!
Cependant, si je lui demande de le faire pour une seule parcelle dans map1, cela fonctionne très rapidement.
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
and map1."ROWID" = 753
Je m'attends à ce que la première requête s'exécute plus lentement, mais elle est incroyablement lente. Il fonctionne très rapidement dans SQLServer, Manifold GIS et PostGIS. La Spatialite est-elle vraiment vraiment inefficace?
spatialite
ajl
la source
la source
Réponses:
Non, SpatiaLite n'est pas si lent, il vous suffit d'utiliser un index spatial. En raison des limites de la conception SQLite, l'utilisation d'un index spatial dans une requête n'est pas aussi invisible que dans PostGIS.
Voici un exemple modifié du livre de recettes SpatiaLite http://www.gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/neighbours.html
Après avoir créé un index spatial sur vos ensembles de données de polygone
la source
Dans le livre d'Eric Westra `` Python Geospatial Development '', la page 188 montre que pour l'opération CONTAINS, au moins Spatialite peut, peut-être de manière surprenante, fonctionner plus rapidement que MySQL et PostGIS - si la procédure d'indexation spatiale impliquée est suivie.
la source
J'ai écrit un blog à ce sujet il y a quelque temps. Voir http://www.frogmouth.net/blog/?p=23
Micha a également écrit un blog intéressant sur ce sujet .
la source