Share via


Effectuer un géocodage et un géocodage inverse

Notes

MapControl et les services de carte nécessitent une clé d’authentification de cartes appelée MapServiceToken. Pour plus d’informations sur l’obtention et la définition d’une clé d’authentification de cartes, voir Demander une clé d’authentification de cartes.

Ce guide vous montre comment convertir des adresses postales en emplacements géographiques (géocodage) et convertir des emplacements géographiques en adresses de rue (géocodage inverse) en appelant les méthodes de la classe MapLocationFinder dans l’espace de noms Windows.Services.Maps .

Conseil

Pour en savoir plus sur l’utilisation de cartes dans votre application, téléchargez l’exemple MapControl à partir du référentiel d’exemples universels Windows sur GitHub.

Les classes impliquées dans le géocodage et le géocodage inverse sont organisées comme suit.

Important

 Vous devez spécifier une clé d’authentification de mappage avant de pouvoir utiliser les services de carte. Pour plus d’informations, voir Demander une clé d’authentification pour Cartes.

Obtenir un emplacement (géocode)

Cette section montre comment convertir une adresse postale ou un nom de lieu en emplacement géographique (géocodage).

  1. Appelez l’une des surcharges de la méthode FindLocationsAsync de la classe MapLocationFinder avec un nom de lieu ou une adresse postale.
  2. La méthode FindLocationsAsync renvoie un objet MapLocationFinderResult .
  3. Utilisez la propriété Locations de MapLocationFinderResult pour exposer une collection d’objets MapLocation . Il peut y avoir plusieurs objets MapLocation , car le système peut trouver plusieurs emplacements qui correspondent à l’entrée donnée.
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void geocodeButton_Click(object sender, RoutedEventArgs e)
{
   // The address or business to geocode.
   string addressToGeocode = "Microsoft";

   // The nearby location to use as a query hint.
   BasicGeoposition queryHint = new BasicGeoposition();
   queryHint.Latitude = 47.643;
   queryHint.Longitude = -122.131;
   Geopoint hintPoint = new Geopoint(queryHint);

   // Geocode the specified address, using the specified reference point
   // as a query hint. Return no more than 3 results.
   MapLocationFinderResult result =
         await MapLocationFinder.FindLocationsAsync(
                           addressToGeocode,
                           hintPoint,
                           3);

   // If the query returns results, display the coordinates
   // of the first result.
   if (result.Status == MapLocationFinderStatus.Success)
   {
      tbOutputText.Text = "result = (" +
            result.Locations[0].Point.Position.Latitude.ToString() + "," +
            result.Locations[0].Point.Position.Longitude.ToString() + ")";
   }
}

Ce code affiche les résultats suivants dans la zone de texte tbOutputText.

result = (47.6406099647284,-122.129339994863)

Obtenir une adresse (géocode inverse)

Cette section montre comment convertir un emplacement géographique en adresse (géocodage inverse).

  1. Appelez la méthode FindLocationsAtAsync de la classe MapLocationFinder .
  2. La méthode FindLocationsAtAsync renvoie un objet MapLocationFinderResult contenant une collection d’objets MapLocation correspondants.
  3. Utilisez la propriété Locations de MapLocationFinderResult pour exposer une collection d’objets MapLocation . Il peut y avoir plusieurs objets MapLocation , car le système peut trouver plusieurs emplacements qui correspondent à l’entrée donnée.
  4. Accédez aux objets MapAddress via la propriété Address de chaque MapLocation.
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void reverseGeocodeButton_Click(object sender, RoutedEventArgs e)
{
   // The location to reverse geocode.
   BasicGeoposition location = new BasicGeoposition();
   location.Latitude = 47.643;
   location.Longitude = -122.131;
   Geopoint pointToReverseGeocode = new Geopoint(location);

   // Reverse geocode the specified geographic location.
   MapLocationFinderResult result =
         await MapLocationFinder.FindLocationsAtAsync(pointToReverseGeocode);

   // If the query returns results, display the name of the town
   // contained in the address of the first result.
   if (result.Status == MapLocationFinderStatus.Success)
   {
      tbOutputText.Text = "town = " +
            result.Locations[0].Address.Town;
   }
}

Ce code affiche les résultats suivants dans la zone de texte tbOutputText.

town = Redmond