Fabiosoft
Apps for your iPhone & iPad and PC
  • Home
  • Applicazioni
  • Blog
  • Contatti
  • Donazione
Select Page ...

Blog

Gestione luoghi previsioni meteo

Fabio Nisci 30 Dicembre 2013 Diario di bordo No Comments
Share Button

Abstract. Lista e documentazione specifica di ogni singola azione necessaria per la gestione completa dei loghi gestiti dai modelli meteorologici.
Objectives. Rendere più semplice l’interazione e la gestione dei luoghi.
Prior Work. Scrittura, sviluppo e composizione delle azioni in linguaggio Python tramite web framework Bottle.
Approach. Esaminando le azioni una per una si descrive il funzionamento ed eventuale spiegazione dei principi teorici.
Results. Documentazione completa delle azioni per poter replicare e/o migliorare l’approccio al lavoro svolto.
Value. Maggiore conoscenza d ogni singola azione e servizio sviluppato

1. Introduction

Acronimo di Application Programming Interface, un API è un interfaccia data da un software per attuare interazioni con altri software, allo stesso modo in cui un User Interface facilita l’interazione tra l’utente ed il software. L’API ha permesso alle comunità web di costruire un open space dove condividere contenuti e dati tra le comunità e applicazioni. In questo modo un contenuto che è stato creato da una parte può essere dinamicamente postato e aggiornato da un altra parte.
Quando si creano, si consultano o gestiscono API bisogna far sì che l’utente finale abbia tutte le informazioni richieste e nel formato migliore. Che tu sia uno sviluppatore, un tester o un manager alcuni strumenti ti aiutano a prendere il controllo di API e servizi REST facilmente.
Siamo nella situazione in cui viene installato un semplice micro web-framework come Bottle che richiede solo i moduli della Python Standard Library ma che ci mette a disposizione un modo veloce per scrivere le nostre API consultabili da qualsiasi client fornendo la risposta in formato JSON per qualsiasi sia il metodo HTTP usato, da GET, POST o DELETE, semplicemente dichiarando il tipo di route da gestire.
La stesura completa dei servizi spetta agli sviluppatori.

2. Body Text

La stesura completa dei servizi spetta agli sviluppatori. Ogni route viene chiamata dal framework action a cui è possibile assegnare uno specifico metodo HTTP a cui rispondere.
Il CCMMMA (Centro Campano per il Monitoraggio e la Modellistica Marina e Atmosferica) offre servizi e prodotti basati sui dati delle proprie previsioni meteomarine e della propria rete di monitoraggio. Tuttavia sviluppatori come Fabio Nisci si sono occupati di rendere questi dati grezzi e poco usabili in vere e proprie API che forniscano le informazioni in formato JSON fornendo una collezione pubblica e ben documentata di servizi utilizzata per lo sviluppo di applicazioni e servizi.
Personalmente ho ritenuto opportuno, dopo lo sviluppo dell’applicazione UniMeteo, fornire più informazioni agli utenti mettendo a disposizione dati omessi nelle vecchie API, così vista la mia esperienza in servizi di localizzazione le ho prodotte.

A. Latest update

,, Title,Latest update Author,Fabio Nisci Description,Model last update date Output,Model last update date. It could takes a while. Params,model Format,application/json Authentication,Not Required Response,200 Ok; 404 Wrong model URI,https://api.uniparthenope.it/meteo/latest/<model>

Dato un modello meteorologico, dove model è una chiave proveniente dall’action getmodels, restituisce l’intera voce dell’ultimo aggiornamento eseguito sul backend.
La base dove sono contenute queste informazioni è “http://meteo.uniparthenope.it/dods/xml” fornita tramite protocollo DODS, basato su OPeNDAP protocollo di trasporto dati usato spesso dagli scienziati della terra, presentato in formato XML. L’algoritmo si innesta nella cartella interessata, che per l’ultimo aggiornamento disponibile consiste in “/serverdirectory/dataset” che costituirà l’intero dataset in cui cercare le informazioni desiderate.
Dopodiché opera la vera e propria ricerca del modello a cui siamo interessati. Escludendo eventuali modelli privati o aggiornamenti troppo vecchi a cui non saremmo comunque interessati.
Al completamento restituisce un output in formato JSON che rispecchia l’entry più recente per quel dato modello.
L’intera operazione potrebbe richiedere diversi secondi a causa della lunga elaborazione del server per quanto riguarda la prima stesura della directory dataset non dovuto assolutamente dall’action in question, tuttavia una volta elaborata l’algoritmo di ricerca è estremamente veloce.

