Bagikan melalui


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 HasScrollEnabledfalse. 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:

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:

Nilai tersedia dari tiga properti:

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:

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 IsShowingUserMap 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 jenis string, properti yang diperlukan
  • Address jenis string, alamat opsional yang dapat dibaca manusia
  • Position jenis Position, menunjukkan di mana pin ditampilkan di peta
  • Type jenis PinType, 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:

Cuplikan layar tiga kali halaman Museum Lokal

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.