package urt;
|
|
import java.text.DecimalFormat;
|
|
public class Gnggadis {
|
|
static double a=6378.137;//µØÇò°ë¾¶
|
static double e=0.0818192;//µØÇòÇúÂÊ
|
static double k0=0.9996;
|
static double e2=e*e;//eµÄƽ·½
|
static double e4=e2*e2;//eµÄ4´Î·½
|
static double e6=e4*e2;//eµÄ6´Î·½
|
static double E0=500;
|
static double N0=0;
|
static String floor="0";
|
static double lat_a =0;//ÔµãµÄγ¶È
|
static double lon_a =0;//ÔµãµÄ¾¶È
|
static double lon_b=0;//Bµã¾¶È
|
static double lat_b=0;//Bµãγ¶È
|
static double xa=0; //AµãX×ø±ê
|
static double ya=0;//AµãY×ø±ê
|
static double xb=0;//BµãX×ø±ê
|
static double yb=0;//BµãY×ø±ê
|
static int k=0;
|
static int sizes=2;
|
static double[] xycs=null;
|
static double utme0;
|
static double utmn0;
|
static double c;
|
static double s;
|
static double t;
|
static double f;
|
|
|
/**¼ÆËã2¸ö¾Î³¶ÈµÄ¾àÀë*/
|
public static String disab(String jwd) {
|
DecimalFormat df = new DecimalFormat("0.00");//´ËΪ±£Áô1λСÊý£¬ÈôÏë±£Áô2λСÊý£¬ÔòÌîд#.00 £¬ÒÔ´ËÀàÍÆ
|
String[] bb=jwd.split(";");
|
double jd0=Double.parseDouble(bb[1]);
|
double wd0=Double.parseDouble(bb[0]);
|
double jd1=Double.parseDouble(bb[3]);
|
double wd1=Double.parseDouble(bb[2]);
|
int[] a=run_gps2xyurt(wd0,jd0,wd1,jd1);
|
double disa=a[0]*a[0]+a[1]*a[1];
|
double dis=Math.sqrt(disa);
|
String temp = df.format(dis);
|
// System.out.println(jwd+"µÄ¾àÀëÊÇ£º"+temp);
|
return temp;
|
|
}
|
|
/**½«ÊµÊ±¾Î³¶ÈתΪXY×ø±êÊä³ö
|
* @param lat γ¶È
|
* @param lon ¾¶È
|
* @param Ôµãγ¶ÈX0
|
* @param Ե㾶Èy0
|
* @param gps_state²î·Ö״̬Ϊ2*/
|
public static int[] run_gps2xyurt(
|
double lat0,
|
double lon0,
|
double lat,
|
double lon) {
|
int[] realxy=new int[2];
|
double[] xycs=initiize_ublox_zeropoint(lat0, lon0,0);
|
double x0=xycs[0];
|
double y0=xycs[1];
|
double c=xycs[2];
|
double s=xycs[3];
|
|
double[] xy=new double[2];
|
double x= ubloxraw2xy(lat,lon)[0]-x0;
|
double y=ubloxraw2xy(lat,lon)[1]-y0;
|
xy[0] =c*x - s*y;
|
xy[1] =s*x + c*y;
|
|
double x1=xy[1]*100;
|
double y1=xy[0]*100;
|
|
realxy[0]=(int)x1;
|
realxy[1]=(int)y1;
|
return realxy;
|
}
|
|
/**³õʼ»¯ÔµãλÖúͷ½Ïò
|
* Êä³öÔµãÒÔÃ×Ϊµ¥Î»µÄxy×ø±ê, cosÖµ, sinÖµ*/
|
public static double[] initiize_ublox_zeropoint(double lat, double lon, double th){
|
double[] xycs=new double[4];
|
xycs[0]=ubloxraw2xy(lat,lon)[0];
|
xycs[1]=ubloxraw2xy(lat,lon)[1];
|
double th1=th*Math.PI/180;//xÖáÓëÕý±±·½Ïò¼Ð½Çth(µ¥Î»ÊǶÈ)
|
xycs[2]=Math.cos(th1);
|
xycs[3]=Math.sin(th1);
|
return xycs;
|
}
|
|
/**ÊäÈëubloxµÄ¶È·Ö¾Î³¶È£¬Êä³öxy,µ¥Î»Ã×*/
|
public static double[] ubloxraw2xy(double lat, double lon) {
|
double[] xy=new double[3];
|
double lond = ublox_dm2d(lon);
|
double latd = ublox_dm2d(lat);
|
double[] dxy = utm(latd, lond);
|
xy[0]= dxy[0]* 1000;
|
xy[1]= dxy[1]* 1000;
|
xy[2]= dxy[2];
|
return xy;
|
|
}
|
|
/**½«¶È·Ö¸ñʽÊý¾ÝתΪ¶È¸ñʽÊä³ö*/
|
public static double ublox_dm2d(double ddmm_dot_m) {
|
double d0=Math.floor(ddmm_dot_m/100);
|
double d=d0+(ddmm_dot_m-d0*100)/60;
|
return d;
|
}
|
|
/**ͨ¹ý¾Î³¶È»ñÈ¡XY×ø±ê*/
|
public static double[] utm(double lat,double lon) {
|
double[] dxy=new double[3];
|
|
double zonenum1=lon/6;
|
//floorÊǵذåµÄÒâ˼£¬±íʾÏòÏÂÈ¡Õû
|
if(zonenum1>0) {
|
zonenum1=Math.floor(zonenum1);
|
}else {//ÏòÉÏÈ¡Õû
|
zonenum1=Math.ceil(zonenum1);//ÏòÉÏÈ¡Õû
|
}
|
|
double Zonenum=zonenum1+31;
|
|
double lambda0=((Zonenum-1)*6-180+3)*(Math.PI)/180;
|
|
double phi=lat*(Math.PI)/180;
|
|
double lambda=lon*(Math.PI)/180;
|
|
double v=1/Math.sqrt((1-e2*Math.pow(Math.sin(phi),2)));
|
|
double A=(lambda-lambda0)* Math.cos(phi);
|
double A2=A*A;
|
double A3=A2*A;
|
double A4=A3*A;
|
double A5=A4*A;
|
double A6=A5*A;
|
|
double T=Math.tan(phi)* Math.tan(phi);
|
double T2=T*T;
|
|
double C=e2* Math.cos(phi)* Math.cos(phi)/(1-e2);
|
double C2=C*C;
|
|
double s=(1-e2/4-3*e4/64-5*e6/256)* phi-
|
(3*e2/8+3*e4/32+45*e6/1024)* Math.sin(2*phi)+
|
(15*e4/256+45*e6/1024)* Math.sin(4* phi)-35*e6/3072* Math.sin(6*phi);
|
|
dxy[0]=E0+k0*a*v*(A+(1-T+C)*A3/6+(5-18*T+T2)*A5/120);
|
|
dxy[1]=N0+k0*a*(s+v* Math.tan(phi)*(A2/2+(5-T+9*C+4*C2)*A4/24+(61-58*T+T2)*A6/720));
|
dxy[2]=Zonenum;
|
return dxy;
|
}
|
}
|