B. Register new user

,, Title,Register new user Author,Fabio Nisci Description,Insert new admin user into database. This user have privileges to edit; generate or update a place info Output,Nothing useful; just admins informations Params,username: username to insert; password: user password Format,application/json Authentication,Required Response,200 Authorized; 206 Already authorized; 401 Not authorized URI,https://api.uniparthenope.it/meteo/generate/insert;

Alcune action richiedono operazioni di scrittura su un database interno sqlite3 che mantiene le informazioni extra in grado di far funzione alcune API aggiuntive. L’action insert in questione si occupa di inserire un nuovo utente nel database che abbia privilegi di modificare, generare o aggiornare informazioni sui luoghi.
HTTPS e metodo POST assicurano una trasmissione sicura, dopodiché, se non già presenti, vengono salvate informazioni di nome utente e password nell’apposita tabella. Per garantire maggiore sicurezza, se i dati presenti sono particolarmente sensibili, è possibile abilitare i “profili incompleti” in cui sono già presenti alcuni utenti che diventeranno effettivi una volta che l’utente avrà compilato le informazioni.

C. Update or generate places database

C. Update or generate places database

,, Title,Update or generate places database Author,Fabio Nisci Description, Update and refresh places in database Output,Nothing useful; just admins informations Params,username; password; alsofill: before update locations verify if there are new places; limit: limit places to process Format,application/json Authentication,Required Response,200 Ok; 404 Not found URI,https://api.uniparthenope.it/meteo/generate

Aggiorna o rigenera il database dei luoghi. Questa azione richiede di essere utenti autorizzati alla modifica del database, quindi bisogna essere registrati come tali essendo la prima operazione che viene svolta dall’action.
Se il parametro “alsofill” è impostato ad 1, viene effettuata l’operazione di verifica remota dalla lista dei luoghi, in questo modo se dovessero esserci aggiornamenti o aggiunta di nuovi luoghi rispetto a quelli già presenti verranno automaticamente integrati nel database. La lista fornita dal centro comprende solo l’identificativo interno del luogo ed il nome comune in lingua italiana, quindi adesso ha inizio la vera e propria operazione di inserimento.
Vengono, a questo punto, selezionati tutti i luoghi nel database che richiedono modifiche e, uno ad uno, sono processati. Il singolo record viene passato ad un servizio remoto di geocoding, il processo di trovare coordinate ed informazioni geografiche, spesso espresse come latitudine e longitudine, da altri dati geografici come indirizzo o codice postale.
Il geocoder, quindi, è in grado di fornire informazioni come: un indirizzo formattato e leggibile, informazioni di localizzazione GPS con latitudine e longitudine e confini del luogo. Dopodiché si salvano le modifiche permanentemente nel database.

Tale servizio di geocoding è disponibile gratuitamente secondo licenza, tuttavia ha alcuni limiti che l’action da me elaborava va a superare garantendo il servizio voluto.

D. Get place by its name

,, Title,Get place by its name Author,Fabio Nisci Description,It returns place information you are looking for. Output,Place informations. It could be a list. Params,placename: Place common name to find aka Napoli; Rome or Paris; space separated by '+' sign Format,application/json Authentication,Not Required Response,200 Ok; 404 Not found URI,https://api.uniparthenope.it/meteo/byplacename/<placename>

Fornito il nome del luogo da ricercare individua tutte le possibili corrispondenze. Il nome del luogo da ricercare viene passato come parametro dell’azione in cui gli spazi sono separati dal simbolo “+” questo perché vengono effettuate due tipi di ricerche una complessa ed un’altra semplice. La prima viene innescata qualora si ricerchi un luogo tramite un prefisso articolato del tipo: “comune di”, “provincia di” o “porto di”. Altrimenti viene scelta la modalità di ricerca semplice dove viene analizzata semplicemente la similarità tra le parole.
Se trovati più di un risultato viene generata una lista dal luogo più vicino sintatticamente, in ogni caso vengono comunque presentate tutte le informazioni utili dal dataset.

E. Nearest places

,, Title,Nearest places Author,Fabio Nisci Description,It returns nearest places your location; in radius. Output,Place informations. It could be a list. Params,latitude: current location latitude; longitude: current location longitude; radius radius in KM; limit: limit results set Format,application/json Authentication,Not Required Response,200 Ok; 404 Not found URI,https://api.uniparthenope.it/meteo/bycoords/<latitude>/<longitude>

