package com.worklight.location.api.geo;

import com.worklight.location.api.WLConfidenceLevel;
import com.worklight.location.internal.InternalGeoUtils;
import com.worklight.location.internal.geo.GetDistanceToAreaVisitor;
import com.worklight.location.internal.geo.IsInsideAreaVisitor;
import com.worklight.location.internal.geo.IsOutsideAreaVisitor;
import java.util.List;

public class WLGeoUtils
{
  public static double getDistanceBetweenCoordinates(WLCoordinate paramWLCoordinate1, WLCoordinate paramWLCoordinate2)
  {
    double d1 = paramWLCoordinate1.getLongitude();
    double d2 = paramWLCoordinate1.getLatitude();
    double d3 = paramWLCoordinate2.getLongitude();
    double d4 = paramWLCoordinate2.getLatitude();
    double d5 = d3 - d1;
    if (Math.abs(d5) > 180.0D)
      d5 = InternalGeoUtils.transformLongitude(d3) - InternalGeoUtils.transformLongitude(d1);
    double d6 = InternalGeoUtils.radians(d5);
    double d7 = InternalGeoUtils.radians(d4 - d2);
    double d8 = Math.sin(d7 / 2.0D) * Math.sin(d7 / 2.0D) + Math.cos(InternalGeoUtils.radians(d2)) * Math.cos(InternalGeoUtils.radians(d4)) * Math.sin(d6 / 2.0D) * Math.sin(d6 / 2.0D);
    return InternalGeoUtils.radiansToMeters(2.0D * Math.atan2(Math.sqrt(d8), Math.sqrt(1.0D - d8)));
  }

  public static double getDistanceToArea(WLCoordinate paramWLCoordinate, WLArea paramWLArea)
  {
    return getDistanceToArea(paramWLCoordinate, paramWLArea, 0.0D);
  }

  public static double getDistanceToArea(WLCoordinate paramWLCoordinate, WLArea paramWLArea, double paramDouble)
  {
    return ((Double)paramWLArea.accept(new GetDistanceToAreaVisitor(paramWLCoordinate, paramDouble))).doubleValue();
  }

  public static double getDistanceToCircle(WLCoordinate paramWLCoordinate, WLCircle paramWLCircle)
  {
    return getDistanceToCircle(paramWLCoordinate, paramWLCircle, 0.0D);
  }

  public static double getDistanceToCircle(WLCoordinate paramWLCoordinate, WLCircle paramWLCircle, double paramDouble)
  {
    if ((paramDouble < 0.0D) && (-paramDouble > paramWLCircle.getRadius()))
    {
      Object[] arrayOfObject = new Object[2];
      arrayOfObject[0] = Double.valueOf(paramDouble);
      arrayOfObject[1] = Double.valueOf(paramWLCircle.getRadius());
      throw new ArithmeticException(String.format("bufferedZoneWidth (%f) is negative and its absolute value is larger than the circle's radius (%f)", arrayOfObject));
    }
    return getDistanceBetweenCoordinates(paramWLCircle.getCenter(), paramWLCoordinate) - paramWLCircle.getRadius() - paramDouble;
  }

  public static double getDistanceToPolygon(WLCoordinate paramWLCoordinate, WLPolygon paramWLPolygon)
  {
    return getDistanceToPolygon(paramWLCoordinate, paramWLPolygon, 0.0D);
  }

  public static double getDistanceToPolygon(WLCoordinate paramWLCoordinate, WLPolygon paramWLPolygon, double paramDouble)
  {
    double d1 = 1.7976931348623157E+308D;
    WLPolygon localWLPolygon = InternalGeoUtils.transformPolygon(paramWLPolygon);
    WLCoordinate localWLCoordinate = paramWLCoordinate;
    if (!paramWLPolygon.equals(localWLPolygon))
      localWLCoordinate = InternalGeoUtils.transformCoordinate(paramWLCoordinate);
    int i = localWLPolygon.getCoordinates().size();
    for (int j = 0; j < i; j++)
    {
      double d2 = InternalGeoUtils.distanceFromLineSegment(localWLCoordinate, (WLCoordinate)localWLPolygon.getCoordinates().get(j), (WLCoordinate)localWLPolygon.getCoordinates().get((j + 1) % i));
      if (d2 < d1)
        d1 = d2;
    }
    if (InternalGeoUtils.isInsidePolygonBoundary(localWLCoordinate, localWLPolygon))
      return -(d1 + paramDouble);
    return d1 - paramDouble;
  }

