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
- Azure Maps-konto.
- Prenumerationsnyckel eller annan form av autentisering med Azure Maps.
- .NET-standardversion 2.0 eller senare.
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:
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.