Xamarin.Forms Map – ovládací prvek
Ovládací Map
prvek je zobrazení pro různé platformy pro zobrazení a přidávání poznámek k mapě. Používá nativní ovládací prvek mapy pro každou platformu a poskytuje uživatelům rychlé a známé prostředí map:
Třída Map
definuje následující vlastnosti, které řídí vzhled a chování mapy:
IsShowingUser
, typubool
označuje, zda mapa zobrazuje aktuální umístění uživatele.ItemsSource
, typuIEnumerable
, který určuje kolekciIEnumerable
položek, které se mají zobrazit.ItemTemplate
, typuDataTemplate
, který určujeDataTemplate
, že se má použít pro každou položku v kolekci zobrazených položek.ItemTemplateSelector
, typuDataTemplateSelector
, který určujeDataTemplateSelector
, že se použije k výběruDataTemplate
položky za běhu.HasScrollEnabled
, typubool
, určuje, zda je mapa povolena posouvání.HasZoomEnabled
, typubool
, určuje, zda je mapa povolena lupa.MapElements
, typuIList<MapElement>
, představuje seznam prvků na mapě, jako jsou mnohoúhelníky a lomené čáry.MapType
, typuMapType
označuje styl zobrazení mapy.MoveToLastRegionOnLayoutChange
, typubool
, určuje, jestli se zobrazená oblast mapy přesune z aktuální oblasti do dříve nastavené oblasti, když dojde ke změně rozložení.Pins
, typuIList<Pin>
, představuje seznam špendlíků na mapě.TrafficEnabled
, typubool
označuje, zda jsou na mapě překryvná data provozu.VisibleRegion
, typuMapSpan
, vrátí aktuálně zobrazenou oblast mapy.
Tyto vlastnosti, s výjimkou MapElements
, Pins
a VisibleRegion
vlastnosti, jsou podporovány BindableProperty
objekty, což znamená, že mohou být cílem datových vazeb.
Třída Map
také definuje MapClicked
událost, která se aktivuje při klepnutí na mapu. Objekt MapClickedEventArgs
, který doprovází událost má jednu vlastnost s názvem Position
, typu Position
. Při spuštění Position
události se vlastnost nastaví na umístění mapy, na které jste klepli. Informace o struktuře Position
naleznete v tématu Umístění a vzdálenost mapy.
Informace o objektu ItemsSource
, ItemTemplate
a ItemTemplateSelector
vlastnosti naleznete v tématu Zobrazení kolekce připnutí.
Zobrazení mapy
Můžete Map
ho zobrazit tak, že ho přidáte do rozložení nebo stránky:
<ContentPage ...
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps">
<maps:Map x:Name="map" />
</ContentPage>
Poznámka:
Pro odkaz na Xamarin.Formsovládací prvky .Mapy se vyžaduje další xmlns
definice oboru názvů. V předchozím příkladu je Xamarin.Forms.Maps
obor názvů odkazován prostřednictvím klíčového maps
slova.
Ekvivalentní kód jazyka C# je:
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace WorkingWithMaps
{
public class MapTypesPageCode : ContentPage
{
public MapTypesPageCode()
{
Map map = new Map();
Content = map;
}
}
}
Tento příklad volá výchozí Map
konstruktor, který zacentruje mapu v Římě:
Případně můžete konstruktoru Map
předat argument, MapSpan
který nastaví středový bod a úroveň přiblížení mapy při načtení. Další informace naleznete v tématu Zobrazení konkrétního umístění na mapě.
Typy map
Vlastnost Map.MapType
lze nastavit na člen výčtu MapType
definující styl zobrazení mapy. Výčet MapType
definuje následující členy:
Street
určuje, že se zobrazí mapa ulic.Satellite
určuje, že se zobrazí mapa obsahující satelitní snímky.Hybrid
určuje, že se zobrazí mapování, které kombinuje street a satelitní data.
Ve výchozím nastavení Map
se při nedefinované vlastnosti zobrazí mapa MapType
ulic. Alternativně MapType
lze vlastnost nastavit na jeden ze členů výčtu MapType
:
<maps:Map MapType="Satellite" />
Ekvivalentní kód jazyka C# je:
Map map = new Map
{
MapType = MapType.Satellite
};
Následující snímky obrazovky ukazujíMap
, kdy je vlastnost nastavena naStreet
MapType
:
Následující snímky obrazovky ukazujíMap
, kdy je vlastnost nastavena naSatellite
MapType
:
Následující snímky obrazovky ukazujíMap
, kdy je vlastnost nastavena naHybrid
MapType
:
Zobrazení konkrétního umístění na mapě
Oblast mapy, která se má zobrazit při načtení mapy, lze nastavit předáním MapSpan
argumentu konstruktoru Map
:
<maps:Map>
<x:Arguments>
<maps:MapSpan>
<x:Arguments>
<maps:Position>
<x:Arguments>
<x:Double>36.9628066</x:Double>
<x:Double>-122.0194722</x:Double>
</x:Arguments>
</maps:Position>
<x:Double>0.01</x:Double>
<x:Double>0.01</x:Double>
</x:Arguments>
</maps:MapSpan>
</x:Arguments>
</maps:Map>
Ekvivalentní kód jazyka C# je:
Position position = new Position(36.9628066, -122.0194722);
MapSpan mapSpan = new MapSpan(position, 0.01, 0.01);
Map map = new Map(mapSpan);
Tento příklad vytvoří Map
objekt, který zobrazuje oblast určenou objektem MapSpan
. Objekt MapSpan
je za středem na zeměpisnou šířku a délku Position
reprezentovanou objektem a zahrnuje 0,01 zeměpisné šířky a 0,01 stupňů délky. Informace o struktuře Position
naleznete v tématu Umístění a vzdálenost mapy. Informace o předávání argumentů v jazyce XAML naleznete v tématu Předávání argumentů v jazyce XAML.
Výsledkem je, že když se mapa zobrazí, zacentruje se na konkrétní místo a zahrnuje určitý počet stupňů zeměpisné šířky a délky:
Vytvoření objektu MapSpan
Existuje řada přístupů k vytváření MapSpan
objektů. Běžným přístupem je zadání požadovaných argumentů konstruktoru MapSpan
. Jedná se o zeměpisnou šířku a délku reprezentovanou objektem Position
a double
hodnoty, které představují stupně zeměpisné šířky a délky, které jsou rozloženy objektem MapSpan
. Informace o struktuře Position
naleznete v tématu Umístění a vzdálenost mapy.
Alternativně existují tři metody ve MapSpan
třídě, které vracejí nové MapSpan
objekty:
ClampLatitude
vrátí hodnotu seMapSpan
stejnouLongitudeDegrees
hodnotou jako instance třídy metody a poloměr definovaný jehonorth
asouth
argumenty.FromCenterAndRadius
vrátí hodnotuMapSpan
, která je definována jehoPosition
aDistance
argumenty.WithZoom
vrátí hodnotu se stejným středemMapSpan
jako instance třídy metody, ale s poloměrem vynásobeným argumentemdouble
.
Informace o struktuře Distance
naleznete v tématu Umístění a vzdálenost mapy.
MapSpan
Po vytvoření se k datům o něm dají získat následující vlastnosti:
Center
, který představujePosition
v zeměpisném středuMapSpan
.LatitudeDegrees
, který představuje stupně zeměpisné šířky, které jsou rozloženyMapSpan
.LongitudeDegrees
, který představuje stupně délky, které jsou rozloženyMapSpan
.Radius
, který představujeMapSpan
poloměr.
Přesunutí mapy
Metodu Map.MoveToRegion
lze volat, aby se změnila pozice a úroveň přiblížení mapy. Tato metoda přijímá MapSpan
argument, který definuje oblast mapy, která se má zobrazit, a úroveň přiblížení.
Následující kód ukazuje příklad přesunutí zobrazené oblasti na mapě:
MapSpan mapSpan = MapSpan.FromCenterAndRadius(position, Distance.FromKilometers(0.444));
map.MoveToRegion(mapSpan);
Zvětšení mapy
Úroveň přiblížení objektu Map
lze změnit beze změny jeho umístění. Toho lze dosáhnout pomocí uživatelského rozhraní mapy nebo programově voláním MoveToRegion
metody s argumentem MapSpan
, který jako argument používá aktuální umístění Position
:
double zoomLevel = 0.5;
double latlongDegrees = 360 / (Math.Pow(2, zoomLevel));
if (map.VisibleRegion != null)
{
map.MoveToRegion(new MapSpan(map.VisibleRegion.Center, latlongDegrees, latlongDegrees));
}
V tomto příkladu MoveToRegion
je volána metoda s argumentem MapSpan
, který určuje aktuální umístění mapy, přes Map.VisibleRegion
vlastnost a úroveň přiblížení jako stupně zeměpisné šířky a délky. Celkový výsledek je, že se změní úroveň přiblížení mapy, ale její umístění není. Alternativním přístupem k implementaci přiblížení na mapě je použití MapSpan.WithZoom
metody k řízení faktoru přiblížení.
Důležité
Přiblížení mapy, ať už prostřednictvím uživatelského rozhraní mapy, nebo programově, vyžaduje, aby Map.HasZoomEnabled
vlastnost je true
. Další informace o této vlastnosti naleznete v tématu Zakázání lupy.
Přizpůsobení chování mapy
Chování objektu Map
lze přizpůsobit nastavením některých jeho vlastností a zpracováním MapClicked
události.
Poznámka:
Další přizpůsobení chování mapování lze dosáhnout vytvořením vlastního rendereru mapování. Další informace naleznete v tématu Přizpůsobení Xamarin.Forms mapy.
Zobrazení provozních dat
Třída Map
definuje TrafficEnabled
vlastnost typu bool
. Ve výchozím nastavení tato vlastnost znamená false
, že data provozu nebudou na mapě překryvná. Pokud je tato vlastnost nastavená na true
hodnotu , překryje se data provozu na mapě. Následující příklad ukazuje nastavení této vlastnosti:
<maps:Map TrafficEnabled="true" />
Ekvivalentní kód jazyka C# je:
Map map = new Map
{
TrafficEnabled = true
};
Zakázat posouvání
Třída Map
definuje HasScrollEnabled
vlastnost typu bool
. Ve výchozím nastavení je true
tato vlastnost , která označuje, že mapování je povoleno posouvání. Pokud je tato vlastnost nastavena na false
, mapa se nebude posouvat. Následující příklad ukazuje nastavení této vlastnosti:
<maps:Map HasScrollEnabled="false" />
Ekvivalentní kód jazyka C# je:
Map map = new Map
{
HasScrollEnabled = false
};
Zakázání lupy
Třída Map
definuje HasZoomEnabled
vlastnost typu bool
. Ve výchozím nastavení je true
tato vlastnost , která označuje, že přiblížení lze provést na mapě. Pokud je tato vlastnost nastavená na false
, nelze mapu přiblížit. Následující příklad ukazuje nastavení této vlastnosti:
<maps:Map HasZoomEnabled="false" />
Ekvivalentní kód jazyka C# je:
Map map = new Map
{
HasZoomEnabled = false
};
Zobrazit umístění uživatele
Třída Map
definuje IsShowingUser
vlastnost typu bool
. Ve výchozím nastavení tato vlastnost znamená false
, že mapa nezobrazuje aktuální umístění uživatele. Pokud je tato vlastnost nastavena na true
, mapa zobrazuje aktuální umístění uživatele. Následující příklad ukazuje nastavení této vlastnosti:
<maps:Map IsShowingUser="true" />
Ekvivalentní kód jazyka C# je:
Map map = new Map
{
IsShowingUser = true
};
Důležité
V iOSu, Androidu a Univerzální platforma Windows vyžaduje přístup k umístění uživatele oprávnění k umístění, aby byla aplikaci udělena oprávnění k poloze. Další informace najdete v tématu Konfigurace platformy.
Udržovat oblast mapy při změně rozložení
Třída Map
definuje MoveToLastRegionOnLayoutChange
vlastnost typu bool
. Ve výchozím nastavení se tato vlastnost označuje true
, že zobrazená oblast mapy se při změně rozložení, například při změně rozložení, přesune z aktuální oblasti do své dříve nastavené oblasti. Pokud je tato vlastnost nastavena na false
, zobrazená oblast mapy zůstane uprostřed, když dojde ke změně rozložení. Následující příklad ukazuje nastavení této vlastnosti:
<maps:Map MoveToLastRegionOnLayoutChange="false" />
Ekvivalentní kód jazyka C# je:
Map map = new Map
{
MoveToLastRegionOnLayoutChange = false
};
Kliknutí na mapu
Třída Map
definuje MapClicked
událost, která se aktivuje při klepnutí na mapu. Objekt MapClickedEventArgs
, který doprovází událost má jednu vlastnost s názvem Position
, typu Position
. Při spuštění Position
události se vlastnost nastaví na umístění mapy, na které jste klepli. Informace o struktuře Position
naleznete v tématu Umístění a vzdálenost mapy.
Následující příklad kódu ukazuje obslužnou rutinu MapClicked
události pro událost:
void OnMapClicked(object sender, MapClickedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"MapClick: {e.Position.Latitude}, {e.Position.Longitude}");
}
V tomto příkladu obslužná OnMapClicked
rutina události vypíše zeměpisnou šířku a délku, která představuje umístění namapované klepnutím. Obslužnou rutinu události lze zaregistrovat s událostí MapClicked
následujícím způsobem:
<maps:Map MapClicked="OnMapClicked" />
Ekvivalentní kód jazyka C# je:
Map map = new Map();
map.MapClicked += OnMapClicked;