﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Virtual Earth</title>
    <description>Virtual Earth news, projects, samples and tips</description>
    <link>http://www.soulsolutions.com.au/Blog/tabid/73/BlogId/8/Default.aspx</link>
    <language>en-AU</language>
    <managingEditor>veblog@soulsolutions.com.au</managingEditor>
    <webMaster>John@soulsolutions.com.au</webMaster>
    <pubDate>Sat, 04 Feb 2012 22:14:38 GMT</pubDate>
    <lastBuildDate>Sat, 04 Feb 2012 22:14:38 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.5.0.35082</generator>
    <item>
      <title>Free: MSDN Ultimate – Who is worthy?</title>
      <description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_2766" border="0" alt="IMG_2766" align="left" src="/Portals/0/Blog/Files/8/661/WLW-FreeMSDNUltimateWhoisworthy_A744-IMG_2766_1.jpg" width="164" height="244" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" width="30" height="40" /&gt;As part of the launch of Visual Studio 2010, Microsoft has provided a number of seeding cards to selected MVPs around the world to drive the adoption of the tools and platform. We were lucky enough to receive 3 Visual Studio 2010 Ultimate with MSDN subscription cards to distribute to the community.&lt;/p&gt;  &lt;p&gt;For his effort on the &lt;a title="Deep Earth" href="http://deepearth.codeplex.com/" target="_blank"&gt;Deep Earth&lt;/a&gt; open source community project, we have given David Theissen (aka DotNetNoobie) one of the subscriptions.&lt;/p&gt;  &lt;p&gt;So we’re on the lookout for any Aussie developers out there who you think deserve the other two.  Leave your comments or email us your suggestions for someone you think is worthy and why.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2c217ca1-530e-4950-9160-f0af4a40a083" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DeepEarth" rel="tag"&gt;DeepEarth&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MSDN" rel="tag"&gt;MSDN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVP" rel="tag"&gt;MVP&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/661/Free-MSDN-Ultimate-ndash-Who-is-worthy.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/661/Free-MSDN-Ultimate-ndash-Who-is-worthy.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/661/Free-MSDN-Ultimate-ndash-Who-is-worthy.aspx</guid>
      <pubDate>Wed, 18 Aug 2010 01:54:17 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=661</trackback:ping>
    </item>
    <item>
      <title>We’re presenting at Tech Ed Australia 2010</title>
      <description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Teched_BB_100_hearMe" border="0" alt="Teched_BB_100_hearMe" align="left" src="/Portals/0/Blog/Files/8/660/WLW-WerepresentingatTechEdAustralia2010_CDBF-Teched_BB_100_hearMe_3.jpg" width="104" height="104" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" width="30" height="40" /&gt;&lt;img src="/Portals/0/johnWeeGo.jpg" width="30" height="44" /&gt; This year we’re back presenting at Tech Ed Australia on the Gold Coast. It should be massive this year as the event is already sold out!&lt;/p&gt;  &lt;p&gt;If you want to see our session our abstract is below. If you want to catch up and say hi drop us a line or find us on your favourite social media platform.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WEB303 – Showcase your ideas on Bing Maps&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Wednesday 25 August 15:30 – 16:45&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The exciting addition to Bing.com is the new Bing Map Apps. Showcase your ideas and reach even more people by developing a dynamic solution to be featured on the Bing Maps site. Come join John and Bronwen to learn how to develop your application for this new SDK and start building yours today.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:457c2f04-ac68-4c4b-9b49-d28c15624465" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/TechEd+Australia" rel="tag"&gt;TechEd Australia&lt;/a&gt;,&lt;a href="http://technorati.com/tags/%23auteched" rel="tag"&gt;#auteched&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/660/We-rsquo-re-presenting-at-Tech-Ed-Australia-2010.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/660/We-rsquo-re-presenting-at-Tech-Ed-Australia-2010.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/660/We-rsquo-re-presenting-at-Tech-Ed-Australia-2010.aspx</guid>
      <pubDate>Mon, 16 Aug 2010 04:37:57 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=660</trackback:ping>
    </item>
    <item>
      <title>New Symbology for Bing Maps Road Style</title>
      <description>&lt;p&gt;&lt;img src="http://soulsolutions.com.au/Portals/0/johnWeeGo.jpg" /&gt;Today Bing Maps updated their base Road style tiles, the results are amazing.&lt;/p&gt;  &lt;p&gt;New:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="brisbaneafter" border="0" alt="brisbaneafter" src="/Portals/0/Blog/Files/8/658/WLW-NewSymbologyforBingMapsRoadStyle_CE7B-brisbaneafter_3.png" width="604" height="404" /&gt;&lt;/p&gt;  &lt;p&gt;Old:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="brisbanebefore" border="0" alt="brisbanebefore" src="/Portals/0/Blog/Files/8/658/WLW-NewSymbologyforBingMapsRoadStyle_CE7B-brisbanebefore_3.png" width="604" height="404" /&gt;&lt;/p&gt;  &lt;p&gt;The new map symbology is significantly cleaner, easier to read and more appropriate for us to rendering data over the top.&lt;/p&gt;  &lt;p&gt;We often ran into issues where the vibrate orange roads were to dominant and if, for example, we wanted to draw the user’s attention to the route of a vehicle we had to make they visualisation louder. With the new style we can be more subtle, we can use colours that compliment the users site.&lt;/p&gt;  &lt;p&gt;Overall Bing has made a significant investment in adding some high quality to design to all of its assets. I’m very proud that the Bing Maps team have been able to take on a significant challenge like this and deliver.&lt;/p&gt;  &lt;p&gt;View the new style yourself and see if your location is easier to find, clearer and works better for your application:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.bing.com/maps/explore/" href="http://www.bing.com/maps/explore/" target="_blank"&gt;http://www.bing.com/maps/explore/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;What do you think of the new style? You can reach me on &lt;a href="http://twitter.com/soulsolutions" target="_blank"&gt;http://twitter.com/soulsolutions&lt;/a&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bd21eee4-4bf8-41c3-8cd1-3d4da98508a9" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Symbology" rel="tag"&gt;Symbology&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/658/New-Symbology-for-Bing-Maps-Road-Style.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/658/New-Symbology-for-Bing-Maps-Road-Style.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/658/New-Symbology-for-Bing-Maps-Road-Style.aspx</guid>
      <pubDate>Tue, 03 Aug 2010 05:09:26 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=658</trackback:ping>
    </item>
    <item>
      <title>Building the Bing Maps Surface Location Game</title>
      <description>&lt;p&gt;&lt;img src="/Portals/0/johnWeeGo.jpg" /&gt;Yesterday Bronwen and I introduced 500 Brisbane schoolgirls to the Microsoft Surface and taught them some geography via a simple game using Bing Maps, &lt;a href="http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/655/500-school-girls-learn-geography-with-Surface-at-TTYA.aspx" target="_blank"&gt;you can read about the event and their reactions here&lt;/a&gt;. In this post I’d like to share some more technical information about the application itself.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="4" border="0" alt="4" src="/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-4_3.jpg" width="604" height="404" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-1_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="1" border="0" alt="1" align="right" src="/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-1_thumb.jpg" width="164" height="244" /&gt;&lt;/a&gt;The game is a simple find the location as a fast as you can geography challenge. It is effective with a large group as the they can combine their knowledge and help each other to find the location. The locations themselves are famous landmarks represented by real life replica pencil sharpeners, we have stuck a Surface tag on the underneath of each so the table can see them. To win the game you zoom into the location as close as you can, around the physical object a circle appears with your time and indicates red if your not even in view or green when it is. When you when the Circle is yellow and the time stops. I think we need to launch some serious fireworks and add some sound in the next version.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="3" border="0" alt="3" align="left" src="/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-3_3.jpg" width="164" height="244" /&gt;&lt;/p&gt;  &lt;p&gt;Having been away in Poland for the Imagine Cup we built the application in only a few evenings this week, it really is simple as we leveraged our WPF skills, the Bing Maps control and an awesome Codeplex project called &lt;a href="http://bingmapswpf.codeplex.com/" target="_blank"&gt;Infostrat.VE&lt;/a&gt; that provides a ready to use Surface control for Bing Maps.&lt;/p&gt;  &lt;p&gt;Setting up your development environment is easy once you know how, a bit like the light bulb however it took me a number of failures. Firstly I had the VHD with all the Surface development tools ready to go, this is the really easy way to get started with Surface as you boot it up, get a registration key for Visual Studio 2008 express, and go. But you don’t get 3D support inside the virtual machine, and this means the Bing Maps 3D control is not going to work.&lt;/p&gt;  &lt;p&gt;Now like you your probably running Windows7 and Visual Studio 2010, in my case I used my second machine with these under 32bit, sounds like 64bit users may face additional issues. The Surface SDK is designed for Windows Vista and Visual Studio 2008 express, I found that installing VS2008 c# express on 32bit Windows7 and then the Surface SDK worked fine. Unfortunately my second machine, a DELL XPS1330, is only 1280x800, not high enough to run the Surface simulator, solved by plugging into my DELL 24”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/surface/en/us/Pages/Technical/Learn.aspx" target="_blank"&gt;Get all the Surface bits here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="5" border="0" alt="5" align="right" src="/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-5_3.jpg" width="164" height="244" /&gt;Once up and running the SDK is pretty powerful for developing without an actual Surface. The simulator supports multiple mice (my trackpad and external mice counted as two) to simulate two points, left click and the right click to drop a point on the screen and even test the tags. Their were a couple of things we had to fix up once we got a real Surface that I’ll cover later but I was very impressed by the tools and could really see developers getting 90-95% there with the application without an actual device.&lt;/p&gt;  &lt;p&gt;The main control we used is the &lt;a href="http://bingmapswpf.codeplex.com/" target="_blank"&gt;Infostrat.VE&lt;/a&gt; NUI control from codeplex, I downloaded the latest source and rebuilt without issue. The project is well supported with lots of recent questions in the forum and good answers from the owner. The control wraps the Bing Maps 3D control from Microsoft, this control is now very stable and well documented, however at this time there is no future work planned for the control, what you see is what you get.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Gotcha #1, use the SurfaceVEMap control from the InfoStrat.VE.NUI.dll. I initially used the VEMap control from the InfoStrat.VE dll which worked fine as a WPF application but had no interactivity in the simulator or on the Surface, simple to swap around.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The main interface for the application is the Map control, pretty simple really. We wrapped this control in a TagVisualizer in order to detect our landmarks placed on the map:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;s&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SurfaceWindow &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;="SoulSolutions.LocationGame.MainSurfaceWindow"
    &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"
    &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;s&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/surface/2008"
    &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:InfoStrat.VE.NUI;assembly=InfoStrat.VE.NUI"                 
    &lt;/span&gt;&lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;="SoulSolutions Location Game"
    &gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;s&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TagVisualizer &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="Visualizer" &lt;/span&gt;&lt;span style="color: red"&gt;VisualizationAdded&lt;/span&gt;&lt;span style="color: blue"&gt;="Visualizer_VisualizationAdded" &gt;
        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
            &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SurfaceVEMap &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="map" &lt;/span&gt;&lt;span style="color: red"&gt;MapStyle&lt;/span&gt;&lt;span style="color: blue"&gt;="Hybrid" /&gt;
        &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;s&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TagVisualizer&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;s&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SurfaceWindow&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;We used ByteTags for our landmarks, these are really small and come supplied with the Surface or you can download from the Surface site and print.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Gotcha #2, The tags supplied with the surface are numbered 1-256, the tags when used in code are written in Hex. The numbers on the tags supplied are already in Hex, they seem to have just skipped the A-F (or mine were missing) so you don’t need to convert, eg tag 65 is 0x65. This is was something I didn’t discover until I was actually on the real Surface as the Simulator you type in the code again in hex so was happily using 0x41 for 65.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I simply hardcoded the values of the tags and their corresponding Latitudes and Longitudes for this first version, we’ve had a request to make it an XML file for easy maintenance and additions. &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;InitializeDefinitions()
{
    locations = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;&lt;span style="color: blue"&gt;byte&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;&gt;();
    locations.Add(0x60, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(0, 0));
    locations.Add(0x69, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(48.85827,2.29438));
    locations.Add(0x64, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(37.81907,-122.4786));
    locations.Add(0x52, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(29.97694,31.12963));
    locations.Add(0x53, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(43.72303, 10.39658));
    locations.Add(0x61, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(51.50056,-0.12523));
    locations.Add(0x62, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(47.62052,-122.34938));
    locations.Add(0x51, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(40.68939,-74.04477));
    locations.Add(0x65, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(38.89767,-77.03682));
    locations.Add(0x56, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(-33.85661,151.21515));
    locations.Add(0x55, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(41.89021,12.49231));
    locations.Add(0x59, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(-22.95121,-43.21318));
    locations.Add(0x50, &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong&lt;/span&gt;(50.08643,14.41095));

    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;location &lt;span style="color: blue"&gt;in &lt;/span&gt;locations)
    {               
        &lt;span style="color: #2b91af"&gt;ByteTagVisualizationDefinition &lt;/span&gt;tagDef = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ByteTagVisualizationDefinition&lt;/span&gt;();
        tagDef.Value = location.Key;
        tagDef.Source = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"LocationTagVisualization.xaml"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;.Relative);
        tagDef.MaxCount = 1;
        tagDef.LostTagTimeout = 2000.0;
        tagDef.TagRemovedBehavior = &lt;span style="color: #2b91af"&gt;TagRemovedBehavior&lt;/span&gt;.Fade;
        Visualizer.Definitions.Add(tagDef);
    }
}&lt;/pre&gt;

