option
MaisonMaison Skill Développement d'API azure-maps-search-dotnet

azure-maps-search-dotnet

microsoft/skills microsoft/skills

Intégrez les services de localisation d'Azure Maps dans vos applications .NET pour bénéficier de fonctionnalités de géocodage, de calcul d'itinéraires, de rendu, de géolocalisation et d'accès aux données météorologiques.

...Développer tout
1
Heure mise à jour 14 septembre 2026

Azure Maps (.NET)

Le SDK Azure Maps pour .NET fournit des services basés sur la localisation : géocodage, calcul d'itinéraires, rendu, géolocalisation et météo.

Installation

# Recherche (géocodage, géocodage inversé)
dotnet add package Azure.Maps.Search --prerelease

# Calcul d'itinéraires (itinéraires, matrice d'itinéraires)
dotnet add package Azure.Maps.Routing --prerelease

# Rendu (tuiles de carte, images statiques)
dotnet add package Azure.Maps.Rendering --prerelease

# Géolocalisation (conversion d'une adresse IP en emplacement)
dotnet add package Azure.Maps.Geolocation --prerelease

# Météo
dotnet add package Azure.Maps.Weather --prerelease

# Gestion des ressources (gestion des comptes, jetons SAS)
dotnet add package Azure.ResourceManager.Maps --prerelease

# Requis pour l'authentification
dotnet add package Azure.Identity

Versions actuelles:

  • Azure.Maps.Search: v2.0.0-beta.5
  • Azure.Maps.Routing: v1.0.0-beta.4
  • Azure.Maps.Rendering: v2.0.0-beta.1
  • Azure.Maps.Geolocation: v1.0.0-beta.3
  • Azure.ResourceManager.Maps: v1.1.0-beta.2

Variables d'environnement

AZURE_MAPS_SUBSCRIPTION_KEY= # Requis uniquement pour l'authentification via AzureKeyCredential
AZURE_MAPS_CLIENT_ID= # Requis : ID client Azure Maps
AZURE_TOKEN_CREDENTIALS=prod  # Requis uniquement si DefaultAzureCredential est utilisé en production

Authentification

Clé d’abonnement (clé partagée)

using Azure;
using Azure.Maps.Search;

var subscriptionKey = Environment.GetEnvironmentVariable("AZURE_MAPS_SUBSCRIPTION_KEY");
var credential = new AzureKeyCredential(subscriptionKey);

var client = new MapsSearchClient(credential);

Identifiants de jeton Microsoft Entra

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

// Développement local : DefaultAzureCredential. En production : définissez AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Ou utilisez directement des informations d'identification spécifiques en production :
// Voir https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var clientId = Environment.GetEnvironmentVariable("AZURE_MAPS_CLIENT_ID");

var client = new MapsSearchClient(credential, clientId);

Signature d’accès partagé (SAS)

using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Maps;
using Azure.ResourceManager.Maps.Models;
using Azure.Maps.Search;

// Authentification avec Azure Resource Manager
ArmClient armClient = new ArmClient(new DefaultAzureCredential());

// Récupération de la ressource de compte Maps
ResourceIdentifier mapsAccountResourceId = MapsAccountResource.CreateResourceIdentifier(
    subscriptionId, resourceGroupName, accountName);
MapsAccountResource mapsAccount = armClient.GetMapsAccountResource(mapsAccountResourceId);

// Générer un jeton SAS
MapsAccountSasContent sasContent = new MapsAccountSasContent(
    MapsSigningKey.PrimaryKey, 
    principalId, 
    maxRatePerSecond: 500, 
    start: DateTime.UtcNow.ToString("O"), 
    expiry: DateTime.UtcNow.AddDays(1).ToString("O"));
 e de réponse sas = mapsAccount.GetSas(sasContent);

// Créer un client avec le jeton SAS
var sasCredential = new AzureSasCredential(sas.Value.AccountSasToken);
var client = new MapsSearchClient(sasCredential);

Hiérarchie des clients

Azure.Maps.Search
└── MapsSearchClient
    ├── GetGeocoding()                    → Géocodage d’adresses
    ├── GetGeocodingBatch()               → Géocodage par lots
    ├── GetReverseGeocoding()             → Conversion de coordonnées en adresse
    ├── GetReverseGeocodingBatch()        → Géocodage inversé par lots
    └── GetPolygon()                      → Récupération des polygones de délimitation

