/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.location; import android.os.Parcel; import android.os.Parcelable; /** * Represents a geographical boundary, also known as a geofence. * *
Currently only circular geofences are supported and they do not support altitude changes.
*
* @hide
*/
public final class Geofence implements Parcelable {
/** @hide */
public static final int TYPE_HORIZONTAL_CIRCLE = 1;
private final int mType;
private final double mLatitude;
private final double mLongitude;
private final float mRadius;
/**
* Create a circular geofence (on a flat, horizontal plane).
*
* @param latitude latitude in degrees
* @param longitude longitude in degrees
* @param radius radius in meters
* @return a new geofence
* @throws IllegalArgumentException if any parameters are out of range
*/
public static Geofence createCircle(double latitude, double longitude, float radius) {
return new Geofence(latitude, longitude, radius);
}
private Geofence(double latitude, double longitude, float radius) {
checkRadius(radius);
checkLatLong(latitude, longitude);
mType = TYPE_HORIZONTAL_CIRCLE;
mLatitude = latitude;
mLongitude = longitude;
mRadius = radius;
}
/** @hide */
public int getType() {
return mType;
}
/** @hide */
public double getLatitude() {
return mLatitude;
}
/** @hide */
public double getLongitude() {
return mLongitude;
}
/** @hide */
public float getRadius() {
return mRadius;
}
private static void checkRadius(float radius) {
if (radius <= 0) {
throw new IllegalArgumentException("invalid radius: " + radius);
}
}
private static void checkLatLong(double latitude, double longitude) {
if (latitude > 90.0 || latitude < -90.0) {
throw new IllegalArgumentException("invalid latitude: " + latitude);
}
if (longitude > 180.0 || longitude < -180.0) {
throw new IllegalArgumentException("invalid longitude: " + longitude);
}
}
private static void checkType(int type) {
if (type != TYPE_HORIZONTAL_CIRCLE) {
throw new IllegalArgumentException("invalid type: " + type);
}
}
public static final Parcelable.Creator