tanvirraj
5/24/2017 - 8:45 AM

lat_lon.py

def longitude(lng):
    return float(lng[:3]) + float(lng[3:])/60.


def latitude(lat):
    return float(lat[:2]) + float(lat[2:])/60.

def parseLocalDeviceFormat(raw_data):
    """
    The local device format is
    XMVT863071010819875#MC,,A,2344.9910,N,09022.1104,E,0.00,136.67,,,,A*60|000000|#
    XMVT861262011498734#MC,,V,2346.8525,N,09023.9085,E,0.00,,,,,N*4C|100000|#    AFZAL DEVICE
    and it has to be converted to
    {u'_id': ObjectId('535e2e59e800130ae9c772d3'),
     u'ac_sensor': False,
     u'active': True,
     u'bearing': 0.0,
     u'door1_sensor': False,
     u'door2_sensor': False,
     u'door3_sensor': False,
     u'door4_sensor': False,
     u'engine_sensor': False,
     u'loc': {u'coordinates': [0, 0], u'type': u'Point'},
     u'speed': 0.0,
     u'status': u'V',
     u'temperature_sensor': 0.0,
     u'time': datetime.datetime(2014, 4, 28, 16, 32, 57, 741000)}
    """
    output = {}
    try:
        data_ = filter(None, raw_data.split(","))
        if len(data_)==9:
            output = {
                "number": data_[0].split("#")[0],
                "status": data_[1],
                "loc":{"coordinates":[longitude(data_[4]) if data_[5]=="E" else -1*longitude(data_[4]),latitude(data_[2]) if data_[3]=="N" else -1*latitude(data_[2])],"type":"Point"},
                "speed": float(data_[6])*1.852,
                "bearing": float(data_[7]),
                "ac_sensor": True if data_[8].split("|")[1][0]=="1" else False,
                "door1_sensor": True if data_[8].split("|")[1][1]=="1" else False,
                "door2_sensor": True if data_[8].split("|")[1][2]=="1" else False,
                "door3_sensor": True if data_[8].split("|")[1][3]=="1" else False,
                "door4_sensor": True if data_[8].split("|")[1][4]=="1" else False,
                "engine_sensor": True if data_[8].split("|")[1][5]=="1" else False,
                "temperature_sensor":0.0,
                "time": datetime.now(pytz.utc),
                "active": True,
            }
            #raise Exception
        if len(data_)<9:
            #raise Exception
            #w = tzwhere.tzwhere()
            #tzone = pytz.timezone(w.tzNameAt(latitude(data_[2]) if data_[3]=="N" else -1*latitude(data_[2]),longitude(data_[4]) if data_[5]=="E" else -1*longitude(data_[4])))
            output = {
                "number": data_[0].split("#")[0],
                "status": data_[1],
                "loc":{"coordinates":[longitude(data_[4]) if data_[5]=="E" else -1*longitude(data_[4]),latitude(data_[2]) if data_[3]=="N" else -1*latitude(data_[2])],"type":"Point"},
                "speed": float(data_[6])*1.852,
                "bearing": 0.0,
                "ac_sensor": True if data_[7].split("|")[1][0]=="1" else False,
                "door1_sensor": True if data_[7].split("|")[1][1]=="1" else False,
                "door2_sensor": True if data_[7].split("|")[1][2]=="1" else False,
                "door3_sensor": True if data_[7].split("|")[1][3]=="1" else False,
                "door4_sensor": True if data_[7].split("|")[1][4]=="1" else False,
                "engine_sensor": True if data_[7].split("|")[1][5]=="1" else False,
                "temperature_sensor":0.0,
                "time": datetime.now(pytz.utc),
                "active": True,
            }
    except Exception:
        output = {}

    return output