Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
- Azure Haritalar hesabı.
- Abonelik anahtarı veya Azure Haritalar ile başka bir Kimlik Doğrulaması biçimi.
- .NET standart sürüm 2.0 veya üzeri.
İ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
"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:
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.