Dieser Artikel wurde maschinell übersetzt.

Phone 8.1 herunterladen

Hinzufügen von Anwendungsdaten zum Windows Phone 8.1-Kartensteuerelement

Keith Pijanowski

Laden Sie die Codebeispiele herunter

In meinem Artikel vom November auf die Mapping-Funktionen von Windows Phone 8.1 habe ich das Windows Phone 8.1 Karte-Steuerelement und die Mapping-Services-API eingeführt. Ich zeigte, wie man das Karte-Steuerelement verwenden, um die Zuordnung Funktionalität zu einer Telefonanwendung, z. B. hinzufügen, Hinzufügen von Bildern zu eine angegebene Position markieren, berechnen die Geo-Koordinaten für eine angegebene Adresse (Geocoding), die Adresse einer angegebenen Geo-Koordinate (reverse Geocoding) ermitteln und die Fahr- und Richtungen Wandern.

Dieser Artikel zeigt wie Anwendungsdaten in der Karte-Steuerelement durch das Map-Steuerelement mithilfe von XAML und Anwendung Datenbindung an diese Steuerelemente Steuerelemente hinzufügen. Wenn Ihre Anwendung, offline, auch verwendet wird können die zugrunde liegenden Daten, die durch das Map-Steuerelement verwendet wird auch zur offline-Nutzung heruntergeladen werden. Dadurch kann das Karte-Steuerelement die offline Funktionalität Ihrer Anwendung passen. Ich werde auch zeigen, wie das Steuerelement anzeigen offline nehmen und die offline-Daten aktuell zu halten.

Hinzufügen von Steuerelementen auf der Karte-Steuerelement mithilfe von XAML

In meinem letzten Artikel habe ich Code der Karte um einen bestimmten Ort auf der Karte Kreis eine Ellipse-Steuerelement hinzu. Das ist ein guter Ansatz, wenn Sie die vollständige Kontrolle benötigen. Allerdings wollen Sie kreativ werden und eine Karte mit vielen verschiedenen Arten von Steuerelementen versehen, kann mithilfe von Code klobig sein. Hinzufügen von Steuerelementen zu der Karte mithilfe von XAML ist effizienter. Der XAML-Ansatz ist auch viel einfacher, wenn Sie eine Auflistung der Positionen innerhalb der Karte mithilfe von Datenbindung zuordnen müssen.

Zuerst zeige ich Gewusst wie: Hinzufügen von Steuerelementen mithilfe von XAML und Anwendungsdaten an diese Steuerelemente zu binden. Dann ich vertiefen werde weiter in Daten binden und anzeigen wie an Daten binden eine Auflistung der Positionen auf der Karte-Steuerelement.

Hinzufügen von Steuerelementen für grundlegende XAML es gibt zwei Möglichkeiten das Karte-Steuerelement Steuerelemente hinzu, um die Anwendungsdaten zu einer Karte eingefügt: Sie können die Steuerelemente hinzufügen, als untergeordnetes Element des Steuerelements anzeigen oder die MapItemsControl können Sie die Steuerelemente enthalten.

Abbildung 1 veranschaulicht das Hinzufügen von Steuerelementen als untergeordnetes Element des Steuerelements anzeigen. Da Kinder ist die Standard-Content-Eigenschaft des Steuerelements anzeigen, muss es nicht explizit in XAML-Markup angegeben werden. Abbildung 2 zeigt eine alternative Methode zum Hinzufügen von Steuerelementen zu der Karte-Steuerelement, das nutzt die MapItemControl um zusätzliche Steuerelemente enthalten.

Abbildung 1 Hinzufügen von Steuerelementen als untergeordnetes Element des Steuerelements anzeigen

