private double CalculateDistance(int doc, IState state)
            {
                var document = _currentIndexReader.Document(doc, state);

                if (document == null)
                {
                    return(double.NaN);
                }
                var field = document.GetField(Constants.Documents.Indexing.Fields.SpatialShapeFieldName);

                if (field == null)
                {
                    return(double.NaN);
                }
                var   shapeAsText = field.StringValue(state);
                Shape shape;

                try
                {
                    shape = _spatialField.ReadShape(shapeAsText);
                }
                catch (InvalidOperationException)
                {
                    return(double.NaN);
                }
                var pt = shape as Point;

                if (pt == null)
                {
                    pt = shape.GetCenter();
                }
                return(_spatialField.GetContext().GetDistCalc().Distance(pt, _originPt));
            }
示例#2
0
 public SpatialDistanceFieldComparator(SpatialField spatialField, Point origin, int numHits, double roundFactor)
 {
     _spatialField = spatialField;
     _values       = new DistanceValue[numHits];
     _originPt     = origin;
     _isGeo        = _spatialField.GetContext().IsGeo();
     _roundFactor  = roundFactor;
 }