&lt;p&gt;Really the logic is very simple, the LocationTagVisulization control does all the work. When the tag is placed on the table the Visualizer_VisualizationAdded event is fired, we set the location and pass a reference to map control and let that control manage itself. The benefit of this approach is that multiple Tags can be placed on the map surface at once, each operating independently and creating a more advanced challenge for users.&lt;/p&gt;

&lt;p&gt;We will post the full code once we have made a few changes based on feedback but for those super keen I’ll post the full LocationTagVisualization source as is at the end of the post.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="2" border="0" alt="2" src="/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-2_3.jpg" width="604" height="404" /&gt;&lt;/p&gt;

&lt;p&gt;When deploying the application you need to complete the XML file with your application name, the path you have copied it to on the Surface computer itself and the set of tags. You should also make an icon and image for the menu system. This XML file is deployed to the &lt;strong&gt;%PROGRAMDATA%\Microsoft\Surface\Programs&lt;/strong&gt; folder on the Surface computer.&lt;/p&gt;

&lt;p&gt;We had install the latest Bing Maps 3D control on both our develop machine (I had it already) as well as on the Surface, if it has an old Virtual Earth 3D control the uninstall it and install the latest from &lt;a href="http://www.microsoft.com/Downloads/details.aspx?FamilyID=e9298080-50c4-4f2e-9fc4-4009074996ba&amp;displaylang=en" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The two programming errors we didn’t discover until we actual got on the Surface unit are the two gotchas above, we used the wrong infostrat control, just thought the Simulator wasn’t working, and had converted to Hex on the tags by mistake. Plan to spend at least a good afternoon with a real unit before showing anyone &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="/Portals/0/Blog/Files/8/656/WLW-e28a650a7cce_F4F6-wlEmoticon-winkingsmile_2.png" /&gt;&lt;/p&gt;

