Distance wrapper script

Description

This notebook computes the distance for the records with respect to the origin point for the selected trips of the route.

[1]:
import json
import math
import matplotlib.pyplot as plt
[2]:
from pymongo import     MongoClient
con = MongoClient()
[3]:
def mydistance(a1,b1,a2,b2):
    '''
    input: location attributes corresponding to point 1 and 2. (lat1, lon1, lat2, lon2)
    output: distance between point 1 and point 2
    function: compute distance between two points using haversine formula
    '''
    R=6371e3
    x1=math.radians(a1)
    y1=math.radians(b1)
    x2=math.radians(a2)
    y2=math.radians(b2)
    delx=x2-x1
    dely=y2-y1
    c=math.sin(delx/2)*math.sin(delx/2)+math.cos(x1)*math.cos(x2)*math.sin(dely/2)*math.sin(dely/2)
    d=2*math.atan2(math.sqrt(c),math.sqrt(1-c))
    e=R*d
    return(e)
[4]:
#'''
ProjectDataUsed = True
UsedPreTrained = False
UseMongoDB = True
#'''
'''
ProjectDataUsed = True
UsedPreTrained = True
UseMongoDB = False
'''
[4]:
'\nProjectDataUsed = True\nUsedPreTrained = True\nUseMongoDB = False\n'
[5]:
RouteName = 'Git_ISCON_PDPU'
[6]:
TripsInfo=['20_12_2017__18_31_19', '18_01_2018__07_38_10']
[7]:
if UseMongoDB==True:
    '''Compute the distance for the trip records of the selected trips'''
    for TripIndex in range(len(TripsInfo)):
        LocationRecords = [lr for lr in con[RouteName][TripsInfo[TripIndex]+'.Filtered'].find().sort([('epoch',1)])]
        i=0
        #distanceFromOrigin=0.0
        LocationRecordsReference = [lr for lr in con[RouteName][TripsInfo[TripIndex]+'.Filtered'].find().sort([('epoch',1)])]

        distanceFromOrigin = mydistance(LocationRecordsReference[0]["Latitude"],LocationRecordsReference[0]["Longitude"],LocationRecords[0]["Latitude"],LocationRecords[0]["Longitude"])
        normalizedDistanceFromOrigin=0.0
        #print(distanceFromOrigin)
        #input()
        #totalDistance=0
        totalDistance=distanceFromOrigin
        for index in range(len(LocationRecords)-1):
            lt1=LocationRecords[index]["Latitude"]
            ln1=LocationRecords[index]["Longitude"]
            lt2=LocationRecords[index+1]["Latitude"]
            ln2=LocationRecords[index+1]["Longitude"]
            totalDistance += mydistance(lt1,ln1, lt2,ln2)

        normalizedDistanceFromOrigin = distanceFromOrigin/totalDistance
        LocationRecords[i]['distanceFromOrigin']=distanceFromOrigin
        LocationRecords[i]['normalizedDistanceFromOrigin']=normalizedDistanceFromOrigin
        for i in range(1, len(LocationRecords)):
            lt1=LocationRecords[i-1]["Latitude"]
            ln1=LocationRecords[i-1]["Longitude"]
            lt2=LocationRecords[i]["Latitude"]
            ln2=LocationRecords[i]["Longitude"]

            distanceFromOrigin +=   mydistance(lt1,ln1,lt2,ln2)
            normalizedDistanceFromOrigin =  distanceFromOrigin/totalDistance

            LocationRecords[i]['distanceFromOrigin']=distanceFromOrigin
            LocationRecords[i]['normalizedDistanceFromOrigin']=normalizedDistanceFromOrigin
            #print(LocationRecords)
            #input()
        #con[RouteName].drop_collection(TripsInfo[TripIndex]+'.LocationRecordsWithDistanceFromOrigin')
        con[RouteName]['TripInfo'].update_one({'SingleTripInfo':TripsInfo[TripIndex]},{'$set':{'totalDistance':totalDistance}})
        con[RouteName][TripsInfo[TripIndex]+'.LocationRecordsWithDistanceFromOrigin'].insert_many(LocationRecords)