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);
}