Class LatLonPoint

  • All Implemented Interfaces:
    IndexableField

    public class LatLonPoint
    extends Field
    An indexed location field.

    Finding all documents within a range at search time is efficient. Multiple values for the same field in one document is allowed.

    This field defines static factory methods for common operations:

    If you also need per-document operations such as sort by distance, add a separate LatLonDocValuesField instance. If you also need to store the value, you should add a separate StoredField instance.

    WARNING: Values are indexed with some loss of precision from the original double values (4.190951585769653E-8 for the latitude component and 8.381903171539307E-8 for longitude).

    See Also:
    PointValues, LatLonDocValuesField
    • Field Detail

      • BYTES

        public static final int BYTES
        LatLonPoint is encoded as integer values so number of bytes is 4
        See Also:
        Constant Field Values
      • TYPE

        public static final FieldType TYPE
        Type for an indexed LatLonPoint

        Each point stores two dimensions with 4 bytes per dimension.

    • Constructor Detail

      • LatLonPoint

        public LatLonPoint​(String name,
                           double latitude,
                           double longitude)
        Creates a new LatLonPoint with the specified latitude and longitude
        Parameters:
        name - field name
        latitude - latitude value: must be within standard +/-90 coordinate bounds.
        longitude - longitude value: must be within standard +/-180 coordinate bounds.
        Throws:
        IllegalArgumentException - if the field name is null or latitude or longitude are out of bounds
    • Method Detail

      • setLocationValue

        public void setLocationValue​(double latitude,
                                     double longitude)
        Change the values of this field
        Parameters:
        latitude - latitude value: must be within standard +/-90 coordinate bounds.
        longitude - longitude value: must be within standard +/-180 coordinate bounds.
        Throws:
        IllegalArgumentException - if latitude or longitude are out of bounds
      • toString

        public String toString()
        Description copied from class: Field
        Prints a Field for human consumption.
        Overrides:
        toString in class Field
      • newBoxQuery

        public static Query newBoxQuery​(String field,
                                        double minLatitude,
                                        double maxLatitude,
                                        double minLongitude,
                                        double maxLongitude)
        Create a query for matching a bounding box.

        The box may cross over the dateline.

        Parameters:
        field - field name. must not be null.
        minLatitude - latitude lower bound: must be within standard +/-90 coordinate bounds.
        maxLatitude - latitude upper bound: must be within standard +/-90 coordinate bounds.
        minLongitude - longitude lower bound: must be within standard +/-180 coordinate bounds.
        maxLongitude - longitude upper bound: must be within standard +/-180 coordinate bounds.
        Returns:
        query matching points within this box
        Throws:
        IllegalArgumentException - if field is null, or the box has invalid coordinates.
      • newDistanceQuery

        public static Query newDistanceQuery​(String field,
                                             double latitude,
                                             double longitude,
                                             double radiusMeters)
        Create a query for matching points within the specified distance of the supplied location.
        Parameters:
        field - field name. must not be null.
        latitude - latitude at the center: must be within standard +/-90 coordinate bounds.
        longitude - longitude at the center: must be within standard +/-180 coordinate bounds.
        radiusMeters - maximum distance from the center in meters: must be non-negative and finite.
        Returns:
        query matching points within this distance
        Throws:
        IllegalArgumentException - if field is null, location has invalid coordinates, or radius is invalid.
      • newPolygonQuery

        public static Query newPolygonQuery​(String field,
                                            Polygon... polygons)
        Create a query for matching one or more polygons.
        Parameters:
        field - field name. must not be null.
        polygons - array of polygons. must not be null or empty
        Returns:
        query matching points within this polygon
        Throws:
        IllegalArgumentException - if field is null, polygons is null or empty
        See Also:
        Polygon
      • newGeometryQuery

        public static Query newGeometryQuery​(String field,
                                             ShapeField.QueryRelation queryRelation,
                                             LatLonGeometry... latLonGeometries)
        Create a query for matching one or more geometries against the provided ShapeField.QueryRelation. Line geometries are not supported for WITHIN relationship.
        Parameters:
        field - field name. must not be null.
        queryRelation - The relation the points needs to satisfy with the provided geometries, must not be null.
        latLonGeometries - array of LatLonGeometries. must not be null or empty.
        Returns:
        query matching points within at least one geometry.
        Throws:
        IllegalArgumentException - if field is null, queryRelation is null, latLonGeometries is null, empty or contain a null.
        See Also:
        LatLonGeometry
      • newDistanceFeatureQuery

        public static Query newDistanceFeatureQuery​(String field,
                                                    float weight,
                                                    double originLat,
                                                    double originLon,
                                                    double pivotDistanceMeters)
        Given a field that indexes point values into a LatLonPoint and doc values into LatLonDocValuesField, this returns a query that scores documents based on their haversine distance in meters to (originLat, originLon): score = weight * pivotDistanceMeters / (pivotDistanceMeters + distance), ie. score is in the [0, weight] range, is equal to weight when the document's value is equal to (originLat, originLon) and is equal to weight/2 when the document's value is distant of pivotDistanceMeters from (originLat, originLon). In case of multi-valued fields, only the closest point to (originLat, originLon) will be considered. This query is typically useful to boost results based on distance by adding this query to a BooleanClause.Occur.SHOULD clause of a BooleanQuery.