In primo luogo mi sembra particolarmente opportuno chiarire cosa si intenda per Motore Spaziale.
Esso è rappresentato da un'estensione del server eXtraWay, estensione che si ottiene aggiungendo ai moduli standard eXtaWay la libreria XwSDE.dll/so.
Tale libreria dinamica viene prodotta da HSC di Torino secondo le specifiche concordate con 3D ed offre funzionalità definite Spaziali.
In sintesi tale motore entra in gioco ogni qual volta un'applicazione eXtraWay prevede dati che rappresentano una geometria (punti, linee, poligoni e così via) applicati, solitamente, ad applicazioni basate sulla geo referenziazione di oggetti, aree e così via. Quando sussistono queste condizioni, il Motore Spaziale viene affiancato al server per creare un archivio di coordinate e degli indici speciali, definiti appunto Spaziali, sui quali sarà in seguito possibile compiere operazioni di ricerca con un apposito linguaggio.
I dati di natura geometrica devono essere espressi secondo una sintassi verbosa detta WKT che si contrappone all'equivalente forma binaria detta WKB. Avendo un elemento alimentato con un formato WKT è possibile alimentare un apposito archivio spaziale nel quale vengono trattenute queste coordinate e convertite in indici nei quali sia possibile compiere selezioni.
Il formato WKT non viene documentato in questo documento ma se ne può avere una maggior comprensione grazie ad alcuni esempi.
La rappresentazione di un punto appare nella forma...
POINT
(x y)
...mentre la rappresentazione di una linea appare nella forma...
LINESTRING
(x1 y1, x2 y2, x3 y3, ..., xn yn)
...così come un poligono appare nella forma...
POLYGON
(x1 y1, x2 y2, x3 y3, ..., xn yn, x1 y1)
...e così via per POINT
, MULTIPOINT
, LINESTRING
, MULTILINESTRING
, POLYGON
, MULTIPOLYGON
e GEOMETRYCOLLECTION
.
Di seguito vedremo come si fa uso del motore spaziale.
Per ottenere l'uso del Motore Spaziale oltre ovviamente alla presenza della libreria dinamica necessaria si deve fare in modo che almeno un canale di un archivio, tipicamente un elemento, venga riconosciuto come oggetto preposto a contenere un formato WKT.
Per indicare questo è sufficiente che per quel particolare canale si configuri il file nomearchivio.conf.xml come segue:
... <key name="XML,/object/geometry" key_style="spatial"/> ...
L'impostazione del key_stile avente valore spatial fa sì che il server eXtraWay non tenti di costituire i soliti indici per il campo in esame ma passi ogni suo contenuto alla libreria dinamica la quale provvede ad alimentare l'archivio spaziale generato alla bisogna.
In merito alla generazione di tale archivio il server provvede a compiere autonomamente tale operazione non appena rileva la presenza di una configurazione di canale di ricerca che giustifichi l'uso del Motore Spaziale.
Per tenere tali files distinti da quelli tipicamente appartenenti all'archivio eXtraWay essi trovano posto nella directory nomearchivio.spe dislocata nella stessa directory che ospita l'archivio in esame. Entro tale directory si trovano alcuni files, in particolare il file nomearchivio.ini che contiene la configurazione tipo dell'archivio spaziale. Il file viene creato direttamente dal server eXtraWay ma, se esistente, non viene più toccato. Intervenendo sul suo contenuto è quindi possibile modificare la dislocazione e denominazione dei files che compongono l'archivio spaziale.
Vediamo come comprenderne il significato. Il contenuto del file, ipotizzando che l'archivio sia denominato spatial
, appare approssimativamente come segue:
[common] application = spatial.spe working_dir = c:\xw\db\spatial\ map_file = spatial.hxix data_file = spatial.hxgeo
La voce working_dir e la voce application servono a comporre il percorso completo che conduce sino ai files dell'archivio spaziale. I nomi espressi alle voci map_file e data_file corrispondono invece ai nomi assegnati ai due files che rappresentano i dati dell'archivio.
Ad essi possono essere associati uno o più files di indici il cui nome non dipende da questo file di configurazione ma che trovano dislocazione nella stessa directory descritta dalle prima due voci.
Una volta messi a punto questi due aspetti (il primo fondamentalmente, il secondo solo se si vuole variare rispetto alle impostazioni di default) su può procedere ad alimentare l'archivio con i dati. Ad ogni inserimento, modifica o cancellazione il corrispondente record dell'archivio spaziale verrà modificato (e con esso i suoi indici). La possibilità di compiere selezioni su tali indici è quindi equivalente, in termini di disponibilità, ai comuni indici eXtraWay.
La ricerca spaziale, a differenza delle comuni ricerche effettuate con il linguaggio di interrogazione di eXtraWay o in forma SQL, si basano sul concetto che una unità informativa sia canditata ad essere selezionata se soddisfa una particolare relazione spaziale con un campione dato. Ne consegue che una ricerce espressa in modo spaziale debba prevedere una geometria, più o meno ampia e complessa, da sfuttare per compiere le verifiche secondo la relazione espressa.
Ogni ricerca spaziale può essere eventualmente effettuata in combinazione con operatori e canali di ricerca standard.
La sintassi di una ricerca spaziale deve rispettare questa semplice forma:
[nome_canale_geo] Relazione_Spaziale Espressione_di_una_geometria
Le relazioni spaziali ammesse sono le seguenti:
WITHIN:
Richiede che i documenti selezionati abbiano una geometria che rappresenta punti, linee o poligoni tutti interni all'espressione spaziale data. Tale espressione può essere di vario genere ma se essa è una linea non potrà che soddisfare altre linee o punti e così via.CONTAIN
o CONTAINS:
Richiede che i documenti abbiano una geometria che rappresenta linee o poligoni che contengono l'espressione spaziale data. Ovviamente data la natura della relazione di contenimento, essa non si applica a tutte le geometrie.OVERLAP
o OVERLAPS:
Richiede che i documenti selezionati si sovrappongano con la geometria spaziale data. Col concetto di sovrapposizone si intende che nessuna delle due geometrie (del documento e quella data) deve contenere l'altra.INTERSECT
o INTERSECTS:
Richiede che i documenti selezionati abbiano una qualsiasi intersezione con l'espressione spaziale data. Ciò comporta che esse possono contenersi, sovrapporsi, intersecarsi o anche semplicemente toccarsi.INT_NOT_TOUCH:
Versione speciale della precedente INTERSECT
che prevede di escludere solo la relazione di contatto TOUCH
.CROSS
o CROSSES:
Richiede che i documenti selezionati attraversino/siano attraversati la/dalla geometria data. Non pè applicabile ai punti.TOUCH
o TOUCHES:
Richiede che i documenti selezionati tocchino la geometria data.DISJOINT:
Richiede che i documenti selezionati non siano in alcun rapporto spaziale con l'espressione spaziale data. Corrisponde all'esatto opposto di INTERSECT
.NCLOSEST:
Richiede che i documenti selezionati siano in un numero massimo definito e siano tutti quelli più prossimi alla geometria data. In questo caso, ed attualmente solo in questo, alla sinassi definita precedentemente va accodata una virgola e, di seguito, la cifra del numero di unità che si desidera ottenere.Oltre a queste relazioni si potranno sviluppare, in futuro, relazioni di EQUAL
.
Vediamo quindi come potrebbero essere espresse delle selezioni:
[XML,/object/geometry] OVERLAP POINT(1759564.2800012229 5169405.0499988608)
La relazione espressa può porre in rapporto il canale con una qualsiasi geometria ma può anche porre in relazione in canale con l'esito di una precedente selezione. Dai documenti selezionati verrà estratta la geometria corrispondente al canale oggetto della selezione ed essa sarà utilizzata come se fosse stata espressa sotto forma di geometria direttamente in selezione. In questo modo si può usare una selezione dei metadati alfanumerici per filtrare o limitare una ricerca spaziale.
Per far uso delle funzionalità esposte si richiede per lo meno il server eXtraWay versione 18.0.4.* o superiore.
Torna a Indice delle voci