Azure.Maps.Routing
└── MapsRoutingClient
    ├── GetDirections()                   → Itinéraires
    ├── GetImmediateRouteMatrix()         → Matrice d’itinéraires (synchrone, ≤100)
    ├── GetRouteMatrix()                  → Matrice d’itinéraires (asynchrone, ≤700)
    └── GetRouteRange()                   → Portée isochrone/accessible

Azure.Maps.Rendering
└── MapsRenderingClient
    ├── GetMapTile()                      → Tuiles de carte
    ├── GetMapStaticImage()               → Images de carte statiques
    └── GetCopyrightCaption()             → Informations sur les droits d'auteur

Azure.Maps.Geolocation
└── MapsGeolocationClient
    └── GetCountryCode()                  → Conversion d'une adresse IP en pays/région

Azure.Maps.Weather
└── MapsWeatherClient
    ├── GetCurrentWeatherConditions()     → Conditions météo actuelles
    ├── GetDailyForecast()                → Prévisions quotidiennes
    ├── GetHourlyForecast()               → Prévisions horaires
    └── GetSevereWeatherAlerts()          → Alertes météo

Workflows principaux

1. Géocodage (adresse vers coordonnées)

using Azure;
using Azure.Maps.Search;

var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential);
 s de la réponse result = client.GetGeocoding("1 Microsoft Way, Redmond, WA 98052");

foreach (var feature in result.Value.Features)
{
    Console.WriteLine($"Coordonnées : {string.Join(",", feature.Geometry.Coordinates)}");
    Console.WriteLine($"Adresse : {feature.Properties.Address.FormattedAddress}");
    Console.WriteLine($"Confiance : {feature.Properties.Confidence}");
}

2. Géocodage par lots

using Azure.Maps.Search.Models.Queries;

List queries = new List
{
    new GeocodingQuery() { Query = "400 Broad St, Seattle, WA" },
    new GeocodingQuery() { Query = "1 Microsoft Way, Redmond, WA" },
    new GeocodingQuery() { AddressLine = "Space Needle", Top = 1 },
};

Réponse results = client.GetGeocodingBatch(queries);

foreach (var batchItem in results.Value.BatchItems)
{
    foreach (var feature in batchItem.Features)
    {
        Console.WriteLine($"Coordonnées : {string.Join(",", feature.Geometry.Coordinates)}");
    }
}

3. Géocodage inversé (coordonnées vers adresse)

using Azure.Core.GeoJson;

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

foreach (var feature in result.Value.Features)
{
    Console.WriteLine($"Adresse : {feature.Properties.Address.FormattedAddress}");
    Console.WriteLine($"Localité : {feature.Properties.Address.Locality}");
}

4. Obtenir le polygone de délimitation

using Azure.Maps.Search.Models;

GetPolygonOptions options = new GetPolygonOptions()
{
    Coordinates = new GeoPosition(-122.204141, 47.61256),
    ResultType = BoundaryResultTypeEnum.Locality,
    Resolution = ResolutionEnum.Small,
};

Response result = client.GetPolygon(options);

Console.WriteLine($"Droits d'auteur des limites : {result.Value.Properties?.Copyright}");
Console.WriteLine($"Nombre de polygones : {result.Value.Geometry.Count}");

5. Itinéraires

using Azure;
using Azure.Core.GeoJson;
using Azure.Maps.Routing;
using Azure.Maps.Routing.Models;

var client = new MapsRoutingClient(new AzureKeyCredential(subscriptionKey));

List routePoints = new List()
{
    new GeoPosition(-122,34, 47,61),  // Seattle
    new GeoPosition(-122,13, 47,64)   // Redmond
};

RouteDirectionQuery query = new RouteDirectionQuery(routePoints);
Response result = client.GetDirections(query);

foreach (var route in result.Value.Routes)
{
    Console.WriteLine($"Distance : {route.Summary.LengthInMeters} mètres");
    Console.WriteLine($"Durée : {route.Summary.TravelTimeDuration}");
    
    foreach (RouteLeg leg in route.Legs)
    {
        Console.WriteLine($"Points de l'étape : {leg.Points.Count}");
    }
}

6. Itinéraires avec options

RouteDirectionOptions options = new RouteDirectionOptions()
{
    RouteType = RouteType.Fastest,
    UseTrafficData = true,
    TravelMode = TravelMode.Bicycle,
    Language = RoutingLanguage.EnglishUsa,
    InstructionsType = RouteInstructionsType.Text,
};

RouteDirectionQuery query = new RouteDirectionQuery(routePoints)
{
    RouteDirectionOptions = options
};

Response result = client.GetDirections(query);

7. Matrice d’itinéraires

RouteMatrixQuery routeMatrixQuery = new RouteMatrixQuery
{
    Origins = new List()
    {
        new GeoPosition(-122,34, 47,61),
        new GeoPosition(-122,13, 47,64)
    },
    Destinations = new List() 
    { 
        new GeoPosition(-122,20, 47,62),
        new GeoPosition(-122,40, 47,65)
    },
};

// Synchrone (jusqu’à 100 combinaisons d’itinéraires)
Response result = client.GetImmediateRouteMatrix(routeMatrixQuery);

foreach (var cell in result.Value.Matrix.SelectMany(row => row))
{
    Console.WriteLine($"Distance : {cell.Response?.RouteSummary?.LengthInMeters}");
    Console.WriteLine($"Durée : {cell.Response?.RouteSummary?.TravelTimeDuration}");
}

// Asynchrone (jusqu’à 700 combinaisons d’itinéraires)
RouteMatrixOptions routeMatrixOptions = new RouteMatrixOptions(routeMatrixQuery)
{
    TravelTimeType = TravelTimeType.All,
};
GetRouteMatrixOperation asyncResult = client.GetRouteMatrix(WaitUntil.Completed, routeMatrixOptions);

8. Plage d'itinéraires (isochrone)

RouteRangeOptions options = new RouteRangeOptions(-122.34, 47.61)
{
    TimeBudget = new TimeSpan(0, 20, 0)  // 20 minutes
};
 e de réponse result = client.GetRouteRange(options);

// result.Value.ReachableRange contient le polygone
Console.WriteLine($"Points limites : {result.Value.ReachableRange.Boundary.Count}");

9. Récupérer les tuiles de carte

using Azure;
using Azure.Maps.Rendering;

var client = new MapsRenderingClient(new AzureKeyCredential(subscriptionKey));

int zoom = 10;
int tileSize = 256;

// Convertir les coordonnées en index de tuile
MapTileIndex tileIndex = MapsRenderingClient.PositionToTileXY(
    new GeoPosition(13.3854, 52.517), zoom, tileSize);

// Récupérer la tuile de carte
GetMapTileOptions options = new GetMapTileOptions(
    MapTileSetId.MicrosoftImagery,
    new MapTileIndex(tileIndex.X, tileIndex.Y, zoom)
);

Response mapTile = client.GetMapTile(options);

// Enregistrer dans un fichier
using (FileStream fileStream = File.Create("./MapTile.png"))
{
    mapTile.Value.CopyTo(fileStream);
}

10. Géolocalisation par adresse IP

using System.Net;
using Azure;
using Azure.Maps.Geolocation;

var client = new MapsGeolocationClient(new AzureKeyCredential(subscriptionKey));

IPAddress ipAddress = IPAddress.Parse("2001:4898:80e8:b::189");
Response result = client.GetCountryCode(ipAddress);

Console.WriteLine($"Code ISO du pays : {result.Value.IsoCode}");

11. Météo actuelle

using Azure;
using Azure.Core.GeoJson;
using Azure.Maps.Weather;

var client = new MapsWeatherClient(new AzureKeyCredential(subscriptionKey));

var position = new GeoPosition(-122.13071, 47.64011);
var options = new GetCurrentWeatherConditionsOptions(position);
 de réponse result = client.GetCurrentWeatherConditions(options);

foreach (var condition in result.Value.Results)
{
    Console.WriteLine($"Température : {condition.Temperature.Value} {condition.Temperature.Unit}");
    Console.WriteLine($"Météo : {condition.Phrase}");
    Console.WriteLine($"Humidité : {condition.RelativeHumidity} %");
}

