sabato 2 gennaio 2016

6. geocoding con Libre Office

Dal blog http://www.digital-geography.com/geocoding-addresses-directly-in-libreoffice-calc/#.VoehZRXhC01


"Delete now everything in the editor and paste the following code:"

Function GetGeoData(sSearch as String) as String
   If Len(sSearch) = 0 Then Exit Function 'we dont need empty cells <img draggable="false" class="emoji" alt="😉" src="http://s.w.org/images/core/emoji/72x72/1f609.png">
   URL = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=true&address="  'we will use the google maps api
   URL = URL & sSearch          'create the searchstring
   oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" ) 'this is the Sefvice in getting the data from the web
   On Error GoTo ErrorResponse
   oInputStream = oSimpleFileAccess.openFileRead(URL) 'use the URL
   oTextStream = createUnoService("com.sun.star.io.TextInputStream") 'get the data from the web
   oTextStream.InputStream = oInputStream 'this is the data
   aDelimiters = Array(ASC(">"),ASC("<")) 'as the stream is segmented with ">" and "<"
   sLastString = ""
   Do While NOT oTextStream.isEOF 'go through the google output
      sThisString = oTextStream.readString(aDelimiters,True)
      Select Case sLastString 'now search for the entries
         Case "lat": 'latitudes
            sLat = sThisString 
            Case "lng": 'longitude
            sLon = sThisString
      End Select
      sLastString = sThisString
   Loop
   GetGeoData =  " Longitude: " & sLon & " Latitude: " &sLat 'this is our output in  the new cell
   oInputStream.closeInput()
   Exit Function
   ErrorResponse:
   GetGeoData = "no values found!!!"
End Function


As the function has the name GetGeoData just type in a new cell “=GetGeoData(A1)” and off you go with your new coordinates. As the structure is quite simply you can chnage it according to your needs.
But please read the “Google Maps/Google Earth APIs Terms of Service” whether you are allowed to use this service. Additionally note that you can use this service for 2,500 requests per day and most important :”The Geocoding API may only be used in conjunction with a Google map; geocoding results without displaying them on a map is prohibited.”








5. esportare

Da menu scegliere Publish


Copiare HTML per esempio se si vuole inserirlo in un file html da caricare su www.libero.it, per esempio:

(Da Account di libero:
cliccare Community
cliccare Siti
cliccare File Manager
cliccare crea cartella
dare nome a cartella, per esempio Mappa1
entrare nella cartella cliccando Mappa1
cliccare nuova pagina
incollare il testo, copiato (<iframe ....) prima, nel foglio che si apre, e salvare come index.html
cliccare su index,
e voilà!)


Per chi ha google account si può fare anche Share e condividere addirittura il link della fusion table.

Visualizzazione (dettaglio)


opzioni di visualizzazione

4. visualizzazione

Dopo che Google ha "geodificato" magicamente, la mappa mostra tanti pallini probabilmente tutti dello stesso colore.
Per distinguerli occorre cambiare Feature Style:



2. creare nuova Fusion Table

Andare su https://www.google.com/fusiontables

Scegliere con "Scegli file" il file tsv scaricato al passo 1b


Una volta caricate assicurarsi che la colonna degli indirizzi abbia tipo "location", se non è così, dal triangolino di fianco all'intestazione scegliere Change e cambiare il Location



 scegliere dal menu "Geocode" , aggiungere "Crema, CR" come aiuto su dove cercare gli indirizzi sul pianeta, e aspettare un po'....


1b. Preprocessare i dati, eventualmente

Per processare i dati, caricarli su google drive Spreadsheet

in questo caso il processamento è necessario perché le certificazioni energetiche danno un valore di emissioni di CO2 in kg annui al metro quadro o al metro cubo a seconda che si tratti di residenziale oppure no.

Importare in nuovo Spreadsheet il file di opendata.

COLONNA M: categorie "E.1" sono residenziali (mq), le altre no (mc).

nella colonna AW, ad esempio, scrivere:  =SE(O(M553="E.1(1)";M553="E.1(1c)";M553="E.1(2)";M553="E.1(3)");"R";"N")

nella colonna AY, ad esempio, scrivere:
=SE(AW553="R";AE553*Q553;S553*AE553)

cioè moltiplicare l'emissione della colonna AE per i mq della colonna Q se "Residenziale", oppure per i mc della colonna S se "Non residenziali".


A questo punto selezionare la colonna C con gli indirizzi e la colonna AY con valori di CO2 kg/anno calcolati, copiarli in nuovo foglio come valori ed esportali come tsv.