package com.circlegate.liban.location; import com.circlegate.liban.base.ApiBase.ApiCreator; import com.circlegate.liban.base.ApiBase.ApiParcelable; import com.circlegate.liban.base.ApiDataIO.ApiDataInput; import com.circlegate.liban.base.ApiDataIO.ApiDataOutput; import com.circlegate.liban.utils.EqualsUtils; public class LocBounds extends ApiParcelable { private final LocPoint southWest; private final LocPoint northEast; //private LatLngBounds latLngBounds; // lazy loaded public LocBounds(LocPoint southWest, LocPoint northEast) { this.southWest = southWest; this.northEast = northEast; } // public LocBounds(LatLngBounds latLngBounds) { // this.southWest = new LocPoint(latLngBounds.southwest); // this.northEast = new LocPoint(latLngBounds.northeast); // this.latLngBounds = latLngBounds; // } public LocBounds(ApiDataInput d) { this.southWest = d.readObject(LocPoint.CREATOR); this.northEast = d.readObject(LocPoint.CREATOR); } @Override public void save(ApiDataOutput d, int flags) { d.write(this.southWest, flags); d.write(this.northEast, flags); } public LocPoint getSouthWest() { return this.southWest; } public LocPoint getNorthEast() { return this.northEast; } // public LatLngBounds getLatLngBounds() { // if (this.latLngBounds == null) { // this.latLngBounds = new LatLngBounds(southWest.getLatLng(), northEast.getLatLng()); // } // return this.latLngBounds; // } @Override public int hashCode() { int _hash = 17; _hash = _hash * 29 + EqualsUtils.hashCodeCheckNull(southWest); _hash = _hash * 29 + EqualsUtils.hashCodeCheckNull(northEast); return _hash; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof LocBounds)) { return false; } LocBounds lhs = (LocBounds) o; return lhs != null && EqualsUtils.equalsCheckNull(southWest, lhs.southWest) && EqualsUtils.equalsCheckNull(northEast, lhs.northEast); } public boolean isValid() { return southWest.isValid() && northEast.isValid(); } // Pozor! Nepocita se s locbounds pres poly nebo pres 180. polednik public boolean isLocPointWithinBounds(LocPoint locPoint) { return southWest.getLatitudeE6() < locPoint.getLatitudeE6() && locPoint.getLatitudeE6() < northEast.getLatitudeE6() && southWest.getLongitudeE6() < locPoint.getLongitudeE6() && locPoint.getLongitudeE6() < northEast.getLongitudeE6(); } public LocPoint createCenterLocPoint() { return new LocPoint((southWest.getLatitudeE6() + northEast.getLatitudeE6()) / 2, (northEast.getLongitudeE6() + northEast.getLongitudeE6()) / 2); } public static final ApiCreator<LocBounds> CREATOR = new ApiCreator<LocBounds>() { public LocBounds create(ApiDataInput d) { return new LocBounds(d); } public LocBounds[] newArray(int size) { return new LocBounds[size]; } }; }