AZURE_MAPS_SUBSCRIPTION_KEY=<your-subscription-key> # Only required for AzureKeyCredential authAZURE_MAPS_CLIENT_ID=<your-client-id> # Required: Azure Maps client IDAZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
using Azure;using Azure.Maps.Search;var subscriptionKey = Environment.GetEnvironmentVariable("AZURE_MAPS_SUBSCRIPTION_KEY");var credential = new AzureKeyCredential(subscriptionKey);var client = new MapsSearchClient(credential);
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);
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 ManagerArmClient armClient = new ArmClient(new DefaultAzureCredential());// Get Maps account resourceResourceIdentifier mapsAccountResourceId = MapsAccountResource.CreateResourceIdentifier( subscriptionId, resourceGroupName, accountName);MapsAccountResource mapsAccount = armClient.GetMapsAccountResource(mapsAccountResourceId);// Generate SAS tokenMapsAccountSasContent 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 tokenvar sasCredential = new AzureSasCredential(sas.Value.AccountSasToken);var client = new MapsSearchClient(sasCredential);
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}");}
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)}"); }}
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}");}
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}");
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}"); }}
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);
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);
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 polygonConsole.WriteLine($"Boundary points: {result.Value.ReachableRange.Boundary.Count}");
using Azure;using Azure.Maps.Rendering;var client = new MapsRenderingClient(new AzureKeyCredential(subscriptionKey));int zoom = 10;int tileSize = 256;// Convert coordinates to tile indexMapTileIndex tileIndex = MapsRenderingClient.PositionToTileXY( new GeoPosition(13.3854, 52.517), zoom, tileSize);// Fetch map tileGetMapTileOptions options = new GetMapTileOptions( MapTileSetId.MicrosoftImagery, new MapTileIndex(tileIndex.X, tileIndex.Y, zoom));Response<Stream> mapTile = client.GetMapTile(options);// Save to fileusing (FileStream fileStream = File.Create("./MapTile.png")){ mapTile.Value.CopyTo(fileStream);}
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}");
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}%");}
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; }}