Condividi tramite


Guida per sviluppatori di Java REST SDK (anteprima)

L'SDK Java Mappe di Azure può essere integrato con applicazioni e librerie Java per creare applicazioni correlate alle mappe e in grado di riconoscerne la posizione. Il Mappe di Azure Java SDK contiene API per la ricerca, il routing, il rendering, la georilevazione, il traffico, il fuso orario e il meteo. Queste API supportano operazioni come la ricerca di un indirizzo, il routing tra coordinate diverse, l'acquisizione della posizione geografica di un indirizzo IP specifico e così via.

Nota

Mappe di Azure Java SDK è previsto in Java 8, con test e supporto in avanti fino alla versione più recente del supporto a lungo termine java (attualmente Java 18). Per l'elenco delle versioni Java per il download, vedere Versioni standard java.

Prerequisiti

Suggerimento

È possibile creare un account Mappe di Azure a livello di codice, di seguito è riportato un esempio usando l'interfaccia della riga di comando di Azure:

az maps account create --kind "Gen2" --account-name "myMapAccountName" --resource-group "<resource group>" --sku "G2"

Creare un progetto Maven

Il frammento di codice di PowerShell seguente illustra come usare PowerShell per creare un progetto maven. Eseguire prima di tutto il comando maven per creare un progetto maven:

mvn archetype:generate "-DgroupId=groupId" "-DartifactId=DemoProject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DarchetypeVersion=1.4" "-DinteractiveMode=false" 
Parametro Descrizione
-DGroupId L'ID gruppo identifica in modo univoco il progetto in tutti i progetti
-DartifactId Nome progetto. Viene creato come nuova cartella.
-DarchetypeArtifactId tipo di progetto. maven-archetype-quickstart restituisce un progetto di esempio.
-DinteractiveMode L'impostazione su restituisce false un progetto Java vuoto con le opzioni predefinite.

Installare i pacchetti

Per usare Mappe di Azure Java SDK, è necessario installare tutti i pacchetti necessari. Ogni servizio in Mappe di Azure è disponibile nel proprio pacchetto. I servizi Mappe di Azure includono Ricerca, Rendering, Traffico, Meteo e così via. È sufficiente installare i pacchetti per il servizio o i servizi usati nel progetto.

Dopo aver creato il progetto maven, dovrebbe essere presente un pom.xml file con informazioni di base, ad esempio ID gruppo, nome, ID artefatto. Aggiungere quindi una dipendenza per ognuno dei servizi Mappe di Azure, come illustrato nell'esempio seguente:

<dependency> 
  <groupId>com.azure</groupId> 
  <artifactId>azure-maps-search</artifactId> 
  <version>1.0.0-beta.1</version> 
</dependency> 
<dependency> 
  <groupId>com.azure</groupId> 
  <artifactId>azure-maps-route</artifactId> 
  <version>1.0.0-beta.1</version> 
</dependency> 
<dependency> 
  <groupId>com.azure</groupId> 
  <artifactId>azure-maps-render</artifactId> 
  <version>1.0.0-beta.1</version> 
</dependency> 
<dependency> 
  <groupId>com.azure</groupId> 
  <artifactId>azure-maps-traffic</artifactId> 
  <version>1.0.0-beta.1</version> 
</dependency> 
<dependency> 
  <groupId>com.azure</groupId> 
  <artifactId>azure-maps-weather</artifactId> 
  <version>1.0.0-beta.1</version> 
</dependency> 
<dependency> 
  <groupId>com.azure</groupId> 
  <artifactId>azure-maps-timezone</artifactId> 
  <version>1.0.0-beta.1</version> 
</dependency> 

Eseguire mvn clean install nel progetto, quindi creare un file Java denominato demo.java e importare gli elementi necessari da Mappe di Azure nel file:

cd DemoProject
New-Item demo.java

Suggerimento

Se l'esecuzione mvn clean install genera un errore, provare a eseguire mvn clean install -U.

Servizi di Mappe di Azure

Nome servizio Pacchetto Maven Campioni
Ricerca azure-maps-search esempi di ricerca
Routing azure-maps-routing  esempi di routing
Rendering azure-maps-rendering esempio di rendering
Georilevazione azure-maps-geolocation esempio di georilevazione
FusoOrario azure-maps-timezone Esempi di fuso orario

