Eseguire la geocodifica e la geocodifica inversa

Nota

MapControl e i servizi per le mappe richiedono una chiave di autenticazione delle mappe denominata MapServiceToken. Per altre informazioni su come ottenere e impostare una chiave di autenticazione delle mappe, vedere Richiedere una chiave di autenticazione per le mappe.

Questa guida illustra come convertire indirizzi stradali in posizioni geografiche (geocodifica) e posizioni geografiche in indirizzi stradali (geocodifica inversa) chiamando i metodi della classe MapLocationFinder nello spazio dei nomi Windows.Services.Maps.

Suggerimento

Per saperne di più su come usare le mappe e la posizione nella tua app, scaricare l'esempio MapControl dal repository di esempi universali di Windows su GitHub.

Le classi coinvolte nella geocodifica e nella geocodifica inversa sono organizzate nel modo seguente.

Importante

 È necessario specificare una chiave di autenticazione delle mappe prima di poter usare i servizi mappa. Per maggiori informazioni, vedere Richiedere una chiave di autenticazione delle mappe.

Ottenere una posizione (Geocode)

Questa sezione illustra come convertire un indirizzo stradale o un nome di posizione in una posizione geografica (geocodifica).

  1. Chiamare uno degli overload del metodo FindLocationsAsync della classe MapLocationFinder con un nome o un indirizzo di posizione.
  2. Il metodo FindLocationsAsync restituisce un oggetto MapLocationFinderResult.
  3. Usare la proprietà Locations di MapLocationFinderResult per esporre una raccolta di oggetti MapLocation. Potrebbero essere presenti più oggetti MapLocation perché il sistema potrebbe trovare più posizioni che corrispondono all'input specificato.
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() + ")";
   }
}

Questo codice visualizza i risultati seguenti nella casella di testo tbOutputText.

result = (47.6406099647284,-122.129339994863)

Ottenere un indirizzo (codice geografico inverso)

Questa sezione illustra come convertire una posizione geografica in un indirizzo (geocodifica inversa).

  1. Richiamare il metodo FindLocationsAtAsync della classe MapLocationFinder.
  2. Il metodo FindLocationsAtAsync restituisce un oggetto MapLocationFinderResult che contiene una raccolta di oggetti MapLocation corrispondenti.
  3. Usare la proprietà Locations di MapLocationFinderResult per esporre una raccolta di oggetti MapLocation. Potrebbero essere presenti più oggetti MapLocation perché il sistema potrebbe trovare più posizioni che corrispondono all'input specificato.
  4. Accedere agli oggetti MapAddress attraverso la proprietà Indirizzo di ciascuna 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;
   }
}

Questo codice visualizza i risultati seguenti nella casella di testo tbOutputText.

town = Redmond