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); } } } }
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); } } } } }
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];