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:
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();
};
// 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();
};
vedere anche vecchio blog: https://usareumap.blogspot.com/2019/10/come-caricare-un-layer-di-umap-da-csv.html#more
per esempio di uso nominatim
Commenti
Posta un commento