Recupero di un indirizzo per le coordinate geografiche utilizzando il geocoding inverso
La classe ReverseGeocoder contiene metodi che consentono di recuperare un nome leggibile per una posizione, ad esempio un indirizzo, una città o un Paese, mediante una serie di coordinate geografiche.
Quando si invia una richiesta di geocoding inverso, è possibile specificare il limite amministrativo per cui si desidera ricevere le informazioni (ad esempio, l'indirizzo, la città o il Paese). La classe ReverseGeocodeExchange contiene le costanti seguenti, che è possibile utilizzare per specificare il livello di limite amministrativo.
- ADDRESS: restituisce l'indirizzo.
- CITY: restituisce la città.
- COUNTRY: restituisce il Paese.
- MCC: restituisce l'indicativo paese mobile.
- POSTAL: restituisce il codice postale.
- PROVINCE_STATE: restituisce la provincia o lo stato.
- TIME_ZONE_ID: restituisce il fuso orario.
Nelle situazioni in cui la precisione è un fattore importante, potrebbe essere necessario richiedere un indirizzo civico. In altre situazioni, potrebbe essere necessario richiedere solo la città o il Paese.
In alcuni casi, l'applicazione potrebbe inviare una richiesta di geocoding inverso, senza ricevere i dati previsti. Ad esempio, se l'applicazione invia una richiesta che utilizza il limite amministrativo ADDRESS e la posizione geografica si trova al di fuori dei confini della città, il server di geocoding inverso potrebbe non essere in grado di individuare un indirizzo civico specifico. In tal caso, potrebbe venire restituito all'applicazione solo il nome dello stato o della provincia.
I risultati delle richieste di geocoding inverso vengono aggiunti a una cache sul dispositivo, tranne per le richieste di un indirizzo preciso. Quando si invia una richiesta di geocoding inverso, l'applicazione controlla nella cache i risultati della ricerca precedente prima di eseguire una chiamata al server, eccetto nei casi in cui venga richiesto un indirizzo specifico. Le richieste di geocoding inverso possono essere sincrone o asincrone.
Specifica delle coordinate geografiche per una posizione
Per recuperare il nome di una posizione per le coordinate geografiche, è necessario creare un oggetto MapPoint contenente tali coordinate.MapPoint location = new MapPoint(43.4815, -80.5407);
Invio di una richiesta di geocoding inverso asincrona
int bearing = 1;
int timeout = 0;
MyServerExchangeCallback callback = new MyServerExchangeCallback();
try
{
ReverseGeocoder.getInstance().reverseGeocode(callback, location,
ReverseGeocodeExchange.ADDRESS, bearing, timeout);
}
catch (ReverseGeocodeException e)
{
// Do something with the exception
}
Per creare una classe che implementa l'interfaccia ServerExchangeCallback, è necessario includere nell'applicazione tre metodi: requestSuccess(), requestFailure() e requestHalted(). Al termine di una richiesta di geocoding inverso, l'applicazione richiama uno di questi metodi in base al risultato della richiesta.
public class MyServerExchangeCallback implements ServerExchangeCallback
{
public void requestSuccess(ServerExchange exchange)
{
if(exchange instanceof ReverseGeocodeExchange)
{
// Casts the Exchange object to a ReverseGeocodeExchange
// object and retrieves the Vector of results.
ReverseGeocodeExchange reverseGeocodeExchange =
(ReverseGeocodeExchange)exchange;
Vector results = reverseGeocodeExchange.getResults();
// Do something with the results
}
}
public void requestFailure(ServerExchange exchange)
{
// Inform the user of the failure
}
public void requestHalted()
{
// Invoked when the request is stopped
}
}
Invio di una richiesta di geocoding inverso sincrona
try
{
ReverseGeocodeExchange exchange = ReverseGeocoder.getInstance().reverseGeocode(
callback, location, ReverseGeocodeExchange.ADDRESS, bearing, timeout);
// Check if the request was successful
if(exchange.getExceptionList().size() == 0)
{
if(exchange instanceof ReverseGeocodeExchange)
{
// Casts the Exchange object to a ReverseGeocodeExchange
// object and retrieves the Vector of results.
ReverseGeocodeExchange reverseGeocodeExchange =
(ReverseGeocodeExchange)exchange;
Vector results = reverseGeocodeExchange.getResults();
// Do something with the results
}
}
else
{
// Inform the user of the failure
}
}
catch(GeocodeException e)
{
// Do something with the exception
}
Le informazioni sono state utili? Inviateci i vostri commenti.