Make Text Bigger
Make Text Smaller
Reset Text Size
Home
Google maps: Il geocoding via HTTP PDF E-mail
Scritto da Matteo Parrucci   
sabato 08 marzo 2008
google-maps.gifNel corso di un progetto mi sono scontrato con l'esigenza di immagazzinare coordinate di luoghi a seconda della ricerca  effettuata.

Per farlo lato server (ed immagazzinare direttamente i dati sul DB) ho trovato che è sufficiente fare una chiamata all'url http://maps.google.com/maps/geo.

Di seguito una lista dei parametri che è possibile passare (in GET) a questo url per ottenere diverse risposte.
  • q: L'indirizzo di cui si vuole ottenere il geocode
  • key: La tua API key (qui il link per crearla)
  • output: Il formato di output. Le opzioni sono xml, kml, csv, o json.
  • oe: La codifica dlel'output come utf8 ecc. (non documentato da Google)
Detto ciò ecco il mio codice Python (utilizzato da una vista di django) per effettuare il geocoding:

from urllib import *
from django.utils import simplejson

def getGeocode(address):
    address=address.encode('utf-8')
    mapsUrl = 'http://maps.google.com/maps/geo'
    query={'q':address,'output':'json','oe':'utf8','key':YOURKEYGOESHERE'}
    url = '?'.join([mapsUrl,urlencode(query)])
    coordinates = simplejson.loads(urlopen(url).read())
    return coordinates


Il parametro in ingresso (address) è l'indirizzo in formato testuale.
Il valore di ritorno è un array in cui sono contenute, oltre ad una quantita di dati sul posto cercato, anche le tre coordinate (latitudine, longitudine ed altitudine).

La comodità (utilizzando python e django) è che, scegliendo il formato di ritorno json ed utilizzando la funzione simplejson.loads per la decodifica, ottengo direttamente un dizionario strutturato come segue.
Nell'esempio la ricerca del quartier generale di Google (ottenibile richiamnado questo URL ):

{ "name": "1600 Amphitheatre Parkway, Mountain View, CA, USA",
  "Status":
  { "code": 200,
    "request": "geocode"
  },
  "Placemark":
  [
    { "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "AddressDetails":
      {  "Country":
        { "CountryNameCode": "US",
          "AdministrativeArea":
          { "AdministrativeAreaName": "CA",
            "SubAdministrativeArea":
            { "SubAdministrativeAreaName": "Santa Clara",
              "Locality":
              { "LocalityName": "Mountain View",
                "Thoroughfare": { "ThoroughfareName": "1600 Amphitheatre Pkwy" },
                "PostalCode": { "PostalCodeNumber": "94043" }
              }
            }
          }
        },
       "Accuracy": 8
      },
      "Point":
      { "coordinates": [-122.083739, 37.423021, 0] }
    }
  ]
}

Detto ciò è facile intuire per quale motivo con python e django risulti così semplice immagazzinare nel DB o fare operazioni server-side con i dati che google ci ritorna in formato json.
Quota questo articolo sul tuo sito

  Commenti (4)
1. Scritto da Barto, alle 12-03-2008 13:15 , IP: 192.167.189.188
viva i json! Pensi di realizzare anche una django-application da rilasciare oppure tieni tutto per te?
2. Sto gia rilasciando
Scritto da matteoparrucci website, alle 12-03-2008 18:04 , IP: 81.208.83.217
Sto già rilasciando qui 
Ti chiederai che cavolo me ne faccio di un progetto su launchpad dal momento che ci lavoro da solo :? 
Quando mi sarò risposto sarai il primo a saperlo 
:grin
3. help
Scritto da stefano website, alle 06-05-2009 17:06 , IP: 79.6.73.212
Non funziona più 
Ma non esiste un sito dove io possa mettere l'indirizzo e lui mi restituisce la latitudine e la longitudine? 
grazie
4. Scritto da Matteo Parrucci website, alle 06-05-2009 22:00 , IP: 93.42.237.0
A me funziona ancora bene... Che errori ti dà?

Solo gli utenti registrati possono lasciare commenti
Loggati o registrati.

 
< Prec.   Pros. >