Georeferenziare una Entità
Le Entità selezionate con una Vista possono essere visualizzate non solo come un elenco o una tabella o una griglia, ma possono anche essere dislocate su una mappa geografica, grazie al modulo aggiuntivo "Geofield Map". Installato ed attivato questo modulo, avremo a disposizione il nuovo tipo di Campo Geofield in cui memorizzare le coordinate geografiche dell'Entità. Una volta aggiunto il Campo ad un tipo di Entità, il modo più semplice per scrivervi le coordinate è cercare la posizione geografica dell'Entità su una mappa e cliccarvi sopra.
Mappa → Geofield
Con Geofield Map è possibile utilizzare Google Maps oppure Leaflet. Google Maps mette a disposizione di Geofield Map molte più opzioni, ma richiede una configurazione più complessa, in particolare occorre richiedere a Google un codice da inserire nel modulo, pone limiti sulla quantità di visualizzazioni (nella versione gratuita) e può porre problemi di riservatezza. Leaflet ha meno funzioni, ma utilizza le mappe gratuite di Openstreetmap, che non richiedono registrazioni o pagamenti e non condivide con terzi le informazioni della tua app. Per gli scopi di MieApp (e forse per la maggior parte delle tue app) Leaflet è più che adeguato. Le istruzioni che seguono fanno quindi riferimento a Leaflet. Anche se Geofield Map può utilizzare Leaflet per georeferenziare le Entità, non consente però poi di mostrarle in una Vista con una mappa Leaflet: per far ciò è necessario installare ed attivare anche il modulo aggiuntivo "Leaflet".
Installati ed attivati questi moduli, vediamo come georeferenziare le Entità. Vediamo come esempio le Sedi della app "Vicinato":
| aggiungi un Campo Geofield al tipo di Entità | In Strutture - Tipi di Contenuto - Sede - Gestisci Campi aggiungi un Campo di tipo Geofield con nome "Coordinate". Come Storage Backend seleziona Default (WKT) |
| scegli la mappa su cui selezionare le coordinate dell'Entità | In Strutture - Tipi di Contenuto - Sede - Gestione visualizzazione form, per il Campo "Coordinate" come Widget seleziona Geofield. Viene segnalato un messaggio di errore per la mancanza di codici di accesso a Google Maps. Ignoralo. Clicca sulla rotellina a fianco del Campo. Come Map Library seleziona Leaflet.js. Se per la tua app è utile proporre come punto di partenza della mappa la tua posizione, attiva l'opzione Use HTML5 Geolocation to set Default Values. Salva |
| scegli una posizione di default | Restando nella configurazione del Campo, attiva Set default value e seleziona sulla mappa una posizione di default. Ciò è utile per evitare che, quando inserisci la posizione di una Entità, ti venga mostrata una posizione a caso sulla mappa mondiale, tipicamente una mappa tutta blu perché posizionata in pieno oceano. |
| georeferenziare una Entità | Per georeferenziare una Sede basta modificarla: per il Campo "Coordinate" viene mostrata una mappa, su cui cliccare per posizionare la Sede. Se hai attivato l'opzione Use HTML5 Geolocation to set Default Values, viene mostrata una finestra che chiede l'autorizzazione di usare la posizione attuale del tuo computer o smartphone per posizionare il puntatore dentro la mappa:
|
| per mostrare l'Entità sulla mappa | In Strutture - Tipi di Contenuto - Sede - Gestione visualizzazione, per il Campo "Coordinate" in Formato seleziona Leaflet, Clicca la rotellina e scegli i dettagli. In particolare regola lo zoom iniziale per facilitare la lettura della mappa. |
Mostrare più Entità su una mappa
Per mostrare su una mappa le Entità georeferenziate, costruiamo una Vista che elenca le Entità su una Visualizzazione di tipo Mappa.
Geofield → Mappa
Come esempio, costruiamo la mappa delle Sedi della app "Vicinato":
| crea la Vista | In Strutture - Viste aggiungi una Vista di nome "Mappa Sedi". che mostra Contenuti di tipo Sede, attiva la creazione di una pagina, come formato seleziona per ora Elenco non formattato di Campi. In Elementi da visualizzare seleziona 0 per mostrare tutte le Sedi. Salva |
| limita la Vista alle Sedi dotate di coordinate | In Criteri del filtro aggiungi il Campo "Coordinate" e come operatore seleziona Non è vuoto. |
| recupera le coordinate delle Sedi | In Campi aggiungi i Campi "Titolo" e "Coordinate" |
| mostra le Sedi sulla mappa | In Formato seleziona Leaflet. In Impostazioni come Sorgente dati seleziona il Campo "Coordinate", come Tooltip Source seleziona "Titolo". Ci sono moltissime altre configurazioni possibili, ma per i nostri scopi didattici non servono, ad esempio c'è la possibilità di usare icone differenti per le Entità in base al valore di un loro Campo. |
Ecco il risultato: cliccando sul fumetto di una icona si viene portati direttamente alla pagina di quella Entità.

