public bool AllHitTest(Geometry.Extent2D extent)
        {
            bool flag = false;

            if (HitTestMultiResult.Count != 0)
            {
                HitTestMultiResult.Clear();
            }

            var layers = Enumerable.Reverse(Layers).ToList(); // test from top layers

            foreach (MapLayer layer in layers)
            {
                if (layer.Visibility == Visibility.Visible)
                {
                    Dictionary <Feature, VectorLayer> tempResult = layer.AllHitTest(extent);
                    if (tempResult.Count != 0)
                    {
                        flag = true;
                        foreach (var element in tempResult)
                        {
                            HitTestMultiResult.Add(element.Key, element.Value);
                        }
                    }
                }
            }

            return(flag);
        }
        public override void MouseLDownHandler(object sender, MouseButtonEventArgs e)
        {
            if (_isDragging == false)
            {
                _isDragging      = true;
                _mouseDownOrigin = MapControl.Current.GetWorldCoord(e.GetPosition(MapControl.Current));
                return;
            }

            _mouseDownEnd = MapControl.Current.GetWorldCoord(e.GetPosition(MapControl.Current));
            var extent = new Geometry.Extent2D(_mouseDownOrigin, _mouseDownEnd);

            bool success = IsWindow ? MapControl.Current.AllHitTest(extent) : MapControl.Current.PartHitTest(extent);

            if (success)
            {
                if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) // mod 20120810
                {
                    SelectionSet.SubtractSelection(MapControl.Current.HitTestMultiResult.Select(x => x.Key).ToArray());
                }
                else
                {
                    SelectionSet.AddSelection(MapControl.Current.HitTestMultiResult.Select(x => x.Key).ToArray()); // mod 20120725
                }
            }
            else
            {
                //SelectionSet.ClearSelection();
            }

            _isDragging         = false;
            _selRect.Visibility = Visibility.Collapsed;
        }
Exemple #3
0
 public Geometry.Extent2D GetExtents()
 {
     Geometry.Extent2D result = Geometry.Extent2D.Null;
     foreach (VectorLayer layer in Layers)
     {
         result.Add(layer.GetExtents());
     }
     return(result.Area == 0 ? new Geometry.Extent2D(0, 0, 1000, 1000) : result); // mod 20140628
 }
Exemple #4
0
 public Geometry.Extent2D GetExtents()
 {
     Geometry.Extent2D result = Geometry.Extent2D.Null;
     foreach (VectorLayer layer in Layers)
     {
         result.Add(layer.GetExtents());
     }
     return(result);
 }
 /// <summary>
 /// 设置SVG属性:宽度、高度、viewBox
 /// </summary>
 /// <param name="width"></param>
 /// <param name="height"></param>
 /// <param name="viewBox"></param>
 public void SetSvgAttributes(string width = null, string height = null, Geometry.Extent2D viewBox = null) // newly 20130507
 {
     _root.SetAttributeValue("width", width);
     _root.SetAttributeValue("height", height);
     if (viewBox != null)
     {
         _root.SetAttributeValue("viewBox", string.Format("{0:0.##} {1:0.##} {2:0.##} {3:0.##}", viewBox.min.x, viewBox.min.y, viewBox.XRange, viewBox.YRange));
     }
 }
Exemple #6
0
 public Geometry.Extent2D GetExtents()
 {
     Geometry.Extent2D result = Geometry.Extent2D.Null;
     foreach (var feature in Features)
     {
         Geometry.Point2DString poly = new Geometry.Point2DString(feature.GeoData);
         result.Add(poly.GetExtent());
     }
     return(result);
 }
        public void LocateCanvas(Geometry.Point2D location)
        {
            double ext = 500;

            Geometry.Point2D  pt1    = new Geometry.Point2D(location.x + ext, location.y + ext);
            Geometry.Point2D  pt2    = new Geometry.Point2D(location.x - ext, location.y - ext);
            Geometry.Extent2D extent = new Geometry.Extent2D(pt2, pt1);

            this.Zoom(extent);
        }
        public override void MouseLUpHandler(object sender, MouseButtonEventArgs e)
        {
            if (_isStarted == false)
            {
                if (_isMoving == true)
                {
                    Extents   = new Geometry.Extent2D(_mouseDownOrigin, _mouseDownEnd);
                    Picked    = true;
                    _isMoving = false;
                }

                _rect.Visibility = Visibility.Collapsed;
                _isDragging      = false;
            }
        }
        public Dictionary <Feature, VectorLayer> PartHitTest(Geometry.Extent2D extent)
        {
            Dictionary <Feature, VectorLayer> multiResult = new Dictionary <Feature, VectorLayer>();

            if (LayerData.GeoType == "1")
            {
                foreach (Feature f in LayerData.Features)
                {
                    Geometry.Point2D p = new Geometry.Point2D(f.GeoData);
                    if (extent.IsPointIn(p))
                    {
                        multiResult.Add(f, LayerData);
                    }
                }
            }
            else if (LayerData.GeoType == "2")
            {
                foreach (Feature f in LayerData.Features)
                {
                    Geometry.Polyline poly = new Geometry.Polyline(f.GeoData);
                    foreach (var point in poly.Points)
                    {
                        if (extent.IsPointIn(point))
                        {
                            multiResult.Add(f, LayerData);
                            break;
                        }
                    }
                }
            }
            else if (LayerData.GeoType == "4")
            {
                foreach (Feature f in LayerData.Features)
                {
                    Geometry.Polygon poly = new Geometry.Polygon(f.GeoData);
                    foreach (var point in poly.Points)
                    {
                        if (extent.IsPointIn(point))
                        {
                            multiResult.Add(f, LayerData);
                            break;
                        }
                    }
                }
            }

            return(multiResult);
        }
        public override void MouseLUpHandler(object sender, MouseButtonEventArgs e)
        {
            if (_isStarted == false)
            {
                if (_isMoving == true)
                {
                    TongJi.Geometry.Point2D pt1 = MapControl.Current.GetWorldCoord(_mouseDownOrigin);
                    TongJi.Geometry.Point2D pt2 = MapControl.Current.GetWorldCoord(_mouseDownEnd);

                    var extent = new Geometry.Extent2D(pt1, pt2);
                    MapControl.Current.Zoom(extent);

                    _isMoving = false;
                }

                MapControl.Current.Children.Remove(currentRect);
                currentRect.Visibility = Visibility.Collapsed;
                _isDragging            = false;
            }
        }
        private void SetSvgCanvas(SvgWriter writer, Geometry.Extent2D extents, int width, int height)
        {
            if (width <= 0 && height <= 0)
            {
                width = 1600;
            }
            var aspectRatio = extents.XRange / extents.YRange;

            if (width == 0)
            {
                width = (int)(height * aspectRatio);
            }
            else if (height == 0)
            {
                height = (int)(width / aspectRatio);
            }
            writer.SetSvgAttributes(width + "px", height + "px"); //, extents);
            _calcx = TongJi.Maths.LinearFunction(extents.min.x, 0, extents.max.x, width);
            _calcy = TongJi.Maths.LinearFunction(extents.min.y, height, extents.max.y, 0);
            _scale = x => width / (extents.max.x - extents.min.x) * x;
        }
Exemple #12
0
 public List <MapFile> GetFilesByExtents(Geometry.Extent2D extents)
 {
     return(MapFiles.Where(x => x.Extents.IsCrossedBy(extents)).ToList());
 }
Exemple #13
0
 public XElement FindAndEncode(Geometry.Extent2D extents)
 {
     return(Encode(SpatialFind(Features, extents)));
 }
Exemple #14
0
 public static IEnumerable <FeatureCache> SpatialFind(IEnumerable <FeatureCache> features, Geometry.Extent2D extents)
 {
     return(features.Where(x => x.Extents.IsCrossedBy(extents)));
 }
 public SvgMapRenderer(Map map, Config.MapConfig config)
 {
     _map       = map;
     _mapConfig = config;
     _extents   = map.GetExtents();
 }
 public void Zoom(Geometry.Extent2D extents)
 {
     Scale  = Math.Max(extents.XRange / this.ActualWidth, extents.YRange / this.ActualHeight);
     Origin = new Point(this.ActualWidth / 2 - extents.Center.x / Scale, this.ActualHeight / 2 + extents.Center.y / Scale);
     this.RenderLayers(true);
 }