Dela via


Utvecklarguide för C# REST SDK

Azure Maps C# SDK stöder funktioner som är tillgängliga i Rest-API:et för Azure Maps, till exempel sökning efter en adress, routning mellan olika koordinater och hämtar geo-platsen för en specifik IP-adress. Den här artikeln introducerar C# REST SDK med exempel som hjälper dig att komma igång med att skapa platsmedvetna program i C# som innehåller kraften i Azure Maps.

Kommentar

Azure Maps C# SDK stöder alla .NET-versioner som är kompatibla med .NET standard version 2.0 eller senare. En interaktiv tabell finns i .NET Standard-versioner.

Förutsättningar

Dricks

Du kan skapa ett Azure Maps-konto programmatiskt. Här är ett exempel med hjälp av Azure CLI:

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

Skapa ett .NET-projekt

Följande PowerShell-kodfragment visar hur du använder PowerShell för att skapa ett konsolprogram MapsDemo med .NET 7.0. Du kan använda valfri .NET Standard 2.0-kompatibel version som ramverk.

dotnet new console -lang C# -n MapsDemo -f net7.0 
cd MapsDemo 

Installera de paket som krävs

Om du vill använda Azure Maps C# SDK måste vi installera de paket som krävs. Var och en av Azure Maps-tjänsterna, inklusive sökning, routning, rendering och geoplats, finns var och en i sitt eget paket. Eftersom Azure Maps C# SDK är i offentlig förhandsversion måste du lägga --prerelease till flaggan:

dotnet add package Azure.Maps.Rendering --prerelease
dotnet add package Azure.Maps.Routing --prerelease
dotnet add package Azure.Maps.Search --prerelease
dotnet add package Azure.Maps.Geolocation --prerelease

Azure Maps-tjänster

Tjänstnamn NuGet-paket Prover
Sök Azure.Maps.Search sökexempel
Routning Azure.Maps.Routing  routningsexempel
Rendering Azure.Maps.Rendering renderingsexempel
Geoplats Azure.Maps.Geolocation geoplatsexempel

Skapa och autentisera en MapsSearchClient

Klientobjektet som används för att komma åt Azure Maps Search-API:erna kräver antingen ett AzureKeyCredential objekt för att autentisera när du använder en Azure Maps-prenumerationsnyckel eller ett TokenCredential objekt med Azure Maps-klient-ID när du autentiserar med Microsoft Entra-ID. Mer information om autentisering finns i Autentisering med Azure Maps.

Använda en Microsoft Entra-autentiseringsuppgift

Du kan autentisera med Microsoft Entra-ID med hjälp av Azure Identity-biblioteket. Om du vill använda DefaultAzureCredential-providern måste du installera Azure Identity-klientbiblioteket för .NET:

dotnet add package Azure.Identity 

Du måste registrera det nya Microsoft Entra-programmet och bevilja åtkomst till Azure Maps genom att tilldela den roll som krävs till tjänstens huvudnamn. Mer information finns i Host a daemon on non-Azure resources (Värd för en daemon för icke-Azure-resurser). Program-ID(klient)-ID, ett katalog-ID (klient)-ID och en klienthemlighet returneras. Kopiera dessa värden och lagra dem på en säker plats. Du behöver dem i följande steg.

Ange värdena för program-ID,katalog-ID (klient)-ID och klienthemlighet för ditt Microsoft Entra-program och mappningsresursens klient-ID som miljövariabler:

Miljövariabel beskrivning
AZURE_CLIENT_ID Program-ID (klient) i ditt registrerade program
AZURE_CLIENT_SECRET Värdet för klienthemligheten i ditt registrerade program
AZURE_TENANT_ID Katalog-ID (klientorganisation) i ditt registrerade program
MAPS_CLIENT_ID Klient-ID:t i din Azure Map-resurs

Nu kan du skapa miljövariabler i PowerShell för att lagra följande värden:

