2010-04-12 14 views
10

ho CAP nel mio database di grandi dimensioni, che contiene i valori come SL5 9JH, LU1 3TQ eccFetch Latitudine Longitudine passando codici postali a maps.google.com utilizzando Javascript

Ora, quando sto incollando sopra codice postale per maps.google.com punta a una posizione perfetta ..

Il mio requisito è come se volessi passare i codici postali a maps.google.com e dovrebbe restituire una latitudine e una longitudine correlate di quella posizione puntata, che voglio per memorizzare nel mio database.

Quindi, molto probabilmente non ci dovrebbero essere alcuni javascript per questo ... Se qualcuno ha un'altra idea in merito che si prega di fornire esso ..

Grazie in anticipo ...

risposta

10

Il termine tecnico per il processo descritto è denominato reverse geocoding. Google offre The Google Geocoding Web Service New working Google Geocoding Link, in cui è possibile eseguire il reverse geocoding sul lato server, anziché in JavaScript sul lato client.

Ad esempio, se si prova i seguenti URL nel browser, si dovrebbe tornare la latitudine e la longitudine del Cap passato nel parametro q, in formato CSV:

http://maps.google.com/maps/geo?q=SL59JH,+UK&output=csv&sensor=false 

http://maps.google.com/maps/geo?q=LU13TQ,+UK&output=csv&sensor=false 

Ecco come si farebbe essere in grado di invertire geocode vostri codici di avviamento postale in php, ad esempio:

$url = 'http://maps.google.com/maps/geo?q=SL59JH,+UK&output=csv&sensor=false'; 

$data = @file_get_contents($url); 

$result = explode(",", $data); 

echo $result[0]; // status code 
echo $result[1]; // accuracy 
echo $result[2]; // latitude 
echo $result[3]; // longitude 

Si noti che come Pekka suggested in another answer, il Google Maps API Terms of Use sembrano prohibit the storage of the results, a meno che il negozio agisce come una cache per i dati che saranno u sed in Google Maps. Potresti voler contattare Google e informarti sullo Google Maps API Premier per avere condizioni di utilizzo più flessibili per i tuoi requisiti di geocodifica.

+0

@Daniel ... Grazie mille per il tuo feedback ... risolverò le tue soluzioni e ti ricontatterò ... – Nirmal

+0

Funziona ancora usando gli esempi sopra riportati nel mio browser. Ricevo 610,0,0,0. Non importa quale codice postale campionerò, sempre 610,0,0,0? – QFDev

+0

Penso che questo sia dovuto al fatto che gli esempi in questa risposta utilizzano una versione precedente dell'API delle mappe. Un nuovo esempio sarebbe come questo: http://maps.googleapis.com/maps/api/geocode/json?address=SL59JH,+UK&sensor=false. Ovviamente la query per estrarre il lat/lng dovrebbe essere cambiata poiché l'output sta ora restituendo JSON piuttosto che CSV. – Dan

2

Il Google Geocoding API fa questo, anche se se ricordo bene, i loro termini di servizio vietano l'archiviazione locale dei risultati di geocodifica.

+0

Ho fatto un'applicazione una volta basata su quello e non ricordo di avere questa limitazione. Penso che sia contro la logica non salvare i risultati perché non cambieranno nel tempo e quindi salveranno un futuro ping a google. –

+0

@Elzo hai ragione, è consentito memorizzare temporaneamente i risultati se utilizzato in un'app Google Maps: 10.3 http://code.google.com/intl/en-EN/apis/maps/terms.html –

+0

Qualcuno sa se c'è una versione https per ottenere long e latt per codice postale? – AngularM

9

L'Ordnance Survey ha released the postcode locations su una licenza Creative Commons (CC-BY v3, IIRC). Sarebbe molto meno seccante (e molto più chiaro legalmente) usarlo invece.

C'è anche una versione con WGS84 (aka GPS) coordina rispecchiato da mySociety

+0

+1 un link al dump dei dati del sondaggio degli ordigni sarebbe bello se lo avessi a portata di mano. –

+0

il suo link dopo il collegamento dopo il collegamento, non vedo il file zip 20mb come promette sulla prima pagina. dopo 5 minuti guardando mi arrendo. – brux

+0

@brux dal link che ho dato, spuntare la casella di download per il prodotto "Code-Point® Open", andare al prossimo, compilare il modulo e attendere l'e-mail con il link per il download. Semplice come quella. –