Référence des types de clés

Rechercher un package

Type Objectif
MapsSearchClient Client principal pour les opérations de recherche
GeocodingResponse Résultat du géocodage
GeocodingBatchResponse Résultat de géocodage par lots
GeocodingQuery Requête de géocodage par lots
ReverseGeocodingQuery Requête de géocodage inversé par lots
GetPolygonOptions Options pour la récupération de polygones
Limites Résultat du polygone de délimitation
BoundaryResultTypeEnum Type de limite (localité, district administratif, etc.)
ResolutionEnum Résolution du polygone (Petit, Moyen, Grand)

Paquet de routage

Type Objectif
MapsRoutingClient Client principal pour les opérations de calcul d'itinéraire
RouteDirectionQuery Requête d'itinéraire
RouteDirectionOptions Options de calcul d'itinéraire
RouteDirections Résultat de l'itinéraire
Étape d'itinéraire Segment d'un itinéraire
RouteMatrixQuery Requête concernant la matrice d'itinéraires
Résultat de la matrice d'itinéraire Résultat de la matrice d'itinéraires
RouteRangeOptions Options pour l'isochrone
Résultat de la plage d'itinéraires Résultat de l'isochrone
RouteType Type d'itinéraire (le plus rapide, le plus court, éco, palpitant)
TravelMode Mode de déplacement (voiture, camion, vélo, piéton)

Pack de rendu

Type Objectif
MapsRenderingClient Client principal pour le rendu
GetMapTileOptions Options des tuiles de carte
MapTileIndex Coordonnées des tuiles (X, Y, zoom)
MapTileSetId Identifiant de l'ensemble de tuiles

Types courants

Type Objectif
GeoPosition Position géographique (longitude, latitude)
GeoBoundingBox Boîte englobante de la zone géographique

Bonnes pratiques

  1. Utilisez l'Entra ID en production — À privilégier par rapport aux clés d'abonnement
  2. Opérations par lots — Utilisez le géocodage par lots pour plusieurs adresses
  3. Mise en cache des résultats — Les résultats de géocodage ne changent pas fréquemment
  4. Utilisez des tailles de tuiles adaptées — 256 ou 512 pixels en fonction de l'affichage
  5. Gérer les limites de débit — Mettre en œuvre un recul exponentiel
  6. Utilisez la matrice d'itinéraires asynchrone — Pour les calculs de matrice volumineux (>100)
  7. Prendre en compte les données de trafic — Définir UseTrafficData = true pour obtenir des heures d'arrivée estimées précises

Gestion des erreurs

try
{
    Response result = client.GetGeocoding(address);
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Statut : {ex.Status}");
    Console.WriteLine($"Erreur : {ex.Message}");
    
    switch (ex.Status)
    {
        case 400:
            // Paramètres de requête non valides
            break;
        case 401:
            // Échec de l'authentification
            break;
        case 429 :
            // Limitation de débit - mettre en place un délai d'attente
            break;
    }
}

SDK associés

SDK Objectif Installer
Azure.Maps.Search Géocodage, recherche dotnet add package Azure.Maps.Search --prerelease
Azure.Maps.Routing Itinéraires, matrice dotnet add package Azure.Maps.Routing --prerelease
Azure.Maps.Rendering Dossets de carte, images dotnet add package Azure.Maps.Rendering --prerelease
Azure.Maps.Geolocation Géolocalisation par adresse IP dotnet add package Azure.Maps.Geolocation --prerelease
Azure.Maps.Weather Données météorologiques dotnet add package Azure.Maps.Weather --prerelease
Azure.ResourceManager.Maps Gestion des comptes dotnet add package Azure.ResourceManager.Maps --prerelease

Liens de référence

Ressource URL
Documentation Azure Maps https://learn.microsoft.com/azure/azure-maps/
Référence de l'API de recherche https://learn.microsoft.com/dotnet/api/azure.maps.search
Référence de l'API de calcul d'itinéraire https://learn.microsoft.com/dotnet/api/azure.maps.routing
Source GitHub https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/maps
Tarifs https://azure.microsoft.com/pricing/details/azure-maps/
Voir sur GitHub
---
name: azure-maps-search-dotnet
description: Integrate Azure Maps location-based services into .NET applications for geocoding, routing, rendering, geolocation, and weather data.
license: MIT
---