<Maps:MapControl
  x:Name="myMapControl" Grid.Row="1"
  MapServiceToken="{StaticResource MapServiceTokenString}" >
  <!-- Progress bar which is used while the page is loading. -->
  <ProgressBar Name="pbProgressBar" IsIndeterminate="True" Height="560"
    Width="350" />
  <TextBlock Name="tbMessage" Text="{Binding Message}"
    Maps:MapControl.Location="{Binding Location}"  
    Maps:MapControl.NormalizedAnchorPoint="1.0,1.0"
    FontSize="15" Foreground="Black" FontWeight="SemiBold"
    Padding="4,4,4,4"
    Visibility="Collapsed"
    />
  <Image Name="imgMyLocation" Source="Assets/PinkPushPin.png"
    Maps:MapControl.Location="{Binding Location}"
    Maps:MapControl.NormalizedAnchorPoint="0.25, 0.9"
    Height="30" Width="30"
    Visibility="Collapsed" />
</Maps:MapControl>

Abbildung 2 mit Steuerelementen innerhalb einer MapItemControl

<Maps:MapControl
  x:Name="myMapControl"
  MapServiceToken="{StaticResource MapServiceTokenString}">
  <Maps:MapItemsControl>
    <TextBlock Name="tbAddress" Text="{Binding Message}"
      Maps:MapControl.Location="{Binding Location}"
      Maps:MapControl.NormalizedAnchorPoint="1.0,1.0"
      Visibility="Collapsed" />
    <Image Name="imgMyLocation" Source="Assets/PinkPushPin.png"
      Maps:MapControl.Location="{Binding Location}"
      Maps:MapControl.NormalizedAnchorPoint="0.25, 0.9"
      Height="30" Width="30"
      Visibility="Collapsed"/>
  </Maps:MapItemsControl>
</Maps:MapControl>

Verwenden Sie die MapItemControl-Technik gezeigt Abbildung 2, beachten, dass Sie werden nicht in der Lage, Zugriff auf die Steuerelemente im Codebehind sein. IntelliSense wird bestätigen Ihre Steuerelementnamen als gültige Variablen, aber zur Laufzeit diese Variablen werden immer null und wenn Sie darauf verweisen, erhalten Sie eine NullReferenceException. Die MapItemControl wird in der Regel verwendet, um Datenvorlagen enthalten, die verwendet werden, eine Auflistung von Objekten an das Karte-Steuerelement gebunden. (Dies wird weiter unten in diesem Artikel erläutert werden.)  Daher, wenn Sie nicht an eine Auflistung von Objekten binden sind, es ist besser, fügen Sie Steuerelemente als untergeordnetes Element des Steuerelements anzeigen siehe Abbildung 1.

Datenbindung den Code in Abbildung 1 macht mithilfe der Datenbindung die Location-Eigenschaft des Image-Steuerelements und des Textblocks fest. Die Text-Eigenschaft von TextBlock nutzt auch die Datenbindung. Um schnell zu überprüfen, ist die Location-Eigenschaft eine angefügte Eigenschaft des Typs Geopoint. Es wird verwendet, um anzugeben, wo auf der Karte das Steuerelement platziert werden. Die NormalizedAnchorPoint angefügte Eigenschaft ermöglicht die Position des Steuerelements abgestimmt sein. Beispielsweise können Sie verwenden Sie die NormalizedAnchorPoint-Eigenschaft, um eine Kontrolle über ein Urlaubsziel zu zentrieren oder platzieren Sie ein Steuerelement auf der oberen linken eines Ortes. Beide Eigenschaften wurden in meinem ersten Artikel ausführlich besprochen (msdn.microsoft.com/magazine/dn818495).

Datenbindung ermöglicht XAML-Steuerelementen, deren Werte von zugrunde liegenden Objekten erstellt werden. Ein Objekt aus der folgenden Klasse wird verwendet, um die Werte benötigt für die XAML-Steuerelemente angezeigt, die Abbildung 1:

public class LocationEntity
{
  public Geopoint Location { get; set; }
  public string Message { get; set; }
}

Abbildung 3 zeigt das komplette OnNavigatedTo-Ereignis für eine Seite mit den Steuerelementen in Abbildung 1. (Wenn eine Seite oder Ansicht innerhalb einer Anwendung viele Setup erfordert, sollten Sie platzieren diesen Code in ein View-Modell und es asynchron ausführen.) Mit diesem Code wird das Gerät die aktuelle Position in eine Instanz der Klasse LocationEntity zusammen mit einer kurzen Meldung. Beachten Sie, dass das LocationEntity-Objekt in die DataContext-Eigenschaft des Steuerelements anzeigen festgelegt ist.

