package com.mutu.mapapi.util;
import com.mutu.mapapi.api.IGeoPoint;
public final class MeasureUtils
{
public static double getArea(double x[], double y[]){
int i = x.length;
double d1 = 0.0D;
double d3;
double d4;
double d5;
double d6;
int j = i - 1;
for (int k = 0; k < i; k++)
{
d3 = x[j];
d4 = y[j];
d5 = x[k];
d6 = y[k];
d1 += d3 * d6 - d5 * d4;
j = k;
}
d1 /= 2.0D;
return Math.abs(d1);
}
public static double getSphericalArea(IGeoPoint geoPoints[])
{
int i = geoPoints.length;
if(i < 3)
return 0.0;
double d1 = 0.0D;
double d3;
double d4;
double d5;
double d6;
double d2 = 0.0D;
d3 = 0.0D;
d4 = 0.0D;
d5 = 0.0D;
d6 = 0.0D;
double d7 = 0.0D;
double d8 = 0.0D;
double d9 = 0.0D;
double d10 = 0.0D;
double d11 = 0.0D;
double d12 = 0.0D;
double d13 = 0.0D;
double d14 = 0.0D;
double d15 = 0.0D;
double d16 = 0.0D;
double d17 = 0.0D;
double d18 = 0.0D;
double d19 = 0.0D;
double d20 = 0.0D;
double d21 = 0.0D;
double d22 = 0.0D;
double d23 = 0.0D;
double d24 = 0.0D;
double d25 = 0.0D;
double d26 = 0.0D;
double d27 = 0.0D;
double d28 = 0.0D;
double d29 = 0.0D;
double d30 = 0.0D;
double d31 = 0.0D;
double d32 = 0.0D;
double d33 = 0.0D;
for (int m = 0; m < i; m++)
{
if (m == 0)
{
d2 = geoPoints[i-1].getLongitude() * 3.141592653589793D / 180.0D;
d3 = geoPoints[i-1].getLatitude() * 3.141592653589793D / 180.0D;
d4 = geoPoints[0].getLongitude() * 3.141592653589793D / 180.0D;
d5 = geoPoints[0].getLatitude() * 3.141592653589793D / 180.0D;
d6 = geoPoints[1].getLongitude() * 3.141592653589793D / 180.0D;
d7 = geoPoints[1].getLatitude() * 3.141592653589793D / 180.0D;
}
else if (m == i - 1)
{
d2 = geoPoints[i-2].getLongitude() * 3.141592653589793D / 180.0D;
d3 = geoPoints[i-2].getLatitude() * 3.141592653589793D / 180.0D;
d4 = geoPoints[i-1].getLongitude() * 3.141592653589793D / 180.0D;
d5 = geoPoints[i-1].getLatitude() * 3.141592653589793D / 180.0D;
d6 = geoPoints[0].getLongitude() * 3.141592653589793D / 180.0D;
d7 = geoPoints[0].getLatitude() * 3.141592653589793D / 180.0D;
}
else
{
d2 = geoPoints[m-1].getLongitude() * 3.141592653589793D / 180.0D;
d3 = geoPoints[m-1].getLatitude() * 3.141592653589793D / 180.0D;
d4 = geoPoints[m].getLongitude() * 3.141592653589793D / 180.0D;
d5 = geoPoints[m].getLatitude() * 3.141592653589793D / 180.0D;
d6 = geoPoints[m+1].getLongitude() * 3.141592653589793D / 180.0D;
d7 = geoPoints[m+1].getLatitude() * 3.141592653589793D / 180.0D;
}
d8 = Math.cos(d5) * Math.cos(d4);
d9 = Math.cos(d5) * Math.sin(d4);
d10 = Math.sin(d5);
d11 = Math.cos(d3) * Math.cos(d2);
d12 = Math.cos(d3) * Math.sin(d2);
d13 = Math.sin(d3);
d14 = Math.cos(d7) * Math.cos(d6);
d15 = Math.cos(d7) * Math.sin(d6);
d16 = Math.sin(d7);
d17 = (d8 * d8 + d9 * d9 + d10 * d10) / (d8 * d11 + d9 * d12 + d10 * d13);
d18 = (d8 * d8 + d9 * d9 + d10 * d10) / (d8 * d14 + d9 * d15 + d10 * d16);
d19 = d17 * d11 - d8;
d20 = d17 * d12 - d9;
d21 = d17 * d13 - d10;
d22 = d18 * d14 - d8;
d23 = d18 * d15 - d9;
d24 = d18 * d16 - d10;
d29 = Math.acos(d29 = (d22 * d19 + d23 * d20 + d24 * d21) / (Math.sqrt(d22 * d22 + d23 * d23 + d24 * d24) * Math.sqrt(d19 * d19 + d20 * d20 + d21 * d21)));
d25 = d23 * d21 - d24 * d20;
d26 = 0.0D - (d22 * d21 - d24 * d19);
d27 = d22 * d20 - d23 * d19;
if (d8 != 0.0D)
d28 = d25 / d8;
else if (d9 != 0.0D)
d28 = d26 / d9;
else
d28 = d27 / d10;
if (d28 > 0.0D)
{
d30 += d29;
d33 += 1.0D;
}
else
{
d31 += d29;
d32 += 1.0D;
}
}
double d34;
if (d30 > d31)
d34 = d30 + (d32 * 6.283185307179586D - d31);
else
d34 = d33 * 6.283185307179586D - d30 + d31;
d1 = (d34 - (i - 2) * 3.141592653589793D) * 6378000.0D * 6378000.0D;
return Math.abs(d1);
}
public static double getSphericalDistance(IGeoPoint geoPoints[])
{
double dis = 0;
for (int i = 1;i<geoPoints.length;i++){
dis += getSphericalDistance(geoPoints[i-1],geoPoints[i]);
}
return dis;
}
public static double getSphericalDistance(IGeoPoint geoPoint1, IGeoPoint geoPoint2)
{
return getSphericalDistance(geoPoint1.getLongitude(),geoPoint1.getLatitude(),geoPoint2.getLongitude(),geoPoint2.getLatitude());
}
public static double getSphericalDistance(double x1, double y1, double x2, double y2)
{
double d1 = y1 / 180.0D * 3.141592653589793D;
double d2 = x1 / 180.0D * 3.141592653589793D;
double d3 = y2 / 180.0D * 3.141592653589793D;
double d4 = x2 / 180.0D * 3.141592653589793D;
double d5 = Math.acos(d5 = Math.sin(d1) * Math.sin(d3) + Math.cos(d1) * Math.cos(d3) * Math.cos(d4 - d2)) * 6370693.4856530577D;
return d5;
}
public static final double getDistance(double x1, double y1, double x2, double y2)
{
return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
}