This content is retired. See latest version here.

Last updated: Apr 03 2014

Introduction

Geographical distance facets group documents with a property of type GeoLocation by their distance from a given location. Geographical distance facets are requested, and extracted from search results by a method named GeoDistanceFacetFor. Just like range facets geographical distance facets need a number of ranges, represented by the NumericRange class, to group documents into.

Examples

Assuming we have indexed a number of restaurants as instance of this class:

C#
using EPiServer.Find;

public class Restaurant
{
    public string Name { get; set; }

    public GeoLocation Location { get; set; }
}

We can then request the number of restaurants located with 1, 5 and 10 kilometers from a given location with the GeoDistanceFacetFor method like this:

C#
var sergelsTors = new GeoLocation(59.33265, 18.06468)
var ranges = new List<NumericRange>
  {
    new NumericRange {From = 0, To = 1},
    new NumericRange {From = 0, To = 5},
    new NumericRange {From = 0, To = 10}
  };

result = client.Search<WithCoordinates>()
  .GeoDistanceFacetFor(x => x.Location, sergelsTorg, ranges.ToArray())
  .GetResult();

To extract the facet from the results variable we can again use a method named GeoDistanceFor. This will return an instance of the GeoDistanceFacet class which contains an instance of the GeoDistanceRangeResult per requested range.

C#
facet = result.GeoDistanceFacetFor(x => x.Location);

foreach (var range in facet)
{
  Console.WriteLine(
    "There are " + range.TotalCount 
  + " restaurants within " + range.To 
  + " of Sergels Torg");
}

Comments