Abbildung 3 das OnNavigatedTo-Ereignis, das Erstellen von Objekten für die Datenbindung erforderlich

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
  // Call the navigation helper base function.
  this.navigationHelper.OnNavigatedTo(e);
  // Get the user's current location so that it can be
  // used as the center point of the map control.
  Geolocator geolocator = new Geolocator();
  // Set the desired accuracy.
  geolocator.DesiredAccuracyInMeters = 200;
  // The maximum acceptable age of cached location data.
  TimeSpan maxAge = new TimeSpan(0, 2, 0);
  // Timeout used for the call to GetGeopositionAsync.
  TimeSpan timeout = new TimeSpan(0, 0, 5);
  Geoposition geoposition = null;
  try
  {
    geoposition = await geolocator.GetGeopositionAsync(maxAge, timeout);
  }
  catch (Exception)
  {
    // Add exception logic.
  }
  // Set up the LocationEntity object.
  LocationEntity locationEntity = new LocationEntity();
  locationEntity.Location = geoposition.Coordinate.Point;
  locationEntity.Message = "You are here";
  // Specify the location that will be at the center of the map.
  myMapControl.Center = locationEntity.Location;
  // Set the map controls data context so data binding will work.
  myMapControl.DataContext = locationEntity;
  // Zoom level.
  myMapControl.ZoomLevel = 15;
  // The map control has done most of its work. Make the controls visible.
  imgMyLocation.Visibility = Windows.UI.Xaml.Visibility.Visible;
  tbMessage.Visibility = Windows.UI.Xaml.Visibility.Visible;
  // Collapse the progress bar.
  pbProgressBar.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}

Ein paar Tipps

In den Code in Abbildung 3, das OnNavigatedTo-Ereignis führt zeitaufwändige Arbeit. Konkret ruft dieses Ereignis die GetGeopositionAsync-Funktion eines Geolocator-Objekts. Diese Funktion Ruft die aktuelle Position des Geräts, die benötigt wird, bevor das Bildsteuerelement und das TextBlock-Steuerelement auf der Karte richtig positioniert werden können. In Situationen wie dieser werden alle Steuerelemente hinzugefügt, um die Karte als Kinder über XAML zunächst in der oberen linken Ecke der Karte angezeigt, bis sie auf die Karte positioniert werden können. Dadurch entsteht ein armer UX. Um dies zu korrigieren, einfach alle hinzugefügten Steuerelemente als eingerichtet Collapsed in Ihrem XAML-Code. Die hinzugefügten Steuerelemente können sichtbar gemacht werden wenn die Steuerelement-Standorte berechnet werden und das Objekt, in dem die Steuerelemente gebunden sind, eingerichtet ist. (Siehe Abbildung 1 und die letzten paar Zeilen von Code in Abbildung 3.)

Verwenden Sie die DesiredAccuracyInMeters-Eigenschaft des Objekts Geolocator. Durch Festlegen dieser Eigenschaft auf 100 Meter oder weniger erhalten die genauesten Daten verfügbar. Wenn das Gerät GPS-Fähigkeiten verfügt, wird das GPS dann verwendet werden, um das Gerät aktuelle Position bestimmen. Wenn dieser Wert größer als 100 m ist, wird das Geolocator-Objekt für Leistung optimieren und verwenden nicht-GPS-Daten, wie z. B. Wi-Fi-Signale. Der 100 Meter-Schwellenwert könnte Änderung als Geräte zu entwickeln, so legen Sie diese Eigenschaft basierend auf den Anforderungen der Anwendung und nicht die zugrunde liegende Schwelle, das unterschiedliche Verhalten auslöst. Schließlich überschreibt die DesiredAccuracyInMeters-Eigenschaft, etwas in den Geolocator DesiredAccuracy-Eigenschaft festgelegt.