Questa azione di ricerca consente di cercare luoghi all’interno di un’area specificata. È possibile rifinire la richiesta di ricerca fornendo latitudine e longitudine della posizione attuale o specificando il raggio di ricerca in chilometri. Viene restituita una lista di possibili luoghi in cui il primo rappresenta il più vicino alla posizione indicata.
Per calcolare la distanza rispetto due posizione viene usato l’algoritmo distanza di Manhattan (Taxicab geometry oppure Manhattan distance in inglese) successivamente sostituito con la formula dell’emisenoverso (chiamata anche The haversine formula in inglese).
La formula di Haversine è in trigonometria sferica qualcosa di molto simile al teorema di Pitagora.
Che, comunque, prevede la somma dei quadrati delle differenze delle distanze.
Tra l’altro il teorema di Pitagora vale per le coordinate UTM ovvero proiettate in piano.
Non è il caso delle coordinate trattate dai dispositivi mobili che, come tutti i GPS sono [latitudine, longitudine] ( non metriche ) su DATUM WGS84.
Il teorema di Pitagora applicato alle coordinate WGS84 in gradi non dovrebbe funzionare poiché parliamo di angoli e non lati.
Diversamente da quanto espresso dalla teoria però entrambi gli algoritmi restituiscono un risultato simile ma attraverso metodi diversi.
Ecco alcuni test da me effettuati per confrontare gli algoritmi:
Nei pressi di Bologna

Weather API haversine taxi nisci bolognaNei pressi di Napoli

Weather API haversine taxi nisci napoli

Innanzitutto viene preso in considerazione il raggio di ricerca, se non impostato per default viene messo a 5km di distanza dal centro dopodiché viene prevaricata la funzione di Haversine per permettere il calcolo delle distanze, ed infine viene riordinata la lista ottenuta secondo le distanze più prossime.

F. Get place by its ID

,, Title,Get place by its ID Author,Fabio Nisci Description, It returns place information you are looking for. Output,Place informations. Params,identifier: Place identifier code aka prov063; prov065; com15146 Format,application/json Authentication,Not Required Response,200 Ok; 404 Not found URI,https://api.uniparthenope.it/meteo/byid/<identifier>

Algoritmo di ricerca di un luogo specifico indicando il suo identificativo, unico nell’intero database dei luoghi, successivamente abbreviato come ID. Questo ID appartiene ad un solo ed unico luogo. Viene usato per ottenere informazioni sulle previsioni meteorologiche passandolo come parametro ad altre azioni e modelli.
Dapprima l’azione verifica l’ID, dopodiché ricerca il luogo specifico restituendolo come risultato.

REST API for CCMMMA data access

Clicca per ingrandire

Fabio Nisci | fabionisci@gmail.com

3      License

Creative Commons Public License Attribuzione – Non commerciale 3.0 – http://creativecommons.org/licenses/by-nc/3.0/it/deed.it

4      References

Wikipedia – L’enciclopedia libera http://www.wikipedia.org/
Attualmente i servizi descritti sono disponibili su https://api.uniparthenope.it/meteo/

download_button

Share Button
← UniBox: iOS client per OwnCloud server
Scrittura di moduli (driver) sotto Linux →
Fabio Nisci

Esperienza nella progettazione e sviluppo di Applicazioni mobili. Integro le conoscenze acquisite in ambito accademico con un continuo studio di nuove tecnologie che mi permettano di creare applicazioni sempre più affidabili sicure ed efficienti Laureando in Informatica, visionario, esperto di progettazione e creazione software. Buon intuito e abilità nel trovare soluzioni ideali ai problemi reali.

  • Last news

    • Scrittura di moduli (driver) sotto Linux
    • Gestione luoghi previsioni meteo
    • UniBox: iOS client per OwnCloud server
    • UniMeteo Previsioni Meteo
    • GRETA: Global Reference Engine Toolkit API
  • Others…

    • About Us
    • Applicazioni
    • Blog
    • Contatti
    • Donazione
    • Home
    • LaborSystem QC
    • News
    • ParkYou
    • Privacy – Cookie
    • PrivateNotes
    • The Tourist
    • Cerca

    • Contatti

    • Home
    • Applicazioni
    • Blog
    • Contatti
    • Donazione
    Copyright © 2012 fabiosoft.com All Rights Reserved