Condividi tramite


Eseguire la geocodifica e la geocodifica inversa

Importante

Ritiro del servizio Bing Maps for Enterprise

I servizi MapControl della piattaforma UWP e mappa dello spazio dei nomi Windows.Services.Maps si basano su Bing Maps. Bing Maps for Enterprise è deprecato e verrà ritirato, a questo punto MapControl e i servizi non riceveranno più dati.

Per altre informazioni, vedere la documentazione del Centro per sviluppatori di Bing Maps e di Bing Maps.

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.

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