Überlegen Sie auch, indem Sie die Überladung der GetGeopositionAsync, die einen MaximumAge-Parameter und einen Timeout-Parameter akzeptiert. Der maximale Alter-Parameter ist eine Zeitspanne, die das zulässige Höchstalter zwischengespeicherte Standortdaten gibt. Der Timeout-Parameter ist auch eine TimeSpan und bewirkt, dass die GetGeopositionAsync-Funktion eine Ausnahme ausgelöst, wenn die Bestimmung der aktuellen Position dauert länger als angegeben.

Die vorherigen beiden Tipps sollten die Leistung erheblich verbessern. Jedoch in Gebieten mit schlechter Internetverbindung und auf Geräten mit wenig Speicher und langsamere CPUs, das Map-Steuerelement und die Mapping-Services-APIs kann noch brauchen Zeit, wodurch des Benutzers eine Verzögerung auftritt. In solchen Fällen werden im Karte-Steuerelement eine Karte von der ganzen Welt in der aktuellen Zoomstufe angezeigt, bis ein Urlaubsziel in des Steuerelements anzeigen Center Point-Eigenschaft festgelegt wird. Dies ist auch ein armer UX, weil der Benutzer einige Sichtanzeige einzuräumen, dass Arbeit stattfindet. Im XAML in Abbildung 1, eine Statusanzeige wird als untergeordnetes Element des Steuerelements anzeigen hinzugefügt und sichtbar gemacht. Die Statusanzeige wird als unbestimmte eingerichtet, da der genaue Betrag der Zeitaufwand nicht bekannt ist. Sobald die Center-Eigenschaft der Karte berechnet und in das Map-Steuerelement festgelegt, kann die Statusanzeige reduziert. Best Practices für die Verwendung von unbestimmten Statusanzeigen geben sie immer an der Spitze der Seite platziert werden sollte, und in den meisten Szenarien ich stimme. Jedoch wenn Sie das Karte-Steuerelement verwenden, nehme ich lieber die Statusbalkens quer durch die Mitte der Karte angezeigt. Die Karten-Manager eher des Benutzers Fokus greifen und aus diesem Grund ein Progress Bar an der Spitze der Seite übersehen werden könnte. Auch, sagt ein Fortschrittsbalken angezeigt, über die Karten-Manager dem Benutzer, dass es die Karten-Manager, Arbeit.

Eine Auflistung der Datenbindung

Binden eine Sammlung an das Karte-Steuerelement ähnelt der Bindung einer Sammlung an eine ListBox, ListView, GridView oder jedes andere Steuerelement, das Sammlungen zeigt. Um dies mit dem Map-Steuerelement zu veranschaulichen, betrachten Sie die folgende Klasse:

public class Team
{
  public string TeamName { get; set; }
  public Uri ImageSource { get; set; }
  public string Division { get; set; }
  public string StadiumName { get; set; }
  public Geopoint StadiumLocation { get; set; }
  public Point NAP { get; set; }
}

Eine Instanz dieser Klasse kann verwendet werden, um grundlegende Informationen über eine professionelle Sportmannschaft zu halten. Beachten Sie, dass eine der Eigenschaften ist eine Geopoint-Eigenschaft, die den Speicherort der das Stadion als Heimstadion des Teams enthält.

Das XAML in Abbildung 4 Karten-Manager richtet, so dass eine Auflistung von Objekten Team an sie gebunden werden kann und die Position jedes Team Heimstadion Stadion mit einem kleinen Symbol gekennzeichnet werden wird.

Abbildung 4 Einrichten des Karte-Steuerelements für Collection-Bindung

<Maps:MapControl
  x:Name="myMapControl" Grid.Row="1"
  MapServiceToken="{StaticResource MapServiceTokenString}" >
  <Maps:MapItemsControl x:Name="MapItems" >
    <Maps:MapItemsControl.ItemTemplate>
      <DataTemplate>
        <Image Source="{Binding ImageSource}"
          Maps:MapControl.Location="{Binding StadiumLocation}"
          Maps:MapControl.NormalizedAnchorPoint="{Binding NAP}"
          Height="15" Width="15"
          />
      </DataTemplate>
    </Maps:MapItemsControl.ItemTemplate>
  </Maps:MapItemsControl>
</Maps:MapControl>

