All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mapbox.mapboxsdk.geometry.VisibleRegion Maven / Gradle / Ivy

There is a newer version: 9.2.1
Show newest version
package com.mapbox.mapboxsdk.geometry;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Contains the four points defining the four-sided polygon that is visible in a map's camera.
 * This polygon can be a trapezoid instead of a rectangle, because a camera can have tilt.
 * If the camera is directly over the center of the camera, the shape is rectangular,
 * but if the camera is tilted, the shape will appear to be a trapezoid whose
 * smallest side is closest to the point of view.
 */
public class VisibleRegion implements Parcelable {

    /**
     * LatLng object that defines the far left corner of the camera.
     */
    public final LatLng farLeft;

    /**
     * LatLng object that defines the far right corner of the camera.
     */
    public final LatLng farRight;

    /**
     * LatLng object that defines the bottom left corner of the camera.
     */
    public final LatLng nearLeft;

    /**
     * LatLng object that defines the bottom right corner of the camera.
     */
    public final LatLng nearRight;

    /**
     * The smallest bounding box that includes the visible region defined in this class.
     */
    public final LatLngBounds latLngBounds;

    private VisibleRegion(Parcel in) {
        this.farLeft = in.readParcelable(LatLng.class.getClassLoader());
        this.farRight = in.readParcelable(LatLng.class.getClassLoader());
        this.nearLeft = in.readParcelable(LatLng.class.getClassLoader());
        this.nearRight = in.readParcelable(LatLng.class.getClassLoader());
        this.latLngBounds = in.readParcelable(LatLngBounds.class.getClassLoader());
    }

    /**
     * Creates a new VisibleRegion given the four corners of the camera.
     *
     * @param farLeft      A LatLng object containing the latitude and longitude of the near left corner of the region.
     * @param farRight     A LatLng object containing the latitude and longitude of the near left corner of the region.
     * @param nearLeft     A LatLng object containing the latitude and longitude of the near left corner of the region.
     * @param nearRight    A LatLng object containing the latitude and longitude of the near left corner of the region.
     * @param latLngBounds The smallest bounding box that includes the visible region defined in this class.
     */
    public VisibleRegion(LatLng farLeft, LatLng farRight, LatLng nearLeft, LatLng nearRight, LatLngBounds latLngBounds) {
        this.farLeft = farLeft;
        this.farRight = farRight;
        this.nearLeft = nearLeft;
        this.nearRight = nearRight;
        this.latLngBounds = latLngBounds;
    }

    /**
     * Compares this VisibleRegion to another object.
     * If the other object is actually a pointer to this object,
     * or if all four corners and the bounds of the two objects are the same,
     * this method returns true. Otherwise, this method returns false.
     *
     * @param o The Object to compare with.
     * @return true if both objects are the same object.
     */
    @Override
    public boolean equals(Object o) {
        if (!(o instanceof VisibleRegion)) {
            return false;
        }
        if (o == this) {
            return true;
        }

        VisibleRegion visibleRegion = (VisibleRegion) o;
        return farLeft.equals(visibleRegion.farLeft)
                && farRight.equals(visibleRegion.farRight)
                && nearLeft.equals(visibleRegion.nearLeft)
                && nearRight.equals(visibleRegion.nearRight)
                && latLngBounds.equals(visibleRegion.latLngBounds);
    }

    @Override
    public String toString() {
        return "[farLeft [" + farLeft + "], farRight [" + farRight + "], nearLeft [" + nearLeft + "], nearRight [" + nearRight + "], latLngBounds [" + latLngBounds + "]]";
    }

    @Override
    public int hashCode() {
        return ((farLeft.hashCode() + 90)
                + ((farRight.hashCode() + 90) * 1000)
                + ((nearLeft.hashCode() + 180) * 1000000)
                + ((nearRight.hashCode() + 180) * 1000000000));
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeParcelable(farLeft, flags);
        out.writeParcelable(farRight, flags);
        out.writeParcelable(nearLeft, flags);
        out.writeParcelable(nearRight, flags);
        out.writeParcelable(latLngBounds, flags);
    }

    public static final Parcelable.Creator CREATOR
            = new Parcelable.Creator() {
        public VisibleRegion createFromParcel(Parcel in) {
            return new VisibleRegion(in);
        }

        public VisibleRegion[] newArray(int size) {
            return new VisibleRegion[size];
        }
    };

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy