Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Tips
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 den nya Microsoft Entra-applikationen och ge åtkomst till Azure Maps genom att tilldela den nödvändiga rollen till ditt tjänstekonto. 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 (tenant-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_KLIENTHEMLIGHET | Värdet för klienthemligheten i ditt registrerade program |
| AZURE_TENANT_ID | Katalog-ID (tennent) 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 med samma namngivningskonventioner, kommer du att få körfel. Om till exempel din AZURE_CLIENT_ID saknas eller är ogiltig får du ett InvalidAuthenticationTokenTenant-fel.
Använda en prenumerationsnyckel
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);
Geokodning av 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ökning av adresser.
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 geokodning av 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);
}
Utför omvänd geokodning för en mängd 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. API:et tillåter anropare att samla 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.