Passa ai contenuti principali

Lavori Pubblici

Come un Assessore ai Lavori Pubblici può tenere traccia degli interventi e mostrare in tempo quasi-reale l'uso dei soldi in bilancio ai suoi concittadini.

La solfa è sempre quella già vista in altri post:

1. Creare uno spreadsheet googleSheets con File-Impostazioni : Regno  Unito (per via delle virgole e dei punti come separatori decimali accettati da umap)


2. Intestare le colonne senza dimenticare in fondo a destra le tre colonne con : l'indirizzo dell'intervento ,  lat  e long.

(a questo punto vedere più sotto lo script che calcola latitudine e longitudine in automatico, se non si vuole perdere tempo a metterle da soli)

3. compilare le righe, una per intervento




4. pubblicare (File-Pubblica sul Web) il foglio  dello spreadsheet come csv e copiare il link che viene presentato (da incollare nella umap successivamente)

5. Creare una mappa umap e collegare Dati Remoti incollando  il link del punto 4. Formato: csv e Dinamico su "ON", così la mappa si aggiornerà ogni volta che si aggiungerà una riga nuova allo spreadsheet



6. per mostrare nel popup le informazioni scrivere nel campo "Template del contenuto del popup" le intestazioni delle colonne fra parentesi graffe; cancelletto # se si vuole il grassetto


# {intervento}
{data}
{indirizzo}
{costo}



la mappa apparirà così:


Visualizza a schermo intero


Osservazioni:
1. se esiste già un file di testo con le informazioni (data, indirizzo, impresa, costo etc) , questo può essere importato tramite GoogleSheets (File-Importa) in un altro foglio e poi le info copiate nel foglio che è collegato alla mappa; l'importante è che esistano le colonne lat long che servono ad umap per mettere i segnaposto



2. Siccome il comune è sempre quello, si può evitare di scrivere sempre "Crema" usando una formula che concateni indirizzo e la parola "Crema"

3. si può anche creare il modulo google corrispondente:
https://docs.google.com/forms/d/e/1FAIpQLSe4PASXtHrHQ0BeGHMiW0cWwVXcf_JUJDGiFwPa30RKEPJKWQ/viewform



PER I PIU' PIGRI.

Lo script per calcolare le coordinate senza doverle trovare a mano è il seguente (tratto da https://github.com/nuket/google-sheets-geocoding-macro/edit/master/Code.gs). Occhio che contiene due funzioni una che ricava lat,long dall'indirizzo e una che ricava l'indirizzo dalla latitudine e longitudine. A noi serve ovviamente la prima.
Abilitare lo script quando google lo chiede.
Chiudere foglio e riaprirlo.
Per far convertire, selezionare le celle e cliccare in alto Geocode e poi la prima funzione (Address to Latitude, Longitude)


SCRIPT:

// Geocode Addresses
// Copyright (c) 2016 - 2017 Max Vilimpoc
//

function getGeocodingRegion() {
  return PropertiesService.getDocumentProperties().getProperty('GEOCODING_REGION') || 'us';
}



// Forward Geocoding -- convert address to GPS position.
function addressToPosition() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cells = sheet.getActiveRange();
  
  var popup = SpreadsheetApp.getUi();
  
  // Must have selected at least 3 columns (Address, Lat, Lng).
  // Must have selected at least 1 row.
  
  var columnCount = cells.getNumColumns();
  var rowCount = cells.getNumRows();

  if (columnCount < 3) {
    popup.alert("Select at least 3 columns: Address in the leftmost column(s); the geocoded Latitude, Longitude will go into the last 2 columns.");
    return;
  }
  
  var addressRow;

//  var addressColumnStart = 1; // Address data is in columns [1 .. columnCount - 2].
//  var addressColumnStop  = columnCount - 2; 
  
  var addressColumn;
  
  var latColumn = columnCount - 1; // Latitude  goes into the next-to-last column.
  var lngColumn = columnCount;     // Longitude goes into the last column.
  
  var geocoder = Maps.newGeocoder().setRegion(getGeocodingRegion());
  var location;

  var addresses = sheet.getRange(cells.getRow(), cells.getColumn(), rowCount, columnCount - 2).getValues();
  
  // For each row of selected data...
  for (addressRow = 1; addressRow <= rowCount; ++addressRow) {
    var address = addresses[addressRow - 1].join(' ');

    // Replace problem characters.
    address = address.replace(/'/g, "%27");

    Logger.log(address);
    
    // Geocode the address and plug the lat, lng pair into the 
    // last 2 elements of the current range row.
    location = geocoder.geocode(address);
   
    // Only change cells if geocoder seems to have gotten a 
    // valid response.
    if (location.status == 'OK') {
      lat = location["results"][0]["geometry"]["location"]["lat"];
      lng = location["results"][0]["geometry"]["location"]["lng"];
      
      cells.getCell(addressRow, latColumn).setValue(lat);
      cells.getCell(addressRow, lngColumn).setValue(lng);
    } else {
      Logger.log(location.status);
    }
  }
};

// Reverse Geocode -- GPS position to nearest address.
function positionToAddress() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cells = sheet.getActiveRange();

  var popup = SpreadsheetApp.getUi();
  
  // Must have selected at least 3 columns (Address, Lat, Lng).
  // Must have selected at least 1 row.

  var columnCount = cells.getNumColumns();

  if (columnCount < 3) {
    popup.alert("Select at least 3 columns: Latitude, Longitude in the first 2 columns; the reverse-geocoded Address will go into the last column.");
    return;
  }

  var latColumn     = 1;
  var lngColumn     = 2;

  var addressRow;
  var addressColumn = columnCount;

  var geocoder = Maps.newGeocoder().setRegion(getGeocodingRegion());
  var location;
  
  for (addressRow = 1; addressRow <= cells.getNumRows(); ++addressRow) {
    var lat = cells.getCell(addressRow, latColumn).getValue();
    var lng = cells.getCell(addressRow, lngColumn).getValue();
    
    // Geocode the lat, lng pair to an address.
    location = geocoder.reverseGeocode(lat, lng);
   
    // Only change cells if geocoder seems to have gotten a 
    // valid response.
    Logger.log(location.status);
    if (location.status == 'OK') {
      var address = location["results"][0]["formatted_address"];

      cells.getCell(addressRow, addressColumn).setValue(address);
    }
  }
};