&lt;p&gt;I hope you found this post useful and we will post the full source once we make a few minor tweaks based on feedback if you’re interested. You can reach me at &lt;a href="http://twitter.com/soulsolutions"&gt;http://twitter.com/soulsolutions&lt;/a&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:749826a0-e6b0-4e8e-acc2-675fe5400335" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Surface" rel="tag"&gt;Surface&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;All the game logic sits in the LocationTagVisualization class, the object that is added to the Surface when the Tag is placed on the surface:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LocationTagVisualization &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;TagVisualization
&lt;/span&gt;{

    &lt;span style="color: #2b91af"&gt;DispatcherTimer &lt;/span&gt;timer;

    &lt;span style="color: blue"&gt;public enum &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType 
    &lt;/span&gt;{
        Normal,
        OutOfView,
        InView,
        Found,
        Admin
    }

    &lt;span style="color: blue"&gt;public &lt;/span&gt;LocationTagVisualization()
    {
        InitializeComponent();
    }

    &lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VEMap &lt;/span&gt;map;
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VEMap &lt;/span&gt;Map {
        &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;map; }
        &lt;span style="color: blue"&gt;set 
        &lt;/span&gt;{
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(map != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
            {
                &lt;span style="color: green"&gt;//detach events
                &lt;/span&gt;map.CameraChanged -= map_CameraChanged;
            }
            map = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(map != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
            {
                &lt;span style="color: green"&gt;//attach events
                &lt;/span&gt;map.CameraChanged += map_CameraChanged;
                checkLocation();
            }
        }
    }

    &lt;span style="color: blue"&gt;void &lt;/span&gt;map_CameraChanged(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;VECameraChangedEventArgs &lt;/span&gt;e)
    {
        checkLocation();
    }

    &lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong &lt;/span&gt;location;
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VELatLong &lt;/span&gt;Location
    {   
        &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;location; }
        &lt;span style="color: blue"&gt;set &lt;/span&gt;{ 
                location = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
                checkLocation();
            }
    }
    &lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType &lt;/span&gt;status;
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType &lt;/span&gt;Status 
    {
        &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;status; }
        &lt;span style="color: blue"&gt;set
        &lt;/span&gt;{
            status = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
            gotoState(&lt;span style="color: blue"&gt;true&lt;/span&gt;);
        }
    }

    &lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;start;

    &lt;span style="color: blue"&gt;private void &lt;/span&gt;LocationTagVisualization_Loaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
    {
        start = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now;
        &lt;span style="color: green"&gt;//start timer here
        &lt;/span&gt;timer = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DispatcherTimer&lt;/span&gt;();
        timer.Interval = &lt;span style="color: #2b91af"&gt;TimeSpan&lt;/span&gt;.FromMilliseconds(50);
        timer.Tick += timer_Tick;
        timer.Start();
    }

    &lt;span style="color: blue"&gt;void &lt;/span&gt;timer_Tick(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)
    {
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(start != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
        {
            TimerDisplay.Text = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now.Subtract(start).TotalSeconds.ToString(&lt;span style="color: #a31515"&gt;"0.0"&lt;/span&gt;);
        }
    }
    
    &lt;span style="color: blue"&gt;private void &lt;/span&gt;LocationTagVisualization_Unloaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
    {
        Map = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(timer != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
        {
            timer.Stop();
            timer = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
        }
    }

    &lt;span style="color: blue"&gt;private void &lt;/span&gt;checkLocation()
    {
        &lt;span style="color: green"&gt;//if you have won then we ignore this.
        &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(Status != &lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.Found &amp;&amp; Location != &lt;span style="color: blue"&gt;null &lt;/span&gt;&amp;&amp; Map != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color: green"&gt;//detemine status based on bounds of the map and the zoomlevel, set state.
            &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;topRight = Map.PointToLatLong(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(0, 0));
            &lt;span style="color: blue"&gt;var &lt;/span&gt;bottomLeft = Map.PointToLatLong(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(Map.GlobeWidth, Map.GlobeHeight));

            &lt;span style="color: green"&gt;//if either edge is null it is in space or tilted beyond what we can handle
            &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(topRight == &lt;span style="color: blue"&gt;null &lt;/span&gt;|| bottomLeft == &lt;span style="color: blue"&gt;null&lt;/span&gt;)
            {
                Status = &lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.Normal;
                &lt;span style="color: blue"&gt;return&lt;/span&gt;;
            }

            &lt;span style="color: green"&gt;//is the location inside the bounds?
            &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(
                ((Location.Latitude &gt;= topRight.Latitude &amp;&amp; Location.Latitude &lt;= bottomLeft.Latitude) || (Location.Latitude &lt;= topRight.Latitude &amp;&amp; Location.Latitude &gt;= bottomLeft.Latitude)) &amp;&amp;
                ((Location.Longitude &gt;= topRight.Longitude &amp;&amp; Location.Longitude &lt;= bottomLeft.Longitude) || (Location.Longitude &lt;= topRight.Longitude &amp;&amp; Location.Longitude &gt;= bottomLeft.Longitude))
                )
            {
                &lt;span style="color: green"&gt;//is the zoomlevel close enough for win?
                &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(map.Altitude &lt; 1000d)
                {
                    Status = &lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.Found;
                    &lt;span style="color: blue"&gt;return&lt;/span&gt;;
                }

                Status = &lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.InView;
                &lt;span style="color: blue"&gt;return&lt;/span&gt;;
            }

            Status = &lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.OutOfView;
        }
    }

    &lt;span style="color: blue"&gt;private void &lt;/span&gt;gotoState(&lt;span style="color: blue"&gt;bool &lt;/span&gt;useTransitions) 
    {
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(Face != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color: blue"&gt;switch &lt;/span&gt;(Status)
            {
                &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.Normal:
                    Face.Fill = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Colors&lt;/span&gt;.Black);
                    &lt;span style="color: blue"&gt;break&lt;/span&gt;;
                &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.InView:
                    Face.Fill = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(ColorFromHexString(&lt;span style="color: #a31515"&gt;"FF22760C"&lt;/span&gt;));
                    &lt;span style="color: blue"&gt;break&lt;/span&gt;;
                &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.OutOfView:
                    Face.Fill = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(ColorFromHexString(&lt;span style="color: #a31515"&gt;"FF76150C"&lt;/span&gt;));
                    &lt;span style="color: blue"&gt;break&lt;/span&gt;;
                &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.Found:
                    &lt;span style="color: blue"&gt;if &lt;/span&gt;(timer != &lt;span style="color: blue"&gt;null&lt;/span&gt;) timer.Stop();
                    Face.Fill = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(ColorFromHexString(&lt;span style="color: #a31515"&gt;"FFE2ED20"&lt;/span&gt;));
                    &lt;span style="color: blue"&gt;break&lt;/span&gt;;
                &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StatusType&lt;/span&gt;.Admin:
                    &lt;span style="color: blue"&gt;if &lt;/span&gt;(timer != &lt;span style="color: blue"&gt;null&lt;/span&gt;) timer.Stop();
                    Face.Fill = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(ColorFromHexString(&lt;span style="color: #a31515"&gt;"FF760C72"&lt;/span&gt;));
                    TimerDisplay.Visibility = &lt;span style="color: #2b91af"&gt;Visibility&lt;/span&gt;.Collapsed;
                    &lt;span style="color: blue"&gt;break&lt;/span&gt;;

            }
        }
    }

    &lt;span style="color: blue"&gt;private static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Color &lt;/span&gt;ColorFromHexString(&lt;span style="color: blue"&gt;string &lt;/span&gt;HexColor)
    {
        &lt;span style="color: blue"&gt;try
        &lt;/span&gt;{
            &lt;span style="color: green"&gt;//The input at this point could be HexColor = "FF00FF1F" 
            &lt;/span&gt;&lt;span style="color: blue"&gt;byte &lt;/span&gt;Alpha = &lt;span style="color: blue"&gt;byte&lt;/span&gt;.Parse(HexColor.Substring(0, 2), &lt;span style="color: #2b91af"&gt;NumberStyles&lt;/span&gt;.HexNumber);
            &lt;span style="color: blue"&gt;byte &lt;/span&gt;Red = &lt;span style="color: blue"&gt;byte&lt;/span&gt;.Parse(HexColor.Substring(2, 2), &lt;span style="color: #2b91af"&gt;NumberStyles&lt;/span&gt;.HexNumber);
            &lt;span style="color: blue"&gt;byte &lt;/span&gt;Green = &lt;span style="color: blue"&gt;byte&lt;/span&gt;.Parse(HexColor.Substring(4, 2), &lt;span style="color: #2b91af"&gt;NumberStyles&lt;/span&gt;.HexNumber);
            &lt;span style="color: blue"&gt;byte &lt;/span&gt;Blue = &lt;span style="color: blue"&gt;byte&lt;/span&gt;.Parse(HexColor.Substring(6, 2), &lt;span style="color: #2b91af"&gt;NumberStyles&lt;/span&gt;.HexNumber);
            &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Color&lt;/span&gt;.FromArgb(Alpha, Red, Green, Blue);
        }
        &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;)
        {
            &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Colors&lt;/span&gt;.Black;
        }
    }
}&lt;/pre&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/656/Building-the-Bing-Maps-Surface-Location-Game.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/656/Building-the-Bing-Maps-Surface-Location-Game.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/656/Building-the-Bing-Maps-Surface-Location-Game.aspx</guid>
      <pubDate>Sat, 24 Jul 2010 10:37:37 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=656</trackback:ping>
    </item>
    <item>
      <title>500 school girls learn geography with Surface at TTYA</title>
      <description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="0" border="0" alt="0" align="left" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-0_3.jpg" width="244" height="164" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/bronwenWeeGo.jpg" /&gt;&lt;img src="/Portals/0/johnWeeGo.jpg" /&gt;Yesterday was Brisbane’s annual &lt;a href="http://www.learningplace.com.au/deliver/content.asp?pid=36088" target="_blank"&gt;Technology Takes You Anywhere (TTYA)&lt;/a&gt; event at Brisbane North Institute of Tafe. The event brought together 500 schools girls aged between 8 and 15 to participate in workshops, lectures and hands on activities. The event is aimed at increasing girls' interest in technology and their confidence with using it.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="1" border="0" alt="1" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-1_3.jpg" width="604" height="404" /&gt;&lt;/p&gt;  &lt;p&gt;Soul Solutions, in our third year of supporting the event, provided an opportunity for the girls to experience a Natural User Interface (NUI) via a Microsoft Surface table. Building on our successful geography games from previous years we created a new Surface game to locate famous landmarks around the world. Some of the girls attending for their third year in a row recalled our previous efforts &lt;a href="http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/515/Virtual-Earth-XBox-Controller-and-100-s-of-girls-at-TTYA.aspx" target="_blank"&gt;navigating the globe on a projector with an xbox controller&lt;/a&gt; or &lt;a href="http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/588/School-Girls-and-Virtual-Earth-at-TTYA-2009.aspx" target="_blank"&gt;flying around by shifting their weight on a wii fit controller&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="5" border="0" alt="5" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-5_3.jpg" width="604" height="404" /&gt;&lt;/p&gt;  &lt;p&gt;It was very interesting to observe the girls reactions to the Surface and to the game. The schedule had us with a new school of 25 girls every 10 minutes. The incredible interest in seeing what was going on had us initially overrun for a single table, we quickly setup an AR app on what was suppose to be our overhead camera to split the group up – you can read about that a bit later.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="2" border="0" alt="2" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-2_3.jpg" width="604" height="404" /&gt;&lt;/p&gt;  &lt;p&gt;Once given permission to touch (they were all very well behaved) the girls understood the concept of multitouch and gestures with ease. Touch and drag to pan the map, pinch zoom and two finger rotate were the controls.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="4" border="0" alt="4" align="left" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-4_3.jpg" width="324" height="484" /&gt;&lt;/p&gt;  &lt;p&gt; The most common question was comparing the surface to the Apple iPhone – “Is this like a big iPhone?”. Of course the Surface is multitouch just like the iPhone and we use gestures to control it but unlike the iPhone this table has a camera that can see everything on its surface. We go onto explain this not only allows a great number of fingers to be seen but also allows us to place real objects on the table to interact with the software. While the iPhone is a single user device the Surface promotes many users interacting together.&lt;/p&gt;  &lt;p&gt;The game itself is a simple find the location as a fast as you can geography challenge. It is effective with a large group as the girls can combine their knowledge and help each other to find the location, sometimes even the teacher lends a hand. In this Surface version the locations are famous landmarks represented by real life replica pencil sharpeners. Locations included:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Pyramids&lt;/li&gt;    &lt;li&gt;Status of Liberty&lt;/li&gt;    &lt;li&gt;Big Ben&lt;/li&gt;    &lt;li&gt;Eiffel Tower&lt;/li&gt;    &lt;li&gt;Leaning Tower of Pisa&lt;/li&gt;    &lt;li&gt;White House&lt;/li&gt;    &lt;li&gt;Space Needle&lt;/li&gt;    &lt;li&gt;Sydney Opera House&lt;/li&gt;    &lt;li&gt;Golden Gate Bridge&lt;/li&gt;    &lt;li&gt;Christ the Redeemer&lt;/li&gt;    &lt;li&gt;Charles Bridge&lt;/li&gt;    &lt;li&gt;Colosseum&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To win the game you zoom into the location as close as you can, around the physical object a circle appears with your time and indicates red if your not even in view or green when it is. However the girls thought there was a more intuitive way to win, most if not all picked up the physical object and placed it on top of the virtual one. We had learnt something valuable today also, usability testing is invaluable.&lt;/p&gt;  &lt;p&gt;The different age of the groups proved to be a factor in finding locations, not because they had learnt this at school but because often one of the older girls had actually travelled or lived near the landmark.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="teachers" border="0" alt="teachers" align="left" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-teachers_3.jpg" width="164" height="244" /&gt;&lt;/p&gt;  &lt;p&gt;The teachers firstly struggled to get close to the device due to the overwhelming enthusiasm of the students. As the games progressed to harder landmarks however the teachers were drawn in to provide assistance.&lt;/p&gt;  &lt;p&gt;Talking to one teacher about the use of technology in the classroom they commented &lt;em&gt;“we’re not the centre of attention at the front of the classroom anymore”&lt;/em&gt; and believed that this new digital native needs more engaging formats of media. Maybe one day soon we will see Surface like technology replacing students desks?&lt;/p&gt;  &lt;p&gt;To reduce the number of students around the Surface we quickly repurposed our HD webcam and displays to show some simple Augmented Reality (AR). We had setup the camera thinking it would be useful for others to see what was happening on the Surface from above but it became clear very early on it wasn’t going to work with the large group.&lt;/p&gt;  &lt;p&gt;The web cam was incredibly popular, the application would render a hat, mask or funny morphed expressed on a detected person’s face. We did try our best to explain a little about AR and HLSL but the girls where having a little too much fun taking photos of themselves.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="3" border="0" alt="3" src="/Portals/0/Blog/Files/8/655/WLW-b5c85af4d634_F560-3_3.jpg" width="244" height="164" /&gt;&lt;/p&gt;  &lt;p&gt;The event was once again very successful and the girls enjoyed themselves, learnt about careers in technology and experienced something new. We thoroughly enjoyed ourselves and even learnt something new from the students.&lt;/p&gt;  &lt;p&gt;Finally we’d like to give a big thankyou to Microsoft Australia for providing the Surface table for the event, specifically thanks to GP, Christian, Jorke, Andrew and Celeste.&lt;/p&gt;  &lt;p&gt;If you’d like to know more about the Surface application itself stay tuned for our next post or go visit the Brisbane office where we have donated the application complete with set of landmarks.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a5616cc5-0d88-4a54-8d8e-f9a4043f4a3b" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/TTYA" rel="tag"&gt;TTYA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Surface" rel="tag"&gt;Surface&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/655/500-school-girls-learn-geography-with-Surface-at-TTYA.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/655/500-school-girls-learn-geography-with-Surface-at-TTYA.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/655/500-school-girls-learn-geography-with-Surface-at-TTYA.aspx</guid>
      <pubDate>Sat, 24 Jul 2010 09:15:49 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=655</trackback:ping>
    </item>
    <item>
      <title>Creating the Imagine Cup Game Design Mashup</title>
      <description>&lt;p&gt; &lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="fulllogo" border="0" alt="fulllogo" align="left" src="/Portals/0/Blog/Files/8/650/WLW-CreatingtheImagineCupGameDesignMashup_A4A6-fulllogo_6.png" width="244" height="86" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" width="30" height="40" /&gt;After our talk at Remix in Melbourne yesterday, I thought I’d post about how to create the Imagine Cup Game Design Round 2 competitor Mash-Up.  Before I created the application I created my own database and table with all the Round 2 contestants and geo-coded their country locations. Since the six finalists have been announced I thought I’d expand it a bit and show those in a different colour. We’ve deployed the final copy to &lt;a title="http://imaginecup.soulsolutions.com.au/" href="http://imaginecup.soulsolutions.com.au/"&gt;http://imaginecup.soulsolutions.com.au/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ICMap" border="0" alt="ICMap" src="/Portals/0/Blog/Files/8/650/WLW-CreatingtheImagineCupGameDesignMashup_A4A6-ICMap_3.jpg" width="644" height="356" /&gt; &lt;/p&gt;  &lt;p&gt;I created a Silverlight Application Called Imagine Cup. Then I created a simple Linq to SQL class to get my team table and created a service method call &lt;strong&gt;GetTeams&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;OperationContract&lt;/span&gt;]
