C# REST SDK Geliştirici Kılavuzu

Azure Haritalar C# SDK'sı, Azure Haritalar REST API'sinde adres arama, farklı koordinatlar arasında yönlendirme ve belirli bir IP adresinin coğrafi konumunu alma gibi işlevleri destekler. Bu makalede, C# dilinde Azure Haritalar gücünü içeren konum algılamalı uygulamalar oluşturmaya başlamanıza yardımcı olacak örneklerle birlikte C# REST SDK'sı tanıtılmıştır.

Not

Azure Haritalar C# SDK'sı .NET standart sürüm 2.0 veya üzeri ile uyumlu tüm .NET sürümlerini destekler. Etkileşimli bir tablo için bkz . .NET Standart sürümleri.

Önkoşullar

İpucu

Program aracılığıyla bir Azure Haritalar hesabı oluşturabilirsiniz. Azure CLI'yı kullanan bir örnek aşağıda verilmiştir:

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

.NET projesi oluşturma

Aşağıdaki PowerShell kod parçacığı, .NET 7.0 ile bir konsol programı MapsDemo oluşturmak için PowerShell'in nasıl kullanılacağını gösterir. Çerçeve olarak herhangi bir .NET standart 2.0 uyumlu sürümü kullanabilirsiniz.

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

Gerekli paketleri yükleme

Azure Haritalar C# SDK'sını kullanmak için gerekli paketleri yüklememiz gerekir. Arama, yönlendirme, işleme ve coğrafi konum gibi Azure Haritalar hizmetlerinin her biri kendi paketlerindedir. Azure Haritalar C# SDK'sı genel önizleme aşamasında olduğundan bayrağını --prerelease eklemeniz gerekir:

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 Haritalar hizmetleri

Hizmet adı NuGet paketi Örnekler
Arama yap Azure.Haritalar.Arama arama örnekleri
Yönlendirme Azure.Maps.Routing  yönlendirme örnekleri
İşleme Azure.Maps.Rendering işleme örneği
Coğrafi Konum Azure.Maps.Geolocation coğrafi konum örneği

"MapsSearchClient" oluşturma ve kimlik doğrulama

Azure Haritalar Arama API'lerine erişmek için kullanılan istemci nesnesi, Azure Haritalar abonelik anahtarı kullanırken kimlik doğrulaması için bir AzureKeyCredential nesne veya Microsoft Entra Id kullanarak kimlik doğrulaması yaparken Azure Haritalar istemci kimliğine sahip bir TokenCredential nesne gerektirir. Kimlik doğrulaması hakkında daha fazla bilgi için bkz. Azure Haritalar ile kimlik doğrulaması.

Microsoft Entra kimlik bilgilerini kullanma

Azure Kimlik kitaplığını kullanarak Microsoft Entra Id ile kimlik doğrulaması yapabilirsiniz. DefaultAzureCredential sağlayıcısını kullanmak için .NET için Azure Identity istemci kitaplığını yüklemeniz gerekir:

dotnet add package Azure.Identity 

Yeni Microsoft Entra uygulamasını kaydetmeniz ve hizmet sorumlunuza gerekli rolü atayarak Azure Haritalar erişimi vermeniz gerekir. Daha fazla bilgi için bkz . Azure dışı kaynaklarda daemon barındırma. Uygulama (istemci) kimliği, Dizin (kiracı) kimliği ve istemci gizli anahtarı geri döndürülür. Bu değerleri kopyalayın ve güvenli bir yerde depolayın. Aşağıdaki adımlarda bunlara ihtiyacınız vardır.

Microsoft Entra uygulamanızın Uygulama (istemci) kimliği, Dizin (kiracı) kimliği ve istemci gizli dizisi değerlerini ve eşleme kaynağının istemci kimliğini ortam değişkenleri olarak ayarlayın:

Ortam değişkeni Açıklama
AZURE_CLIENT_ID Kayıtlı uygulamanızdaki uygulama (istemci) kimliği
AZURE_CLIENT_SECRET Kayıtlı uygulamanızdaki istemci gizli anahtarının değeri
AZURE_TENANT_ID Kayıtlı uygulamanızdaki dizin (kiracı) kimliği
MAPS_MÜŞTERİ_KİMLİĞİ Azure Map kaynağınızdaki istemci kimliği

Artık şu değerleri depolamak için PowerShell'de ortam değişkenleri oluşturabilirsiniz:

$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"

Ortam değişkenlerini ayarladıktan sonra bunları programınızda kullanarak istemcinin örneğini AzureMapsSearch oluşturabilirsiniz:

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); 

Önemli

Önceki kod parçacığında oluşturulan diğer ortam değişkenleri, kod örneğinde kullanılmasa da DefaultAzureCredential() tarafından gereklidir. Bu ortam değişkenlerini doğru ayarlamazsanız, aynı adlandırma kurallarını kullanarak çalışma zamanı hataları alırsınız. Örneğin, AZURE_CLIENT_ID eksik veya geçersizse, bir InvalidAuthenticationTokenTenant hatası alırsınız.

Abonelik anahtar kimlik bilgisini kullanma

Azure Haritalar abonelik anahtarınızla kimlik doğrulaması yapabilirsiniz. Abonelik anahtarınız, aşağıdaki ekran görüntüsünde gösterildiği gibi Azure Haritalar hesabının Kimlik Doğrulaması bölümünde bulunabilir:

Azure portalında Azure Haritalar abonelik anahtarınızı gösteren ekran görüntüsü.

Artık abonelik anahtarını depolamak için PowerShell'de ortam değişkenleri oluşturabilirsiniz:

$Env:SUBSCRIPTION_KEY="your subscription key"

Ortam değişkeniniz oluşturulduktan sonra bu değişkene kodunuzdan erişebilirsiniz:

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); 

Adresi coğrafi kodlama

Bir adresin GetGeocoding koordinatını almak için yöntemini çağırın.

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));
}

Toplu coğrafi kodlama adresleri

Bu örnek, toplu adres aramanın nasıl gerçekleştirileceğini göstermektedir.

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));
    }
}

Koordinatları ters jeokodlama

Koordinatları insan tarafından okunabilen sokak adreslerine çevirebilirsiniz. Bu işleme ters coğrafi kodlama da denir.

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);
}

Koordinat kümesini toplu olarak tersine coğrafi kodlama yapın.

Azure Haritalar Arama bazı toplu sorgu API'leri de sağlar. Ters Coğrafi Kodlama Toplu İş API'si, tek bir API çağrısı kullanarak Ters Coğrafi Kodlama API'sine toplu sorgular gönderir. API, çağıranın en fazla 100 sorguyu toplu olarak çalıştırmasına olanak tanır.

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);
}

Belirli bir konum için çokgenleri alma

Bu örnekte çokgenlerin nasıl aranacakları gösterilmektedir.

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]));
    }
}

Arama ve İşleme için V1 SDK'larını kullanma

Arama v1'i kullanma hakkında daha fazla bilgi için Azure Haritalar için .NET arama istemci kitaplığı kısmına bakın. Daha fazla bilgi için Azure Maps Render .NET istemci kitaplığına bakın; Render v1'i kullanın.

Ek bilgi

.NET belgelerindeki Azure.Maps Ad Alanı.