function generateMenu() {
  // var setGeocodingRegionMenuItem = 'Set Geocoding Region (Currently: ' + getGeocodingRegion() + ')';
  
  // {
  //   name: setGeocodingRegionMenuItem,
  //   functionName: "promptForGeocodingRegion"
  // },
  
  var entries = [{
    name: "Geocode Selected Cells (Address to Latitude, Longitude)",
    functionName: "addressToPosition"
  },
  {
    name: "Geocode Selected Cells (Latitude, Longitude to Address)",
    functionName: "positionToAddress"
  }];
  
  return entries;
}

function updateMenu() {
  SpreadsheetApp.getActiveSpreadsheet().updateMenu('Geocode', generateMenu())
}

/**
 * Adds a custom menu to the active spreadsheet, containing a single menu item
 * for invoking the readRows() function specified above.
 * The onOpen() function, when defined, is automatically invoked whenever the
 * spreadsheet is opened.
 *
 * For more information on using the Spreadsheet API, see
 * https://developers.google.com/apps-script/service_spreadsheet
 */
function onOpen() {
  SpreadsheetApp.getActiveSpreadsheet().addMenu('Geocode', generateMenu());
  // SpreadsheetApp.getActiveSpreadsheet().addMenu('Region',  generateRegionMenu());
  // SpreadsheetApp.getUi()
  //   .createMenu();
};


Commenti

Post popolari in questo blog

UMAP: mappare con fotografie nel popup

Premessa: come esempio non userò alberi perché non ho il tempo di uscire , ma foto di Crema del passato prese da Gruppi facebook.

I dati saranno messi in un Google Sheet:
ogni riga un segnaposto sulla mappa
ogni colonna una proprietà del segnaposto della mappa

per il tutorial di un prof per alunni delle medie, vedere qui:  https://sites.google.com/view/lucascalzullo/tutorial/umap 

Cosa serve modificare nel LAYER della mappa?

1. La cosa che si vuol far apparire quando il mouse passa sopra il segnaposto (in questo caso l'autore )


2. l'elenco delle colonne da importare nel popup , okkio al numero di parentesi graffe: 3 per le foto

3. i collegamenti allo Sheet (col formato) dove andare a prendere i dati per piazzare i segnaposto.

Il foglio del GoogleSheet sarà composto da tante righe quanti i segnaposti che si vogliono piazzare e le colonne saranno corrispondenti a quelli indicati al passo 2 sopra:



non usare l'URL facebook per le foto di facebook, ma caricarle su un proprio ho…

Consegne a domicilio per persone in difficoltà durante l’emergenza COVID-19: creare una mappa con Umap e dati OpenStreetMap

(by Sale , Wordpress) Durante queste settimane di emergenza COVID-19, molti comuni si sono attivati per fornire informazioni e servizi aggiuntivi a supporto dei cittadini. In particolare, alcuni servizi di consegna a domicilio sono stati attivati appositamente per questa emergenza e in special modo per chi è più in difficoltà e per i generi alimentari e di prima necessità. Non sono dunque servizi di consegne a domicilio pensati per tutti indistintamente, ma espressamente per anziani e per le persone che hanno difficoltà a spostarsi. Spesso le informazioni sono presenti solamente in forma di elenco testuale, con nome dell’esercizio, indirizzo e numero di telefono. Questa breve guida vuole illustrare il procedimento ed eventualmente permettere ad altri di ricreare una mappa simile per il proprio comune.
EDIT 19 aprile 2020: openstreetmap ha creato un form per facilitare l'inserimento di attività commerciali  inclusivo dell'informazione consegne domicilio per covid19
ESTRATTO dal…

mapwarper e sovrapposizione mappe

come sovrapporre mappe alla mappa di openstreet map?

Vediamo come sovrapporre una delle meravigliose mappe di T. Moruzzi alla mappa di Crema su openstreetmap.



mura venete , di T Moruzzi
Si usa http://mapwarper.net .

Cliccare sulla linguetta  Upload Map e caricare l'immagine della mappa di Moruzzi.

Dopo di che occorre "rettificare" in modo che si adatti (venga "stirata") sulla mappa di osm.

Cliccare sulla linguetta Rectify.

Appaiono le due mappe una accanto all'altra : per far capire a mapwarper come stirarla occorre piazzare dei punti di riferimento sull'una e sull'altra , usando l'iconcina segnalibro azzurra in alto e poi cliccando sul bottone in basso per aggiungere la coppia di punti e dopo averne piazzati almeno 3 (coppie), cliccare il comando warp image!

Cliccando la linguetta Preview, si possono vedere le mappe una sull'altra, dosando la trasparenza col cursore:




Cliccando la linguetta export in alto si va in una pagina dove si possono …