Tengo un par de miles de polígonos en SpatiaLite. Estoy tratando de hacer una consulta de "toques":
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
y wow, es lento!
Sin embargo, si le pido que solo lo haga por un paquete en map1, se ejecuta muy rápido.
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
and map1."ROWID" = 753
Espero que la primera consulta se ejecute más lentamente, pero es increíblemente lenta. Se ejecuta muy rápido en SQLServer, Manifold GIS y PostGIS. ¿Es Spatialite simplemente realmente ineficiente?
spatialite
ajl
fuente
fuente
Respuestas:
No, SpatiaLite no es tan lento, solo necesita usar un índice espacial. Debido a las limitaciones en el diseño de SQLite, el uso de un índice espacial en una consulta no es tan invisible como lo es en PostGIS.
Aquí hay un ejemplo modificado del SpatiaLite Cookbook http://www.gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/neighbours.html
Después de crear un índice espacial en sus conjuntos de datos de polígonos
fuente
En el libro de Eric Westra 'Python Geospatial Development', la página 188 muestra que, para la operación CONTAINS, al menos Spatialite puede, quizás sorprendentemente, ejecutarse más rápido que MySQL y PostGIS, si se sigue el procedimiento de indexación espacial involucrado.
fuente
Escribí un blog sobre esto hace un tiempo. Ver http://www.frogmouth.net/blog/?p=23
Micha también escribió un blog interesante sobre este tema .
fuente