2009-07-12 10 views
7

Sto usando http://maps.google.com/maps/geo? servizio web per geocodificare alcuni indirizzi.Scegliere il geocode più preciso

Il problema che ho è che un indirizzo più completo non fornisce necessariamente un geocode più accurato.

per esempio passando Llantysilio, Denbighshire, Regno Unito è molto più accurata rispetto Llantysilio, Llangollen, Denbighshire, Regno Unito

L'attributo precisione nel XML non sembra molto utile per decidere quale indirizzo scegliere.

In che modo altre persone hanno risolto questo problema? C'è un buon modo per scegliere il geocode migliore che funzioni più/sempre?

* modifica Un po 'di informazioni extra - quando inserisco l'indirizzo completo la prima riga dell'indirizzo viene ignorata e il geocoder salta a un indirizzo diverso, ma esatto, che è una via centrale situata nella linea extra aggiunto all'indirizzo. In questo esempio, prende Castle Street nel centro di llangollen, apparentemente trascurando Llantysilio.

Edit da kdgregory: ecco i due richieste API che ho usato (manca chiave API non sembra essere un problema):

http://maps.google.com/maps/geo?q=Llantysilio,+Denbighshire,+UK&sensor=false&output=xml 

http://maps.google.com/maps/geo?q=Llantysilio,Llangollen,++Denbighshire,+UK&sensor=false&output=xml 
+0

Davvero? Perché quando incolli questi indirizzi in Google Maps, ottieni la stessa posizione. Sarei molto sorpreso se le loro mappe basate sul web utilizzano un motore di geocoding diverso. Forse hai una differenza di ortografia nei tuoi dati reali? – kdgregory

+0

Sì, davvero, lo so, è strano che siano diversi, ma ho controllato alcune posizioni diverse. Prova anche goathland, (whitby,) north yorkshire, uk – wheresrhys

+0

Interessante: ho creato le due richieste API, e hai ragione, escono con risultati diversi. La query più lunga restituisce i risultati fino all'arteria, mentre il più corto no. Più interessante è che quando esamino il link da Google Maps, è diverso. – kdgregory

risposta

0

Alla fine ho concluso che ci sono troppi puntini strani in coerenza indirizzo con webservice geocodifica di Google nel Regno Unito, ma alla fine è riuscito a trovare un modo di usare codici di avviamento postale, invece, che è molto più preciso: how it's done

0

Un geocode response.Placemark [0] mediante gmap è possibile controlla quello che hai, e prendi il livello o riprova. Ho scelto il valore predefinito nell'ordine

place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName 
place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName 
place.AddressDetails.Country.CountryName 

Potrebbe essere più logicamente denominato come visto sopra. gmaps 3 funziona in qualche modo incompatibile con la v2.

0

È possibile provare un trucco molto brutto che consiste nella geocodifica del proprio indirizzo completo e in tutti i sottogruppi delle parole contenute nel proprio indirizzo, si ottengono molti codici geografici che si utilizzano per ottenere gli indirizzi correlati con lo strumento di geocoding inverso. Una volta che hai molti indirizzi li paragoni a quello che hai dato per primo, allora prendi il geocode più accurato ... Molte richieste, molte iterazioni crescono con ogni parola che aggiungi al tuo indirizzo, ma un brutto lavoro ma può essere divertente per fare alcune statistiche ^^

1

probabilmente è bene notare che Google non segue le specifiche XAL, ma piuttosto li attua in un sottogruppo.

Quindi, questo significa che non sarà necessariamente in grado di fare:

place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName 
place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName 
place.AddressDetails.Country.CountryName 

Perché un paese e la località secondaria possono essere forniti, mentre una zona amministrativa non è.

I dati restituiti sono identificati da un indicatore di precisione che fornisce un'idea relativa di ciò che ci si può aspettare per i dati. Quindi, puoi memorizzare oggetti e tagliare parti dell'intero indirizzo usando questa variabile e provare a geocodificare in questo modo - Non è raccomandato però.

In genere, un indirizzo completo è (senza la via pubblica) è un buon modo di trovare la posizione generale. Puoi utilizzare alcune delle logiche preferenziali ponderate fornite da Google per perfezionare l'indirizzo.

E.g. Usa setViewPort o setCountryCode per dare un po 'più di precisione alle tue ricerche.

Ricorda, Geocodifica non è una scienza. Non puoi aspettarti risultati coerenti.

+0

Ad esempio, per "Fiume Mississippi, Minnesota, USA" Google fornisce solo place.AddressDetails.Accuracy = 0; place.AddressDetails.AddressLine = ["Mississippi"]; Nessuna informazione sul paese – mems

4

Devi interpretare la precisione amico mio. Di solito ci sono 2 parti per una precisione, prima l'indirizzo macthing. La seconda parte è la parte importante. Puoi geocodificare qualcosa a un livello di accuratezza degli Stati Uniti, a livello di città, centro città di codice postale, livello interpolato di strada o livello di precisione pacco effettivo. Il primo esempio ha un 4 e il secondo è 9. Per questo servizio più alto è meglio.

Precisione Valore Descrizione 0 Precisione sconosciuta. 1 Precisione livello paese. 2 Precisione del livello di regione (stato, provincia, prefettura, ecc.). 3 Precisione del livello di sottoregione (contea, comune, ecc.). 4 Precisione del livello città (città, villaggio). 5 Precisione livello codice postale (codice di avviamento postale). 6 Precisione a livello stradale. 7 Precisione del livello di intersezione. 8 Precisione livello indirizzo. 9 Precisione livello del locale (nome dell'edificio, nome della proprietà, centro commerciale, ecc.).