Esempio n. 1
0
        void request_MapDataDownloadCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            KMLFeed feed = currentFeed;
            currentFeed = null; // let the next one go ...

            if (e.Error != null)
            {
                Console.WriteLine("Error : " + e.Error.Message);
                return;
            }

            Console.Error.WriteLine("Success : ");
            XDocument xDoc = XDocument.Parse(e.Result);
            XNamespace ns = xDoc.Root.Attributes("xmlns").First().Value;//http://earth.google.com/kml/2.1"; // seems some are 2.2

            if (xDoc.Descendants(ns + "Polygon").Count() > 0)
            {
                var elements = from results in xDoc.Descendants(ns + "Placemark")
                               select new PlaceMarkRegion
                               {
                                   description = results.Element(ns + "description").Value,
                                   // Polygon, outerBoundaryIs, LinearRing, coordinates
                                   coords = results.Element(ns + "Polygon").Element(ns + "outerBoundaryIs").Element(ns + "LinearRing").Element(ns + "coordinates").Value
                               };
                feed.RefMapLayer = new MapLayer();
                feed.IsRegionData = true;

                foreach (PlaceMarkRegion reg in elements)
                {
                    MapRegionControl polygon = new MapRegionControl();
                    polygon.Tag = reg.description;
                    polygon.Locations = new LocationCollection();
                    foreach (Location loc in reg.coordList)
                    {
                        polygon.Locations.Add(loc);
                    }
                    feed.RefMapLayer.Children.Add(polygon);
                }
            }
            else
            {
                var elements = from results in xDoc.Descendants(ns + "Placemark")
                               select new PlaceMark
                               {
                                   Id = results.Element(ns + "description").Value,
                                   FeedId = feed.ID,
                                   IsSystem = feed.IsSystem,
                                   Name = results.Element(ns + "name").Value,
                                   Coords = results.Element(ns + "Point").Element(ns + "coordinates").Value

                               };

                ImageBrush brush = null;
                if (feed.Icon != null)
                {
                    brush = new ImageBrush();
                    brush.ImageSource = new BitmapImage(new Uri(feed.Icon));

                }
                feed.RefMapLayer = new MapLayer();
                feed.IsRegionData = false;

                foreach (PlaceMark elem in elements)
                {
                    if (brush != null)
                    {
                        Pushpin pin = new Pushpin();
                        pin.Background = brush;
                        pin.MouseLeftButtonUp += pin_MouseLeftButtonUp;
                        pin.Tag = elem;
                        pin.Name = Guid.NewGuid().ToString();
                        pin.RenderTransform = new CompositeTransform();
                        (pin.RenderTransform as CompositeTransform).TranslateY = -300;
                        pin.Loaded += (loadedSender, loadedEventArgs) =>
                        {
                            Pushpin currentPin = loadedSender as Pushpin;
                            Guid random = new Guid(currentPin.Name);
                            byte[] bytes = random.ToByteArray();
                            int seed = BitConverter.ToInt32(bytes, 0);

                            Random fromValueRandom = new Random(seed);
                            Random durationRandom = new Random(seed);

                            var storyboard = new Storyboard();
                            var translateAnimation = new DoubleAnimation()
                            {
                                From = -fromValueRandom.Next(100, 400),
                                To = 0,
                                Duration = TimeSpan.FromMilliseconds(durationRandom.Next(1000, 5000)),
                                EasingFunction = new CircleEase() { EasingMode = EasingMode.EaseInOut }
                            };
                            translateAnimation.SetValue(Storyboard.TargetNameProperty, currentPin.Name);
                            translateAnimation.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)"));
                            storyboard.Children.Add(translateAnimation);
                            Resources.Add(currentPin.Name, storyboard);
                            storyboard.Begin();
                        };

                        feed.RefMapLayer.AddChild(pin, elem.Location, PositionOrigin.BottomCenter);
                        string hint = elem.Id.Replace("<br/>", "\n");
                        ToolTipService.SetToolTip(pin, hint);
                    }
                    else
                    {
                        Pushpin pin = new Pushpin();
                        pin.Location = elem.Location;
                        pin.Height = pin.Width = 22;
                        pin.Tag = elem;
                        feed.RefMapLayer.AddChild(pin, elem.Location,PositionOrigin.BottomCenter);
                    }
                }
            }

            // we are seperating region layers from points, so everything stacks nicely
            if (feed.IsRegionData)
            {
                regionsMapLayer.Children.Add(feed.RefMapLayer);
            }
            else
            {
                pointsMapLayer.Children.Add(feed.RefMapLayer);
            }
        }