&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;&lt;span style="color: #2b91af"&gt;Team&lt;/span&gt;&gt; GetTeams()
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;db = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataClassesDataContext&lt;/span&gt;();
    &lt;span style="color: blue"&gt;return &lt;/span&gt;db.Teams.Where(a =&gt; a.Latitude != &lt;span style="color: blue"&gt;null&lt;/span&gt;).ToList();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;

&lt;p&gt;In the ImagineCup Project we add a reference to the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Microsoft.Map.MapControl &lt;/li&gt;

  &lt;li&gt;Microsoft.Map.MapControl.Common &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the MainPage.xaml we add the mapcontrol namespace:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl" &lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;and add the map control to the grid:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map &lt;/span&gt;&lt;span style="color: red"&gt;CredentialsProvider&lt;/span&gt;&lt;span style="color: blue"&gt;="yourkey" 
   &lt;/span&gt;&lt;span style="color: red"&gt;CopyrightVisibility&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed" 
   &lt;/span&gt;&lt;span style="color: red"&gt;ScaleVisibility&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed" 
   &lt;/span&gt;&lt;span style="color: red"&gt;Mode&lt;/span&gt;&lt;span style="color: blue"&gt;="Aerial" &gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;MapItemsControl &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="ListOfItems"/&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Add a service reference to your Web Service. In the MainPage.xmal.cs add the logic to retrieve your teams and set the mapitems item source to the data.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;MainPage()
{
    InitializeComponent();
    Loaded += MainPage_Loaded;
}

