15 Anni di programmazione

Aneddoti e Codici di un inguaribile ottimista

October 2010 - Post

Importazione dati da file testuale in SQL Server

Nello scorso post vi ho raccontato di un problema di visualizzazione nei dati estratti dal database Yahoo! GeoPlanet appartenenti ad entità geografiche cinesi (e giapponesi).

Ho risolto il problema importando nuovamente i dati mediante il DTS di SQL Server 2008 ma dando stavolta un’occhiata più approfondita alle opzioni.

 

Mi riferisco in particolare al menù a tendina Tabella Codici. L’opzione di default è  1252 – ANSI (Latino I). Se scorrete le decine di opzioni disponibili, troverete il valore che fa al caso nostro: 65001 (UTF-8). Una volta terminata l’importazione, i dati vengono visualizzati in maniera corretta (almeno spero, non conoscendo le lingue asiatiche!!!)

 

Come consultare il database Yahoo! GeoPlanet

In questo post vedremo un esempio di utilizzo del database GeoPlanet presentato in precedenza. Supponiamo di avere importato i file testuali nel nostro database (nel mio caso SQL Server 2008).

Partiamo da una richiesta che ci fornisca tutte le entità geografiche  italiane. Eseguiamo una query sulla tabella Geoplanet_places imponendo che il codice ISO dell’entità sia uguale ad “IT” (L’elenco dei codici ISO può essere trovato al seguente indirizzo).

La query ci fornisce come risultato ben 55696 entità. Cosa abbiamo trovato esattamente? Il campo Place_Type ci chiarisce le idee a riguardo.

 

Il PlaceTypeState” ci fornisce la regione in cui si trova la località. A questo punto possiamo eseguire una nuova ricerca che ci fornisca le località figlie della regione “Campania” (ID=7153333).

 

Notiamo la comparsa delle Province (PlaceType= County). Nella documentazione ufficiale, Zone viene così descritto: one - Metropolitan Statistical Area (MSA), Telephone Area Code. In più compare un parco Nazionale che viene associato a tutta la regione e non alla singola Provincia.

Troviamo ora le entità che hanno come genitore la provincia di Napoli. Sono registrate 123 entità appartenenti alle seguenti Place_Type: Codici Postali (ZIP), Comuni (LocalAdmin), Isole (Island), Parchi (LandFeature) e Frazioni (Town). I comuni trovati sono 92, in accordo con quanto indicato dal sito web ufficiale dei Comuni Italiani. Se eseguiamo una query imponendo che il Parent_ID sia Napoli troviamo il seguente risultato:

 

In realtà, per indagare più a fondo sul Comune di Napoli occorre interrogare la tabella GeoPlanet_adjacenses che contiene tutti gli accoppiamenti geografici di coppie di entità. Napoli ha 14 comuni confinanti (o di prima corona). Una vista può aiutarci a leggere meglio la lista risultante.

 

La tabella Geoplanet_aliases, infine, fornisce per ogni entità una serie di alias in varie lingue.

 

Vediamo un’applicazione banale. Yahoo offre un Web Service di previsioni del tempo. Invece di inserire una stringa testuale nella query di ricerca col nome della località, basta inserirne il WOEID:

http://weather.yahooapis.com/forecastrss?w=20076932

Se inserite invece  la WOEID della vostra località nella seguente stringa

http://www.geomojo.org/cgi-bin/getaltitude.cgi?woeid=20076932

ne troverete le coordinate geografiche e l’altitudine in metri rispetto al livello del mare!

Un servizio più sofisticato (per smanettoni di ordine superiore) è il PlaceFinder di Yahoo.

In conclusione, credo che possa far molto comodo avere a propria esclusiva disposizione un database geografico ufficiale da cui trarre le informazioni principali per poi agganciarsi a servizi web offerti sulla rete. Non possiamo prevedere se il WOEID diventerà uno standard universale nei prossimi anni o scomparirà miseramente ma al momento io lo aggiungerei alla cassetta degli attrezzi del Programmatore moderno!

 

P.S. Cosa succede con località aventi nomi con caratteri non latini? Per fare questo ho creato una semplice  pagina web con una griglia collegata al database tramite sqldatasource.

 

Mentre le località arabe vengono rese bene quelle cinesi danno più problemi.

 

Giocando con i settaggi di Firefox, il mio browser predefinito, si può arrivare a un risultato migliore ma è evidente che manca ancora qualcosa. Nella documentazione ufficiale di Yahoo non è specificato che “Cinese” abbiano utilizzato.  Se qualcuno di voi ha affrontato e risolto il problema, non esitate a lasciare un commento.

