package urt; import java.text.DecimalFormat; import BaoWen.Dell_GNGGA; import DataBase.DatabaseManagement; import PbuliClass.ShowMessage; import anchor.Anchor_Dell; import engbs.BS_urt_add_fence; import tbDataModel_Dell.Dell_tb_linshi_fence_22414; import tbDataModel_Dell.Map_Dell; import tbDataModel_Dell.csxy; public class GnssToXY { 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; static DecimalFormat df = new DecimalFormat("0.0000000"); static int baoxu=1; static { //Map_Dell.get_foor_xycs(); // String ya1=Map_Dell.getAjwxy(); // String yb1=Map_Dell.getBjwxy(); // if(ya1 !=null && yb1 !=null) { // String[] A=ya1.split(";"); // String[] B=yb1.split(";"); // lon_a=Double.parseDouble(A[0]);//¾­¶È // lat_a=Double.parseDouble(A[1]);//γ¶È // sizes=A.length; // if(A.length==4) { // xa=Double.parseDouble(A[2]); // ya=Double.parseDouble(A[3]); // }else if(A.length==2){ // xa=0; // ya=0; // } // // if(B.length==4) { // lon_b=Double.parseDouble(B[0]);//¾­¶È // lat_b=Double.parseDouble(B[1]);//γ¶È // xb=Double.parseDouble(B[2]); // yb=Double.parseDouble(B[3]); // xycs=initiize_ublox_AB(lat_a, lon_a,lat_b, lon_b,xb,yb); // if(sizes==4) { // xycs=initiize_ublox_AB2(lat_a, lon_a,lat_b, lon_b,xa,ya,xb,yb); // utme0=xycs[0]; // utmn0=xycs[1]; // c=xycs[2]; // s=xycs[3]; // t=xycs[4]; // f=xycs[5]; // } // // }else { // ShowMessage.zidingyi_24("Bµã¾­Î³¶ÈÕýÈ·"); // } // }else { // ShowMessage.zidingyi_24("tb_mab×Ö¶Îbaoliu1ºÍboaliu2²»ÄÜΪnull"); // } // } /**ͨ¹ý¾­Î³¶È»ñÈ¡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; } /**½«¶È·Ö¸ñʽÊý¾ÝתΪ¶È¸ñʽÊä³ö*/ 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; } /**½«¶È·Ö¸ñʽÊý¾ÝתΪ¶È¸ñʽÊä³ö*/ public static String ublox_dm2dstr(double ddmm_dot_m) { double d0=Math.floor(ddmm_dot_m/100); double d=d0+(ddmm_dot_m-d0*100)/60; String a=df.format(d); return a; } /**³õʼ»¯Ô­µãλÖúͷ½Ïò * Êä³öÔ­µãÒÔÃ×Ϊµ¥Î»µÄ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; } /**¸ù¾ÝÔ­µã¾­Î³¶ÈºÍÁíÍâÒ»µã¾­Î³¶È×ø±ê¼ÆËã * @param double lat0 Ô­µãγ¶È * @param double lng0 Ô­µã¾­¶È * @param double latB µÚ2¸öµãγ¶È * @param double lngB µÚ2¸öµã¾­¶È * @param double xB µÚ2¸öµãX×ø±ê * @param double yB µÚ¶þ¸öµãµÄY×ø±ê**/ public static double[] initiize_ublox_AB( double lat0, double lon0, double latB, double lonB, double xB, double yB){ double[] xycstf=new double[6]; double[] a = ubloxraw2xy(lat0, lon0); double[] b = ubloxraw2xy(latB, lonB); double[] ab=new double[2]; ab[0] = b[0] - a[0]; ab[1] = b[1] - a[1]; double the=Math.atan2(ab[0], ab[1]); double thp=Math.atan2(yB, xB); double th=the-thp; double c=Math.cos(th); double s=Math.sin(th); double th_deg=th*180/Math.PI; xycstf[0]=a[0]; xycstf[1]=a[1]; xycstf[2]=c; xycstf[3]=s; xycstf[4]=th_deg; xycstf[5]=a[2]; return xycstf; } /**¸ù¾ÝÈÎÒâ2µã¾­Î³¶È×ø±êºÍXY×ø±ê¼ÆËã * @param double lat0 Ô­µãγ¶È * @param double lng0 Ô­µã¾­¶È * @param double latB µÚ2¸öµãγ¶È * @param double lngB µÚ2¸öµã¾­¶È * @param double xA µÚ1¸öµãX×ø±ê * @param double yA µÚ1¸öµãµÄY×ø±ê * @param double xB µÚ2¸öµãX×ø±ê * @param double yB µÚ2¸öµãµÄY×ø±ê**/ public static double[] initiize_ublox_AB2( double lat0, double lon0, double latB, double lonB, double xA1, double yA1, double xB1, double yB1){ double xA=xA1/100; double yA=yA1/100; double xB=xB1/100; double yB=yB1/100; double[] xycstf=new double[6]; double[] a = ubloxraw2xy(lat0, lon0); double[] b = ubloxraw2xy(latB, lonB); double[] ab=new double[2]; ab[0] = b[0] - a[0]; ab[1] = b[1] - a[1]; double[] AB=new double[2]; AB[0] = xB -xA; AB[1] = yB- yA; double the=Math.atan2(ab[0], ab[1]); double thp=Math.atan2(AB[1], AB[0]); double th=the-thp; double c=Math.cos(th); double s=Math.sin(th); double th_deg=th*180/Math.PI; double xap= c*yA + s*xA; double yap=-s*yA + c*xA; xycstf[0]=a[0]-xap; xycstf[1]=a[1]-yap; xycstf[2]=c; xycstf[3]=s; xycstf[4]=th_deg; xycstf[5]=a[2]; return xycstf; } /**ÊäÈë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; } /**½«ÊµÊ±¾­Î³¶ÈתΪXY×ø±êÊä³ö * @param lat γ¶È * @param lon ¾­¶È * @param Ô­µãγ¶ÈX0 * @param Ô­µã¾­¶Èy0 * @param gps_state²î·Ö״̬Ϊ2*/ public static int[] run_gps2xy( String tagid, double lat, double lon) { int[] realxy=new int[4]; String floor="0"; int min = 0; // ¶¨Òå±äÁ¿±£´æµ½×îСֵ double[] xycs=null; int size=Map_Dell.getCsxyvc().size();//»ñȡÿһ²ãµØÍ¼µÄXYCS for(int i=0;i100) {//Èç¹û2¸ö¾­Î³¶È¾àÀë´óÓÚ100Ã× String[] ziduan= {"baoliu1","baoliu2","id"}; String[] zhi= {jingdu,weidu,"1"}; DatabaseManagement.fast_alert_dbase("tb_linshi_fence_22414", ziduan, zhi); lat_a=Double.parseDouble(weidu); lon_a=Double.parseDouble(jingdu); k=1; }else { lat_a=Double.parseDouble(weidu0); lon_a=Double.parseDouble(jingdu0); } } } } } public static double getLat_a() { return lat_a; } public static void setLat_a(double lat_a) { GnssToXY.lat_a = lat_a; } public static double getLon_a() { return lon_a; } public static void setLon_a(double lon_a) { GnssToXY.lon_a = lon_a; } public static double getLon_b() { return lon_b; } public static void setLon_b(double lon_b) { GnssToXY.lon_b = lon_b; } public static double getLat_b() { return lat_b; } public static void setLat_b(double lat_b) { GnssToXY.lat_b = lat_b; } public static double getXa() { return xa; } public static void setXa(double xa) { GnssToXY.xa = xa; } public static double getYa() { return ya; } public static void setYa(double ya) { GnssToXY.ya = ya; } public static double getXb() { return xb; } public static void setXb(double xb) { GnssToXY.xb = xb; } public static double getYb() { return yb; } public static void setYb(double yb) { GnssToXY.yb = yb; } // public static double getUtme0() { // return utme0; // } // // // public static double getC() { // return c; // } // // // public static double getS() { // return s; // } // // // public static double getT() { // return t; // } // // // public static double getF() { // return f; // } // // // public static double getUtmn0() { // return utmn0; // } }