&lt;span style="color: blue"&gt;void &lt;/span&gt;MainPage_Loaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;ds = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataServiceClient&lt;/span&gt;();
    ds.GetTeamsCompleted += ds_GetTeamsCompleted;
    ds.GetTeamsAsync();
}

&lt;span style="color: blue"&gt;void &lt;/span&gt;ds_GetTeamsCompleted(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;GetTeamsCompletedEventArgs &lt;/span&gt;e)
{
    ListOfItems.ItemsSource = e.Result;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Back in the MainPage.xmal we need to create a datatemplate for the items:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="ItemTemplate"&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin &lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MapLayer.Position&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;font color="#0000ff"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;}"&gt;
    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;and assign that template to the mapitemsControl&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map &lt;/span&gt;&lt;span style="color: red"&gt;CredentialsProvider&lt;/span&gt;&lt;span style="color: blue"&gt;="Ag6yz6PTjH6E3eJYr5FJZfiuKPSkiQeyFqicEfpD5AvUbSliE9FLDE01b-1Rjjtr" 
   &lt;/span&gt;&lt;span style="color: red"&gt;CopyrightVisibility&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed" 
   &lt;/span&gt;&lt;span style="color: red"&gt;ScaleVisibility&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed" 
   &lt;/span&gt;&lt;span style="color: red"&gt;Mode&lt;/span&gt;&lt;span style="color: blue"&gt;="Aerial" &gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;MapItemsControl &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="ListOfItems" &lt;/span&gt;&lt;span style="color: red"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;}"/&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;As we’re displaying a Team entity we need to convert the latitudes and longitudes into something the map control knows about.  The easiest way to do this is using a converter. Create TeamToLocationConverter:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Globalization;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;ImagineCup
{
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TeamToLocationConverter &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;IValueConverter
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;public object &lt;/span&gt;Convert(&lt;span style="color: blue"&gt;object &lt;/span&gt;value, &lt;span style="color: #2b91af"&gt;Type &lt;/span&gt;targetType, &lt;span style="color: blue"&gt;object &lt;/span&gt;parameter, &lt;span style="color: #2b91af"&gt;CultureInfo &lt;/span&gt;culture)
        {
            &lt;span style="color: blue"&gt;var &lt;/span&gt;team = value &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Team&lt;/span&gt;;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(team == &lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;span style="color: blue"&gt;return null&lt;/span&gt;;

            &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Location
            &lt;/span&gt;{
                Latitude = team.Latitude.GetValueOrDefault(0),
                Longitude = team.Longitude.GetValueOrDefault(0)
            };
        }

        &lt;span style="color: blue"&gt;public object &lt;/span&gt;ConvertBack(&lt;span style="color: blue"&gt;object &lt;/span&gt;value, &lt;span style="color: #2b91af"&gt;Type &lt;/span&gt;targetType, &lt;span style="color: blue"&gt;object &lt;/span&gt;parameter, &lt;span style="color: #2b91af"&gt;CultureInfo &lt;/span&gt;culture)
        {
            &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NotImplementedException&lt;/span&gt;();
        }
    }
}&lt;/pre&gt;

