SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

cesare gerbino
Ciao a tutti,

ho ripreso per approfondire una cosa SpatialLite Cookbook e sto usando l'ultima versione di spatialite_gui.

Provando ad eseguire la ricetta 12 "Dintorni" che è quella che mi interesserebbe ho notato che provando ad eseguirla ottengo un errore che è il seguente:

SQL error: no such function: RTreeIntersects

Cercando un po nella rete sembra che sia dovuto al fatto che la funzione in questione sia "deprecata" se non ho inteso male.

Vista quindi la select riportata nel manuale ......

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 pkid
FROM idx_local_councils_geometry
WHERE pkid MATCH RTreeIntersects(
MbrMinX(lc1.geometry),
MbrMinY(lc1.geometry),
MbrMaxX(lc1.geometry),
MbrMaxY(lc1.geometry)))
ORDER BY c1.county_name, lc1.lc_name;

come posso modificarla per ottenere lo stesso risultato?

Grazie mille anticipatamente

 Cesare

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

Andrea Peri
Premesso che la query in questione sembra scritta per far casino :)
Infatti usa due volte la medesima tabella local_councils e quindi un utente che deve imparare non capisce se nell'indice deve fare riferimento alla prima o alla seconda tabella (sono entrambe le stesse!).

Premesso anche che non ho il tempo di provarla, io credo che questa dovrebbe essere quella corretta.
Eventualmente si tratta di cambiare da lc1.geometry a lc2.geometry.

Questa è la tua query originale, opportunamente indentata per evidenziarne la struttura:

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 pkid FROM idx_local_councils_geometry
        WHERE pkid MATCH RTreeIntersects(
            MbrMinX(lc1.geometry),
            MbrMinY(lc1.geometry),
            MbrMaxX(lc1.geometry),
            MbrMaxY(lc1.geometry)
        )
    )
ORDER BY c1.county_name, lc1.lc_name;


Questa altra è come io proverei a tradformarla per usare le ultime novita' di spatialite.
Ovviamente si parla di un db generato con la medesima ultima versione di SL.

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='MAIN=local_councils' AND search_frame=lc1.geometry
    )
)
ORDER BY c1.county_name, lc1.lc_name;


se invece che nel medesimo db la tabella è in un db allegato, allora fai:
        WHERE f_table_name='DB=allegato.local_councils' AND search_frame=lc1.geometry


Saluti,



Il giorno 05 gennaio 2014 11:08, cesare gerbino <[hidden email]> ha scritto:
Ciao a tutti,

ho ripreso per approfondire una cosa SpatialLite Cookbook e sto usando l'ultima versione di spatialite_gui.

Provando ad eseguire la ricetta 12 "Dintorni" che è quella che mi interesserebbe ho notato che provando ad eseguirla ottengo un errore che è il seguente:

SQL error: no such function: RTreeIntersects

Cercando un po nella rete sembra che sia dovuto al fatto che la funzione in questione sia "deprecata" se non ho inteso male.

Vista quindi la select riportata nel manuale ......

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 pkid
FROM idx_local_councils_geometry
WHERE pkid MATCH RTreeIntersects(
MbrMinX(lc1.geometry),
MbrMinY(lc1.geometry),
MbrMaxX(lc1.geometry),
MbrMaxY(lc1.geometry)))
ORDER BY c1.county_name, lc1.lc_name;

come posso modificarla per ottenere lo stesso risultato?

Grazie mille anticipatamente

 Cesare

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

cesare gerbino
Ciao Andrea,

grazie della risposta sollecita: nella tua select c'era un errore, una parentesi tonda in più, la versione sintatticamente corretta è questa

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='MAIN=local_councils' AND search_frame=lc1.geometry
    )
ORDER BY c1.county_name, lc1.lc_name;

Ora non dà più errore anche se al momento mi restituisce un insieme vuoto ..... riproverò.

 Grazie






Il giorno 05 gennaio 2014 11:24, Andrea Peri <[hidden email]> ha scritto:
Premesso che la query in questione sembra scritta per far casino :)
Infatti usa due volte la medesima tabella local_councils e quindi un utente che deve imparare non capisce se nell'indice deve fare riferimento alla prima o alla seconda tabella (sono entrambe le stesse!).

Premesso anche che non ho il tempo di provarla, io credo che questa dovrebbe essere quella corretta.
Eventualmente si tratta di cambiare da lc1.geometry a lc2.geometry.

Questa è la tua query originale, opportunamente indentata per evidenziarne la struttura:


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 pkid FROM idx_local_councils_geometry
        WHERE pkid MATCH RTreeIntersects(
            MbrMinX(lc1.geometry),
            MbrMinY(lc1.geometry),
            MbrMaxX(lc1.geometry),
            MbrMaxY(lc1.geometry)
        )
    )
