November Happy Hour will be moved to Thursday December 5th.

Loading...
Area: Optimizely Search & Navigation
ARCHIVED This content is retired and no longer maintained. See the latest version here.

Recommended reading 

Geographic distance facets group documents with a GeoLocation type property by distance from a location. Geographical distance facets are requested of, and extracted from, search results via the GeoDistanceFacetFor method.

Geographic distance facets need a number of ranges into which to group documents. Use the the NumericRange class to do this.

Example

Assume you 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; }
}

Request the number of restaurants within 1, 5, and 10 kilometers of a location via the GeoDistanceFacetFor method, as shown below.

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, use the GeoDistanceFor method (same name as the method used to retrieve facets). This returns 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");
}
Do you find this information helpful? Please log in to provide feedback.

Last updated: Sep 21, 2015

Recommended reading