Xamarin.Forms Map – ovládací prvek

Download Sample Stažení ukázky

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:

Screenshot of map control, on iOS and Android

Třída Map definuje následující vlastnosti, které řídí vzhled a chování mapy:

  • IsShowingUser, typu booloznačuje, zda mapa zobrazuje aktuální umístění uživatele.
  • ItemsSource, typu IEnumerable, který určuje kolekci IEnumerable položek, které se mají zobrazit.
  • ItemTemplate, typu DataTemplate, který určuje DataTemplate , že se má použít pro každou položku v kolekci zobrazených položek.
  • ItemTemplateSelector, typu DataTemplateSelector, který určuje DataTemplateSelector , že se použije k výběru DataTemplate položky za běhu.
  • HasScrollEnabled, typu bool, určuje, zda je mapa povolena posouvání.
  • HasZoomEnabled, typu bool, určuje, zda je mapa povolena lupa.
  • MapElements, typu IList<MapElement>, představuje seznam prvků na mapě, jako jsou mnohoúhelníky a lomené čáry.
  • MapType, typu MapTypeoznačuje styl zobrazení mapy.
  • MoveToLastRegionOnLayoutChange, typu bool, 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, typu IList<Pin>, představuje seznam špendlíků na mapě.
  • TrafficEnabled, typu booloznačuje, zda jsou na mapě překryvná data provozu.
  • VisibleRegion, typu MapSpan, vrátí aktuálně zobrazenou oblast mapy.

Tyto vlastnosti, s výjimkou MapElements, Pinsa 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, ItemTemplatea 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ě:

Screenshot of map control with default location, on iOS and Android

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 naStreetMapType:

Screenshot of map control with the street map type, on iOS and Android

Následující snímky obrazovky ukazujíMap, kdy je vlastnost nastavena naSatelliteMapType:

Screenshot of map control with the satellite map type, on iOS and Android

Následující snímky obrazovky ukazujíMap, kdy je vlastnost nastavena naHybridMapType:

Screenshot of map control with the hybrid map type, on iOS and Android

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:

Screenshot of map control with specified location, on iOS and Android

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:

  1. ClampLatitude vrátí hodnotu se MapSpan stejnou LongitudeDegrees hodnotou jako instance třídy metody a poloměr definovaný jeho north a south argumenty.
  2. FromCenterAndRadius vrátí hodnotu MapSpan , která je definována jeho Position a Distance argumenty.
  3. WithZoom vrátí hodnotu se stejným středem MapSpan jako instance třídy metody, ale s poloměrem vynásobeným argumentem double .

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ředstavuje Position v zeměpisném středu MapSpan.
  • LatitudeDegrees, který představuje stupně zeměpisné šířky, které jsou rozloženy MapSpan.
  • LongitudeDegrees, který představuje stupně délky, které jsou rozloženy MapSpan.
  • Radius, který představuje MapSpan 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 truehodnotu , 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 truetato 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 truetato 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;