Wenn Sie vertraut mit Auflistung Bindung in anderen steuert, nichts in Abbildung 4 sollte nicht vertraut werden. Ein Image-Steuerelement ist in einer DataTemplate enthalten. Des Image-Steuerelements angefügt Location-Eigenschaft der StadiumLocation-Eigenschaft des Objekts Team gebunden ist. Das Image-Steuerelement hat auch eine angefügte Eigenschaft von NormalizedAnchorPoint, die an eine Eigenschaft gebunden ist, die das Bild über die Stadion-Location-Zentren.

Beachten Sie, dass, wenn das Karte-Steuerelement an eine Auflistung binden, die NormalizedAnchorPoint-Eigenschaft nicht hartcodiert. Es muss auf einen Wert des zugrunde liegenden Objekts gebunden werden. Wenn Sie versuchen, diese Eigenschaft wie folgt festgelegt:

Maps:MapControl.NormalizedAnchorPoint="0.5,0.5"

XAML-Editor wird nicht wie diese Syntax und den Wert nie Set erhalten. Microsoft ist sich dieses Problems bewusst.

Abbildung 5 zeigt das Karte-Steuerelement anzeigen die NFL-Stadion-Standorte. (Dieser Screenshot stammt aus dem Codebeispiel, das diesen Artikel begleitet. Das Codebeispiel enthält alle Nebenkosten Code hier kurz, wie die Auflistung instanziieren und richtig Formatieren des Steuerelements schön auf eine Seite passen nicht dargestellt.)

die Stadien der National Football League
Abbildung 5 die Stadien der National Football League

Skalierung von Steuerelementen

Es ist möglich, der Größe von Steuerelementen, damit sie einen bestimmten Abstand darstellen. Beispielsweise sollten Sie eine Skala auf der Karte angezeigt. Eine Skala gibt dem Benutzer einen visuellen Hinweis, so dass sie Entfernungen zwischen Objekten auf der Karte zu erraten. Auch, wenn Sie das Steuerelement anzeigen verwenden eine Geofence darzustellen, ist eine gute Möglichkeit, dies zu tun und eine Ellipse dem Map-Steuerelement hinzufügen, in einen Kreis zu Formen und Größe des Radius des Kreises, so dass der Kreis der Geofence Alarm Entfernung deckt.

Die Größe der Steuerelemente in Windows Phone 8.1 werden durch Angabe von Breite und Höhe in Pixel. Daher umfasst das Skalierung Steuerelemente zur Darstellung einer gewisse Distanz ermitteln, wie viel Distanz durch ein einzelnes Pixel auf der Karte dargestellt wird. Hier ist die Gleichung für die Bestimmung der Entfernung, die durch ein einzelnes Pixel auf der Karte dargestellt:

const double BING_MAP_CONSTANT = 156543.04;
double MetersPerPixel =
  BING_MAP_CONSTANT * Math.Cos(latitude) / Math.Pow(2, zoomLevel);

Das Latitude verwendet sollte aus die Karte-Eigenschaft des Steuerelements Center kommen. Es muss im Bogenmaß, nicht Grad sein. Da Breitengrad in der Regel in Grad angegeben wird, müssen Sie es in Bogenmaß (Radiant) zu konvertieren, den Gradwert von Pi/180 (Math.PI/180) multipliziert. Die Zoom-Stufe stammt aus der Zoom-Stufe des Steuerelements anzeigen und ist ein Wert zwischen 1 und 20. Auf Windows Phone 8.1 äußert sich als Double.

Eine vollständige mathematische Ableitung der Gleichung, die hier dargestellt ist, würde den Rahmen dieses Artikels sprengen; jedoch sind einige Bemerkungen angebracht.

