On Wed, 12 Feb 2014 13:10:11 -0800 (PST), Beppe wrote:
Salve a tutti,
sto studiando spatialite su "Spatialite cookbook" e arrivato alla ricetta #10 mi sono reso conto che alcune funzionalità sono incompatibili con la
versione più recente di Spatialite che sto usando...
Attualmente sono arrivato alla ricetta #15 e non riesco a capire il modo per
far funzionare la seguente query:

SELECT pp1.name AS "PopulatedPlace #1",
  GeodesicLength(
    MakeLine(pp1.geometry, pp2.geometry))
      AS "Distance (meters)",
  pp2.name AS "PopulatedPlace #2"
FROM populated_places AS pp1,
  populated_places AS pp2
WHERE GeodesicLength(
    MakeLine(pp1.geometry, pp2.geometry)) < 1000.0
  AND pp1.id <> pp2.id
  AND pp2.ROWID IN (
    SELECT pkid
    FROM idx_populated_places_geometry
    WHERE pkid MATCH RTreeDistWithin(
      ST_X(pp1.geometry),
      ST_Y(pp1.geometry), 0.02))
ORDER BY 2

Qualcuno potrebbe aiutarmi?


ciao Beppe,

effettivamente il cookbook inizia ad invecchiare qua e la, specie
dove c'e' in ballo uno Spatial Index.

le subqueries basate sul meccanismo "WHERE ... MATCH ..." erano
quanto di meglio avevamo a disposizione qualche anno fa.
nel frattempo sono state deprecate (e definitivamente rimosse
dal codice) perche' alla prova dei fatti creavano un sacco di
problemi.

attualmente si usa la nuova interfaccia SpatialIndex, che trovi
descritta in dettaglio in questo documento:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=SpatialIndex

quindi seguendo le ultime evoluzioni ora quella query diventa:

SELECT pp1.name AS "PopulatedPlace #1",
  GeodesicLength(
    MakeLine(pp1.geometry, pp2.geometry))
      AS "Distance (meters)",
  pp2.name AS "PopulatedPlace #2"
FROM populated_places AS pp1,
  populated_places AS pp2
WHERE GeodesicLength(
    MakeLine(pp1.geometry, pp2.geometry)) < 1000.0
  AND pp1.id <> pp2.id
  AND pp2.ROWID IN (
    SELECT rowid FROM SpatialIndex
    WHERE f_table_name = 'populated_places'
      AND search_frame = ST_Buffer(pp1.geometry, 0.02))
ORDER BY 2

ciao Sandro
_______________________________________________
Gfoss@lists.gfoss.it
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

Rispondere a