1

So che questa è una vecchia questione, ma solo chipping qui con come sono riuscito a ottenere la stessa cosa (in PHP, ma dovrebbe essere abbastanza semplice):

  1. Avevo un database di migliaia di post codici di diverso formato. Ho pulito tutti e ciascuno di loro su, in modo uniforme, con questa funzione e batch aggiornamenti:

    function clean_postcode($postcode) 
    { 
        $out = preg_replace("/[^a-zA-Z0-9]/", '',strtoupper($postcode)); 
    
        if(strlen($out)>3) 
        { 
         $out = substr($out, 0, (strlen($out) -3)).' '.substr($out, -3); 
        } 
    
        return $out; 
    } 
    
  2. Ora che tutti i codici postali sono formattati in modo uniforme, ho scaricato e importato set di dati Code-Point del Ordnance Survey (gratuito) - https://www.ordnancesurvey.co.uk/opendatadownload/products.html

  3. Ho importato tutti i CSV nel mio database in una tabella separata codepoint. Da ciascun CSV ho importato il codice postale e i valori di Eastings e Northings.

  4. Ho eseguito nuovamente la funzione clean_postcode() in batch su tutti i dati di Ordnance Survey nel mio DB. Circa il 50% dei codici postali ha spazi e il 50% no, dopo di che sono stati impostati in modo uniforme.

  5. Ho eseguito il seguente script PHP su ogni codice postale nella tabella codepoint e salvato il Latitudine e Longitudine valori restituiti in questa tabella: http://bramp.net/blog/os-easting-northing-to-lat-long

  6. Tutto fatto! Ora puoi abbinare e tirare un valore Lat/Lon basato su postcode ben formattati.

Ulteriori approfondimenti: http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/

13

Una breve nota per coloro che trovare questo SO rispondere. La risposta di Daniel Vassallo utilizza l'API V2 di Geocoding di Google, che ora è stata ritirata. La nuova API v3 utilizza un formato di richiesta simile:

http://maps.googleapis.com/maps/api/geocode/output?parameters 

Un esempio per un codice postale di ricerca, restituendo i dati in formato JSON è:

http://maps.googleapis.com/maps/api/geocode/json?address=SL59JH,+UK&sensor=false 

Questo restituisce una matrice JSON che include il lat e a lungo in risultati-> geometria;> Località-> lat e Risultati> geometria;> Località-> lng

Esempio di risposta:

{ 
"results" : [ 
    { 
    "address_components" : [ 
     { 
      "long_name" : "SL5 9JH", 
      "short_name" : "SL5 9JH", 
      "types" : [ "postal_code" ] 
     }, 
     { 
      "long_name" : "Windsor and Maidenhead", 
      "short_name" : "Windsor and Maidenhead", 
      "types" : [ "administrative_area_level_2", "political" ] 
     }, 
     { 
      "long_name" : "United Kingdom", 
      "short_name" : "GB", 
      "types" : [ "country", "political" ] 
     }, 
     { 
      "long_name" : "Ascot", 
      "short_name" : "Ascot", 
      "types" : [ "postal_town" ] 
     } 
    ], 
    "formatted_address" : "Ascot, Windsor and Maidenhead SL5 9JH, UK", 
    "geometry" : { 
     "bounds" : { 
      "northeast" : { 
       "lat" : 51.39655490000001, 
       "lng" : -0.66024660 
      }, 
      "southwest" : { 
       "lat" : 51.39457330, 
       "lng" : -0.6624574999999999 
      } 
     }, 
     "location" : { 
      "lat" : 51.39539040, 
      "lng" : -0.66096740 
     }, 
     "location_type" : "APPROXIMATE", 
     "viewport" : { 
      "northeast" : { 
       "lat" : 51.39691308029150, 
       "lng" : -0.6600030697084980 
      }, 
      "southwest" : { 
       "lat" : 51.39421511970851, 
       "lng" : -0.6627010302915021 
      } 
     } 
    }, 
    "types" : [ "postal_code" ] 
    } 
], 
"status" : "OK" 
} 

Le specifiche API sono disponibili qui: https://developers.google.com/maps/documentation/geocoding/

0

Check out posti di ALgolia here. Super veloce, open source e MIT

Problemi correlati