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));
            }
Esempio n. 2
0
            private SpatialResult ActuallyCalculateDistance(int doc, IState state)
            {
                var document = _currentIndexReader.Document(doc, state);

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

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

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

                if (pt == null)
                {
                    pt = shape.GetCenter();
                }

                var result = new SpatialResult
                {
                    Latitude  = pt.GetY(),
                    Longitude = pt.GetX()
                };

                if (_isGeo == false)
                {
                    result.Distance = CartesianDistance(pt.GetY(), pt.GetX(), _originPt.GetY(), _originPt.GetX());
                    return(result);
                }

                result.Distance = HaverstineDistanceInMiles(pt.GetY(), pt.GetX(), _originPt.GetY(), _originPt.GetX());

                switch (Units)
                {
                case SpatialUnits.Kilometers:
                    result.Distance *= DistanceUtils.MILES_TO_KM;
                    break;

                case SpatialUnits.Miles:
                default:
                    break;
                }

                return(result);
            }