.: HosiriS :.

Informatica e non solo

Convertire un indirizzo in coordinate

Posted by hosiris su settembre 28, 2010

Nel corso di un progetto, ho avuto la necessità di inserire le coordinate geografiche di un dato indirizzo nel DB contentente le informazioni di una azienda. Questa necessità era dovuta al fatto che bisognava creare una mappa con dei marker a segnalare la posizione della aziende.
Un metodo è quello che ci vede inserire l’indirizzo in Google Maps e tramite la voce “LINK” selezioniamo le coordinate. Oppure possiamo, sempre da Google Maps, incollare nella barra degli indirizzi del browser il seguente codice:

javascript:void(prompt('',gApplication.getMap().getCenter()));

Entrambi sono metodi validi, ma un tantino macchinosi, allora ho deciso di realizzarmi un interfaccetta che ha richiesto 5 min tra lettura della documentazione e realizzazione.
Ho usato le API di Google che, giunte alla terza versione, offrono innumerevoli opportunità.
Cominciamo con il creare la mappa, oggetto su cui effettueremo le ricerche:

var geocoder;
var map;
function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(41.442, 12.392);
  var myOptions = {
    zoom: 6,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  }
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

Se inserite questo codice tra i tag SCRIPT e nel body inserite <div id=”map_canvas”></div> all’apertura della pagina vedrete apparire una mappa. La documentazione vi darà maggiori informazioni sulle possibili scelte nel creare i vari oggetti.
Terminata questa operazione, creiamo la funzione che ci permetterà di convertire l’indirizzo da noi inserito in una coppia di coordinate:

function codeAddress() {
  var address = document.getElementById("address").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location
      });
      document.getElementById("coo").innerHTML = results[0].geometry.location;
    } else {
      alert("ERRORE: " + status);
    }
  });
}

L’utilizzo di questo codice prevede l’esistenza di alcuni div:

<div>
  <input id="address" type="textbox" value="Roma">
  <input type="button" value="CERCA" onclick="codeAddress()">
</div><div id="coo"></div>
<div id="map_canvas" style="width: 200px; height: 200px;"></div>

All’apertura vi si presenterà una pagina come la seguente:

dopo la ricerca verrà visualizzata la coppia di coordinate:

Questo risultato ci permette di selezionare latitudine e longitudine sia manualmente che tramite un parser, successivamente si potrebbe usare il metodo innerHTML per modificare il valore di un campo input.
Come sempre, l’unico limite alle operazione è la fantasia.

Buon divertimento