$Env:AZURE_CLIENT_ID="Application (client) ID"
$Env:AZURE_CLIENT_SECRET="your client secret"
$Env:AZURE_TENANT_ID="your Directory (tenant) ID"
$Env:MAPS_CLIENT_ID="your Azure Maps client ID"

När du har konfigurerat miljövariablerna kan du använda dem i programmet för att instansiera AzureMapsSearch klienten:

using System;
using Azure.Identity; 
using Azure.Maps.Search; 

var credential = new DefaultAzureCredential(); 
var clientId = Environment.GetEnvironmentVariable("MAPS_CLIENT_ID"); 
var client = new MapsSearchClient(credential, clientId); 

Viktigt!

De andra miljövariablerna som skapades i föregående kodfragment, men som inte används i kodexemplet, krävs av DefaultAzureCredential(). Om du inte ställer in dessa miljövariabler korrekt får du körningsfel med samma namngivningskonventioner. Om du AZURE_CLIENT_ID till exempel saknar eller är ogiltig får du ett InvalidAuthenticationTokenTenant fel.

Använda en prenumerationsnyckelautentiseringsuppgifter

Du kan autentisera med din Azure Maps-prenumerationsnyckel. Din prenumerationsnyckel finns i avsnittet Autentisering i Azure Maps-kontot enligt följande skärmbild:

Skärmbild som visar din Azure Maps-prenumerationsnyckel i Azure Portal.

Nu kan du skapa miljövariabler i PowerShell för att lagra prenumerationsnyckeln:

$Env:SUBSCRIPTION_KEY="your subscription key"

När miljövariabeln har skapats kan du komma åt den i koden:

using System;
using Azure; 
using Azure.Maps.Search; 

// Use Azure Maps subscription key authentication 
var subscriptionKey = Environment.GetEnvironmentVariable("SUBSCRIPTION_KEY") ?? string.Empty;
var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential); 

Geokoda en adress

GetGeocoding Anropa metoden för att hämta koordinaten för en adress.

using System;
using Azure; 
using Azure.Maps.Search; 
using Azure.Maps.Search.Models;

// Use Azure Maps subscription key authentication 
var subscriptionKey = Environment.GetEnvironmentVariable("SUBSCRIPTION_KEY") ?? string.Empty;
var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential); 

Response<GeocodingResponse> searchResult = client.GetGeocoding(
    "1 Microsoft Way, Redmond, WA 98052");

for (int i = 0; i < searchResult.Value.Features.Count; i++)
{
    Console.WriteLine("Coordinate:" + string.Join(",", searchResult.Value.Features[i].Geometry.Coordinates));
}

Batch-geokodadresser

Det här exemplet visar hur du utför en batchsökningsadress.

using System;
using Azure; 
using Azure.Maps.Search; 
using System.Collections.Generic;
using Azure.Maps.Search.Models;
using Azure.Maps.Search.Models.Queries;

// Use Azure Maps subscription key authentication 
var subscriptionKey = Environment.GetEnvironmentVariable("SUBSCRIPTION_KEY") ?? string.Empty;
var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential); 

List<GeocodingQuery> queries = new List<GeocodingQuery>
{
    new GeocodingQuery()
    {
        Query ="15171 NE 24th St, Redmond, WA 98052, United States"
    },
    new GeocodingQuery()
    {
        AddressLine = "400 Broad St"
    },
};
Response<GeocodingBatchResponse> results = client.GetGeocodingBatch(queries);

//Print coordinates
for (var i = 0; i < results.Value.BatchItems.Count; i++)
{
    for (var j = 0; j < results.Value.BatchItems[i].Features.Count; j++)
    {
        Console.WriteLine("Coordinates: " + string.Join(",", results.Value.BatchItems[i].Features[j].Geometry.Coordinates));
    }
}

Omvänd geokoda koordinater

Du kan översätta koordinater till gatuadresser som kan läsas av människor. Den här processen kallas även omvänd geokodning.

using System;
using Azure; 
using Azure.Maps.Search; 
using Azure.Core.GeoJson;
using Azure.Maps.Search.Models;

