Ringkasan Bab 28. Lokasi dan peta
Catatan
Buku ini diterbitkan pada musim semi 2016, dan belum diperbarui sejak saat itu. Ada banyak dalam buku yang tetap berharga, tetapi beberapa materi sudah kedaluarsa, dan beberapa topik tidak lagi sepenuhnya benar atau lengkap.
Xamarin.FormsMap
mendukung elemen yang berasal dari View
. Karena persyaratan platform khusus yang terlibat dalam menggunakan peta, mereka diimplementasikan dalam rakitan terpisah, Xamarin.Forms.Peta, dan melibatkan namespace layanan yang berbeda: Xamarin.Forms.Maps
.
Sistem koordinat geografis
Sistem koordinat geografis mengidentifikasi posisi pada objek buncis (atau hampir buncis) seperti Bumi. Koordinat terdiri dari garis lintang dan bujur yang dinyatakan dalam sudut.
Lingkaran besar yang disebut equator
tengah antara dua tiang di mana sumbu Bumi secara konseptual meluas.
Paralel dan garis lintang
Sudut diukur utara atau selatan khatulistiwa dari pusat Bumi menandai garis lintang yang sama yang dikenal sebagai paralel. Ini berkisar dari 0 derajat di khatulistiwa hingga 90 derajat di kutub utara dan selatan. Menurut konvensi, garis lintang utara khatulistiwa adalah nilai positif, dan garis selatan khatulistiwa adalah nilai negatif.
Bujur dan meridian
Bagian lingkaran besar dari kutub utara ke kutub selatan adalah garis bujur yang sama, juga dikenal sebagai meridian. Ini relatif terhadap Prime Meridian di Greenwich, Inggris. Menurut konvensi, bujur timur Prime Meridian adalah nilai positif dari 0 derajat hingga 180 derajat, dan bujur barat Prime Meridian adalah nilai negatif dari 0 derajat hingga –180 derajat.
Proyeksi equirectangular
Setiap peta datar Bumi memperkenalkan distorsi. Jika semua garis lintang dan bujur lurus, dan jika perbedaan yang sama dalam sudut lintang dan garis bujur sesuai dengan jarak yang sama di peta, hasilnya adalah proyeksi equirectangular. Peta ini mendistorsi area yang lebih dekat ke tiang karena direntangkan secara horizontal.
Proyeksi Mercator
Proyeksi Mercator yang populer mencoba mengimbangi peregangan horizontal dengan juga membentangkan area-area ini secara vertikal. Ini menghasilkan peta di mana area di dekat tiang tampak jauh lebih besar daripada yang sebenarnya, tetapi area lokal mana pun sangat sesuai dengan area aktual.
Memetakan layanan dan petak peta
Layanan peta menggunakan variasi proyeksi Mercator yang disebut Web Mercator
. Layanan peta mengirimkan petak peta bit ke klien berdasarkan lokasi dan tingkat pembesaran tampilan.
Mendapatkan lokasi pengguna
Kelas Xamarin.FormsMap
tidak termasuk fasilitas untuk mendapatkan lokasi geografis pengguna, tetapi ini sering diinginkan saat bekerja dengan peta, sehingga layanan dependensi harus menanganinya.
Catatan
Xamarin.Forms aplikasi dapat menggunakan kelas yang Geolocation
disertakan dalam Xamarin.Essentials.
API pelacak lokasi
Solusi Xamarin.FormsBook.Platform berisi kode untuk API pelacak lokasi. Struktur merangkum GeographicLocation
garis lintang dan bujur. Antarmuka ILocationTracker
menentukan dua metode untuk memulai dan menjeda pelacak lokasi, dan peristiwa saat lokasi baru tersedia.
Manajer lokasi iOS
Implementasi ILocationTracker
iOS adalah LocationTracker
kelas yang menggunakan iOS CLLocationManager
.
Manajer lokasi Android
Implementasi ILocationTracker
Android adalah LocationTracker
kelas yang menggunakan kelas Android LocationManager
.
Pencari lokasi geografis UWP
Implementasi ILocationTracker
Platform Windows Universal adalah LocationTracker
kelas yang memanfaatkan UWP Geolocator
.
Tampilkan lokasi telepon
Sampel WhereAmI menggunakan pelacak lokasi untuk menampilkan lokasi ponsel, baik dalam teks maupun di peta equirectangular.
Overhead yang diperlukan
Beberapa overhead diperlukan bagi WhereAmI untuk menggunakan pelacak lokasi. Pertama, semua proyek dalam solusi WhereAmI harus memiliki referensi ke proyek yang sesuai diXamarin.Forms Book.Platform, dan setiap proyek WhereAmI harus memanggil metode .Toolkit.Init
Beberapa overhead khusus platform tambahan, dalam bentuk izin lokasi, diperlukan.
Izin lokasi untuk iOS
Untuk iOS, file info.plist harus menyertakan item yang berisi teks pertanyaan yang meminta pengguna untuk mengizinkan mendapatkan lokasi pengguna tersebut.
Izin lokasi untuk Android
Aplikasi Android yang mendapatkan lokasi pengguna harus memiliki izin ACCESS_FILE_LOCATION dalam file AndroidManifest.xml.
Izin lokasi untuk UWP
Aplikasi Platform Windows Universal harus memiliki kemampuan perangkat yang location
ditandai dalam file Package.appxmanifest.
Bekerja dengan Xamarin.Forms.Peta
Beberapa persyaratan terlibat dalam menggunakan Map
kelas .
Paket NuGet
Xamarin.Forms.Peta Pustaka NuGet harus ditambahkan ke solusi aplikasi. Nomor versi harus sama dengan paket yang Xamarin.Forms saat ini diinstal.
Menginisialisasi paket Peta
Proyek aplikasi harus memanggil Xamarin.FormsMaps.Init
metode setelah melakukan panggilan ke Xamarin.Forms.Forms.Init
.
Mengaktifkan layanan peta
Map
Karena dapat memperoleh lokasi pengguna, aplikasi harus mendapatkan izin untuk pengguna dengan cara yang dijelaskan sebelumnya dalam bab ini:
Mengaktifkan peta iOS
Aplikasi iOS yang menggunakan Map
membutuhkan dua baris dalam file info.plist.
Mengaktifkan peta Android
Kunci otorisasi diperlukan untuk menggunakan layanan Google Map. Kunci ini disisipkan dalam file AndroidManifest.xml . Selain itu, file AndroidManifest.xml memerlukan manifest
tag yang terlibat dalam mendapatkan lokasi pengguna.
Mengaktifkan peta UWP
Aplikasi Platform Windows Universal memerlukan kunci otorisasi untuk menggunakan Peta Bing. Kunci ini diteruskan sebagai argumen ke Xamarin.FormsMaps.Init
metode . Aplikasi juga harus diaktifkan untuk layanan lokasi.
Peta yang tidak diurutkan
Sampel MapDemos terdiri dari file Peta DemoHomePage.xaml dan Peta DemoHomePage.xaml.cs file code-behind yang memungkinkan navigasi ke berbagai program demonstrasi.
File BasicMapPage.xaml menunjukkan cara menampilkan Map
tampilan. Secara default menampilkan kota Roma, tetapi peta dapat dimanipulasi oleh pengguna.
Untuk menonaktifkan pengguliran horizontal dan vertikal, atur properti ke HasScrollEnabled
false
. Untuk menonaktifkan pembesaran tampilan, atur HasZoomEnabled
ke false
. Properti ini mungkin tidak berfungsi pada semua platform.
Jalanan dan Medan
Anda dapat menampilkan berbagai jenis peta dengan mengatur Map
properti MapType
jenis MapType
, enumerasi dengan tiga anggota:
File MapTypesPage.xaml menunjukkan cara menggunakan tombol radio untuk memilih jenis peta. Ini menggunakan RadioButtonManager
kelas di Xamarin.Formspustaka Book.Toolkit dan kelas berdasarkan file MapTypeRadioButton.xaml.
Koordinat peta
Program bisa memperoleh area saat ini yang Map
ditampilkan melalui VisibleRegion
properti . Properti ini tidak didukung oleh properti yang dapat diikat, dan tidak ada mekanisme pemberitahuan untuk menunjukkan kapan properti telah berubah, sehingga program yang ingin memantau properti mungkin harus menggunakan timer untuk tujuan tersebut.
VisibleRegion
berjenis MapSpan
, kelas dengan empat properti baca-saja:
Center
dari jenisPosition
LatitudeDegrees
jenisdouble
, menunjukkan tinggi area peta yang ditampilkanLongitudeDegrees
jenisdouble
, menunjukkan lebar area peta yang ditampilkanRadius
jenisDistance
, menunjukkan ukuran area melingkar terbesar yang terlihat di peta
Position
dan Distance
keduanya adalah struktur. Position
menentukan dua properti baca-saja yang Position
ditetapkan melalui konstruktor:
Distance
dimaksudkan untuk memberikan jarak independen satuan dengan mengonversi antara metrik dan unit bahasa Inggris. Nilai Distance
dapat dibuat dengan beberapa cara:
Distance
konstruktor dengan jarak dalam meterDistance.FromMeters
metode statisDistance.FromKilometers
metode statisDistance.FromMiles
metode statis
Nilai tersedia dari tiga properti:
Meters
dari jenisdouble
Kilometers
dari jenisdouble
Miles
dari jenisdouble
File MapCoordinatesPage.xaml berisi beberapa Label
elemen untuk menampilkan MapSpan
informasi. File MapCoordinatesPage.xaml.cs code-behind menggunakan timer untuk menjaga informasi tetap diperbarui saat pengguna memanipulasi peta.
Ekstensi posisi
Pustaka baru untuk buku bernama Xamarin.FormsBook.Toolkit.Peta ini berisi jenis khusus peta tetapi independen platform. Kelas PositionExtensions
memiliki ToString
metode untuk Position
, dan metode untuk menghitung jarak antara dua Position
nilai.
Mengatur lokasi awal
Anda dapat memanggil MoveToRegion
metode Map
untuk mengatur lokasi dan tingkat zoom secara terprogram di peta. Argumen berjenis MapSpan
. Anda bisa membuat MapSpan
objek menggunakan salah satu hal berikut ini:
MapSpan
konstruktor denganPosition
rentang lintang , dan lintang dan bujurMapSpan.FromCenterAndRadius
Position
dengan radius dan
Anda juga dapat membuat yang baru MapSpan
dari yang sudah ada menggunakan metode ClampLatitude
atau WithZoom
.
File WyomingPage.xaml dan WyomingPage.xaml.cs file code-behind menunjukkan cara menggunakan MoveToRegion
metode untuk menampilkan status Wyoming.
Anda dapat menggunakan Map
konstruktor dengan MapSpan
objek untuk menginisialisasi lokasi peta. File XamarinHQPage.xaml menunjukkan cara melakukan ini sepenuhnya di XAML untuk menampilkan kantor pusat Xamarin di San Francisco.
Pembesaran dinamis
Anda dapat menggunakan Slider
untuk memperbesar peta secara dinamis. File RadiusZoomPage.xaml dan file RadiusZoomPage.xaml.cs code-behind menunjukkan cara mengubah radius peta berdasarkan Slider
nilai .
File LongitudeZoomPage.xaml dan file LongitudeZoomPage.xaml.cs code-behind menunjukkan pendekatan alternatif yang berfungsi lebih baik di Android, tetapi tidak ada pendekatan yang berfungsi dengan baik pada platform Windows.
Lokasi Telepon
Properti IsShowingUser
Map
pekerjaan sedikit berbeda di setiap platform seperti yang ditunjukkan file ShowLocationPage.xaml :
- Di iOS, titik biru menunjukkan lokasi ponsel tetapi Anda harus menavigasi ke sana secara manual
- Di Android, ikon ditampilkan saat didorong memindahkan peta ke lokasi ponsel
- UWP mirip dengan iOS tetapi terkadang secara otomatis menavigasi ke lokasi
Proyek MapDemos mencoba meniru pendekatan Android dengan terlebih dahulu mendefinisikan tombol berbasis ikon berdasarkan file MyLocationButton.xaml dan MyLocationButton.xaml.cs file code-behind.
File GoToLocationPage.xaml dan GoToLocationPage.xaml.cs file code-behind menggunakan tombol ini untuk menavigasi ke lokasi ponsel.
Pin dan museum sains
Terakhir, Map
kelas mendefinisikan Pins
properti jenis IList<Pin>
. Kelas Pin
mendefinisikan empat properti:
Label
jenisstring
, properti yang diperlukanAddress
jenisstring
, alamat opsional yang dapat dibaca manusiaPosition
jenisPosition
, menunjukkan di mana pin ditampilkan di petaType
jenisPinType
, enumerasi, yang tidak digunakan
Proyek MapDemos berisi file ScienceMuseums.xml, yang mencantumkan museum sains di Amerika Serikat, dan Locations
kelas Site
untuk mendeserialisasi data ini.
File ScienceMuseumsPage.xaml dan ScienceMuseumsPage.xaml.cs pin tampilan file code-behind untuk museum sains ini di peta. Ketika pengguna mengetuk pin, itu menampilkan alamat dan situs web untuk museum.
Jarak antara dua titik
Kelas PositionExtensions
berisi DistanceTo
metode dengan perhitungan jarak yang disederhanakan antara dua lokasi geografis.
Ini digunakan dalam file LocalMuseumsPage.xaml dan LocalMuseumsPage.xaml.cs file code-behind untuk juga menampilkan jarak ke museum dari lokasi pengguna:
Program ini juga menunjukkan cara membatasi jumlah pin secara dinamis berdasarkan lokasi peta.
Geocoding dan kembali lagi
Rakitan Xamarin.Forms.Peta juga berisi Geocoder
kelas dengan GetPositionsForAddressAsync
metode yang mengonversi alamat teks menjadi nol atau lebih kemungkinan posisi geografis, dan metode GetAddressesForPositionAsync
lain yang mengonversi ke arah lain.
File GeocoderRoundTrip.xaml dan GeocoderRoundTrip.xaml.cs file code-behind menunjukkan fasilitas ini.