# Azure Maps (.NET)

Azure Maps SDK for .NET providing location-based services: geocoding, routing, rendering, geolocation, and weather.

## Installation

```bash
# Search (geocoding, reverse geocoding)
dotnet add package Azure.Maps.Search --prerelease

# Routing (directions, route matrix)
dotnet add package Azure.Maps.Routing --prerelease

# Rendering (map tiles, static images)
dotnet add package Azure.Maps.Rendering --prerelease

# Geolocation (IP to location)
dotnet add package Azure.Maps.Geolocation --prerelease

# Weather
dotnet add package Azure.Maps.Weather --prerelease

# Resource Management (account management, SAS tokens)
dotnet add package Azure.ResourceManager.Maps --prerelease

# Required for authentication
dotnet add package Azure.Identity
```

**Current Versions**:
- `Azure.Maps.Search`: v2.0.0-beta.5
- `Azure.Maps.Routing`: v1.0.0-beta.4
- `Azure.Maps.Rendering`: v2.0.0-beta.1
- `Azure.Maps.Geolocation`: v1.0.0-beta.3
- `Azure.ResourceManager.Maps`: v1.1.0-beta.2

## Environment Variables

```bash
AZURE_MAPS_SUBSCRIPTION_KEY=<your-subscription-key>  # Only required for AzureKeyCredential auth
AZURE_MAPS_CLIENT_ID=<your-client-id>  # Required: Azure Maps client ID
AZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production
```

## Authentication

### Subscription Key (Shared Key)

```csharp
using Azure;
using Azure.Maps.Search;

var subscriptionKey = Environment.GetEnvironmentVariable("AZURE_MAPS_SUBSCRIPTION_KEY");
var credential = new AzureKeyCredential(subscriptionKey);

var client = new MapsSearchClient(credential);
```

### Microsoft Entra Token Credential

```csharp
using Azure.Identity;
using Azure.Maps.Search;

// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var clientId = Environment.GetEnvironmentVariable("AZURE_MAPS_CLIENT_ID");

var client = new MapsSearchClient(credential, clientId);
```

### Shared Access Signature (SAS)

```csharp
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Maps;
using Azure.ResourceManager.Maps.Models;
using Azure.Maps.Search;

// Authenticate with Azure Resource Manager
ArmClient armClient = new ArmClient(new DefaultAzureCredential());

// Get Maps account resource
ResourceIdentifier mapsAccountResourceId = MapsAccountResource.CreateResourceIdentifier(
    subscriptionId, resourceGroupName, accountName);
MapsAccountResource mapsAccount = armClient.GetMapsAccountResource(mapsAccountResourceId);

// Generate SAS token
MapsAccountSasContent sasContent = new MapsAccountSasContent(
    MapsSigningKey.PrimaryKey, 
    principalId, 
    maxRatePerSecond: 500, 
    start: DateTime.UtcNow.ToString("O"), 
    expiry: DateTime.UtcNow.AddDays(1).ToString("O"));

Response<MapsAccountSasToken> sas = mapsAccount.GetSas(sasContent);

// Create client with SAS token
var sasCredential = new AzureSasCredential(sas.Value.AccountSasToken);
var client = new MapsSearchClient(sasCredential);
```

## Client Hierarchy

```
Azure.Maps.Search
└── MapsSearchClient
    ├── GetGeocoding()                    → Geocode addresses
    ├── GetGeocodingBatch()               → Batch geocoding
    ├── GetReverseGeocoding()             → Coordinates to address
    ├── GetReverseGeocodingBatch()        → Batch reverse geocoding
    └── GetPolygon()                      → Get boundary polygons

Azure.Maps.Routing
└── MapsRoutingClient
    ├── GetDirections()                   → Route directions
    ├── GetImmediateRouteMatrix()         → Route matrix (sync, ≤100)
    ├── GetRouteMatrix()                  → Route matrix (async, ≤700)
    └── GetRouteRange()                   → Isochrone/reachable range

Azure.Maps.Rendering
└── MapsRenderingClient
    ├── GetMapTile()                      → Map tiles
    ├── GetMapStaticImage()               → Static map images
    └── GetCopyrightCaption()             → Copyright info

Azure.Maps.Geolocation
└── MapsGeolocationClient
    └── GetCountryCode()                  → IP to country/region

Azure.Maps.Weather
└── MapsWeatherClient
    ├── GetCurrentWeatherConditions()     → Current weather
    ├── GetDailyForecast()                → Daily forecast
    ├── GetHourlyForecast()               → Hourly forecast
    └── GetSevereWeatherAlerts()          → Weather alerts
```