&lt;p&gt;Add a reference to the converter in the MainPage.xaml:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:ImagineCup"&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;so that we can create a converter resource:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TeamToLocationConverter &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="teamConverter"/&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;and then apply the converter to the pushpin binding in the DataTemplate you created earlier:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="ItemTemplate"&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin &lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MapLayer.Position&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: blue"&gt;., &lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;teamConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&gt;
    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;To add the ImageCup logo to the pushpin we need to override it’s content as follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="ItemTemplate"&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin &lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MapLayer.Position&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: blue"&gt;., &lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;teamConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&gt;
        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin.Content&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
            &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image &lt;/span&gt;&lt;span style="color: red"&gt;Source&lt;/span&gt;&lt;span style="color: blue"&gt;="images/logo.png" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="20" &lt;/span&gt;&lt;span style="color: red"&gt;Stretch&lt;/span&gt;&lt;span style="color: blue"&gt;="Uniform" /&gt;
            &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
        &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin.Content&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;    
    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;As we then want to change the background colour of the pin to make it a bit more visible so we set it to dark blue:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="DarkBlue" &lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MapLayer.Position&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: blue"&gt;., &lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;teamConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Next we want to see more data about each of the teams so we use the tooltip and override it’s style to display information about the teams. Add your tooltip style:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="CustomInfoboxStyle" &lt;/span&gt;&lt;span style="color: red"&gt;TargetType&lt;/span&gt;&lt;span style="color: blue"&gt;="ToolTip"&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter &lt;/span&gt;&lt;span style="color: red"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Background" &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Transparent" /&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter &lt;/span&gt;&lt;span style="color: red"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt;="BorderBrush" &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Transparent" /&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter &lt;/span&gt;&lt;span style="color: red"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt;="BorderThickness" &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;="0" /&gt;
    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter &lt;/span&gt;&lt;span style="color: red"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Template"&gt;
        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
            &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Border &lt;/span&gt;&lt;span style="color: red"&gt;CornerRadius&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&gt;
                    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Border.Background&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SolidColorBrush &lt;/span&gt;&lt;span style="color: red"&gt;Color&lt;/span&gt;&lt;span style="color: blue"&gt;="Black" &lt;/span&gt;&lt;span style="color: red"&gt;Opacity&lt;/span&gt;&lt;span style="color: blue"&gt;="0.5"/&gt;
                    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Border.Background&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ContentPresenter &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&gt;
                        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ContentPresenter.Content&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                            &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&gt;
                                &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Orientation&lt;/span&gt;&lt;span style="color: blue"&gt;="Horizontal"&gt;
                                    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image &lt;/span&gt;&lt;span style="color: red"&gt;Source&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Logo&lt;/span&gt;&lt;span style="color: blue"&gt;}" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="50" &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="0,0,10,0" /&gt;
                                    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;}" &lt;/span&gt;&lt;span style="color: red"&gt;FontWeight&lt;/span&gt;&lt;span style="color: blue"&gt;="Bold" &lt;/span&gt;&lt;span style="color: red"&gt;FontSize&lt;/span&gt;&lt;span style="color: blue"&gt;="16" &lt;/span&gt;&lt;span style="color: red"&gt;Foreground&lt;/span&gt;&lt;span style="color: blue"&gt;="White"/&gt;
                                &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                                &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Country&lt;/span&gt;&lt;span style="color: blue"&gt;}" &lt;/span&gt;&lt;span style="color: red"&gt;FontWeight&lt;/span&gt;&lt;span style="color: blue"&gt;="Bold" &lt;/span&gt;&lt;span style="color: red"&gt;FontSize&lt;/span&gt;&lt;span style="color: blue"&gt;="12" &lt;/span&gt;&lt;span style="color: red"&gt;Foreground&lt;/span&gt;&lt;span style="color: blue"&gt;="White"/&gt;
                                &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image &lt;/span&gt;&lt;span style="color: red"&gt;Source&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;TeamPhoto&lt;/span&gt;&lt;span style="color: blue"&gt;}" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="400"/&gt;
                            &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                        &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ContentPresenter.Content&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ContentPresenter&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
                &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Border&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
            &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
        &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;
&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;and apply that style to the pushpin tooltip:&lt;/p&gt;

