protected void AddPolylineLocations(PathFigureCollection pathFigures, IEnumerable <Location> locations, double longitudeOffset, bool closed)
        {
            if (locations.Count() >= 2)
            {
                var points = locations.Select(location => LocationToView(location, longitudeOffset)).ToList();

                if (closed)
                {
                    points.Add(points[0]);
                }

                var             viewport = new Rect(0, 0, ParentMap.RenderSize.Width, ParentMap.RenderSize.Height);
                PathFigure      figure   = null;
                PolyLineSegment segment  = null;

                for (int i = 1; i < points.Count; i++)
                {
                    var p1     = points[i - 1];
                    var p2     = points[i];
                    var inside = Intersections.GetIntersections(ref p1, ref p2, viewport);

                    if (inside)
                    {
                        if (figure == null)
                        {
                            figure = new PathFigure
                            {
                                StartPoint = p1,
                                IsClosed   = false,
                                IsFilled   = false
                            };

                            segment = new PolyLineSegment();
                            figure.Segments.Add(segment);
                            pathFigures.Add(figure);
                        }

                        segment.Points.Add(p2);
                    }

                    if (!inside || p2 != points[i])
                    {
                        figure = null;
                    }
                }
            }
        }