Georeferenziare le Entità tramite indirizzo
In alcune situazioni, georeferenziare una Entità cercandola visivamente su una mappa può essere scomodo o dare un risultato impreciso. Se si conosce l'indirizzo preciso dell'Entità, può risultare più comodo digitarlo e lasciare che sia Drupal a tradurre l'indirizzo in coordinate geografiche. A questo fine installiamo ed attiviamo i moduli aggiuntivi Geocoder e Address . Il modulo "Address" aggiunge il nuovo tipo di Campo Indirizzo in cui scrivere l'indirizzo, il modulo "Geocoder" provvede a interrogare uno dei servizi internet di traduzione degli indirizzi in coordinate e a memorizzarle in un Campo di tipo Geofield.
Indirizzo → Geocoder → Geofield
Proseguendo nell'esempio delle Sedi, ecco tutti i passaggi necessari:
| installa la libreria di un servizio internet di traduzione di indirizzi in coordinate | Per i nostri scopi (e probabilmente anche per i tuoi) è sufficiente il servizio gratuito di Openstreetmap. Per attivarlo devi dare questo comando nel Terminale:
Per installare librerie diverse da Openstreetmap clicca sul link List of all possible Geocoder providers | packages e segui le istruzioni specifiche per la installazione della libreria del servizio desiderato. | |
| configura Geocoder perché utilizzi il servizio installato | In Configurazione - Geocoder - Fonti esterne - Add a Geocoder provider seleziona Openstreetmap. | |
| aggiungi il Campo "Indirizzo" alla Sede | In Strutture - Tipi di contenuto - Sede - Gestisci Campi aggiungi un Campo di tipo Indirizzo
| |
| definisci quali informazioni compongono il Campo "Indirizzo" | Nella configurazione del Campo "Indirizzo", in Paesi disponibili seleziona i Paesi di cui accettare gli indirizzi (es. la sola Italia); in Field overrides seleziona quali informazioni richiedere obbligatoriamente, facoltativamente o nascondere all'Utente (es. chiedere una riga di indirizzo, il CAP, la Città e la Provincia e nascondere tutte le altre) | |
| nel Campo Geofield attiva Geocoder specificando dove prelevare l'Indirizzo e quale servizio internet usare | In Strutture - Tipi di contenuto - Sede - Gestisci Campi - Coordinate - Modifica attiva l'opzione Geocode from an existing field. In Geocode from an existing field seleziona il Campo "Indirizzo". In Geocoder providers seleziona Openstreetmap, | |
| nella pagina di creazione / modifica delle Sedi mostra i Campi "Indirizzo" e "Coordinate" | In Strutture - Tipi di contenuto - Sede - Gestione visualizzazione form posiziona il Campo "Indirizzo" sopra il Campo "Coordinate". |

