Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í:
CentertypuPositionLatitudeDegreestypudoubleoznačující výšku zobrazené oblasti mapyLongitudeDegreesdoubletypu označující šířku zobrazené oblasti mapyRadiusDistancetypu označující velikost největší kruhové oblasti viditelné na mapě
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:
Distancekonstruktor s vzdáleností v metrechDistance.FromMetersstatická metodaDistance.FromKilometersstatická metodaDistance.FromMilesstatická metoda
Hodnota je k dispozici ze tří vlastností:
MeterstypudoubleKilometerstypudoubleMilestypudouble
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ů:
MapSpankonstruktor se šířkou a šířkou a délkouPositionrozpětíMapSpan.FromCenterAndRadiuss poloměremPositiona
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:
Labeltypustring, povinná vlastnostAddresstypustring, volitelná adresa čitelná pro člověkaPositiontypuPosition, označující, kde je pin zobrazen na mapěTypetypuPinType, 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í.