&lt;p&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="ItemTemplate"&gt; 
    &lt;br /&gt;    &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="DarkBlue" &lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MapLayer.Position&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: blue"&gt;., &lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;teamConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&gt; 
    &lt;br /&gt;        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin.Content&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;            &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;                &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image &lt;/span&gt;&lt;span style="color: red"&gt;Source&lt;/span&gt;&lt;span style="color: blue"&gt;="images/logo.png" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="20" &lt;/span&gt;&lt;span style="color: red"&gt;Stretch&lt;/span&gt;&lt;span style="color: blue"&gt;="Uniform" /&gt; 
    &lt;br /&gt;            &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;        &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin.Content&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;        &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;            &lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip &lt;/span&gt;&lt;span style="color: red"&gt;Style&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;CustomInfoboxStyle&lt;/span&gt;&lt;span style="color: blue"&gt;}" /&gt; 
    &lt;br /&gt;        &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;    &lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin&lt;/span&gt;&lt;span style="color: blue"&gt;&gt; 
    &lt;br /&gt;&lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;To extend the example we’ll display the 6 finalists in Blue and everyone who made it to round 2 in Red.  To do this we’ll use a field in the database called Finalist and a converter to choose what colour to set the pin to.  So were create a new converter called TeamtoBackgroundConverter:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Windows.Media;
&lt;span style="color: blue"&gt;using &lt;/span&gt;ImagineCup.DataService;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Windows.Data;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Globalization;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;ImagineCup
{
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TeamToBackgroundConverter &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;IValueConverter
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;public object &lt;/span&gt;Convert(&lt;span style="color: blue"&gt;object &lt;/span&gt;value, &lt;span style="color: #2b91af"&gt;Type &lt;/span&gt;targetType, &lt;span style="color: blue"&gt;object &lt;/span&gt;parameter, &lt;span style="color: #2b91af"&gt;CultureInfo &lt;/span&gt;culture)
        {
            &lt;span style="color: blue"&gt;var &lt;/span&gt;team = value &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Team&lt;/span&gt;;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(team == &lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;span style="color: blue"&gt;return null&lt;/span&gt;;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(team.Finalist.GetValueOrDefault())
            {
                &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Colors&lt;/span&gt;.Blue);
            }
            &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Colors&lt;/span&gt;.Red);
        }

        &lt;span style="color: blue"&gt;public object &lt;/span&gt;ConvertBack(&lt;span style="color: blue"&gt;object &lt;/span&gt;value, &lt;span style="color: #2b91af"&gt;Type &lt;/span&gt;targetType, &lt;span style="color: blue"&gt;object &lt;/span&gt;parameter, &lt;span style="color: #2b91af"&gt;CultureInfo &lt;/span&gt;culture)
        {
            &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NotImplementedException&lt;/span&gt;();
        }
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Add it as a resource in our main page:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TeamToBackgroundConverter &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="backgroundConverter"/&gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;and finally add the converter to the pin background colour:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Pushpin &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: blue"&gt;., &lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;backgroundConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}" &lt;/span&gt;&lt;span style="color: red"&gt;m&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MapLayer.Position&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: blue"&gt;., &lt;/span&gt;&lt;span style="color: red"&gt;Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;teamConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2a000d21-a685-49ba-8743-146ec3f0997f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Imagine+Cup" rel="tag"&gt;Imagine Cup&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Game+Design" rel="tag"&gt;Game Design&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Poland" rel="tag"&gt;Poland&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Remix+Australia" rel="tag"&gt;Remix Australia&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/650/Creating-the-Imagine-Cup-Game-Design-Mashup.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/650/Creating-the-Imagine-Cup-Game-Design-Mashup.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/650/Creating-the-Imagine-Cup-Game-Design-Mashup.aspx</guid>
      <pubDate>Thu, 03 Jun 2010 03:55:34 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=650</trackback:ping>
    </item>
    <item>
      <title>We’re speaking at Remix in Melbourne 2010</title>
      <description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="remix_headerlogo_nobg" border="0" alt="remix_headerlogo_nobg" align="left" src="/Portals/0/Blog/Files/8/649/WLW-WerespeakingatRemixinMelbourne2010_8B70-remix_headerlogo_nobg_3.png" width="244" height="154" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" width="30" height="40" /&gt;&lt;img src="/Portals/0/johnWeeGo.jpg" width="30" height="44" /&gt; We’re fortunate enough to be presenting at this year’s Remix in Melbourne. This year it’s a 2 day event with lots of great speakers so should be an awesome event.  The abstract for our talk this year is:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mash in and Mash up with Bing Maps Silverlight&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Explore the latest in Silverlight innovation with Bing Maps, birdseye, streetside, WorldWide telescope and Photosynth. Learn how to mash up you data into the seamless spatial canvas and discover how Twitter, Flickr, foursquare and more are mashed into Bing. &lt;/p&gt;  &lt;p&gt;The agenda, session details and speaker info is up on the &lt;a href="http://www.microsoft.com/australia/remix/agenda/schedule.aspx" target="_blank"&gt;Remix site&lt;/a&gt; and early Bird pricing is still on so head over and register &lt;a href="https://www.microsoft.com.au/events/register/home.aspx?levent=829742&amp;linvitation" target="_blank"&gt;here&lt;/a&gt; and grab your ticket for just $195!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8992774f-ff32-49c6-b557-0647018fdd74" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Remix" rel="tag"&gt;Remix&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Photosynth" rel="tag"&gt;Photosynth&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Foursquare." rel="tag"&gt;Foursquare.&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/649/We-rsquo-re-speaking-at-Remix-in-Melbourne-2010.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/649/We-rsquo-re-speaking-at-Remix-in-Melbourne-2010.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/649/We-rsquo-re-speaking-at-Remix-in-Melbourne-2010.aspx</guid>
      <pubDate>Sun, 09 May 2010 23:55:22 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=649</trackback:ping>
    </item>
    <item>
      <title>Hardware accelerated DeepZoom in Silverlight 4</title>
      <description>&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="johnWeeGo[1]" border="0" alt="johnWeeGo[1]" src="/Portals/0/johnWeeGo.jpg" width="30" height="44" /&gt;The MultiScaleImage control in Silverlight 4 can now optionally be hardware accelerated. This means those massive images or, in my case, maps of the world can be smoothly rendered by using your compatible video card to do the heavy lifting. So what difference does it make? Let’s take a look, my example went from 40-80% cpu usage to 5-10%!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/8/648/WLW-HardwareacceleratedDeepZoominSilverlight_10973-HWPerfDifference_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HWPerfDifference" border="0" alt="HWPerfDifference" src="/Portals/0/Blog/Files/8/648/WLW-HardwareacceleratedDeepZoominSilverlight_10973-HWPerfDifference_thumb.png" width="604" height="352" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Take a spin of the &lt;a href="http://soulsolutions.com.au/silverlight/hwdeepzoom/" target="_blank"&gt;hardware accelerated version here&lt;/a&gt;. Mouse wheel to zoom. If you right click you can even install out of browser.&lt;/p&gt;  &lt;p&gt;What steps do we have to take to make this happen? First we have to enable the cachemode on the MSI control itself:&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;
