Example #1
0
        private IEnumerable <GeoIndex> NaiveNearestIndexes(GeoPoint point, Distance distance)
        {
            var center = indexes.GetIndex(point);
            var length = (int)Math.Ceiling(distance / resolution) * 2;

            if (length == 0)
            {
                var index = new GeoIndex(center.X, center.Y);
                if (indexes.IsIndexValid(index))
                {
                    yield return(index);
                }
                yield break;
            }

            for (var x = center.X - length; x <= center.X + length; x++)
            {
                for (var y = center.Y - length; y <= center.Y + length; y++)
                {
                    var index = new GeoIndex(x, y);
                    if (indexes.IsIndexValid(index) && indexes.GetGeoPoint(index).GetDistance(point) <= distance)
                    {
                        yield return(index);
                    }
                }
            }
        }
Example #2
0
        public virtual IEnumerable <IVisual> Query(Rectangle clipBounds, ZOrder zOrder)
        {
            IEnumerable <IVisual> search = GeoIndex.Query(clipBounds);

            if (zOrder == ZOrder.EdgesFirst)
            {
                foreach (var visual in search)
                {
                    if (visual is IVisualEdge)
                    {
                        if (DrawingExtensions.Intersects(clipBounds, visual.Shape.BoundsRect))
                        {
                            yield return(visual);
                        }
                    }
                }
            }

            foreach (var visual in search)
            {
                if (!(visual is IVisualEdge))
                {
                    if (DrawingExtensions.Intersects(clipBounds, visual.Shape.BoundsRect))
                    {
                        yield return(visual);
                    }
                }
            }

            if (zOrder == ZOrder.NodesFirst)
            {
                foreach (var visual in search)
                {
                    if (visual is IVisualEdge)
                    {
                        if (DrawingExtensions.Intersects(clipBounds, visual.Shape.BoundsRect))
                        {
                            yield return(visual);
                        }
                    }
                }
            }
        }
Example #3
0
        public override IEnumerable <IVisual> Query()
        {
            var search = GeoIndex.QueryAll();

            foreach (var visual in search)
            {
                if (!(visual is IVisualEdge))
                {
                    yield return(visual);
                }
            }

            foreach (var visual in search)
            {
                if (visual is IVisualEdge)
                {
                    yield return(visual);
                }
            }
        }
 public List <Suburb> this[GeoIndex index]
 {
     get => suburbs[index.X][index.Y];