Récupération d'une adresse avec coordonnées géographiques à l'aide du géocodage inversé
Votre application peut utiliser la classe ReverseGeocoder pour récupérer le nom intelligible d'une position, de type adresse, ville ou pays, à l'aide d'un ensemble de coordonnées géographiques.
Lorsque vous envoyez une requête de géocodage inversé, vous pouvez indiquer la limite administrative pour laquelle recevoir des informations, par exemple, adresse, ville ou pays. La classe ReverseGeocodeExchange contient les constantes suivantes que vous pouvez utiliser pour indiquer le niveau de limite administrative.
- ADDRESS : renvoie le type et le nom de la voie.
- CITY : renvoie la ville.
- COUNTRY : renvoie le pays.
- MCC : renvoie le code pays du réseau mobile.
- POSTAL : renvoie le code postal.
- PROVINCE_STATE : renvoie la province ou l'état.
- TIME_ZONE_ID : renvoie le fuseau horaire.
Dans les situations pour lesquelles la précision est essentielle, un adresse précise peut être utile. Dans d'autres situations, le nom de la ville ou le pays peut être suffisant.
Parfois, votre application envoie une requête de géocodage inversé mais ne reçoit pas les données attendues en retour. Par exemple, si votre application envoie une requête avec la limite administrative ADDRESS, si la position géographique est hors des limites de la ville, il est possible que le serveur de géocodage inversé ne parvienne à localiser une adresse précise. Dans ce cas, seul le nom de la province/du département peut être renvoyé à l'application.
Les résultats de requêtes de géocodage inversé sont mis en cache sur le terminal, sauf lorsque la requête portait sur une adresse précise. Lorsque vous initiez une requête de géocodage inversé, l'application recherche dans le cache les résultats de recherche précédents avant d'appeler le serveur, sauf si votre requête porte sur une adresse spécifique. Les requêtes de géocodage inversé peuvent être synchrones ou asynchrones.
Indication des coordonnées géographiques d'une position
Pour récupérer le nom d'une position avec coordonnées géographiques, vous devez créer un objet MapPoint contenant les coordonnées géographiques.MapPoint location = new MapPoint(43.4815, -80.5407);
Envoi d'une requête de géocodage inversé asynchrone
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
}
Pour créer une classe déployant l'interface ServerExchangeCallback, vous devez inclure trois méthodes : requestSuccess(), requestFailure() et requestHalted(). Lors du traitement d'une requête de géocodage inversé, votre application appelle l'une de ces méthodes selon le résultat de la requête.
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
}
}
Envoi d'une requête de géocodage inversé synchrone
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
}
Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.