Sdílet prostřednictvím


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 falsehodnotu . 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í:

Position a Distance jsou obě struktury. Positiondefinuje 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:

Hodnota je k dispozici ze tří vlastností:

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 Positiona 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 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 typu string, povinná vlastnost
  • Address typu string, volitelná adresa čitelná pro člověka
  • Position typu Position, označující, kde je pin zobrazen na mapě
  • Type typu PinType, 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:

Trojitý snímek obrazovky se stránkou Místní muzea

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í.