Auf den ersten Blick mag die Gleichung falsch. Warum ist das Latitude wichtig? Sein sollte nicht der Maßstab einer Karte einfach eine Funktion von der Zoomstufe? Die Wahrheit ist, dass die Breite spielt eine Rolle und die Zoom-Stufe allein ausreicht, wenn der Maßstab der Karte zu bestimmen. Bing Maps, die Back-End für das Map-Steuerelement ist, nutzt die Mercator-Projektion. Die Mercator-Projektion ist eine Technik für die Details der Oberfläche einer Kugel (in diesem Fall der Erde) auf einer quadratischen Fläche zu projizieren. Diese Projektion wird Inkonsistenzen in der Skala eingeführt, denn je weiter Sie vom Äquator gehen, die weitere Dehnung gibt es weiterhin ein Quadrat passen. Ein einfaches Experiment helfen Ihnen besser zu verstehen, die Mercator-Projektion. Schälen Sie eine Orange zu, und speichern Sie alle Stücke. Wenn die Orange komplett geschält ist, legen Sie die Teile wieder zusammen auf eine flache Oberfläche und versuchen Sie, ihnen genau passend in eine quadratische Form. Es ist unmöglich. Der einzige Weg, diese Stücke in eine quadratische Form ist die Stücke, die nicht auf dem "Äquator" von Orange zu dehnen. Je näher Sie an die "Polen", desto mehr dehnen Sie tun müssen, um eine quadratische Passform zu erhalten. Diese Streckung erstellt einen Unterschied in der Skala im Vergleich zu Orten in der Nähe des Äquators. Die Höhe der Dehnung erforderlich ist eine Funktion der Entfernung vom Äquator. Daher die Abhängigkeit von Breitengrad. Betrachten Sie als ein Beispiel für diese Streckung in Aktion auf einer Mercator-Projektion der Erde die zwei Städte Québec und Key West, Florida Eine komplett vergrößert-Ansicht (Zoom-Stufe 20) von Quebec mit dem Map-Steuerelement führt 100 Pixel, 33,5 Fuß darstellt. Die gleiche Zoomstufe von Key West führt 100 Pixel, 44,5 Füße darstellt. Die Bewohner von Quebec genießen eine Tonleiter, die 11-Fuß besser als die Bewohner von Key West ist — ein kleiner Trost für die kälteren Klima. Für weitere Informationen über die Mercator-Projektion, checkt die MSDN Library-Artikel "Understanding Scale and Resolution," unter bit.ly/1xIqEwC.

Die letzte Tatsache zu notieren auf der Gleichung ist die Bing-Karte-Konstante. Die Bing-Karte-Konstante basiert auf den Erdradius und die Gleichungen, die Microsoft verwendet, um die Kartenansicht einen angegebenen Zoomstufe zu bestimmen. Ihre Einheiten sind Meter pro Pixel.

Abbildung 6 zeigt einen TextBlock und ein Rechteck, ein Karte-Steuerelement hinzugefügt, als eine Entfernungsskala verwendet werden. Abbildung 7 zeigt das ZoomLevelChanged-Ereignis und die Logik, um eine Entfernungsskala zu erstellen. (Das Codebeispiel überprüft die RegionInfo.CurrentRegion.IsMetric-Eigenschaft und zeigt metrische Werte für Benutzer, die mit dem metrischen System vertrauter sind.) Schließlich Abbildung 8 zeigen einen Screenshot aus dem Codebeispiel — eine Entfernungsskala, die einem anzeigen-Steuerelement hinzugefügt.

Abbildung 6 Xaml TextBlock und Rechteck als eine Entfernungsskala

<Maps:MapControl
  x:Name="myMapControl" Grid.Row="1"
  MapServiceToken="{StaticResource MapServiceTokenString}"
  ZoomLevelChanged="myMapControl_ZoomLevelChanged">
  <!-- Distance scale, which is located at the lower left of the Map control. -->
  <TextBlock Name="tbScale" Text="Scale Text" FontSize="15" Foreground="Black"
    Margin="24,530,24,6" Opacity="0.6" />
  <Rectangle Name="recScale" Fill="Purple" Width="100" Height="6"
    Margin="24,548,24,24" Opacity="0.6" />
</Maps:MapControl>

Abbildung 7 ZoomLevelChanged Ereignis

