SignalHandle.java 1.79 KB
package com.bsth.data.gpsdata.arrival;

import com.bsth.data.gpsdata.GpsEntity;
import com.bsth.data.gpsdata.arrival.utils.CircleQueue;

/**
 * Created by panzhao on 2016/12/27.
 */
public abstract class SignalHandle {

    public abstract boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs);

    protected boolean isNotEmpty(CircleQueue<GpsEntity> prevs) {
        return prevs != null && prevs.size() > 0 && prevs.getTail() != null;
    }

    /**
     * 是不是异常信号
     *
     * @param gps
     * @return
     */
    protected boolean isAbnormal(GpsEntity gps) {
        return gps.getLat() == 0 || gps.getLon() == 0;
    }

    /**
     * 连续异常信号个数统计
     *
     * @param prevs
     * @return
     */
    protected int abnormalCount(CircleQueue<GpsEntity> prevs) {
        int count = 0;

        if (!isNotEmpty(prevs))
            return count;

        GpsEntity[] array = (GpsEntity[]) prevs.getQueue();
        GpsEntity gps;
        for (int i = array.length - 1; i > 0; i--) {
            gps = array[i];

            if (isAbnormal(gps))
                count++;
            else
                break;
        }

        return count;
    }

    /**
     * 车辆运行轨迹(最近20分钟)
     * 0:上行 1:下行 -1:未知
     *
     * @param gps
     * @return
     */
    protected int runTrack(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
        int rs = -1, count = 0;

        long et = gps.getTimestamp() - (1000 * 60 * 20);
        Object[] array = prevs.getQueue();
        GpsEntity prev;
        for(Object obj : array){
            prev = (GpsEntity) obj;
            if(prev.getTimestamp() < et)
                break;


        }
        //for()
        return 0;
    }

}