// Use Azure Maps subscription key authentication 
var subscriptionKey = Environment.GetEnvironmentVariable("SUBSCRIPTION_KEY") ?? string.Empty;
var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential); 

GeoPosition coordinates = new GeoPosition(-122.138685, 47.6305637);
Response<GeocodingResponse> result = client.GetReverseGeocoding(coordinates);

//Print addresses
for (int i = 0; i < result.Value.Features.Count; i++)
{
    Console.WriteLine(result.Value.Features[i].Properties.Address.FormattedAddress);
}

Batch omvänd geokoda en uppsättning koordinater

Azure Maps Search innehåller även vissa BATCH-fråge-API:er. Batch-API:et för omvänd geokodning skickar batchar med frågor till API för omvänd geokodning med bara ett enda API-anrop. MED API:et kan anroparen batcha upp till 100 frågor.

using System;
using Azure; 
using Azure.Maps.Search; 
using System.Collections.Generic;
using Azure.Core.GeoJson;
using Azure.Maps.Search.Models;
using Azure.Maps.Search.Models.Queries;

// Use Azure Maps subscription key authentication 
var subscriptionKey = Environment.GetEnvironmentVariable("SUBSCRIPTION_KEY") ?? string.Empty;
var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential);

List<ReverseGeocodingQuery> items = new List<ReverseGeocodingQuery>
{
    new ReverseGeocodingQuery()
    {
        Coordinates = new GeoPosition(-122.349309, 47.620498)
    },
    new ReverseGeocodingQuery()
    {
        Coordinates = new GeoPosition(-122.138679, 47.630356),
        ResultTypes = new List<ReverseGeocodingResultTypeEnum>(){ ReverseGeocodingResultTypeEnum.Address, ReverseGeocodingResultTypeEnum.Neighborhood }
    },
};
Response<GeocodingBatchResponse> result = client.GetReverseGeocodingBatch(items);
//Print addresses
for (var i = 0; i < result.Value.BatchItems.Count; i++)
{
    Console.WriteLine(result.Value.BatchItems[i].Features[0].Properties.Address.AddressLine);
    Console.WriteLine(result.Value.BatchItems[i].Features[0].Properties.Address.Neighborhood);
}

Hämta polygoner för en viss plats

Det här exemplet visar hur du söker i polygoner.

using System;
using Azure; 
using Azure.Maps.Search; 
using Azure.Core.GeoJson;
using Azure.Maps.Search.Models;
using Azure.Maps.Search.Models.Options;

// Use Azure Maps subscription key authentication 
var subscriptionKey = Environment.GetEnvironmentVariable("SUBSCRIPTION_KEY") ?? string.Empty;
var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential);

GetPolygonOptions options = new GetPolygonOptions()
{
    Coordinates = new GeoPosition(-122.204141, 47.61256),
    ResultType = BoundaryResultTypeEnum.Locality,
    Resolution = ResolutionEnum.Small,
};
Response<Boundary> result = client.GetPolygon(options);

var count = ((GeoJsonPolygon)((GeoJsonGeometryCollection)result.Value.Geometry).Geometries[0]).Coordinates.Count;
for (var i = 0; i < count; i++)
{
    var coorCount = ((GeoJsonPolygon)((GeoJsonGeometryCollection)result.Value.Geometry).Geometries[0]).Coordinates[i].Count;
    for (var j = 0; j < coorCount; j++)
    {
        Console.WriteLine(string.Join(",",((GeoJsonPolygon)((GeoJsonGeometryCollection)result.Value.Geometry).Geometries[0]).Coordinates[i][j]));
    }
}

Använda V1-SDK:er för sökning och återgivning

Mer information om hur du använder Search v1 finns i Azure Maps Search-klientbiblioteket för .NET. Mer information om hur du använder Rendera v1 finns i Azure Maps Render-klientbiblioteket för .NET.

Ytterligare information

Namnområdet Azure.Maps i .NET-dokumentationen.