Ich habe ein paar tausend Polygone in SpatiaLite. Ich versuche eine "Berührungs" -Abfrage durchzuführen:
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
und wow, ist es langsam!
Wenn ich es jedoch auffordere, es nur für ein Paket in map1 zu tun, läuft es sehr schnell.
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
and map1."ROWID" = 753
Ich erwarte, dass die erste Abfrage langsamer ausgeführt wird, aber sie ist erstaunlich langsam. Es läuft sehr schnell in SQLServer, Manifold GIS und PostGIS. Ist Spatialite wirklich ineffizient?
spatialite
ajl
quelle
quelle
Antworten:
Nein, SpatiaLite ist nicht so langsam, Sie müssen nur einen räumlichen Index verwenden. Aufgrund von Einschränkungen im SQLite-Design ist die Verwendung eines räumlichen Index in einer Abfrage nicht so unsichtbar wie in PostGIS.
Hier ist ein Beispiel aus dem SpatiaLite-Kochbuch http://www.gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/neighbours.html
Nach dem Erstellen eines räumlichen Index für Ihre Polygondatensätze
quelle
In Eric Westras Buch 'Python Geospatial Development' auf Seite 188 wird gezeigt, dass für die CONTAINS-Operation zumindest Spatialite möglicherweise überraschenderweise schneller als MySQL und PostGIS ausgeführt werden kann - wenn das betreffende räumliche Indizierungsverfahren befolgt wird.
quelle
Ich habe vor einiger Zeit einen Blog darüber geschrieben. Siehe http://www.frogmouth.net/blog/?p=23
Micha hat auch einen interessanten Blog zu diesem Thema geschrieben .
quelle