package com.hxzkoa.udp; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import com.hxzkoa.json.tb_gps; import com.hxzkoa.json.tb_person; import com.hxzkoa.json.tb_system; import com.hxzkoa.json.tb_tag; import com.hxzkoa.json.tb_track; import com.hxzkoa.util.Config; import com.hxzkoa.util.HttpUtil; import com.hxzkoa.util.IsInStartAndEndTime; import com.hxzkoa.util.YuanDian; import net.sf.json.JSONObject; /**处理UDP上来的GNGGA格式数据 * 数据格式 $GNGGA,101045.40,3413.41072,N,10853.60405,E,2,12,1.65,423.9,M,-27.8,M,1.4,0654*48,1002,45 * */ public class Dell_GNGGA { static String postUrl = Config.getPostUrl(); static String url_person_bw = postUrl + "personManagement_search.do"; static String url_sysSetting_bw = postUrl + "sysSetting_bw.do"; static String url_track_bw_add = postUrl + "track_bw_add.do"; static String url_tag_time_bw = postUrl + "tag_time_bw.do"; public static String gettagid(String rees) { String[] gpgga=rees.replace("\\n", "").split(","); String tagid2=gpgga[15];//设备id return tagid2; } /**解析GPGGA数据*/ public static void dell_gps(String message) { String[] gpgga=message.replace("\\n", "").split(","); String gps_utc_time=gpgga[1];//字段1:UTC 时间,hhmmss.sss,时分秒格式 String gps_weidu=gpgga[2];//字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0) String gps_NS=gpgga[3];//字段3:纬度N(北纬)或S(南纬) String gps_jingdu=gpgga[4];//字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0) String gps_EW=gpgga[5];//字段5:经度E(东经)或W(西经) String gps_state=gpgga[6];//字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算 String gps_num=gpgga[7];//字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0) String gps_hdop=gpgga[8];//字段8:HDOP水平精度因子(0.5 - 99.9) String gps_haiba_gao=gpgga[9];//字段9:海拔高度(-9999.9 - 99999.9) String gps_gao_danwei=gpgga[10];//字段10:高度单位M表示米 String gps_tuoqiu=gpgga[11];//字段11:地球椭球面相对大地水准面的高度 String gps_chafen_time=gpgga[12];//字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空) String gps_chafen_id=gpgga[13];//字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空) String gps_jiaoyan=gpgga[14];//字段13:校验值 String tagid=gpgga[15];//设备id String gps_power=gpgga[16];//电量 String str = IsInStartAndEndTime.DataTostr(); tb_tag tag0 = new tb_tag(); tag0.setTag_id(tagid); tag0.setAddtime(str); String longitude=gps_weidu; String dimension=gps_jingdu; int[] realxy = null; if(gps_weidu.length()>3) { System.out.print(longitude); double aaa = Double.parseDouble(longitude); double bbb = Double.parseDouble(dimension); tb_system system = new YuanDian().yuandian(); String xx = system.getOrigin_weidu(); String yy = system.getOrigin_jingdu(); String jj = system.getOrigin_jiaodu(); double xzb = Double.parseDouble(xx); double yzb = Double.parseDouble(yy); double jia = Double.parseDouble(jj); //调用将经纬度转为直角坐标系中xy坐标方法 realxy = new GnssToxy().run_gps2xy(tagid,aaa,bbb,xzb,yzb,jia); } tb_tag tag = new tb_tag(); tag.setTag_id(tagid); tag.setPower(gps_power); tb_person person = new tb_person(); person.setP_tagid(tagid); person.setP_x(String.valueOf(realxy[0])); person.setP_y(String.valueOf(realxy[1])); person.setP_floor("0"); JSONObject jsonObject = JSONObject.fromObject(tag); JSONObject personObject = JSONObject.fromObject(person); // 取person JSONObject re_person_bw = HttpUtil.doPost(url_person_bw, jsonObject.toString(), Config.getCharset()); tb_person re_person = (tb_person) JSONObject.toBean(JSONObject.fromObject(re_person_bw.get("result").toString()), tb_person.class); JSONObject jsonObject2 = JSONObject.fromObject(tag0); // 修改tag时间 HttpUtil.doPost(url_tag_time_bw,jsonObject2.toString(),Config.getCharset()); // 修改人员的x,y和楼层信息 String url_person_bw_XYF = postUrl + "person_bw_XYF.do"; if (re_person != null) { HttpUtil.doPost(url_person_bw_XYF, personObject.toString(), Config.getCharset()); } //取tag jsonObject = JSONObject.fromObject(tag); JSONObject re_sysSetting_bw = HttpUtil.doPost(url_sysSetting_bw, jsonObject.toString(), Config.getCharset()); tb_system system = (tb_system) JSONObject .toBean(JSONObject.fromObject(re_sysSetting_bw.get("result").toString()), tb_system.class); // 将位置信息存入历史轨迹数据库 if (system.getGuiji_sava().equals("1")) { tb_track track = new tb_track(); track.setLayer("0"); track.setTagid(tagid); track.setX(String.valueOf(realxy[0])); track.setY(String.valueOf(realxy[1])); track.setZ("0"); // PutPosInHistoryDataBase.putInHistory(tagid, // String.valueOf(x),String.valueOf(y), tagheight, // floor,GetNowTime.timestamp2()); jsonObject = JSONObject.fromObject(track); HttpUtil.doPost(url_track_bw_add, jsonObject.toString(), Config.getCharset()); } //入库 // Dell_gps.add_or_alert_gps(gps_utc_time, // gps_weidu, // gps_NS, // gsp_jingdu, // gps_EW, // gps_state, // gps_num, // gps_hdop, // gps_haiba_gao, // gps_tuoqiu, // gps_chafen_time, // gps_chafen_id, // gps_jiaoyan, // tagid); tb_gps gps = new tb_gps(); gps.setGps_utc_time(gps_utc_time); gps.setGps_weidu(gps_weidu); gps.setGps_NS(gps_NS); gps.setGsp_jingdu(gps_jingdu); gps.setGps_EW(gps_EW); gps.setGps_state(gps_state); gps.setGps_num(gps_num); gps.setGps_hdop(gps_hdop); gps.setGps_haiba_gao(gps_haiba_gao); gps.setGps_gao_danwei(gps_gao_danwei); gps.setGps_tuoqiu(gps_tuoqiu); gps.setGps_chafen_time(gps_chafen_time); gps.setGps_chafen_id(gps_chafen_id); gps.setGps_jiaoyan(gps_jiaoyan); gps.setTagid(tagid); gps.setGps_power(gps_power); //存库 String postUrl = Config.getPostUrl()+"gpsRecord_add.do"; JSONObject gpsObject = JSONObject.fromObject(gps); HttpUtil.doPost(postUrl, gpsObject.toString(), "UTF-8"); //存tb_gps_track postUrl = Config.getPostUrl()+"gpsTrack_add.do"; gpsObject = JSONObject.fromObject(gps); HttpUtil.doPost(postUrl, gpsObject.toString(), "UTF-8"); } }