[Gfoss] SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

aperi2007 aperi2007 a gmail.com
Dom 5 Gen 2014 13:15:27 CET


Alessandro,
grazie per la correzione.
L'errore causava una errata dichiarazione di tabelle che in spatialite 
equivale a d avere sempre risultato vuoto.

se si riscrive la query semplicemente omettendo del tutto la
> ORDER BY si scopre invece che la query torna a funzionare a tutta
> manetta (proprio come avveniva con le vecchie versioni di sqlite).
> tempi oggettivi misurati:
>
>   con ORDER BY: circa 3 minuti
> senza ORDER BY: poco meno di 10 secondi :-D 

organizzandola con una subquery che esegua il lavoro spaziale e una 
query che esegue solamente l'ordinamento,
il query planner non dovrebbe far eseguire l'ordinamento prima del 
filtraggio con l'indice spaziale.

select
     z."Tuscan Local Council",
     z."Tuscan County",
     z."Neighbour LC",
     z.County,
     z.Region,
     z.geometry
from
     (
         SELECT
             lc1.lc_name AS "Tuscan Local Council",
             c1.county_name AS "Tuscan County",
             lc2.lc_name AS "Neighbour LC",
             c2.county_name AS County,
             r2.region_name AS Region
         FROM
             local_councils AS lc1,
             local_councils AS lc2
             JOIN counties AS c1 ON (c1.county_id = lc1.county_id)
             JOIN counties AS c2 ON (c2.county_id = lc2.county_id)
             JOIN regions AS r1 ON (r1.region_id = c1.region_id)
             JOIN regions AS r2 ON (r2.region_id = c2.region_id)
         WHERE
             r1.region_name LIKE 'toscana'
             AND r1.region_id <> r2.region_id
             AND ST_Touches(lc1.geometry, lc2.geometry)
             AND lc2.ROWID IN (
                 SELECT ROWID FROM SpatialIndex
                 WHERE f_table_name='DB=main.local_councils' AND 
search_frame=lc1.geometry
             )
     ) as z
ORDER BY z.county_name, z.lc_name;

Andrea.



Maggiori informazioni sulla lista Gfoss