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