&lt;MultiScaleImage x:Name="msi" CacheMode="BitmapCache" /&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then for the browser app we add a param to the plugin:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
&lt;param name="EnableGPUAcceleration" value="true" /&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For “Out-Of-Browser” it is in the advanced options in the silverlight project:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="OOBHW" border="0" alt="OOBHW" src="/Portals/0/Blog/Files/8/648/WLW-HardwareacceleratedDeepZoominSilverlight_10973-OOBHW_3.png" width="378" height="484" /&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="http://soulsolutions.com.au/silverlight/hwdeepzoom/source.zip" target="_blank"&gt;Download the full source here&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/648/Hardware-accelerated-DeepZoom-in-Silverlight-4.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/648/Hardware-accelerated-DeepZoom-in-Silverlight-4.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/648/Hardware-accelerated-DeepZoom-in-Silverlight-4.aspx</guid>
      <pubDate>Wed, 05 May 2010 12:00:48 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=648</trackback:ping>
    </item>
    <item>
      <title>Windows Phone 7 apps are Silverlight, lets run some DeepEarth</title>
      <description>&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="johnWeeGo[1]" border="0" alt="johnWeeGo[1]" src="/Portals/0/johnWeeGo.jpg" width="30" height="44" /&gt;At MIX10 yesterday Microsoft announced the developer story for Windows Phone 7, Silverlight and XNA. I couldn’t help but take an hour last night to see if I could could get Bing Maps Silverlight running. Unfortunately that didn’t get far, you see it is not the complete Silverlight 3 package we run in today’s browser. Notable:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;No Browser, these are native apps so if you rely on Browser functions your DLL will not run. The current Silverlight Bing Maps control was not going to work today.&lt;/li&gt;    &lt;li&gt;No pixel shaders and &lt;a href="http://msdn.microsoft.com/en-au/library/ff426930(VS.96).aspx"&gt;some other goodies&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-au/library/ff426933(VS.96).aspx" target="_blank"&gt;Extra bits for interaction&lt;/a&gt; and cool phone functionality.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So after &lt;a href="http://developer.windowsphone.com/" target="_blank"&gt;downloading the complete developer package&lt;/a&gt; to an old laptop I set to work to quickly see if I could get the &lt;a href="http://deepearth.codeplex.com/" target="_blank"&gt;DeepEarth&lt;/a&gt; map control and providers up and running.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/8/645/WLW-WindowsPhone7appsareSilverlightletsrunso_7146-DeepEarthPhone7OSM_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DeepEarthPhone7OSM" border="0" alt="DeepEarthPhone7OSM" src="/Portals/0/Blog/Files/8/645/WLW-WindowsPhone7appsareSilverlightletsrunso_7146-DeepEarthPhone7OSM_thumb.jpg" width="604" height="413" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The OpenStreetMap provider.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/8/645/WLW-WindowsPhone7appsareSilverlightletsrunso_7146-DeepEarthPhone7NearMap_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DeepEarthPhone7NearMap" border="0" alt="DeepEarthPhone7NearMap" src="/Portals/0/Blog/Files/8/645/WLW-WindowsPhone7appsareSilverlightletsrunso_7146-DeepEarthPhone7NearMap_thumb.jpg" width="604" height="414" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;NearMap.&lt;/p&gt;  &lt;p&gt;So we will need to do some cleanup of our code, mainly support for the new mousewheel event rather then use the browser events and removal of the design time check based on the html page. Lastly some integration with the users location and of coarse the new interaction model should make this a good environment to prototype until we see an update from the Bing Maps team.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:15f8db8b-ffde-482b-8660-d407938d597b" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows+Phone+7" rel="tag"&gt;Windows Phone 7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DeepEarth" rel="tag"&gt;DeepEarth&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Maps" rel="tag"&gt;Maps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OpenStreetMap" rel="tag"&gt;OpenStreetMap&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NearMap" rel="tag"&gt;NearMap&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/645/Windows-Phone-7-apps-are-Silverlight-lets-run-some-DeepEarth.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/645/Windows-Phone-7-apps-are-Silverlight-lets-run-some-DeepEarth.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/645/Windows-Phone-7-apps-are-Silverlight-lets-run-some-DeepEarth.aspx</guid>
      <pubDate>Tue, 16 Mar 2010 22:03:30 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=645</trackback:ping>
    </item>
    <item>
      <title>Customising Bing Maps Silverlight - Hue Shift Pixel Shader</title>
      <description>&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="johnWeeGo[1]" border="0" alt="johnWeeGo[1]" src="http://soulsolutions.com.au/Portals/0/johnWeeGo.jpg" width="30" height="44" /&gt;Earlier this month at Australia’s first Silverlight Code Camp I showed a simple invert pixel effect applied to the base road map layer of Bing Maps. At the time I challenged the audience to look at pixel shaders to further customise and integrate Bing Maps into their applications. Today &lt;a href="http://nokola.com/blog/post/2010/02/09/Someone-Said-it-Was-Impossible-Hue-Shift-in-Pixel-Shader-20-(Silverlight).aspx"&gt;Nokola posted a sample Hue Shift pixel shader with source code&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/silverlight/hueshift/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BingMapsHueShift" border="0" alt="BingMapsHueShift" src="/Portals/0/Blog/Files/8/643/WLW-CustomisingBingMapsSilverlightHueShiftPi_B981-BingMapsHueShift_3.jpg" width="604" height="373" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/silverlight/hueshift/" href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/silverlight/hueshift/"&gt;http://www.soulsolutions.com.auhttp://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/silverlight/hueshift/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I couldn’t help but quickly apply the effect to the Bing Maps control with some nice results. Rather then apply to the whole control I’m applying the shader in code to just the base layer, this means that pins and navigation controls are not effected:&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;
effect = new ShiftHueEffect();
map.Mode.Content.Effect = effect;
map.ModeChanged += (e, o) =&gt; map.Mode.Content.Effect = effect;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The ultimate for me would be a shader that allowed the designer to selectively change the key base layer colours to those of their choosing. Thanks to &lt;a href="http://nokola.com/blog/"&gt;Nokola&lt;/a&gt; I think I now know the right direction to take.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:64534840-ffde-4297-b8e6-0e3e8dce785f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Bing+Maps" rel="tag"&gt;Bing Maps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Pixel+Shader" rel="tag"&gt;Pixel Shader&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/643/Customising-Bing-Maps-Silverlight-Hue-Shift-Pixel-Shader.aspx</link>
      <author>veblog@soulsolutions.com.au</author>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/643/Customising-Bing-Maps-Silverlight-Hue-Shift-Pixel-Shader.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/643/Customising-Bing-Maps-Silverlight-Hue-Shift-Pixel-Shader.aspx</guid>
      <pubDate>Fri, 12 Feb 2010 03:11:33 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=643</trackback:ping>
    </item>
  </channel>
</rss>
