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.
Not
Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.
Xamarin.Formsöğesinden Viewtüretilen bir Map öğeyi destekler. Haritaları kullanmayla ilgili özel platform gereksinimleri nedeniyle, bunlar ayrı bir derlemede uygulanır: Xamarin.Forms. Eşler ve farklı bir ad alanı içerir: Xamarin.Forms.Maps.
Coğrafi koordinat sistemi
Coğrafi koordinat sistemi, Dünya gibi küresel (veya neredeyse küresel) bir nesnedeki konumları tanımlar. Koordinat, açılarla ifade edilen enlem ve boylamlardan oluşur.
adlı equator büyük bir daire, Dünya ekseninin kavramsal olarak genişlediği iki kutup arasındaki orta yoldur.
Paraleller ve enlem
Dünya'nın merkezinden ekvatorun kuzeyinde veya güneyinde ölçülen açı, paralel olarak bilinen eşit enlem çizgilerini işaretler. Bunlar ekvatorda 0 derece ile kuzey ve güney kutuplarında 90 derece arasında değişir. Kural gereği, ekvatorun kuzeyindeki enlemler pozitif değerlerdir ve ekvatorun güneyi negatif değerlerdir.
Boylam ve meridyenler
Kuzey kutbundan güney kutbuna kadar büyük dairelerin yarıları, meridyen olarak da bilinen eşit boylam çizgileridir. Bunlar Greenwich, İngiltere'deki Prime Meridian'a göredir. Kural gereği, Prime Meridian'ın doğusundaki boylamlar 0 dereceden 180 dereceye kadar pozitif değerlerdir ve Prime Meridian'ın batısında boylamlar 0 dereceden –180 dereceye kadar negatif değerlerdir.
Equirectangular projeksiyonu
Dünya'nın herhangi bir düz haritası bozulmalara neden olabilir. Tüm enlem ve boylam çizgileri düzse ve enlem ve boylam açılarındaki eşit farklar haritadaki eşit mesafelere karşılık geliyorsa, sonuç bir equirectangular projeksiyondur. Bu harita, kutuplara daha yakın olan alanları, yatay olarak esnetildiği için bozmaktadır.
Mercator projeksiyonu
Popüler Mercator projeksiyonu , bu alanları dikey olarak da genişleterek yatay esnetmeyi telafi etmeye çalışır. Bu, kutupların yakınındaki alanların gerçekten olduğundan çok daha büyük göründüğü ancak yerel alanların gerçek alanla oldukça yakın bir şekilde uyumlu olduğu bir haritayla sonuçlanıyor.
Hizmetleri ve kutucukları eşleme
Harita hizmetleri, Adlı Web MercatorMercator projeksiyonunun bir varyasyonunu kullanır. Harita hizmetleri, konuma ve yakınlaştırma düzeyine göre bit eşlem kutucuklarını istemciye teslim eder.
Kullanıcının konumunu alma
Sınıflar Xamarin.FormsMap , kullanıcının coğrafi konumunu almak için bir tesis içermez, ancak bu genellikle haritalarla çalışırken tercih edilir, bu nedenle bağımlılık hizmetinin bunu işlemesi gerekir.
Not
Xamarin.Formsuygulamalar bunun yerine içinde Xamarin.Essentialsbulunan sınıfını kullanabilirGeolocation.
Konum izleyici API'si
Xamarin.FormsBook.Platform çözümü, konum izleyici API'sinin kodunu içerir. Yapı bir GeographicLocation enlem ve boylam kapsüller. Arabirim, ILocationTracker konum izleyicisini başlatmak ve duraklatmak için iki yöntem ve yeni bir konum kullanılabilir olduğunda bir olay tanımlar.
iOS konum yöneticisi
iOS uygulamasıILocationTracker, iOS CLLocationManagerkullanan bir LocationTracker sınıftır.
Android konum yöneticisi
Android uygulamasıILocationTracker, Android LocationManager sınıfını kullanan bir LocationTracker sınıftır.
UWP coğrafi bulucu
uygulamasının ILocationTracker Evrensel Windows Platformu, UWP Geolocatorkullanan bir LocationTracker sınıftır.
Telefonun konumunu görüntüleme
WhereAmI örneği, telefonun konumunu hem metinde hem de equirectangular haritasında görüntülemek için konum izleyicisini kullanır.
Gerekli ek yük
WhereAmI'nin konum izleyicisini kullanması için bazı ek yük gereklidir. İlk olarak, WhereAmI çözümündeki tüm projelerin Book.Platform'dakiXamarin.Forms ilgili projelere başvuruları olmalıdır ve her WhereAmI projesi yöntemini Toolkit.Init çağırmalıdır.
Konum izinleri biçiminde platforma özgü ek yük gereklidir.
iOS için konum izni
iOS için info.plist dosyası, kullanıcıdan söz konusu kullanıcının konumunu almasına izin vermesini isteyen bir soru metnini içeren öğeleri içermelidir.
Android için konum izinleri
Kullanıcının konumunu alan Android uygulamalarının AndroidManifest.xml dosyasında ACCESS_FILE_LOCATION izni olmalıdır.
UWP için konum izinleri
Evrensel Windows Platformu bir uygulamanın Package.appxmanifest dosyasında işaretlenmiş bir location cihaz özelliği olmalıdır.
ile Xamarin.Formsçalışma. Haritalar
sınıfını kullanmak için çeşitli gereksinimler söz konusu Map olur.
NuGet paketi
. Xamarin.Forms Haritalar NuGet kitaplığının uygulama çözümüne eklenmesi gerekir. Sürüm numarası şu anda yüklü olan paketle Xamarin.Forms aynı olmalıdır.
Haritalar paketini başlatma
Uygulama projelerinin çağrısı Xamarin.FormsMaps.Init yaptıktan sonra yöntemini çağırması Xamarin.Forms.Forms.Initgerekir.
Harita hizmetlerini etkinleştirme
Map kullanıcının konumunu alabildiği için, uygulamanın bu bölümün önceki bölümlerinde açıklanan şekilde kullanıcı için izin alması gerekir:
iOS haritalarını etkinleştirme
kullanan Map bir iOS uygulamasının info.plist dosyasında iki satır olması gerekir.
Android haritalarını etkinleştirme
Google Map hizmetlerini kullanmak için yetkilendirme anahtarı gereklidir. Bu anahtar AndroidManifest.xml dosyasına eklenir. Buna ek olarak, AndroidManifest.xml dosyası, kullanıcının konumunun alınmasında yer alan etiketleri gerektirir manifest .
UWP haritalarını etkinleştirme
Evrensel Windows Platformu uygulaması Bing Haritalar'ın kullanılması için yetkilendirme anahtarı gerektirir. Bu anahtar, yöntemine Xamarin.FormsMaps.Init bağımsız değişken olarak geçirilir. Uygulamanın konum hizmetleri için de etkinleştirilmesi gerekir.
Süslenmemiş harita
MapDemos örneği, bir MapsDemoHomePage.xaml dosyasından ve çeşitli tanıtım programlarına gezinmeye olanak tanıyan arka planda kod MapsDemoHomePage.xaml.cs dosyasından oluşur.
BasicMapPage.xaml dosyasında görünümün Map nasıl görüntüleneceği gösterilir. Varsayılan olarak Roma şehri görüntülenir, ancak harita kullanıcı tarafından değiştirilebilir.
Yatay ve dikey kaydırmayı devre dışı bırakmak için özelliğini olarak falseayarlayınHasScrollEnabled. Yakınlaştırmayı devre dışı bırakmak için olarak falseayarlayınHasZoomEnabled. Bu özellikler tüm platformlarda çalışmayabilir.
Sokaklar ve Arazi
üç üyeli bir numaralandırma türü MapTypeözelliğini MapType ayarlayarak Map farklı eşleme türlerini görüntüleyebilirsiniz:
MapTypesPage.xaml dosyası, harita türünü seçmek için radyo düğmesinin nasıl kullanılacağını gösterir. Book.Toolkit kitaplığındakiXamarin.Forms sınıfı ve MapTypeRadioButton.xaml dosyasını temel alan bir sınıfı kullanırRadioButtonManager.
Harita koordinatları
Bir program, özelliği aracılığıyla VisibleRegion öğesinin Map görüntülendiği geçerli alanı alabilir. Bu özellik bağlanabilir bir özellik tarafından desteklenmez ve ne zaman değiştiğini belirten bir bildirim mekanizması yoktur, bu nedenle özelliği izlemek isteyen bir program büyük olasılıkla bu amaç için bir zamanlayıcı kullanmalıdır.
VisibleRegion türündedir MapSpanve dört salt okunur özelliğe sahip bir sınıftır:
CentertürüPositionLatitudeDegreestüründedouble, haritanın görüntülenen alanının yüksekliğini gösterirLongitudeDegreestüründedouble, haritanın görüntülenen alanının genişliğini gösterirRadiustüründeDistance, haritada görünen en büyük dairesel alanın boyutunu gösterir
Position ve Distance her ikisi de yapıdır. Positionoluşturucu aracılığıyla Position ayarlanan iki salt okunur özelliği tanımlar:
Distance ölçüm ve İngilizce birimleri arasında dönüştürme yaparak birimden bağımsız bir mesafe sağlamaya yöneliktir. Bir Distance değer çeşitli yollarla oluşturulabilir:
Distancemetre mesafeli oluşturucuDistance.FromMetersstatik yöntemDistance.FromKilometersstatik yöntemDistance.FromMilesstatik yöntem
Değer üç özellikten kullanılabilir:
MeterstürüdoubleKilometerstürüdoubleMilestürüdouble
MapCoordinatesPage.xaml dosyası, bilgileri görüntülemek MapSpan için çeşitli Label öğeler içerir. MapCoordinatesPage.xaml.cs arka planda kod dosyası, kullanıcı haritayı işledikçe bilgileri güncel tutmak için bir zamanlayıcı kullanır.
Konum uzantıları
Book.Toolkit.Maps adlı Xamarin.Formsbu kitap için yeni bir kitaplık haritaya özgü ancak platformdan bağımsız türler içeriyor. sınıfı için PositionExtensions bir ToString yöntemine ve iki Position değer arasındaki uzaklığı hesaplamak için Positionbir yönteme sahiptir.
İlk konumu ayarlama
Program aracılığıyla harita üzerinde MoveToRegion konum ve yakınlaştırma düzeyi ayarlamak için yöntemini Map çağırabilirsiniz. Bağımsız değişken türündedir MapSpan. Aşağıdakilerden birini kullanarak bir MapSpan nesne oluşturabilirsiniz:
MapSpanoluşturucu vePositionenlem ile boylam aralığıMapSpan.FromCenterAndRadiusvePositionyarıçapı olan
Veya WithZoomyöntemlerini ClampLatitude kullanarak mevcut bir yöntemden yeni bir tane MapSpan oluşturmak da mümkündür.
WyomingPage.xaml dosyası ve WyomingPage.xaml.cs arka planda kod dosyası, Wyoming durumunu görüntülemek için yönteminin nasıl kullanılacağını MoveToRegion gösterir.
Alternatif olarak, haritanın Map konumunu başlatmak için oluşturucuyu bir MapSpan nesneyle kullanabilirsiniz. XamarinHQPage.xaml dosyası, Xamarin'in San Francisco'daki merkezini görüntülemek için bunun tamamen XAML'de nasıl yapılacağını gösterir.
Dinamik yakınlaştırma
Bir haritayı dinamik olarak yakınlaştırmak için kullanabilirsiniz Slider . RadiusZoomPage.xaml dosyası ve RadiusZoomPage.xaml.cs arka planda kod dosyası, bir eşlemenin yarıçapını değere göre Slider nasıl değiştireceğini gösterir.
LongitudeZoomPage.xaml dosyası ve LongitudeZoomPage.xaml.cs arka planda kod dosyası, Android'de daha iyi çalışan alternatif bir yaklaşım gösterir, ancak windows platformlarında iki yaklaşım da iyi çalışmaz.
Telefonun konumu
IsShowingUser ÖzelliğiMap, ShowLocationPage.xaml dosyasında gösterildiği gibi her platformda biraz farklı çalışır:
- iOS'ta mavi bir nokta telefonun konumunu gösterir ancak bu konuma el ile gitmeniz gerekir
- Android'de, gönderildiğinde haritayı telefonun konumuna taşıyan bir simge görüntülenir
- UWP, iOS'a benzer ancak bazen otomatik olarak konuma gider
MapDemos projesi, önce MyLocationButton.xaml dosyasını temel alan simge tabanlı bir düğme tanımlayıp arka planda kod dosyası MyLocationButton.xaml.cs Android yaklaşımını taklit etmeye çalışır.
GoToLocationPage.xaml dosyası ve GoToLocationPage.xaml.cs arka planda kod dosyası, telefonun konumuna gitmek için bu düğmeyi kullanır.
Raptiyeler ve bilim müzeleri
Son olarak, Map sınıfı türünde IList<Pin>bir Pins özellik tanımlar. Pin sınıfı dört özellik tanımlar:
Labeltüründestring, gerekli bir özellikAddresstüründestring, isteğe bağlı olarak okunabilir bir adresPositiontüründePosition, haritada raptiyenin nerede görüntülendiğini gösterirTypetüründePinType, kullanılmayan bir sabit listesi
MapDemos projesi, Birleşik Devletler bilim müzelerini ve bu verileri seri durumdan çıkarma sınıflarını listeleyen dosya ScienceMuseums.xml Locations Site içerir.
ScienceMuseumsPage.xaml dosyası ve ScienceMuseumsPage.xaml.cs arka planda kod dosyası, bu bilim müzeleri için haritadaki pinleri görüntüler. Kullanıcı bir raptiyeye dokunduğunda, müzenin adresini ve web sitesini görüntüler.
İki nokta arasındaki mesafe
sınıfı, PositionExtensions iki coğrafi konum arasındaki mesafenin basitleştirilmiş bir hesaplamasını içeren bir DistanceTo yöntem içerir.
Bu, LocalMuseumsPage.xaml dosyasında ve LocalMuseumsPage.xaml.cs arka planda kod dosyasında kullanıcının konumundan müzeye olan uzaklığı görüntülemek için kullanılır:
Program ayrıca haritanın konumuna göre raptiye sayısını dinamik olarak kısıtlamayı da gösterir.
Yeniden coğrafi kodlama ve geri alma
. Xamarin.Forms Haritalar derlemesi ayrıca bir Geocoder metin adresini sıfır veya daha fazla olası coğrafi pozisyona dönüştüren bir GetPositionsForAddressAsync yönteme ve diğer yöne dönüştüren başka bir yönteme GetAddressesForPositionAsync sahip bir sınıf içerir.
GeocoderRoundTrip.xaml dosyası ve GeocoderRoundTrip.xaml.cs arka plan kod dosyası bu özelliği gösterir.
