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; } }