## Core Workflows

### 1. Geocoding (Address to Coordinates)

```csharp
using Azure;
using Azure.Maps.Search;

var credential = new AzureKeyCredential(subscriptionKey);
var client = new MapsSearchClient(credential);

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

foreach (var feature in result.Value.Features)
{
    Console.WriteLine($"Coordinates: {string.Join(",", feature.Geometry.Coordinates)}");
    Console.WriteLine($"Address: {feature.Properties.Address.FormattedAddress}");
    Console.WriteLine($"Confidence: {feature.Properties.Confidence}");
}
```

### 2. Batch Geocoding

```csharp
using Azure.Maps.Search.Models.Queries;

List<GeocodingQuery> queries = new List<GeocodingQuery>
{
    new GeocodingQuery() { Query = "400 Broad St, Seattle, WA" },
    new GeocodingQuery() { Query = "1 Microsoft Way, Redmond, WA" },
    new GeocodingQuery() { AddressLine = "Space Needle", Top = 1 },
};

Response<GeocodingBatchResponse> results = client.GetGeocodingBatch(queries);

foreach (var batchItem in results.Value.BatchItems)
{
    foreach (var feature in batchItem.Features)
    {
        Console.WriteLine($"Coordinates: {string.Join(",", feature.Geometry.Coordinates)}");
    }
}
```

### 3. Reverse Geocoding (Coordinates to Address)

```csharp
using Azure.Core.GeoJson;

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

foreach (var feature in result.Value.Features)
{
    Console.WriteLine($"Address: {feature.Properties.Address.FormattedAddress}");
    Console.WriteLine($"Locality: {feature.Properties.Address.Locality}");
}
```

### 4. Get Boundary Polygon

```csharp
using Azure.Maps.Search.Models;

GetPolygonOptions options = new GetPolygonOptions()
{
    Coordinates = new GeoPosition(-122.204141, 47.61256),
    ResultType = BoundaryResultTypeEnum.Locality,
    Resolution = ResolutionEnum.Small,
};

Response<Boundary> result = client.GetPolygon(options);

Console.WriteLine($"Boundary copyright: {result.Value.Properties?.Copyright}");
Console.WriteLine($"Polygon count: {result.Value.Geometry.Count}");
```

### 5. Route Directions

```csharp
using Azure;
using Azure.Core.GeoJson;
using Azure.Maps.Routing;
using Azure.Maps.Routing.Models;

var client = new MapsRoutingClient(new AzureKeyCredential(subscriptionKey));

List<GeoPosition> routePoints = new List<GeoPosition>()
{
    new GeoPosition(-122.34, 47.61),  // Seattle
    new GeoPosition(-122.13, 47.64)   // Redmond
};

RouteDirectionQuery query = new RouteDirectionQuery(routePoints);
Response<RouteDirections> result = client.GetDirections(query);

foreach (var route in result.Value.Routes)
{
    Console.WriteLine($"Distance: {route.Summary.LengthInMeters} meters");
    Console.WriteLine($"Duration: {route.Summary.TravelTimeDuration}");
    
    foreach (RouteLeg leg in route.Legs)
    {
        Console.WriteLine($"Leg points: {leg.Points.Count}");
    }
}
```

### 6. Route Directions with Options

```csharp
RouteDirectionOptions options = new RouteDirectionOptions()
{
    RouteType = RouteType.Fastest,
    UseTrafficData = true,
    TravelMode = TravelMode.Bicycle,
    Language = RoutingLanguage.EnglishUsa,
    InstructionsType = RouteInstructionsType.Text,
};

RouteDirectionQuery query = new RouteDirectionQuery(routePoints)
{
    RouteDirectionOptions = options
};

Response<RouteDirections> result = client.GetDirections(query);
```