9 Risposte to “Convertire un indirizzo in coordinate”

  1. alk said

    Cavolo, servirebbe anche a me una roba del genere! Peccato non abbia capito nulla di quanto tu hai detto xD

  2. Filippo said

    Salve!
    Le vorrei porre una domanda, se posso disturbarla.
    Leggendo e rileggendo i termini e le condizioni dell’API di Google per il geocoding, non mi sembra di aver trovato ostacoli, ma, conoscendo il mio inglese pessimo, le volevo porre il mio problema.
    Vorrei utilizzare quell’applicazione per registrare in un database coordinate e relativi indirizzi.
    In questo caso utilizzerei il servizio di geocoding di google come una sorta di ponte che mi permetta di avere quei numeri. Tutto qui.
    Secondo lei, a prescindere dalle implicazioni sulla privacy, andrei contro i termini dell’azienda? Mica perché, ma non vorrei incappare in problemi legali!
    La ringrazio.

    • hosiris said

      Buongiorno, i termini d’uso delle API si riferiscono solamente alle condizioni d’utilizzo dell’applicazione. Le coordinate sono un prodotto dell’utilizzo di tali strumenti, ma possono essere tranquillamente generate da altri applicazioni o addirittura da una persona che, cartina alla mano, cerca i punti di interesse e trascrive le coordinate in un foglio.
      Quindi, per rispondere alla domanda, la memorizzazione di coordinate in db le è permesso! Certo rimane il fatto che sta memorizzando dati sensibili e quindi dovrà fare i conti con il garante per la privacy😛

      • Filippo said

        La ringrazio per la risposta: mi ha molto tranquillizzato!
        Scusi ma le devo chiedere ancora una conferma perché io e la giurisprudenza, purtroppo non andiamo d’accordo!

        In pratica lei mi dice che sì, io posso usare il geocoder di Google per trovare coordinate che poi posso registrare in un database.
        Non vi è a questo alcun problema se non la questione legale sulla privacy.
        Entro ancora più nel concreto…
        Io ed alcuni miei amici stiamo mettendo su un progetto grafico per un concorso.
        Data la passione di alcuni di loro per la programmazione, abbiamo deciso di utilizzare un database online in cui ognuno di noi, dal suo terminale, avrebbe digitato il suo indirizzo e, tramite l’API, trovato le coordinate della propria abitazione e delle sedi universitarie. I programmatori, non mi chieda in quale in modo!, Hanno fatto in modo che questa procedura risulti automatizzata direttamente da un sito che abbiamo creato (inserimento indirizzo – conversione by Google – registrazione nel DB).
        Dopo noi utilizzeremo quelle coordinate come punti che si collegheranno per formare dei disegni da portare alla mostra…
        Ma la mia domanda è questa:
        Lei mi conferma, che tolta la privacy, io posso fare così?

        La ringrazio ancora per la pazienza.
        Scusi l’insistenza, ma siamo molto tesi noi del progetto…anche perché i tempi del concorso sono stretti e dobbiamo essere sicuri di stare alle regole!!

        Filippo Chelli

      • hosiris said

        Salve, posso confermarle che le operazioni che volete eseguire sono legali.
        Ci tengo a precisare che non sono un avvocato e che le mie conclusioni derivano dalla semplice lettura della licenza in cui non è assolutamente specificato di non poter memorizzare le coordinate.
        Io stesso, in alcuni progetti, ho dovuto memorizzare numerose coordinate per evidenziare punti di interesse.
        Rimane comunque il fatto che potreste tranquillamente aggirare questa problematica!
        Cerco di spiegarmi meglio: voi attualmente digitate in un form l’indirizzo, al click del submit partirà una applicazione che restituendovi le coordinate vi permetterà di memorizzarle nel database. In un secondo momento, immagino darete la possibilità di mostrare una mappa con segnalati i punti corrispondenti alle coordinate inserite.
        La soluzione che vi propongo (qualora il dubbio sia troppo pressante) è quella di memorizzare il solo indirizzo. In questo modo, la funzione di geocodig verrebbe utilizzata solo dopo, in fase di visualizzazione, senza dover memorizzare le coordinate perchè verrebbero calcolate in runtime. Questa è una soluzione che ho adottato molte volte specie per progetti che limitavano l’uso di area di memorizzazione.

        Fin quando lo mio conoscenze me lo permettono, sono sempre felice di poter rispondere.

  3. Filippo said

    La ringrazio, lei è molto gentile!

    Non vorrei stancarla, ma la sua risposta evoca in me un’ulteriore domanda!
    Noi non visualizzeremmo quelle coordinate su di una mappa: utilizzeremmo un background artistico creato apposta sul quale, come in un piano cartesiano, fisseremmo i punti.
    In questo modo verrebbero fuori dei disegni sopra allo sfondo da noi disegnato…
    La mia paura è che quei dati LONG/LAT debbano per forza essere visualizzati su di una mappa google…
    Sbaglio?

    Mi perdoni ancora per l’insistenza, non ho intenzione di rubarle del tempo, ma ieri notte sfogliando tra le pagine web, ho trovato il suo blog e mi è subito sembrato che lei fosse molto più ferrato di noi in questa materia!

    La ringrazio

    Filippo

    • hosiris said

      uhmm…
      è una idea molto interessante, ma dovreste trovare il modo di mappare quelle coordinate sul vostro sheet! Credo si possa raggiungere un risultato simile, ma sinceramente non ho mai provato a realizzarlo.
      E’ certo che LAT/LONG sono dei numeri e come tali non hanno un significato intrinseco, quindi utilizzare un piano LAT-LONG in cui questi punti non hanno un significato “geografico”, ma “statistico” (studio della frequenza di collegamenti da un determinato sito) permette di non dover necessariamente usare le mappe di Google.

  4. Filippo said

    La ringrazio del tempo dedicatomi.
    E’ stato gentilissimo.

    Un abbraccio

    Filippo

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: