/// <summary> /// Calculate and returns spatial formule /// </summary> /// <param name="fieldName">Field name</param> /// <param name="functionType">Function used in spatial filter</param> /// <param name="centerPoint">Center point to spatial filter</param> /// <param name="distance">Distance from center point</param> /// <returns>Spatial formule</returns> internal static string GetSpatialFormule(string fieldName, SpatialFunctionType functionType, GeoCoordinate centerPoint, decimal distance) { var functionTypeStr = functionType.ToString().ToLower(); var latitude = centerPoint.Latitude.ToString("G", CultureInfo.InvariantCulture); var longitude = centerPoint.Longitude.ToString("G", CultureInfo.InvariantCulture); var distanceStr = distance.ToString("G", CultureInfo.InvariantCulture); return($"{{!{functionTypeStr} sfield={fieldName} pt={latitude},{longitude} d={distanceStr}}}"); }
/// <summary> /// Create a spatial filter parameter /// </summary> /// <param name="documentSearch">Document search engine</param> /// <param name="conditional">Conditional to add parameter</param> /// <param name="fieldExpression">Expression used to find field name</param> /// <param name="functionType">Function used in spatial filter</param> /// <param name="centerPoint">Center point to spatial filter</param> /// <param name="distance">Distance from center point</param> /// <returns>Document search engine</returns> public static DocumentSearch <TDocument> SpatialFilterIf <TDocument>(this DocumentSearch <TDocument> documentSearch, Func <bool> conditional, Expression <Func <TDocument, object> > fieldExpression, GeoCoordinate centerPoint, decimal distance, SpatialFunctionType functionType = SpatialFunctionType.Bbox) where TDocument : Document { Checker.IsNull(conditional); if (conditional.Invoke()) { documentSearch.SpatialFilter(fieldExpression, centerPoint, distance, functionType); } return(documentSearch); }
/// <summary> /// Create a spatial filter parameter /// </summary> /// <param name="documentSearch">Document search engine</param> /// <param name="fieldExpression">Expression used to find field name</param> /// <param name="functionType">Function used in spatial filter</param> /// <param name="centerPoint">Center point to spatial filter</param> /// <param name="distance">Distance from center point</param> /// <returns>Document search engine</returns> public static DocumentSearch <TDocument> SpatialFilter <TDocument>(this DocumentSearch <TDocument> documentSearch, Expression <Func <TDocument, object> > fieldExpression, GeoCoordinate centerPoint, decimal distance, SpatialFunctionType functionType = SpatialFunctionType.Bbox) where TDocument : Document { var parameter = documentSearch.ServiceProvider.GetService <ISpatialFilterParameter <TDocument> >(); parameter.FieldExpression(fieldExpression); parameter.FunctionType(functionType); parameter.CenterPoint(centerPoint); parameter.Distance(distance); documentSearch.Add(parameter); return(documentSearch); }
/// <summary> /// Configure function used in spatial filter /// </summary> /// <param name="parameter">Parameter to configure</param> /// <param name="functionType">Function used in spatial filter</param> public static IFacetSpatialParameter <TDocument> FunctionType <TDocument>(this IFacetSpatialParameter <TDocument> parameter, SpatialFunctionType functionType) where TDocument : Document { parameter.FunctionType = functionType; return(parameter); }
/// <summary> /// Configure function used in spatial filter /// </summary> /// <param name="parameter">Parameter to configure</param> /// <param name="value">Function used in spatial filter</param> public static ISpatialFilterParameter <TDocument> FunctionType <TDocument>(this ISpatialFilterParameter <TDocument> parameter, SpatialFunctionType value) where TDocument : Document { parameter.FunctionType = value; return(parameter); }