• Non ci sono risultati.

Esposizione dati con API

Nel documento WODAR – Web Open Data Augmented Reality (pagine 32-36)

L’API presente nel progetto, esposta all’URI https://gioconda.supsi.ch/wodar/api_request, è un semplice endpoint che rende possibile l’acceso e la creazione dei wPOI da un punto esterno all’app di configurazione. L’API può prendere da uno a tre argomenti in ordine sparso e in base ad essi va a svolgere diverse mansioni. Gli argomenti che vengono accettati sono

query, lat e lon e permettono di svolgere le seguenti operazioni:

• Con solo l’argomento query è possibile inviare una query sparql completa di PREFIX, che verrà eseguita sul database esposto da d2rq 10 e permette di accedere a tutti i wPOI già presenti nel sistema.

• Con gli argomenti lat e lon è possibile popolare i dataset per coprire la zona con centro le coordinate passate come argomenti e con raggio 1000m attraverso l’algoritmo spiegato nella sezione successiva.

• Con tutti e tre gli argomenti viene prima eseguito il popolamento dei dataset e poi viene eseguita la query.

Esempio richiesta API con tre argomenti11:

https://gioconda.supsi.ch/wodar/api_request?query=PREFIX vocab:

<http://localhost:2020/resource/vocab/> SELECT * WHERE { ?s a vocab:poi . ?s vocab:poi_id 160 . ?s vocab:poi_name ?name . }&lat=46.0481516&lon=9.1369806

5.4.1 Algoritmo creazione dataset

L’algoritmo di creazione dei dataset sfrutta la geometria analitica per evetiare una eccessiva sovrapposizione dei dataset, ma dato che la terra è una sfera e non un piano la sua precisione non è molto accurata. Questo imprecisione comunque non va a influire in alcun modo sul corretto funzionamento dell’algoritmo dato che pochi metri di errore su un chilometro risultano completamente trascurabili.

Iniziamo suddividendo il problema in tre casi:

• primo caso: il nuovo dataset è completamente contenuto in un dataset già presente. • secondo caso: le coordinate del centro del nuovo dataset non sono contenute in nessun

altro dataset.

• terzo caso: le coordinate del centro del nuovo dataset sono contenute in uno o più dataset preesistenti.

10[1] http://d2rq.org/ 11

Nel primi due casi la situazione si risolve molto semplicemente perchè, siccome vogliamo la certezza che il punto in cui si trova l’utente sia contenuto in un dataset, o non facciamo nulla o andiamo a creare un nuovo dataset con raggio 1000m e centro nelle sue coordinate. Nel terzo caso la situazione si complica perchè è in questo momento che si inizia a sfruttare la geometria. Come primo passaggio abbiamo un preprocessamento nel caso in cui il nuovo dataset ha un unico dataset preesistente. Questo preprocessamento consiste nella creazione di un nuovo dataset (blu) all’esterno del dataset preesistente (nero) in modo da contenere parte dei punti del nuovo dataset (rosso) che fuoriescono da quello già presente.

Figura 5.4: Algoritmo creazione dataset preprocessamento

Il preprocessamento inizia creando un retta (verde) passante per i punti A e B. Successiva- mente vengono cercati i punti di intersezione tra la retta e la circonferenza del nuovo dataset (rosso) e viene scelto il più lontano dal punto A, quindi il punto C. In questo punto viene creato il dataset esterno (blu) con raggio 1000m.

Dopo il preprocessamento si passa alla parte più complessa dell’algoritmo. Questa parte si occupa della creazione dei dataset di dimensioni minori 12 che devono coprire le parti del

nuovo dataset che fuoriescono dai dataset preesistenti. Per fare ciò questa volta si sfruttano i punti di intersezione tra i dataset. Di questi punti si scelgono quelli contenuti nel nuovo dataset e di essi si prendono solo quelli che non sono contenuti in altri dataset. Questo secondo controllo ci permette di identificare i punti esterni, cioè quei punti oltre i quali non è presente nessun dataset, quindi è una zona inesplorata.

12

28 Implementazione e funzionamento

Figura 5.5: Algoritmo creazione dataset intersezione

Partendo dal risultato della seconda immagine del preprocessamento otteniamo una situa- zione in cui abbiamo due dataset preesistenti (neri). Di questi dataset troviamo i punti di intersezione E e D e notiamo che oltre a essere contenuti nel nuovo dataset (rosso) sono anche punti esterni. A questo punto creiamo la retta (verde) passante per i due punti e calcoliamo i punti di intersezione tra la retta e il nuovo dataset, quindi F e G. Siccome sia D che E sono punti esterni andremo a creare due nuovi dataset (blu), uno con centro in F e raggio la distanza tra F e D e l’altro con centro in G e raggio la distanza tra G e E.

In questo secondo esempio ci troviamo in una situazione un pò più complessa con la presenza di tre dataset preesistenti (neri), due dei quali sono anche tangenti (quello con centro in A e quello con centro in B). Per quanto riguarda questi ultimi due l’algoritmo va a creare una retta (viola) passante per i punti A e B e calcola la retta (viola) ad essa perpendicolare passante per il punto D. Con la retta perpendicolare si calcolano i punti di intersezione con il nuovo dataset (rosso), quindi I e K. Con questi due punti e quelli calcolati con il sistema mostrato nell’esempio precedente andiamo a creare il dataset con centro in I e raggio la distanza tra I e D e il dataset con centro in J e raggio la distanza tra J e G. I punti K e F vengano scartati o perchè non punti esterni o perchè non contenuti nel nuovo dataset.

5.4.1.1 Conclusione

In conclusione questo algoritmo, che se è stato creato per permettere l’utilizzo del client in qualunque parte del mondo senza la preventiva creazione del dataset, ha dimostrato una buona efficacia nella creazione automatica degli stessi che, come si può notare nell’immagine sottostante, vanno a coprire completamnte la zona interessata13.

Figura 5.7: Algoritmo creazione dataset immagine dimostrativa

13

30 Implementazione e funzionamento

Nel documento WODAR – Web Open Data Augmented Reality (pagine 32-36)

Documenti correlati