Creare ed autenticare un Mappe SearchClient

L'oggetto client usato per accedere alle API di ricerca di Mappe di Azure richiede l'autenticazione di un AzureKeyCredential oggetto quando si usa una chiave di sottoscrizione Mappe di Azure o un oggetto TokenCredential con l'ID client Mappe di Azure durante l'autenticazione tramite Microsoft Entra ID. Per altre informazioni sull'autenticazione, vedere Autenticazione con Mappe di Azure.

Uso delle credenziali di Microsoft Entra

È possibile eseguire l'autenticazione con Microsoft Entra ID usando la libreria di identità di Azure. Per usare il provider DefaultAzureCredential , è necessario aggiungere la dipendenza mvn nel pom.xml file:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
</dependency>

È necessario registrare la nuova applicazione Microsoft Entra e concedere l'accesso a Mappe di Azure assegnando il ruolo necessario all'entità servizio. Per altre informazioni, vedere Ospitare un daemon in risorse non di Azure. Vengono restituiti l'ID applicazione (client), un ID directory (tenant) e un segreto client. Copiare questi valori e archiviarli in un luogo sicuro. Sono necessari nei passaggi seguenti.

Impostare i valori dell'ID applicazione (client), dell'ID directory (tenant) e del segreto client dell'applicazione Microsoft Entra e dell'ID client della risorsa di mapping come variabili di ambiente:

Variabile di ambiente Descrizione
AZURE_CLIENT_ID ID applicazione (client) nell'applicazione registrata
AZURE_CLIENT_SECRET Valore del segreto client nell'applicazione registrata
AZURE_TENANT_ID ID directory (tenant) nell'applicazione registrata
M piattaforma di strumenti analitici_CLIENT_ID ID client nell'account Mappe di Azure

A questo punto è possibile creare variabili di ambiente in PowerShell per archiviare questi valori:

$Env:AZURE_CLIENT_ID="<client-id>"
A$Env:AZURE_CLIENT_SECRET="<client-secret>"
$Env:AZURE_TENANT_ID="<tenant-id>"
$Env:MAPS_CLIENT_ID="<maps-client-id>"

Dopo aver configurato le variabili di ambiente, è possibile usarle nel programma per creare un'istanza del AzureMapsSearch client:

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.maps.search.MapsSearchClient;
import com.azure.maps.search.MapsSearchClientBuilder;

public class Demo {
    public static void main( String[] args) {
        MapsSearchClientBuilder builder = new MapsSearchClientBuilder();
        DefaultAzureCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
        builder.credential(tokenCredential);
        builder.mapsClientId(System.getenv("MAPS_CLIENT_ID"));
        MapsSearchClient client = builder.buildClient();
    }
}

Importante

Le altre variabili di ambiente create nel frammento di codice precedente, mentre non vengono usate nell'esempio di codice, sono richieste da DefaultAzureCredential(). Se queste variabili di ambiente non vengono impostate correttamente, usando le stesse convenzioni di denominazione, si otterranno errori di run-time. Ad esempio, se manca AZURE_CLIENT_ID o non è valido, verrà visualizzato un InvalidAuthenticationTokenTenant errore.

Uso delle credenziali della chiave di sottoscrizione

È possibile eseguire l'autenticazione con la chiave di sottoscrizione Mappe di Azure. La chiave di sottoscrizione è disponibile nella sezione Autenticazione dell'account Mappe di Azure, come illustrato nello screenshot seguente:

Screenshot showing your Azure Maps subscription key in the Azure portal.

A questo punto è possibile creare variabili di ambiente in PowerShell per archiviare la chiave di sottoscrizione:

$Env:SUBSCRIPTION_KEY="<subscription-key>"

Dopo aver creato la variabile di ambiente, è possibile accedervi nel codice:

import com.azure.core.credential.AzureKeyCredential;
import com.azure.maps.search.MapsSearchClient;
import com.azure.maps.search.MapsSearchClientBuilder;

public class Demo {
    public static void main( String[] args) {

        // Use Azure Maps subscription key authentication
        MapsSearchClientBuilder builder = new MapsSearchClientBuilder();
        AzureKeyCredential keyCredential = new AzureKeyCredential(System.getenv("SUBSCRIPTION_KEY"));
        builder.credential(keyCredential);
        MapsSearchClient client = builder.buildClient();
    }
}