  public static boolean isInsideArea(WLCoordinate paramWLCoordinate, WLArea paramWLArea)
  {
    return isInsideArea(paramWLCoordinate, paramWLArea, 0.0D, WLConfidenceLevel.LOW);
  }

  public static boolean isInsideArea(WLCoordinate paramWLCoordinate, WLArea paramWLArea, double paramDouble, WLConfidenceLevel paramWLConfidenceLevel)
  {
    return ((Boolean)paramWLArea.accept(new IsInsideAreaVisitor(paramWLCoordinate, paramWLConfidenceLevel, paramDouble))).booleanValue();
  }

  public static boolean isInsideCircle(WLCoordinate paramWLCoordinate, WLCircle paramWLCircle)
  {
    return isInsideCircle(paramWLCoordinate, paramWLCircle, 0.0D, WLConfidenceLevel.LOW);
  }

  public static boolean isInsideCircle(WLCoordinate paramWLCoordinate, WLCircle paramWLCircle, double paramDouble, WLConfidenceLevel paramWLConfidenceLevel)
  {
    double d = getDistanceToCircle(paramWLCoordinate, paramWLCircle, paramDouble);
    return (d <= 0.0D) && (InternalGeoUtils.isDistanceWithinConfidenceLevel(-d, paramWLConfidenceLevel, paramWLCoordinate.getAccuracy()));
  }

  public static boolean isInsidePolygon(WLCoordinate paramWLCoordinate, WLPolygon paramWLPolygon)
  {
    return isInsidePolygon(paramWLCoordinate, paramWLPolygon, 0.0D, WLConfidenceLevel.LOW);
  }

  public static boolean isInsidePolygon(WLCoordinate paramWLCoordinate, WLPolygon paramWLPolygon, double paramDouble, WLConfidenceLevel paramWLConfidenceLevel)
  {
    double d = getDistanceToPolygon(paramWLCoordinate, paramWLPolygon, paramDouble);
    return (d <= 0.0D) && (InternalGeoUtils.isDistanceWithinConfidenceLevel(-d, paramWLConfidenceLevel, paramWLCoordinate.getAccuracy()));
  }

  public static boolean isOutsideArea(WLCoordinate paramWLCoordinate, WLArea paramWLArea)
  {
    return isOutsideArea(paramWLCoordinate, paramWLArea, 0.0D, WLConfidenceLevel.LOW);
  }

  public static boolean isOutsideArea(WLCoordinate paramWLCoordinate, WLArea paramWLArea, double paramDouble, WLConfidenceLevel paramWLConfidenceLevel)
  {
    return ((Boolean)paramWLArea.accept(new IsOutsideAreaVisitor(paramWLConfidenceLevel, paramWLCoordinate, paramDouble))).booleanValue();
  }

  public static boolean isOutsideCircle(WLCoordinate paramWLCoordinate, WLCircle paramWLCircle)
  {
    return isOutsideCircle(paramWLCoordinate, paramWLCircle, 0.0D, WLConfidenceLevel.LOW);
  }

  public static boolean isOutsideCircle(WLCoordinate paramWLCoordinate, WLCircle paramWLCircle, double paramDouble, WLConfidenceLevel paramWLConfidenceLevel)
  {
    double d = getDistanceToCircle(paramWLCoordinate, paramWLCircle, paramDouble);
    return (d > 0.0D) && (InternalGeoUtils.isDistanceWithinConfidenceLevel(d, paramWLConfidenceLevel, paramWLCoordinate.getAccuracy()));
  }

  public static boolean isOutsidePolygon(WLCoordinate paramWLCoordinate, WLPolygon paramWLPolygon)
  {
    return isOutsideArea(paramWLCoordinate, paramWLPolygon, 0.0D, WLConfidenceLevel.LOW);
  }

  public static boolean isOutsidePolygon(WLCoordinate paramWLCoordinate, WLPolygon paramWLPolygon, double paramDouble, WLConfidenceLevel paramWLConfidenceLevel)
  {
    double d = getDistanceToPolygon(paramWLCoordinate, paramWLPolygon, paramDouble);
    return (d > 0.0D) && (InternalGeoUtils.isDistanceWithinConfidenceLevel(d, paramWLConfidenceLevel, paramWLCoordinate.getAccuracy()));
  }
}

/* Location:           C:\Documents and Settings\Cesar Cabello Cea\Mis documentos\Downloads\apk-downloader\com.ikea.kompis-6_dex2jar.jar
 * Qualified Name:     com.worklight.location.api.geo.WLGeoUtils
 * JD-Core Version:    0.6.2
 */