private void myMapControl_ZoomLevelChanged(MapControl sender, object args)
{
  // Get the Map control's current zoom level.
  double zoomLevel = sender.ZoomLevel;
  // Use the latitude from the center point of the Map control.
  double latitude = sender.Center.Position.Latitude;
  // The following formula for map resolution needs latitude in radians.
  latitude = latitude * (Math.PI / 180);
  // This constant is based on the diameter of the Earth and the
  // equations Microsoft uses to determine the map shown for the
  // Map control's zoom level.
  const double BING_MAP_CONSTANT = 156543.04;
  // Calculate the number of meters represented by a single pixel.
  double MetersPerPixel =
    BING_MAP_CONSTANT * Math.Cos(latitude) / Math.Pow(2, zoomLevel);
  // Aditional units.
  double KilometersPerPixel = MetersPerPixel / 1000;
  double FeetPerPixel = MetersPerPixel * 3.28;
  double MilesPerPixel = FeetPerPixel / 5280;
  // Determine the distance represented by the rectangle control.
  double scaleDistance = recScale.Width * MilesPerPixel;
  tbScale.Text = scaleDistance.ToString() + " miles";
}

Entfernungsskala anzeigen Sunset Pier in Key West, Florida Karte-Steuerelement hinzugefügt
Abbildung 8-Entfernungsskala anzeigen Sunset Pier in Key West, Florida Karte-Steuerelement hinzugefügt

Karten für die Offlineverwendung herunterladen

Karten können zur offline-Nutzung heruntergeladen werden. Dies ist nützlich für Anwendungen, die Zuordnung Funktionalität bereitzustellen, wenn das Gerät ohne jegliche Internetverbindung, wie z. B. einen Benutzer zwar fährt auf einer langen Autobahn zwischen städtischen Gebieten oder tief im Wald wandern.

Karten können nicht programmgesteuert ohne Zustimmung des Benutzers heruntergeladen werden, da sie eine erhebliche Menge an Speicher aufnehmen. Der Benutzer muss opt-in zu jedem Download mithilfe einer System -­sofern UX, das ermöglicht benötigten Karten ausgewählt und heruntergeladen werden. Dies geschieht mithilfe der statischen Klasse MapManager, die auf den Windows.Services.Maps-Namespace gehört. Diese Klasse stellt Funktionen für Karten herunterladen und Aktualisieren von Karten. Die hier gezeigte ShowDownloadedMapsUI-Funktion startet die integrierte Karten-Anwendung und zeigen Sie die Seite angezeigt, die Abbildung 9:

MapManager.ShowDownloadedMapsUI();

die Benutzeroberfläche für das Herunterladen von Karten
Abbildung 9 die Benutzeroberfläche für das Herunterladen von Karten

Die integrierte Karten-Anwendung heißt Maps und der Seite dargestellt in Abbildung 9 kann auch durch Tippen auf die Schaltfläche Download Karten über die Menüoption Einstellungen zugegriffen werden. Da diese Funktion den Benutzer zu einer anderen Anwendung (die integrierte Karten-Anwendung) nimmt, muss er manuell die Rückkehr zu der ursprünglichen Anwendung.

Der Seite dargestellt in Abbildung 9 zeigt alle Karten, die zuvor heruntergeladen wurden. Es enthält auch eine Menüoption, mit dem Sie die zuvor heruntergeladene Karten löschen für den Fall, dass die Karte wird nicht mehr benötigt oder Speicher auf dem Gerät muss freigegeben werden.

Tippen auf die Schaltfläche hinzufügen (+), beginnt der Karten-Auswahl-Assistent, Anzeigen einer Seite, die ermöglicht die Angabe den Kontinent mit der Karte, die Sie herunterladen möchten. Sobald ein Kontinent ausgewählt ist, wird die Seite mit allen Ländern innerhalb des ausgewählten Kontinents angezeigt. Sie können alle Länder innerhalb eines Kontinents auswählen und Herunterladen von Karten für den gesamten Kontinent, aber dies würde voraussetzen, dass eine große Menge an Speicher. Alle Karten für die Vereinigten Staaten erfordern beispielsweise 3,4 GB Speicherplatz. Der gesamte Kontinent von Nord- und Mittelamerika, wäre viel mehr nötig.

Wählt man ein großes Land, das mehrere Regionen oder Staaten enthält, sehen Sie eine Seite, die Sie in bestimmten Regionen oder Staaten auswählen können. Sie können mehr als eine Region auswählen, mithilfe der Select-Taste. Wenn eine Region angegeben ist, Sie gelangen zu der Download-Seite dargestellt in Abbildung 10. Dieser Seite wird auch angezeigt, wenn Sie ein kleines Land ohne Regionen oder Staaten auswählen.