ORDER BY c1.county_name, lc1.lc_name;


Questa altra è come io proverei a tradformarla per usare le ultime novita' di spatialite.
Ovviamente si parla di un db generato con la medesima ultima versione di SL.


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='MAIN=local_councils' AND search_frame=lc1.geometry
    )
)
ORDER BY c1.county_name, lc1.lc_name;


se invece che nel medesimo db la tabella è in un db allegato, allora fai:
        WHERE f_table_name='DB=allegato.local_councils' AND search_frame=lc1.geometry


Saluti,



Il giorno 05 gennaio 2014 11:08, cesare gerbino <[hidden email]> ha scritto:
Ciao a tutti,

ho ripreso per approfondire una cosa SpatialLite Cookbook e sto usando l'ultima versione di spatialite_gui.

Provando ad eseguire la ricetta 12 "Dintorni" che è quella che mi interesserebbe ho notato che provando ad eseguirla ottengo un errore che è il seguente:

SQL error: no such function: RTreeIntersects

Cercando un po nella rete sembra che sia dovuto al fatto che la funzione in questione sia "deprecata" se non ho inteso male.

Vista quindi la select riportata nel manuale ......

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 pkid
FROM idx_local_councils_geometry
WHERE pkid MATCH RTreeIntersects(
MbrMinX(lc1.geometry),
MbrMinY(lc1.geometry),
MbrMaxX(lc1.geometry),
MbrMaxY(lc1.geometry)))
ORDER BY c1.county_name, lc1.lc_name;

come posso modificarla per ottenere lo stesso risultato?

Grazie mille anticipatamente

 Cesare

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

a.furieri
La sintassi giusta e':

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
     )
ORDER BY c1.county_name, lc1.lc_name;

N.B: ... WHERE f_table_name='DB=main.local_councils' ...
e' la sintassi estesa che supporta anche il caso in cui siano
eventualmente presenti degli ATTACHed DB; ma nel nostro caso
e' connesso un unico DB (il primario) e quindi bastava usare
piu' semplicemente la notazione base (senza indicare il
prefisso/alias del DB):
... WHERE f_table_name='local_councils' ...

---------------

comunque se ne scopre sempre una nuova :-D

a partire dalla version 3.8.0 SQLite ha adottato un "next generation
query planner" che "quasi sempre" e' in grado di eseguire le queries
in modo significativamente piu' veloce.
purtroppo in qualche caso "sfortunato" invece il nuovo planner puo'
anche rallentare catastroficamente la velocita' di esecuzione.
(fatto ben noto ed abbondantemente documentato nelle note di
rilascio delle ultime versioni di SQLite)

purtroppo nel caso particolare di questa query specifica abbiamo
proprio un esempio di come il nuovo query planner possa avere un
impatto assolutamente nefasto.
infatti questa query (decisamente complessa) con il nuovo planner
finisce per selezionare come guida l'indice suggerito dalla clausola
ORDER BY: ma cosi' lo spatial index finisce "messo in ombra", e si
ha un rallentamento catastrofico.

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

ciao Sandro
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

Andrea Peri
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.

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

cesare gerbino
Ciao Sandro e Andrea,

allora ho provato e direi che ora la situazione è questa.

La select suggerita da Sandro è ok e funziona .....

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
    )
ORDER BY c1.county_name, lc1.lc_name;

La select di Andrea aveva qualche piccolo errore che mi sembra ora di aver corretto e quindi la versione definitiva è la seguente:

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,
            lc1.geometry AS geometry
        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."Tuscan County", z."Neighbour LC";

Grazie mille per il sollecito supporto

Cesare






Il giorno 05 gennaio 2014 13:15, aperi2007 <[hidden email]> ha scritto:
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.


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: SpatiaLite Cookbook: SQL error: no such function: RTreeIntersects

Sieradz
http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/SpatiaLite-Cookbook-SQL-error-no-such-function-RTreeIntersects-td7585692.html

============================

Riesumo questa vecchia discussione, per riportare la corretta sintassi per l'estrazione dei soli comuni isolani (pag. 103 dell'obsoleto PDF di A.Furieri):

SELECT lc1.lc_name AS "Comune Istat",
c.county_name AS Provincia,
r.region_name AS Regione,
ST_Area(lc1.geometry)/1000000 as Area_KMQ
FROM local_councils AS lc1
JOIN counties AS c ON (
c.county_id = lc1.county_id)
JOIN regions AS r ON (
r.region_id = c.region_id)
LEFT JOIN local_councils AS lc2 ON (
lc1.lc_id <> lc2.lc_id
AND NOT ST_Disjoint(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
     ))
group by lc1.lc_id
having count(lc2.lc_id)=0
order by lc1.lc_name