Censimento Indiano, Unique Identifiers, Yahoo e GeoPlanet

 

Ho letto un articolo molto interessante sul censimento indiano che è partito in questi giorni. Lì troverete tutti i dettagli affascinanti di questo progetto visionario.

… il governo ha deciso di non limitarsi a contare la popolazione indiana, ma di assegnare a ogni singolo cittadino sopra i quindici anni un Unique Identity Number (UIN), un numero identificativo univoco”.

Immagino che gli amanti dei database avranno avuto un fremito ad apprendere questo dettaglio. Io ho subito associato la notizia alla meravigliosa serie TV degli anni 60 “The Prisoner” nella quale un ex-agente segreto del governo britannico, immediatamente dopo le sue dimissioni, viene imprigionato in un piccolo villaggio con abitazioni e monumenti in stile mediterraneo, situato in una località sconosciuta. Da quel momento tutti si rivolgono a lui chiamandolo Numero 6

 

 

C’è da chiedersi come potranno mai riuscire gli Indiani a realizzare questa impresa monumentale. Ebbene, il governo Indiano non ha badato a spese.

“…Per farlo ha reclutato alcuni dei migliori ingegneri e guru informatici indiani sparsi in giro per il mondo, tra cui il co-fondatore del servizio di foto online Snapfish e molti dipendenti di Google, Yahoo! e Intel. Il meccanismo è questo: per ogni cittadino si raccolgono non solo le classiche informazioni anagrafiche (nome, data di nascita, sesso, residenza, status familiare, occupazione), ma anche foto, impronte digitali e scansioni dell’iride. Tutte le informazioni sono poi archiviate in un enorme database centrale e lì associate a un numero identificativo di dodici cifre che viene poi spedito per posta. Passaporti, carte d’identità, patenti di guida, ration cards, tutto dovrà poi avere quelle dodici cifre stampate sopra o incorporate con un chip elettronico.”

Vedremo nei prossimi anni come andrà a finire questa storia. Intanto, il coinvolgimento di Yahoo! mi ha fatto ricordare un altro progetto dove si torna sul concetto di Unique Identifiers.

Yahoo! GeoPlanet™ Data

Yahoo! GeoPlanet helps bridge the gap between the real and virtual worlds by providing an open, permanent, and intelligent infrastructure for geo-referencing data on the Internet. This page provides open access to the underlying data under a Creative Commons Attribution license so that you can incorporate WOEIDs and the GeoPlanet hierarchy into your own application

In pratica, Yahoo! GeoPlanet è una risorsa che raccoglie tutte le località “geo-permanenti” sul pianeta Terra. Esso fornisce alla comunità di sviluppatori di software geografici un vocabolario e una grammatica per descrivere la geografia del mondo in maniera non equivoca, permanente e indipendente dai linguaggi. Le entità geografica fornite da Yahoo! GeoPlanet sono referenziate da un identifier a 32-bit: the Where On Earth ID (WOEID). I WOEID sono unici, non ripetitivi e, una volta assegnati, non vengono mai cambiati o riciclati. Può accadere che un WOEID venga deprecato e, in tal caso, viene mappato al suo successore o al suo WOEID parente.

Yahoo! GeoPlanet è un Web service REST, accessibile alla seguente URI:

http://where.yahooapis.com/v1[parameters]

Ci sono diversi progetti che utilizzano questo web service; un esempio è Twitter. Con un po’ di ricerche sul Web, troverete anche come legare in maniera semplice diversi servizi offerti dalla stessa Yahoo che utilizzano il WOEID.

Stabilito ciò, Yahoo! mette anche  a disposizione gratuitamente il database sotto forma di file testuali. 

I file sono i seguenti:

  1. geoplanet_places_[version].tsv: the WOEID, the placename, and the WOEID of its parent entity
  2. geoplanet_aliases_[version].tsv: alternate names in multiple languages indexed against the WOEID
  3. geoplanet_adjacencies_[version].tsv: the entities neighboring each WOEID
  4. geoplanet_changes_[version].tsv: the list of removed WOEIDs and their replacement WOEID mappings

Geoplanet_places è la tabella principale. Essa contiene i seguenti campi:

* WOE_ID - primary "place" key
* ISO - ISO 3166-1 country/territory code
* Name - preferred local language or english place name
* Language - ISO 639-2(b) language code
* PlaceType - code indicating place class
* Parent_ID - WOEID of direct parent feature

Ho importato i file sotto SQL Server 2008 e fatto qualche test. Per motivi di spazio, tornerò a parlare dei risultati ottenuti nel prossimo post.