### 7. Route Matrix

```csharp
RouteMatrixQuery routeMatrixQuery = new RouteMatrixQuery
{
    Origins = new List<GeoPosition>()
    {
        new GeoPosition(-122.34, 47.61),
        new GeoPosition(-122.13, 47.64)
    },
    Destinations = new List<GeoPosition>() 
    { 
        new GeoPosition(-122.20, 47.62),
        new GeoPosition(-122.40, 47.65)
    },
};

// Synchronous (up to 100 route combinations)
Response<RouteMatrixResult> result = client.GetImmediateRouteMatrix(routeMatrixQuery);

foreach (var cell in result.Value.Matrix.SelectMany(row => row))
{
    Console.WriteLine($"Distance: {cell.Response?.RouteSummary?.LengthInMeters}");
    Console.WriteLine($"Duration: {cell.Response?.RouteSummary?.TravelTimeDuration}");
}

// Asynchronous (up to 700 route combinations)
RouteMatrixOptions routeMatrixOptions = new RouteMatrixOptions(routeMatrixQuery)
{
    TravelTimeType = TravelTimeType.All,
};
GetRouteMatrixOperation asyncResult = client.GetRouteMatrix(WaitUntil.Completed, routeMatrixOptions);
```

### 8. Route Range (Isochrone)

```csharp
RouteRangeOptions options = new RouteRangeOptions(-122.34, 47.61)
{
    TimeBudget = new TimeSpan(0, 20, 0)  // 20 minutes
};

Response<RouteRangeResult> result = client.GetRouteRange(options);

// result.Value.ReachableRange contains the polygon
Console.WriteLine($"Boundary points: {result.Value.ReachableRange.Boundary.Count}");
```

### 9. Get Map Tiles

```csharp
using Azure;
using Azure.Maps.Rendering;

var client = new MapsRenderingClient(new AzureKeyCredential(subscriptionKey));

int zoom = 10;
int tileSize = 256;

// Convert coordinates to tile index
MapTileIndex tileIndex = MapsRenderingClient.PositionToTileXY(
    new GeoPosition(13.3854, 52.517), zoom, tileSize);

// Fetch map tile
GetMapTileOptions options = new GetMapTileOptions(
    MapTileSetId.MicrosoftImagery,
    new MapTileIndex(tileIndex.X, tileIndex.Y, zoom)
);

Response<Stream> mapTile = client.GetMapTile(options);

// Save to file
using (FileStream fileStream = File.Create("./MapTile.png"))
{
    mapTile.Value.CopyTo(fileStream);
}
```

### 10. IP Geolocation

```csharp
using System.Net;
using Azure;
using Azure.Maps.Geolocation;

var client = new MapsGeolocationClient(new AzureKeyCredential(subscriptionKey));

IPAddress ipAddress = IPAddress.Parse("2001:4898:80e8:b::189");
Response<CountryRegionResult> result = client.GetCountryCode(ipAddress);

Console.WriteLine($"Country ISO Code: {result.Value.IsoCode}");
```

### 11. Current Weather

```csharp
using Azure;
using Azure.Core.GeoJson;
using Azure.Maps.Weather;

var client = new MapsWeatherClient(new AzureKeyCredential(subscriptionKey));

var position = new GeoPosition(-122.13071, 47.64011);
var options = new GetCurrentWeatherConditionsOptions(position);

Response<CurrentConditionsResult> result = client.GetCurrentWeatherConditions(options);

foreach (var condition in result.Value.Results)
{
    Console.WriteLine($"Temperature: {condition.Temperature.Value} {condition.Temperature.Unit}");
    Console.WriteLine($"Weather: {condition.Phrase}");
    Console.WriteLine($"Humidity: {condition.RelativeHumidity}%");
}
```

## Key Types Reference

### Search Package