Esempio n. 2
0
        void onLoadRegionData(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                Console.Error.WriteLine(e.Error.Message);
                return;
            }
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.DtdProcessing = DtdProcessing.Ignore;
            XmlReader reader = XmlReader.Create(new StringReader(e.Result), settings);
            SyndicationFeed feed = SyndicationFeed.Load(reader);

            List<KMLFeed> kmlFeedList = new List<KMLFeed>();

            KMLFeed emptyFeed = new KMLFeed();
            emptyFeed.Title = MainPageResource.HideallMapAttributes;
            emptyFeed.Link = null;
            kmlFeedList.Add(emptyFeed);

            foreach (SyndicationItem item in feed.Items)
            {
                KMLFeed kFeed = new KMLFeed();
                kFeed.ID = item.Id;
                kFeed.Title = item.Title.Text;
                kFeed.Summary = item.Summary.Text;
                kFeed.IsSystem = true;
                foreach (SyndicationLink link in item.Links)
                {
                    if (link.RelationshipType == "enclosure")
                    {
                        if (link.MediaType == "application/vnd.google-earth.kml+xml")
                        {
                            if (link.Uri.IsAbsoluteUri)
                            {
                                kFeed.Link = link.Uri.ToString();
                            }
                            else
                            {
                                kFeed.Link = BaseURL + link.Uri.ToString();
                            }
                        }
                        else if (link.MediaType == "image/png")
                        {
                            kFeed.Icon = link.Uri.ToString();
                        }
                    }
                }
                // we discard the item if it does NOT have a kml link
                if (kFeed.Link != null)
                {
                    kmlFeedList.Add(kFeed);
                }
            }

            lbRegionFeeds.ItemsSource = kmlFeedList;
        }
Esempio n. 3
0
        // TODO: Put this in service.Feeds or something
        private void CreateMapLayer(KMLFeed feed)
        {
            if (feed.Link == null)
            {
                // special case for the empty radio button to hide all
                return;
            }

            if (currentFeed == null)
            {
                currentFeed = feed; // one at a time
                WebClient client = new WebClient();
                client.DownloadStringCompleted += request_MapDataDownloadCompleted;
                client.DownloadStringAsync(new Uri(feed.Link));
            }
            else
            {
                //throw new Exception("one at a time");
            }
        }
Esempio n. 4
0
        void InitSocialFeeds()
        {
            KMLFeed communityFeed = new KMLFeed();
            communityFeed.Title = MainPageResource.SharedLandmarks;
            communityFeed.Icon = "Images/icon_star.png";
            communityFeed.RefMapLayer = communityMapLayer;
            lbSocialFeeds.Items.Add(communityFeed);

            KMLFeed twitFeed = new KMLFeed();
            twitFeed.Title = MainPageResource.NearbyTweets;
            twitFeed.Icon = BaseURL + "Images/TwitterSignin.png";
            twitFeed.RefMapLayer = twitterMapLayer;
            lbSocialFeeds.Items.Add(twitFeed);

            Service.User.GetUser();
        }
Esempio n. 5
0
        void User_AuthUpdate(UserController sender)
        {
            if (sender.IsAuthenticated)
            {
                // TODO: feed should be generic, not always KML
                KMLFeed feed = new KMLFeed();
                feed.Title = MainPageResource.YourLandmarks;
                feed.Icon = Service.User.currentUser.profile_image_url;
                feed.RefMapLayer = currentUserMapLayer;
                lbSocialFeeds.Items.Insert(0, feed); // we want it FIRST in the list

                socialStackPanel.Visibility = Visibility.Visible;
                btnAddLandmark.Visibility = Visibility.Visible;

                this.currentUserBadge.CurrentUser = sender.currentUser;
                InitUserLandmarkLayers();
            }
            else
            {
                btnAddLandmark.Visibility = Visibility.Collapsed;
                this.currentUserBadge.CurrentUser = null;
            }
        }