Shrnutí kapitoly 28. Poloha a mapy
Poznámka:
Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.
Xamarin.FormsMap
podporuje prvek, který je odvozen z View
. Vzhledem ke speciálním požadavkům platformy, které jsou součástí použití map, jsou implementovány v samostatném sestavení , Xamarin.Forms. Mapy a zahrnují jiný obor názvů: Xamarin.Forms.Maps
.
Geografický souřadnicový systém
Geografický souřadnicový systém identifikuje pozice na kulovém (nebo téměř kulovém) objektu, jako je Země. Souřadnice se skládá ze zeměpisné šířky i délky vyjádřené v úhlech.
Velký kruh označovaný jako equator
střed mezi dvěma póly, kterými se osa Země koncepčně rozšiřuje.
Paralely a zeměpisná šířka
Úhel měřený sever nebo jih rovníku od středu Země označuje čáry stejné zeměpisné šířky známé jako paralely. Ty se pohybují od 0 stupňů na rovníku až po 90 stupňů na severu a jižních pólech. Podle konvence jsou zeměpisné šířky na sever rovníku kladné hodnoty a ty na jih od rovníku jsou záporné hodnoty.
Zeměpisná délka a meridiány
Poloviny velkých kruhů od severního pólu k jižnímu pólu jsou čáry stejné délky, označované také jako meridiány. To jsou relativní k Prime Meridian v Greenwich, Anglie. Podle konvence jsou délky východně od prime meridianu kladné hodnoty od 0 stupňů do 180 stupňů a délky západně od Prime Meridian jsou záporné hodnoty od 0 stupňů do –180 stupňů.
Ekvirectangulární projekce
Jakákoli plochá mapa Země představuje zkreslení. Pokud jsou všechny čáry zeměpisné šířky a délky rovné a pokud stejné rozdíly v úhlech zeměpisné šířky a délky odpovídají stejným vzdálenostem na mapě, je výsledkem rovnorovná projekce. Tato mapa zkresluje oblasti blíže pólům, protože jsou vodorovně roztaženy.
Projekce Mercatoru
Populární projekce Mercatoru se snaží vyrovnat vodorovné roztažením těchto oblastí svisle. Výsledkem je mapa, ve které se oblasti blízko pólů zobrazují mnohem větší, než jsou, ale každá místní oblast odpovídá skutečné oblasti.
Mapování služeb a dlaždic
Mapové služby používají variantu projekce Mercatoru s názvem Web Mercator
. Mapové služby doručí rastrové dlaždice klientovi na základě umístění a úrovně přiblížení.
Získání polohy uživatele
Třídy Xamarin.FormsMap
nezahrnují zařízení pro získání zeměpisné polohy uživatele, ale to je často žádoucí při práci s mapami, takže služba závislostí ji musí zpracovat.
Poznámka:
Xamarin.Forms aplikace mohou místo toho používat třídu obsaženou Geolocation
v Xamarin.Essentials.
Rozhraní API pro sledování polohy
Řešení Xamarin.FormsBook.Platform obsahuje kód pro rozhraní API pro sledování polohy. Struktura GeographicLocation
zapouzdřuje zeměpisnou šířku a délku. Rozhraní ILocationTracker
definuje dvě metody pro spuštění a pozastavení sledování polohy a událost, když je k dispozici nové umístění.
Správce umístění pro iOS
Implementace iOS ILocationTracker
je LocationTracker
třída, která využívá iOS CLLocationManager
.
Správce umístění Androidu
Implementace Androidu ILocationTracker
LocationTracker
je třída, která využívá třídu Android LocationManager
.
Geografický lokátor UPW
Univerzální platforma Windows implementace ILocationTracker
je LocationTracker
třída, která využívá UPW Geolocator
.
Zobrazení polohy telefonu
Ukázka WhereAmI používá sledování polohy k zobrazení polohy telefonu, jak v textu, tak na mapě equirectangular.
Požadovaná režie
Některé režijní náklady se vyžadují, aby Služba WhereAmI používala sledování polohy. Nejprve musí všechny projekty v řešení WhereAmI obsahovat odkazy na odpovídající projekty vXamarin.Forms Book.Platform a každý projekt WhereAmI musí volat metoduToolkit.Init
.
Je vyžadována další režie specifická pro platformu ve formě oprávnění k umístění.
Oprávnění k umístění pro iOS
V iOSu musí soubor info.plist obsahovat položky obsahující text otázky, která uživatele žádá, aby umožnil získání polohy daného uživatele.
Oprávnění k umístění pro Android
Aplikace pro Android, které získají umístění uživatele, musí mít v souboru AndroidManifest.xml oprávnění ACCESS_FILE_LOCATION.
Oprávnění k umístění pro UPW
Aplikace Univerzální platforma Windows musí mít v souboru Package.appxmanifest označenou location
schopnost zařízení.
Práce s Xamarin.Forms. Mapy
Použití třídy se týká Map
několika požadavků.
Balíček NuGet
To je . Xamarin.Forms Do řešení aplikace je potřeba přidat knihovnu NuGet Maps . Číslo verze by mělo být stejné jako aktuálně Xamarin.Forms nainstalovaný balíček.
Inicializace balíčku Mapy
Projekty aplikace musí volat metodu Xamarin.FormsMaps.Init
po volání Xamarin.Forms.Forms.Init
.
Povolení služeb mapování
Map
Vzhledem k tomu, že lze získat umístění uživatele, musí aplikace získat oprávnění pro uživatele způsobem popsaným výše v této kapitole:
Povolení map pro iOS
Aplikace pro iOS, která používá Map
, potřebuje v souboru info.plist dva řádky.
Povolení map Pro Android
Pro používání služeb Google Map se vyžaduje autorizační klíč. Tento klíč se vloží do souboru AndroidManifest.xml . Kromě toho soubor AndroidManifest.xml vyžaduje manifest
značky, které se týkají získání umístění uživatele.
Povolení map UPW
Aplikace Univerzální platforma Windows vyžaduje autorizační klíč pro používání Map Bing. Tento klíč se předá metodě jako argument Xamarin.FormsMaps.Init
. Aplikace musí být také povolená pro služby zjišťování polohy.
Neoznačená mapa
Ukázka MapDemos se skládá ze souboru MapsDemoHomePage.xaml a MapsDemoHomePage.xaml.cs souboru s kódem, který umožňuje navigaci do různých demonstračních programů.
Soubor BasicMapPage.xaml ukazuje, jak zobrazit Map
zobrazení. Ve výchozím nastavení zobrazuje město Řím, ale mapa může být manipulována uživatelem.
Chcete-li zakázat vodorovné a svislé posouvání, nastavte HasScrollEnabled
vlastnost na false
hodnotu . Pokud chcete přiblížení zakázat, nastavte HasZoomEnabled
hodnotu false
. Tyto vlastnosti nemusí fungovat na všech platformách.
Ulice a terén
Různé typy map můžete zobrazit nastavením Map
vlastnosti MapType
typu MapType
, výčet se třemi členy:
Soubor MapTypesPage.xaml ukazuje, jak pomocí přepínače vybrat typ mapy. RadioButtonManager
Používá třídu v knihovně Xamarin.FormsBook.Toolkit a třídu založenou na souboru MapTypeRadioButton.xaml.
Souřadnice mapy
Program může získat aktuální oblast, která Map
se zobrazuje prostřednictvím VisibleRegion
vlastnosti. Tato vlastnost není zajištěna vazebnou vlastností a neexistuje žádný mechanismus oznámení, který by indikoval, kdy došlo ke změně, takže program, který si přeje monitorovat vlastnost, by měl pravděpodobně použít časovač pro tento účel.
VisibleRegion
je typu MapSpan
, třída se čtyřmi vlastnostmi jen pro čtení:
Center
typuPosition
LatitudeDegrees
typudouble
označující výšku zobrazené oblasti mapyLongitudeDegrees
double
typu označující šířku zobrazené oblasti mapyRadius
Distance
typu označující velikost největší kruhové oblasti viditelné na mapě
Position
a Distance
jsou obě struktury. Position
definuje dvě vlastnosti jen pro čtení nastavené prostřednictvím konstruktoruPosition
:
Distance
je určen k poskytování jednotek nezávislé vzdálenosti převodem mezi metrikou a anglickými jednotkami. Hodnotu Distance
lze vytvořit několika způsoby:
Distance
konstruktor s vzdáleností v metrechDistance.FromMeters
statická metodaDistance.FromKilometers
statická metodaDistance.FromMiles
statická metoda
Hodnota je k dispozici ze tří vlastností:
Meters
typudouble
Kilometers
typudouble
Miles
typudouble
Soubor MapCoordinatesPage.xaml obsahuje několik Label
prvků pro zobrazení MapSpan
informací. Soubor MapCoordinatesPage.xaml.cs kódem používá časovač k aktualizaci informací při manipulaci s mapou uživatelem.
Umístění rozšíření
Nová knihovna pro tuto knihu s názvem Xamarin.FormsBook.Toolkit.Maps obsahuje typy specifické pro mapování, ale nezávislé na platformě. Třída PositionExtensions
má metodu ToString
pro Position
a metodu pro výpočet vzdálenosti mezi dvěma Position
hodnotami.
Nastavení počátečního umístění
Můžete volat metodu MoveToRegion
Map
programového nastavení umístění a úrovně přiblížení na mapě. Argument je typu MapSpan
. Objekt můžete vytvořit MapSpan
pomocí některého z následujících způsobů:
MapSpan
konstruktor se šířkou a šířkou a délkouPosition
rozpětíMapSpan.FromCenterAndRadius
s poloměremPosition
a
MapSpan
Pomocí metod nebo .ClampLatitude
WithZoom
Soubor WyomingPage.xaml a WyomingPage.xaml.cs soubor s kódem ukazuje, jak použít MoveToRegion
metodu k zobrazení stavu Wyoming.
Alternativně můžete použít Map
konstruktor s objektem MapSpan
k inicializaci umístění mapy. Soubor XamarinHQPage.xaml ukazuje, jak to udělat zcela v XAML, aby se zobrazilo ústředí Xamarinu v San Franciscu.
Dynamické přiblížení
Mapu můžete Slider
dynamicky přiblížit. Soubor RadiusZoomPage.xaml a RadiusZoomPage.xaml.cs souboru s kódem ukazuje, jak změnit poloměr mapy na Slider
základě hodnoty.
Soubor Zeměpisná délkaZoomPage.xaml a LongitudeZoomPage.xaml.cs soubor s kódem ukazují alternativní přístup, který funguje lépe na Androidu, ale žádný přístup na platformách Windows nefunguje dobře.
Umístění telefonu
Vlastnost IsShowingUser
Map
funguje na jednotlivých platformách trochu jinak, jak ukazuje soubor ShowLocationPage.xaml :
- V iOSu modrá tečka označuje polohu telefonu, ale musíte tam ručně přecházet.
- V Androidu se zobrazí ikona, která při nasdílení přesune mapu do polohy telefonu.
- UPW se podobá iOSu, ale někdy se automaticky přepíná do umístění.
Projekt MapDemos se pokusí napodobit přístup pro Android tím, že nejprve definuje tlačítko založené na ikoně na základě souboru MyLocationButton.xaml a MyLocationButton.xaml.cs soubor za kódem.
Soubor GoToLocationPage.xaml a GoToLocationPage.xaml.cs soubor s kódem pomocí tohoto tlačítka přejděte do umístění telefonu.
Špendlíky a vědecké muzea
Map
Nakonec třída definuje Pins
vlastnost typu IList<Pin>
. Třída Pin
definuje čtyři vlastnosti:
Label
typustring
, povinná vlastnostAddress
typustring
, volitelná adresa čitelná pro člověkaPosition
typuPosition
, označující, kde je pin zobrazen na mapěType
typuPinType
, výčet, který se nepoužívá
Projekt MapDemos obsahuje soubor ScienceMuseums.xml, který uvádí vědecké muzea v USA a Locations
Site
třídy pro deserializaci těchto dat.
Soubor ScienceMuseumsPage.xaml a ScienceMuseumsPage.xaml.cs kódem za souborem zobrazující špendlíky pro tyto vědecké muzea v mapě. Když uživatel klepne na špendlík, zobrazí adresu a web muzea.
Vzdálenost mezi dvěma body
Třída PositionExtensions
obsahuje metodu DistanceTo
se zjednodušeným výpočtem vzdálenosti mezi dvěma geografickými umístěními.
To se používá v souboru LocalMuseumsPage.xaml a LocalMuseumsPage.xaml.cs kód-za soubor také zobrazit vzdálenost do muzea od umístění uživatele:
Program také ukazuje, jak dynamicky omezit počet špendlíků na základě umístění mapy.
Geokódování a zpět
To je . Xamarin.Forms Sestavení Mapy obsahuje Geocoder
také třídu s metodou GetPositionsForAddressAsync
, která převede textovou adresu na nula nebo více možných geografických pozic a jinou metodu GetAddressesForPositionAsync
, která se převede v opačném směru.
Soubor GeocoderRoundTrip.xaml a GeocoderRoundTrip.xaml.cs soubor kódu ukazuje toto zařízení.