| Type | Purpose |
|------|---------|
| `MapsSearchClient` | Main client for search operations |
| `GeocodingResponse` | Geocoding result |
| `GeocodingBatchResponse` | Batch geocoding result |
| `GeocodingQuery` | Query for batch geocoding |
| `ReverseGeocodingQuery` | Query for batch reverse geocoding |
| `GetPolygonOptions` | Options for polygon retrieval |
| `Boundary` | Boundary polygon result |
| `BoundaryResultTypeEnum` | Boundary type (Locality, AdminDistrict, etc.) |
| `ResolutionEnum` | Polygon resolution (Small, Medium, Large) |

### Routing Package

| Type | Purpose |
|------|---------|
| `MapsRoutingClient` | Main client for routing operations |
| `RouteDirectionQuery` | Query for route directions |
| `RouteDirectionOptions` | Route calculation options |
| `RouteDirections` | Route directions result |
| `RouteLeg` | Segment of a route |
| `RouteMatrixQuery` | Query for route matrix |
| `RouteMatrixResult` | Route matrix result |
| `RouteRangeOptions` | Options for isochrone |
| `RouteRangeResult` | Isochrone result |
| `RouteType` | Route type (Fastest, Shortest, Eco, Thrilling) |
| `TravelMode` | Travel mode (Car, Truck, Bicycle, Pedestrian) |

### Rendering Package

| Type | Purpose |
|------|---------|
| `MapsRenderingClient` | Main client for rendering |
| `GetMapTileOptions` | Map tile options |
| `MapTileIndex` | Tile coordinates (X, Y, Zoom) |
| `MapTileSetId` | Tile set identifier |

### Common Types

| Type | Purpose |
|------|---------|
| `GeoPosition` | Geographic position (longitude, latitude) |
| `GeoBoundingBox` | Bounding box for geographic area |

## Best Practices

1. **Use Entra ID for production** — Prefer over subscription keys
2. **Batch operations** — Use batch geocoding for multiple addresses
3. **Cache results** — Geocoding results don't change frequently
4. **Use appropriate tile sizes** — 256 or 512 pixels based on display
5. **Handle rate limits** — Implement exponential backoff
6. **Use async route matrix** — For large matrix calculations (>100)
7. **Consider traffic data** — Set `UseTrafficData = true` for accurate ETAs

## Error Handling

```csharp
try
{
    Response<GeocodingResponse> result = client.GetGeocoding(address);
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Status: {ex.Status}");
    Console.WriteLine($"Error: {ex.Message}");
    
    switch (ex.Status)
    {
        case 400:
            // Invalid request parameters
            break;
        case 401:
            // Authentication failed
            break;
        case 429:
            // Rate limited - implement backoff
            break;
    }
}
```

## Related SDKs

| SDK | Purpose | Install |
|-----|---------|---------|
| `Azure.Maps.Search` | Geocoding, search | `dotnet add package Azure.Maps.Search --prerelease` |
| `Azure.Maps.Routing` | Directions, matrix | `dotnet add package Azure.Maps.Routing --prerelease` |
| `Azure.Maps.Rendering` | Map tiles, images | `dotnet add package Azure.Maps.Rendering --prerelease` |
| `Azure.Maps.Geolocation` | IP geolocation | `dotnet add package Azure.Maps.Geolocation --prerelease` |
| `Azure.Maps.Weather` | Weather data | `dotnet add package Azure.Maps.Weather --prerelease` |
| `Azure.ResourceManager.Maps` | Account management | `dotnet add package Azure.ResourceManager.Maps --prerelease` |

## Reference Links

| Resource | URL |
|----------|-----|
| Azure Maps Documentation | https://learn.microsoft.com/azure/azure-maps/ |
| Search API Reference | https://learn.microsoft.com/dotnet/api/azure.maps.search |
| Routing API Reference | https://learn.microsoft.com/dotnet/api/azure.maps.routing |
| GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/maps |
| Pricing | https://azure.microsoft.com/pricing/details/azure-maps/ |

Tous les fichiers

0 fichiers

Installer azure-maps-search-dotnet

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-dotnet/skills/azure-maps-search-dotnet # Copy SKILL.md to your .claude/skills/ directory

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera

Compétences similaires

agentwallet
Heure mise à jour 7 juillet 2026
brightdata-cli
Heure mise à jour 29 juin 2026
humanize
Heure mise à jour 7 juillet 2026
korean-stock-search
Heure mise à jour 8 juillet 2026
OR