Ricerca fuzzy in un'entità

Il frammento di codice seguente illustra come, in una semplice applicazione console, importare il azure-maps-search pacchetto ed eseguire una ricerca fuzzy su "Starbucks" vicino a Seattle:

import java.io.IOException;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.models.GeoPosition;
// Enable the 2 imports below if you want to use AAD authentication 
// import com.azure.identity.DefaultAzureCredential;
// import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.maps.search.MapsSearchClient;
import com.azure.maps.search.MapsSearchClientBuilder;
import com.azure.maps.search.models.FuzzySearchOptions;
import com.azure.maps.search.models.SearchAddressResult;
import com.azure.maps.search.models.SearchAddressResultItem;

public class Demo {
    public static void main( String[] args) throws IOException {
    MapsSearchClientBuilder builder = new MapsSearchClientBuilder();
    
    // Instantiate with key credential. Get SUBSCRIPTION_KEY from environment variable: 
    AzureKeyCredential keyCredential = new AzureKeyCredential(System.getenv("SUBSCRIPTION_KEY"));
    builder.credential(keyCredential);
    
    // Or you can also instantiate with token credential: 
    // DefaultAzureCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
    // builder.credential(tokenCredential);
    // builder.mapsClientId(System.getenv("MAPS_CLIENT_ID"));
    MapsSearchClient client = builder.buildClient();
    
    // Fuzzy search with options: 
    SearchAddressResult results = client.fuzzySearch(new FuzzySearchOptions("starbucks", new GeoPosition(-122.34255, 47.61010)));
    
    // Print the search results:
    for (SearchAddressResultItem item : results.getResults()) {
              MapsSearchAddress address = item.getAddress();
             GeoPosition coordinate = item.getPosition();
             System.out.format(
                 "* %s, %s\\n" +
                 "  %s %s %s\\n" +
                 "  Coordinate: (%.4f, %.4f)\\n",
                 address.getStreetNumber(), address.getStreetName(),
                 address.getMunicipality(), address.getCountryCode(), address.getPostalCode(),
                 coordinate.getLatitude(), coordinate.getLongitude());
        }
    }
}

Questo frammento di codice illustra come creare un MapsSearchClient oggetto usando le credenziali di Azure. Iniziare creando AzureKeyCredential un'istanza usando la chiave di sottoscrizione Mappe di Azure, quindi passa le credenziali per creare MapsSearchClientun'istanza di . MapsSearchClient metodi come FuzzySearch possono usare il nome punto di interesse (POI) "Starbucks" e coordinate GeoPosition(-122.31, 47.61).

Eseguire il programma dalla cartella del progetto nella riga di comando:

java .\demo.java

Verrà visualizzato un elenco di indirizzi Starbucks e i risultati delle coordinate:

* 1912, Pike Place
  Seattle US 98101
  Coordinate: (47.6102, -122.3425)
* 2118, Westlake Avenue
  Seattle US 98121
  Coordinate: (47.6173, -122.3378)
* 2601, Elliott Avenue
  Seattle US 98121
  Coordinate: (47.6143, -122.3526)
* 1730, Howell Street
  Seattle US 98101
  Coordinate: (47.6172, -122.3298)
* 220, 1st Avenue South
  Seattle US 98104
  Coordinate: (47.6003, -122.3338)
* 400, Occidental Avenue South
  Seattle US 98104
  Coordinate: (47.5991, -122.3328)
* 1600, East Olive Way
  Seattle US 98102
  Coordinate: (47.6195, -122.3251)
* 500, Mercer Street
  Seattle US 98109
  Coordinate: (47.6250, -122.3469)
* 505, 5Th Ave S
  Seattle US 98104
  Coordinate: (47.5977, -122.3285)
* 425, Queen Anne Avenue North
  Seattle US 98109
  Coordinate: (47.6230, -122.3571)

Cercare un indirizzo

Chiamare il SearchAddress metodo per ottenere la coordinata di un indirizzo. Modificare il programma Main dall'esempio come segue:

import java.io.IOException;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.models.GeoPosition;
// Enable the 2 imports below if you want to use AAD authentication 
// import com.azure.identity.DefaultAzureCredential;
// import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.maps.search.MapsSearchClient;
import com.azure.maps.search.MapsSearchClientBuilder;
import com.azure.maps.search.models.SearchAddressOptions;
import com.azure.maps.search.models.SearchAddressResult;
import com.azure.maps.search.models.SearchAddressResultItem;

public class Demo {
    public static void main( String[] args) throws IOException {
    MapsSearchClientBuilder builder = new MapsSearchClientBuilder();
    
    // Instantiate with key credential: 
    AzureKeyCredential keyCredential = new  
        AzureKeyCredential(System.getenv("SUBSCRIPTION_KEY"));
    builder.credential(keyCredential);
    
    // Or you can also instantiate with token credential: 
    // DefaultAzureCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
    // builder.credential(tokenCredential);
    // builder.mapsClientId(System.getenv("MAPS_CLIENT_ID"));
    
    MapsSearchClient client = builder.buildClient();
    client.searchAddress(new SearchAddressOptions("15127 NE 24th Street, Redmond, WA 98052"));
    
    // Search address with options and return top 5 results: 
    SearchAddressResult results = client.searchAddress(new SearchAddressOptions("1  
        Main Street").setCoordinates(new GeoPosition(-74.011454,  
        40.706270)).setRadiusInMeters(40000).setTop(5));
    
    // Print results: 
    if (results.getResults().size() > 0) {
        SearchAddressResultItem item = results.getResults().get(0);
        System.out.format("The coordinates is (%.4f, %.4f)", 
            item.getPosition().getLatitude(), item.getPosition().getLongitude());
        }
    }
}

In questo esempio, il client.SearchAddress metodo restituisce i risultati ordinati in base al punteggio di attendibilità e stampa le coordinate del primo risultato.

Mappe di Azure Search fornisce anche alcuni metodi di query batch. Questi metodi restituiscono oggetti LRO (Long Running Operations). Le richieste potrebbero non restituire immediatamente tutti i risultati, quindi gli utenti possono scegliere di attendere il completamento o eseguire periodicamente query sul risultato, come illustrato nel metodo di ricerca inversa batch:

import java.util.ArrayList;
import java.util.List;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.models.GeoPosition;
// Enable the 2 imports below if you want to use AAD authentication
// import com.azure.identity.DefaultAzureCredential;
// import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.maps.search.MapsSearchClient;
import com.azure.maps.search.MapsSearchClientBuilder;
import com.azure.maps.search.models.BatchReverseSearchResult;
import com.azure.maps.search.models.ReverseSearchAddressBatchItem;
import com.azure.maps.search.models.ReverseSearchAddressOptions;
import com.azure.maps.search.models.ReverseSearchAddressResultItem;

public class Demo{
    public static void main( String[] args) throws IOException {
        MapsSearchClientBuilder builder = new MapsSearchClientBuilder();
        
        // Instantiate with key credential:
        AzureKeyCredential keyCredential = new 
        AzureKeyCredential(System.getenv("SUBSCRIPTION_KEY"));
        builder.credential(keyCredential);
        
        // Or you can also instantiate with token credential: 
        // DefaultAzureCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
        // builder.credential(tokenCredential);
        // builder.mapsClientId(System.getenv("MAPS_CLIENT_ID"));
        
        MapsSearchClient client = builder.buildClient();
        List<ReverseSearchAddressOptions> reverseOptionsList = new ArrayList<>();
        reverseOptionsList.add(new ReverseSearchAddressOptions(new GeoPosition(2.294911, 48.858561)));
        reverseOptionsList.add(new ReverseSearchAddressOptions(new GeoPosition(-122.34255, 47.61010)));
        reverseOptionsList.add(new ReverseSearchAddressOptions(new GeoPosition(-122.33817, 47.61559)).setRadiusInMeters(5000));
        BatchReverseSearchResult batchReverseSearchResult = 
        client.beginReverseSearchAddressBatch(reverseOptionsList).getFinalResult();
        for (ReverseSearchAddressBatchItem item : batchReverseSearchResult.getBatchItems()) {
            for (ReverseSearchAddressResultItem result : item.getResult().getAddresses()) {
                System.out.println(result.getAddress().getFreeformAddress());
            }
        }
    }
}