eine Karte herunterladen
Abbildung 10 eine Karte herunterladen

Vor dem Download alle Karten, ist es eine gute Idee, Anwender den verfügbaren Speicherplatz auf dem Gerät zu überprüfen, indem die Anwendung Einstellungen gehen und auswählen Speicher Sinn zu fördern. Dies zeigt den verfügbaren Speicherplatz auf dem Gerät, als auch die Speicherung von jeder Anwendung auf dem Gerät verwendet werden, für den Fall, dass Speicherplatz freigegeben werden muss. Zum Zeitpunkt des Schreibens dieses Artikels gibt es keine WinRT-APIs, mit denen Sie programmgesteuert zu bestimmen, die den Speicherplatz auf einem Gerät verwendet oder die Menge des verfügbaren Speicherplatzes.

Es ist auch eine gute Idee, die Karten während einer uneingeschränkten Netzwerkzugriff, wie Wi-Fi Verbindung downloaden. Das Codebeispiel in diesem Artikel veranschaulicht die aktuelle Netzwerkverbindung zu überprüfen und warnt den Benutzer, wenn sie auf einem Taxameter Anschluss sind.

Aktualisieren von heruntergeladenen Karten

Karten werden gelegentlich geändert oder geändert. Neue Straßen zugesetzt werden, um eine Stadt, Straßennamen können sich ändern und regionale Grenzen werden manchmal verändert. Heruntergeladene Karten sollten daher in regelmäßigen Abständen aktualisiert werden. Die statische MapManager-Klasse enthält eine Funktion namens ShowMapsUpdateUI für die Aktualisierung von heruntergeladener Karten:

MapManager.ShowMapsUpdateUI();

Die ShowMapsUpdateUI-Funktion ist vergleichbar mit der ShowDownloadedMapsUI-Funktion, insofern es den Benutzer, die integrierte Karten-Anwendung dauert. Wenn diese Funktion aufgerufen wird, werden alle heruntergeladene Karten überprüft, um festzustellen, ob sie aktualisiert werden müssen. Wenn alle zuvor heruntergeladenen Karten aktualisiert werden müssen, wird der Benutzer sagte die Größe des Updates und die Möglichkeit, entweder abbrechen oder fahren mit dem Download. Diese Funktionalität steht auch über die Menüoption Einstellungen der Maps-Anwendung.

Wenn Ihre Anwendung das Herunterladen von Karten fördert durch die Verwendung von ShowDownloadedMapsUI, ist es eine bewährte Methode, die auch ShowMapsUpdateUI verwenden, so dass heruntergeladene Karten laufenden zu bleiben.

Zusammenfassung

In diesem Artikel habe ich Ihnen gezeigt, wie die Karten-Manager für Windows Phone 8.1 Anwendungsdaten hinzugefügt. Dazu gehörte auch der Karte XAML-Steuerelemente hinzufügen, Bindung und Zeichnung Datensteuerelemente maßstabsgetreu. Ich zeigte auch wie das Karte-Steuerelement zugrunde liegenden Daten offline zu schalten, so dass die Karten-Manager problemlos zusammenarbeiten, in Anwendungen, die für die Offlineverwendung eingerichtet werden kann.


Keith Pijanowski ist ein Ingenieur, Unternehmer und Unternehmen Kerl Er hat mehr als 20 Jahre Erfahrung in der Software-Industrie arbeiten für Start-ups und Großunternehmen in Rollen, die sich vom Schreiben von Code für die Entwicklung beliefen. Sie erreichen ihn am keithpij@msn.com oder twitter.com/keithpij.

Unser Dank gilt dem folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Mike O' Malley
Mike O'Malley ist leitender Programmmanager, Betriebssysteme von Microsoft. Er arbeitet auf Mmap-Verwandte Entwickler für Microsoft-Erlebnisse für drei Jahre und hat über Lage - unterstützende Anwendungsentwicklung bauen jedes Jahr vorgelegt.