Zobrazení map na webových stránkách je dnes tak běžné, že nad jejich existencí vůbec neuvažujeme. Ne vždy však vidíme něco více, než samotné mapy s vyznačenými body zájmu. Pravděpodobně to bude tím, že vytvořit sofistikovanou logiku s dodatečnými vrstvami zobrazujícími specifické informace a ovládací prvky není vždy zcela jednoduché. Nezávisle na poskytovateli map (Microsoft, Google, Yahoo), všechny firmy standardně nabízí mapové API v JavaScriptu, často i s podporou AJAXu. Úvodní informace a příklady lze vidět např. zde: Microsoft, Google a Yahoo. Pokud zůstaneme u Microsoft Virtual Earth, nejjednodušší způsob jak začít s využíváním mapového softwaru je interaktivní generátor zdrojového kódu - Bing Maps Interactive SDK. Zde lze velice jednoduše nasimulovat ovládání mapy, vkládání a zobrazování různých tvarů, vkládání dat do vrstev atd. Pokud bychom např. potřebovali zobrazit mapu ve 2D pohledu s označeným místem pushpinem a orámovanou oblastí, leze si tento scénář na interaktivní mapě naklikat (Custom shapes -> Add custom shapes, v dialogu vybrat Add Polygon).
Po přepnutí do záložky Source Code získáme plný zdrojový kód pro vložení do web stránky, případně na další záložce Reference od dokumentaci k použité funkci AddShape().
Osobně se zřídka spokojím s tím, že mé aplikace dělají "jen to co jiné". A tak hledám jak je udělat jiné a lepší. Při programování s mapami se tedy jasně nabízí Virtual Earth Silverlight Map Control. Vedle všech možností ovládání jako máme u standardního mapového API můžeme využít veškerou funkcionalitu a možnosti, které nám dává Silverlight. V první řadě, z pohledu programátora, je to tvorba aplikační logiky v .NET jazycích. Není to boží se vyhnout JavaScriptu? J Druhou, neméně zajímavou je pak schopnost vložit do vrstev mapy libovolnou grafiku nebo ovládací prvky, které známe zběžných Silverlight aplikací.
I samotný Silverlight Map prvek přináší celou řadu vylepšení. Mezi ty nevýznamnější patří:
Abychom opět ulehčili a zrychlili vývojářům práci, vedle běžného SDK je k dispozici i Microsoft Virtual Earth Silverlight Map Control Interactive SDK (to fakt není krátký název aplikace). V online aplikaci si lze opět nasimulovat jednoduché situace, např. zobrazení souřadnic centra mapy a jednotlivých jejích okrajů.
V záložce Source Code pak vidíme zdrojový kód. Ten si dovolím také vypsat, protože jeho jednoduchost a čitelnost je opravdu luxusní. Nejdříve XAML kód aplikace:
<UserControl x:Class="MapControlInteractiveSdk.Tutorials.Tutorial4" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:m="clr-namespace:Microsoft.VirtualEarth.MapControl; assembly=Microsoft.VirtualEarth.MapControl"> <Grid x:Name="LayoutRoot" Background="White"> <m:Map Center="47.640,-122.125" ZoomLevel="11" x:Name="MyMap" /> <Border Background="Black" VerticalAlignment="Top" HorizontalAlignment="Right" Opacity="0.8" BorderBrush="White" BorderThickness="2" CornerRadius="5"> <TextBlock x:Name="MapInfo" Foreground="#008800" FontSize="12" Padding="5" /> </Border> </Grid> </UserControl>
A ještě kód v pozadí, který reaguje na pannování a zoom v okně mapy a překresluje informaci a aktuálním pohledu:
using System; using System.Windows; using System.Windows.Controls; using Microsoft.VirtualEarth.MapControl; namespace MapControlInteractiveSdk.Tutorials { public partial class Tutorial4 : UserControl { public Tutorial4() { InitializeComponent(); MyMap.ViewChangeOnFrame += new EventHandler<MapEventArgs>(MyMap_ViewChangeOnFrame); } void MyMap_ViewChangeOnFrame(object sender, MapEventArgs e) { Map map = (Map) sender; MapInfo.Text = string.Format("Center: {0:F5} ZoomLevel: {1:F5} \r\n", map.View.Center, map.View.ZoomLevel); LocationRect bounds = map.GetBoundingRectangle(); MapInfo.Text += string.Format("Northwest: {0:F5}, Southeast: {1:F5} (Current)\r\n", bounds.Northwest, bounds.Southeast); LocationRect targetBounds = map.GetBoundingRectangle(map.TargetView); MapInfo.Text += string.Format("Northwest: {0:F5}, Southeast: {1:F5} (Animating to)",targetBounds.Northwest, targetBounds.Southeast); } } }
Předvedená komponenta v době psaní článku je v CTP (Community Technology Preview) verzi. Pro přístup ke všem SDK, příkladům a dokumentaci se musíte bezplatně registrovat v programu Connect. Je to velice jednouchý postup: