127 lines
3.7 KiB
Java
127 lines
3.7 KiB
Java
package com.safemobile.lib;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
//Date data = Calendar.getInstance().getTime();
|
|
//data.getTime();
|
|
|
|
public class HistPosmsg extends TCPmsg {
|
|
|
|
public ArrayList<HistPos> PosList;
|
|
public int count=0;
|
|
public HistPosmsg(TCPmsg tcp) {
|
|
super(tcp);
|
|
PosList = new ArrayList<HistPos>();
|
|
try{
|
|
String date4parsing = super.data;
|
|
//SM.Debug("SMS date4parsing:"+date4parsing);
|
|
String[] tempArr = date4parsing.split(";");
|
|
//SM.Debug("SMS tempArr.length:" +tempArr.length);
|
|
for(int i =0; i<tempArr.length;i++)
|
|
{
|
|
String[] tempVeh = tempArr[i].split("&");
|
|
|
|
if(tempVeh.length<6)
|
|
continue;
|
|
HistPos tmpLast = new HistPos();
|
|
tmpLast.lat = Double.parseDouble(tempVeh[1]);
|
|
tmpLast.lng = Double.parseDouble(tempVeh[2]);
|
|
tmpLast.speed = Integer.parseInt(tempVeh[3]);
|
|
tmpLast.timeGMT = Long.parseLong(tempVeh[5]);
|
|
tmpLast.Address = tempVeh[6];
|
|
//tmpLast.Address = "";
|
|
|
|
PosList.add(tmpLast);
|
|
//SM.Debug("duda",tmpLast.toString());
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
SM.Debug("Error on parse hisotry:"+e.toString());
|
|
}
|
|
CalcHeadingForArray(PosList);
|
|
count +=this.PosList.size();
|
|
SM.Debug("duda","HistList size:" +this.PosList.size() + " total:" +count);
|
|
}
|
|
|
|
public ArrayList<HistPos> CalcHeadingForArray(ArrayList<HistPos> list)
|
|
{
|
|
this.PosList = list;
|
|
if (PosList.size()>1)
|
|
{
|
|
HistPos oldPos = PosList.get(0);
|
|
HistPos tmpPos = null;
|
|
int Headingtmp =0;
|
|
for (int i=1;i<PosList.size();i++)
|
|
{
|
|
tmpPos = PosList.get(i);
|
|
Headingtmp = CalcHead(tmpPos.lng, tmpPos.lat, oldPos.lng, oldPos.lat, Headingtmp);
|
|
tmpPos.heading = Headingtmp;
|
|
oldPos = tmpPos;
|
|
}
|
|
}
|
|
|
|
return this.PosList;
|
|
}
|
|
|
|
private int CalcHead(double lastLocX, double lastLocY, double prevLocX, double prevLocY, int heading)
|
|
{
|
|
double dlng = lastLocX - prevLocX;
|
|
double dlat = lastLocY - prevLocY;
|
|
double mdelta_min = -0.00001;
|
|
double delta_min = 0.00001;
|
|
int headcalc = 0;
|
|
double blat = 0;
|
|
double blng = 0;
|
|
if ((dlat > mdelta_min) && (dlat < delta_min) && ((mdelta_min < dlng) && dlng < (delta_min))) headcalc = heading;
|
|
else
|
|
{
|
|
if ((mdelta_min < dlat) && (dlat < delta_min))
|
|
{
|
|
blng = 1;
|
|
if (dlng < 0) headcalc = 180;
|
|
else headcalc = 0;
|
|
}
|
|
else
|
|
{
|
|
blat = 1;
|
|
if (dlat > 0) headcalc = 90;
|
|
else headcalc = 270;
|
|
}
|
|
}
|
|
if ((mdelta_min < dlng) && (dlng < delta_min))
|
|
{
|
|
if (blat == 0)
|
|
{
|
|
if (dlat > 0)
|
|
{
|
|
if (headcalc == 180) headcalc = 135;
|
|
if (headcalc == 0) headcalc = 45;
|
|
}
|
|
else
|
|
{
|
|
if (headcalc == 180) headcalc = 225;
|
|
if (headcalc == 0) headcalc = 315;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (blng == 0)
|
|
{
|
|
if (dlng < 0)
|
|
{
|
|
if (headcalc == 90) headcalc = 135;
|
|
if (headcalc == 270) headcalc = 225;
|
|
}
|
|
else
|
|
{
|
|
if (headcalc == 90) headcalc = 45;
|
|
if (headcalc == 270) headcalc = 315;
|
|
}
|
|
}
|
|
}
|
|
return headcalc;
|
|
}
|
|
|
|
}
|