Example usage for com.google.common.geometry S2LatLngRect S2LatLngRect

List of usage examples for com.google.common.geometry S2LatLngRect S2LatLngRect

Introduction

In this page you can find the example usage for com.google.common.geometry S2LatLngRect S2LatLngRect.

Prototype

public S2LatLngRect(R1Interval lat, S1Interval lng) 

Source Link

Document

Construct a rectangle from latitude and longitude intervals.

Usage

From source file:com.grublr.geo.s2.internal.S2Util.java

/**
 * An utility method to get a bounding box of latitude and longitude from a given GeoQueryRequest.
 * /* w w  w .ja  v a  2 s. co  m*/
 * @param geoQueryRequest
 *            It contains all of the necessary information to form a latitude and longitude box.
 * 
 * */
public static S2LatLngRect getBoundingLatLngRect(GeoQueryRequest geoQueryRequest) {
    if (geoQueryRequest instanceof QueryRectangleRequest) {
        QueryRectangleRequest queryRectangleRequest = (QueryRectangleRequest) geoQueryRequest;

        GeoPoint minPoint = queryRectangleRequest.getMinPoint();
        GeoPoint maxPoint = queryRectangleRequest.getMaxPoint();

        S2LatLngRect latLngRect = null;

        if (minPoint != null && maxPoint != null) {
            S2LatLng minLatLng = S2LatLng.fromDegrees(minPoint.getLatitude(), minPoint.getLongitude());
            S2LatLng maxLatLng = S2LatLng.fromDegrees(maxPoint.getLatitude(), maxPoint.getLongitude());

            latLngRect = new S2LatLngRect(minLatLng, maxLatLng);
        }

        return latLngRect;
    } else if (geoQueryRequest instanceof QueryRadiusRequest) {
        QueryRadiusRequest queryRadiusRequest = (QueryRadiusRequest) geoQueryRequest;

        GeoPoint centerPoint = queryRadiusRequest.getCenterPoint();
        double radiusInMeter = queryRadiusRequest.getRadiusInMeter();

        S2LatLng centerLatLng = S2LatLng.fromDegrees(centerPoint.getLatitude(), centerPoint.getLongitude());

        double latReferenceUnit = centerPoint.getLatitude() > 0.0 ? -1.0 : 1.0;
        S2LatLng latReferenceLatLng = S2LatLng.fromDegrees(centerPoint.getLatitude() + latReferenceUnit,
                centerPoint.getLongitude());
        double lngReferenceUnit = centerPoint.getLongitude() > 0.0 ? -1.0 : 1.0;
        S2LatLng lngReferenceLatLng = S2LatLng.fromDegrees(centerPoint.getLatitude(),
                centerPoint.getLongitude() + lngReferenceUnit);

        double latForRadius = radiusInMeter / centerLatLng.getEarthDistance(latReferenceLatLng);
        double lngForRadius = radiusInMeter / centerLatLng.getEarthDistance(lngReferenceLatLng);

        S2LatLng minLatLng = S2LatLng.fromDegrees(centerPoint.getLatitude() - latForRadius,
                centerPoint.getLongitude() - lngForRadius);
        S2LatLng maxLatLng = S2LatLng.fromDegrees(centerPoint.getLatitude() + latForRadius,
                centerPoint.getLongitude() + lngForRadius);

        return new S2LatLngRect(minLatLng, maxLatLng);
    }

    return null;
}