In [1]:
%pylab inline
import geopandas as gpd
from geopandas.tools import sjoin
import pandas as pd
from IPython.display import display
import snap


Populating the interactive namespace from numpy and matplotlib

In [2]:
bikex_gpd = gpd.read_file("../GPSTRaces/AllTracks_GeoJSON_data/bike001750428.geojson")
bikex_gpd.plot()


Out[2]:
<matplotlib.axes._subplots.AxesSubplot at 0x113672c50>

In [4]:
import os

In [6]:
from pandas import DataFrame
from geopandas import GeoDataFrame
from shapely.geometry import Point

In [ ]:
directory = "../GPSTRaces/BikeGPS&TripFiles_31-1-2016/"
new_dir = "../GPSTRaces/BikeGPS&TripFiles_31-1-2016_GeoJSON_data/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        points = [Point(row['longitude'], row['latitude']) for key, row in data.iterrows()]
        geo_df = GeoDataFrame(data,geometry=points)
        fname = os.path.splitext(filename)[0] + '.geojson'
        geo_df.to_file(os.path.join(new_dir, fname), driver='GeoJSON')

In [10]:
biketrip_gpd = gpd.read_file("../GPSTRaces/BikeGPS&TripFiles_31-1-2016_GeoJSON_data/B00386D0502-T3.geojson")
biketrip_gpd.plot()


Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x1041c0e10>

In [11]:
street_gpd = gpd.read_file('../dc-maps-master/maps/street-segments.geojson')
segid_in_st_data = set(pd.unique(street_gpd.STREETSEGID))
print(street_gpd.shape)
street_gpd.head()


(13522, 22)
Out[11]:
BEGINMEASURE DIRECTIONALITY ENDMEASURE FACILITYID FROMADDRESSLEFTTHEO FROMADDRESSRIGHTTHEO FROMNODEID OBJECTID OBJECTID_1 QUADRANT ... SHAPE_Length SOURCEID STREETID STREETSEGID STREETTYPE TOADDRESSLEFTTHEO TOADDRESSRIGHTTHEO TONODEID UPDATETIMESTAMP geometry
0 0 0 192.925133 SEGID-876 5000.0 5001.0 18637 1 37 NW ... 192.925131 10010500 100010 876 ST 5098.0 5099.0 22102 2005-11-01T12:55:46 LINESTRING (-77.01239193659748 38.950836102255...
1 0 1 131.935650 SEGID-13161 5200.0 5203.0 20290 2 38 NW ... 131.935677 10010520 100010 13161 ST 5298.0 5299.0 19814 2005-11-01T12:55:46 LINESTRING (-77.01163764014346 38.953383268855...
2 0 1 117.887043 SEGID-8240 5300.0 5301.0 19814 3 39 NW ... 117.887011 10010530 100010 8240 ST 5398.0 5399.0 19815 2005-11-01T12:55:46 LINESTRING (-77.01157276320811 38.954558133776...
3 0 2 108.331134 SEGID-10395 5400.0 5401.0 19815 4 40 NW ... 108.331118 10010540 100010 10395 ST 5498.0 5499.0 20876 2005-11-01T12:55:46 LINESTRING (-77.0116155077942 38.9556194835925...
4 0 2 119.190296 SEGID-2216 5500.0 5501.0 20876 5 41 NW ... 119.190312 10010550 100010 2216 ST 5598.0 5599.0 19931 2005-11-01T12:55:46 LINESTRING (-77.01161670521323 38.956595348877...

5 rows × 22 columns


In [12]:
street_gpd.plot()


Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x11d0e12e8>

In [13]:
street_gpd.head().T


Out[13]:
0 1 2 3 4
BEGINMEASURE 0 0 0 0 0
DIRECTIONALITY 0 1 1 2 2
ENDMEASURE 192.925 131.936 117.887 108.331 119.19
FACILITYID SEGID-876 SEGID-13161 SEGID-8240 SEGID-10395 SEGID-2216
FROMADDRESSLEFTTHEO 5000 5200 5300 5400 5500
FROMADDRESSRIGHTTHEO 5001 5203 5301 5401 5501
FROMNODEID 18637 20290 19814 19815 20876
OBJECTID 1 2 3 4 5
OBJECTID_1 37 38 39 40 41
QUADRANT NW NW NW NW NW
REGISTEREDNAME 1ST 1ST 1ST 1ST 1ST
SEGMENTTYPE 2 2 2 2 2
SHAPE_Length 192.925 131.936 117.887 108.331 119.19
SOURCEID 10010500 10010520 10010530 10010540 10010550
STREETID 100010 100010 100010 100010 100010
STREETSEGID 876 13161 8240 10395 2216
STREETTYPE ST ST ST ST ST
TOADDRESSLEFTTHEO 5098 5298 5398 5498 5598
TOADDRESSRIGHTTHEO 5099 5299 5399 5499 5599
TONODEID 22102 19814 19815 20876 19931
UPDATETIMESTAMP 2005-11-01T12:55:46 2005-11-01T12:55:46 2005-11-01T12:55:46 2005-11-01T12:55:46 2005-11-01T12:55:46
geometry LINESTRING (-77.01239193659748 38.950836102255... LINESTRING (-77.01163764014346 38.953383268855... LINESTRING (-77.01157276320811 38.954558133776... LINESTRING (-77.0116155077942 38.9556194835925... LINESTRING (-77.01161670521323 38.956595348877...

In [14]:
bike_trace_1 = gpd.read_file('../GPSTRaces/AllTracks_GeoJSON_data/bike001750421.geojson')
bike_trace_1.head().T


Out[14]:
0 1 2 3 4
Altitude 43.02 46.17 15.52 39.19 109.01
Course 10 66 119 149 26
Date 2015-04-21 2015-04-21 2015-04-21 2015-04-21 2015-04-21
Distance 0 8.08 6.76 3.24 35.97
Essential 1 1 1 1 1
Latitude 38.8683 38.8683 38.8683 38.8683 38.868
Longitude -77.0133 -77.0132 -77.0132 -77.0132 -77.0133
Speed 216 72 0 0 0
Time 14:42:34 14:43:55 14:45:18 14:45:31 14:45:45
Type -2 0 0 0 0
geometry POINT (-77.01326 38.868263) POINT (-77.01316799999999 38.868275) POINT (-77.013229 38.868313) POINT (-77.013206 38.86829) POINT (-77.013329 38.867981)

In [15]:
vision0_gpd = gpd.read_file('../dc-maps-master/maps/vision-zero-safety-transportation.geojson')
vision0_gpd.head().T


Out[15]:
0 1 2 3 4
COMMENTS Intersection dangerous for Peds at rush hour +... WMATA vehicles regularly use the sidewalk to p... None Vehicles - including WMATA buses - regularly g... None
GLOBALID {148BFB13-CC65-46F7-B347-7A69C77081EE} {F2A0AFC7-2381-4F08-AEB6-55E9E545ED64} {4926AE04-E684-4B5E-9A26-12351447E645} {E2AA1B8E-7748-4530-9D71-B880F5EBE398} {FA779B8C-7B3D-4559-BD45-EE8FC85CB012}
OBJECTID 48 49 50 51 52
REQUESTDATE 2015-06-29T20:33:51 2015-06-29T20:34:10 2015-06-29T20:34:31 2015-06-29T20:34:33 2015-06-29T20:34:48
REQUESTID 48 49 50 51 52
REQUESTTYPE Failure to stop for pedestrians Other Driving Issue Failure to stop for pedestrians Speeding Failure to stop for pedestrians
STATUS Unassigned Unassigned Unassigned Unassigned Unassigned
STREETSEGID 11875 2016 13281 9827 9162
USERTYPE Pedestrian Pedestrian Pedestrian Biker Pedestrian
geometry POINT (-77.02962759391977 38.9048501530145) POINT (-77.00349975118203 38.90565930795784) POINT (-77.02190330185668 38.91868690690595) POINT (-77.08572889213174 38.90869297027604) POINT (-77.02294848571017 38.9166450535154)

In [3]:
%pylab inline
import geopandas as gpd
from geopandas.tools import sjoin
import pandas as pd
from IPython.display import display
import snap
from pandas import DataFrame
from geopandas import GeoDataFrame
from shapely.geometry import Point


Populating the interactive namespace from numpy and matplotlib

In [4]:
street_gpd = gpd.read_file('../dc-maps-master/maps/street-segments.geojson')
vision0_gpd = gpd.read_file('../dc-maps-master/maps/vision-zero-safety-transportation.geojson')

In [5]:
for buf in [0.00005,0.0001,0.0005, 0.001]:
    print('buffer = ', buf)
    street_buffer_gpd = street_gpd[['OBJECTID','STREETSEGID','geometry']].copy()
    street_buffer_gpd.geometry = street_buffer_gpd.buffer(buf)
    vision0_buffer_gpd = vision0_gpd[['OBJECTID','STREETSEGID','geometry','REQUESTDATE','USERTYPE', 'REQUESTTYPE']].copy()
    vision0_buffer_gpd.geometry = vision0_buffer_gpd.buffer(buf)
    joined = sjoin(vision0_buffer_gpd, street_buffer_gpd, how='left', op='intersects')
    gb = joined.reset_index().groupby('OBJECTID_left').count()
    
    print(gb[gb.OBJECTID_right==0].shape[0], ' points spatially match no segment')
    print(gb[gb.OBJECTID_right==1].shape[0], ' points spatially match 1 segment')
    print(gb[gb.OBJECTID_right>1].shape[0], ' points spatially match multiple segments')


buffer =  5e-05
3  points spatially match no segment
2852  points spatially match 1 segment
2171  points spatially match multiple segments
buffer =  0.0001
1  points spatially match no segment
2024  points spatially match 1 segment
3001  points spatially match multiple segments
buffer =  0.0005
1  points spatially match no segment
140  points spatially match 1 segment
4885  points spatially match multiple segments
buffer =  0.001
0  points spatially match no segment
13  points spatially match 1 segment
5013  points spatially match multiple segments

In [6]:
import googlemaps,csv,math
def snap_to_road(lat_long,flag):
   gmaps = googlemaps.Client(key='AIzaSyASd63puqw_-zZ9I4rpBtIeHzOPiSHHlfs')
   points = len(lat_long)
   lat_long = lat_long[1:points]
   points = points-1
   iter_end = math.ceil(points/100)
   new_gps = []

   for i in range(iter_end):
       start = i*100
       if(i!=iter_end-1):
           end = start + 99
       else:
           end = points
       cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
       count = len(cor_gps)
       for i in range(count):
           new_gps.append((cor_gps[i]['location']['latitude'],cor_gps[i]['location']['longitude']))
   return new_gps

In [8]:
import os

In [11]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
---------------------------------------------------------------------------
ApiError                                  Traceback (most recent call last)
<ipython-input-11-e5d7b36373e9> in <module>()
     12         lat_long = [list(a) for a in zip(lat,long)]
     13 
---> 14         temp1 = snap_to_road(lat_long,True)
     15         temp2 = snap_to_road(lat_long,False)
     16 

<ipython-input-6-ba620e319e15> in snap_to_road(lat_long, flag)
     14        else:
     15            end = points
---> 16        cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
     17        count = len(cor_gps)
     18        for i in range(count):

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in snap_to_roads(client, path, interpolate)
     54                        base_url=_ROADS_BASE_URL,
     55                        accepts_clientid=False,
---> 56                        extract_body=_roads_extract).get("snappedPoints", [])
     57 
     58 

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    236         try:
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:
    240                 result = self._get_body(resp)

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    116 
    117         if "message" in error:
--> 118             raise googlemaps.exceptions.ApiError(status, error["message"])
    119         else:
    120             raise googlemaps.exceptions.ApiError(status)

ApiError: INVALID_ARGUMENT ("path" contains an invalid value: nan,nan)

In [15]:
from pathlib import Path

In [20]:
def snap_to_road(lat_long,flag):
   gmaps = googlemaps.Client(key='AIzaSyCSjoMtSS77aHsxCS3QR3yWK7CbbwWwYAI')#AIzaSyASd63puqw_-zZ9I4rpBtIeHzOPiSHHlfs')
   points = len(lat_long)
   lat_long = lat_long[1:points]
   points = points-1
   iter_end = math.ceil(points/100)
   new_gps = []

   for i in range(iter_end):
       start = i*100
       if(i!=iter_end-1):
           end = start + 99
       else:
           end = points
       cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
       count = len(cor_gps)
       for i in range(count):
           new_gps.append((cor_gps[i]['location']['latitude'],cor_gps[i]['location']['longitude']))
   return new_gps

In [21]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        if Path(os.path.join(new_dir_true, fname_true)).is_file():
            continue
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        data = data.dropna()
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
bike003440501.csv
bike003440502.csv
bike003440503.csv
bike003440504.csv
bike003440505.csv
bike003440506.csv
bike003440507.csv
bike003440508.csv
bike003580422.csv
bike003580423.csv
bike003580424.csv
bike003580425.csv
bike003580426.csv
bike003580427.csv
bike003580429.csv
bike003580501.csv
bike003580502.csv
bike003580505.csv
bike003860422.csv
bike003860423.csv
bike003860424.csv
bike003860425.csv
bike003860426.csv
bike003860427.csv
bike003860428.csv
bike003860429.csv
bike003860502.csv
bike003860503.csv
bike004170422.csv
---------------------------------------------------------------------------
ApiError                                  Traceback (most recent call last)
<ipython-input-21-65a47701b3bb> in <module>()
     15         lat_long = [list(a) for a in zip(lat,long)]
     16 
---> 17         temp1 = snap_to_road(lat_long,True)
     18         temp2 = snap_to_road(lat_long,False)
     19 

<ipython-input-20-ce249a55e026> in snap_to_road(lat_long, flag)
     13        else:
     14            end = points
---> 15        cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
     16        count = len(cor_gps)
     17        for i in range(count):

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in snap_to_roads(client, path, interpolate)
     54                        base_url=_ROADS_BASE_URL,
     55                        accepts_clientid=False,
---> 56                        extract_body=_roads_extract).get("snappedPoints", [])
     57 
     58 

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    236         try:
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:
    240                 result = self._get_body(resp)

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    116 
    117         if "message" in error:
--> 118             raise googlemaps.exceptions.ApiError(status, error["message"])
    119         else:
    120             raise googlemaps.exceptions.ApiError(status)

ApiError: PERMISSION_DENIED (Google Maps Roads API has not been used in project 472092159185 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/roads/overview?project=472092159185 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.)

In [22]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        if Path(os.path.join(new_dir_true, fname_true)).is_file():
            continue
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        data = data.dropna()
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
bike003440501.csv
bike003440502.csv
bike003440503.csv
bike003440504.csv
bike003440505.csv
bike003440506.csv
bike003440507.csv
bike003440508.csv
bike003580422.csv
bike003580423.csv
bike003580424.csv
bike003580425.csv
bike003580426.csv
bike003580427.csv
bike003580429.csv
bike003580501.csv
bike003580502.csv
bike003580505.csv
bike003860422.csv
bike003860423.csv
bike003860424.csv
bike003860425.csv
bike003860426.csv
bike003860427.csv
bike003860428.csv
bike003860429.csv
bike003860502.csv
bike003860503.csv
bike004170422.csv
bike004170423.csv
bike004170424.csv
bike004170425.csv
bike004170426.csv
bike004170427.csv
bike004170428.csv
bike004170429.csv
bike004170430.csv
bike004170501.csv
bike004170502.csv
bike004170503.csv
bike006310421.csv
bike006310422.csv
bike006310423.csv
bike006310424.csv
bike006310428.csv
bike006310429.csv
bike006310430.csv
bike006310501.csv
---------------------------------------------------------------------------
ApiError                                  Traceback (most recent call last)
<ipython-input-22-65a47701b3bb> in <module>()
     15         lat_long = [list(a) for a in zip(lat,long)]
     16 
---> 17         temp1 = snap_to_road(lat_long,True)
     18         temp2 = snap_to_road(lat_long,False)
     19 

<ipython-input-20-ce249a55e026> in snap_to_road(lat_long, flag)
     13        else:
     14            end = points
---> 15        cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
     16        count = len(cor_gps)
     17        for i in range(count):

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in snap_to_roads(client, path, interpolate)
     54                        base_url=_ROADS_BASE_URL,
     55                        accepts_clientid=False,
---> 56                        extract_body=_roads_extract).get("snappedPoints", [])
     57 
     58 

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    236         try:
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:
    240                 result = self._get_body(resp)

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    116 
    117         if "message" in error:
--> 118             raise googlemaps.exceptions.ApiError(status, error["message"])
    119         else:
    120             raise googlemaps.exceptions.ApiError(status)

ApiError: PERMISSION_DENIED (Google Maps Roads API has not been used in project 472092159185 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/roads/overview?project=472092159185 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.)

In [23]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        if Path(os.path.join(new_dir_true, fname_true)).is_file():
            continue
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        data = data.dropna()
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
bike003440501.csv
bike003440502.csv
bike003440503.csv
bike003440504.csv
bike003440505.csv
bike003440506.csv
bike003440507.csv
bike003440508.csv
bike003580422.csv
bike003580423.csv
bike003580424.csv
bike003580425.csv
bike003580426.csv
bike003580427.csv
bike003580429.csv
bike003580501.csv
bike003580502.csv
bike003580505.csv
bike003860422.csv
bike003860423.csv
bike003860424.csv
bike003860425.csv
bike003860426.csv
bike003860427.csv
bike003860428.csv
bike003860429.csv
bike003860502.csv
bike003860503.csv
bike004170422.csv
bike004170423.csv
bike004170424.csv
bike004170425.csv
bike004170426.csv
bike004170427.csv
bike004170428.csv
bike004170429.csv
bike004170430.csv
bike004170501.csv
bike004170502.csv
bike004170503.csv
bike006310421.csv
bike006310422.csv
bike006310423.csv
bike006310424.csv
bike006310428.csv
bike006310429.csv
bike006310430.csv
bike006310501.csv
bike006310502.csv
bike006310503.csv
bike006810421.csv
bike006810422.csv
bike006810423.csv
bike006810424.csv
bike006810430.csv
bike006810506.csv
bike006810507.csv
bike006810508.csv
bike006810509.csv
bike006810510.csv
bike006810511.csv
bike006810512.csv
bike007080422.csv
bike007080424.csv
bike007080428.csv
bike007080429.csv
bike007080430.csv
bike007080501.csv
bike007080502.csv
bike007080503.csv
bike007080504.csv
bike007080505.csv
bike007080509.csv
bike007080510.csv
bike007080511.csv
bike007080512.csv
bike007080513.csv
bike007120422.csv
bike007120423.csv
bike007120425.csv
bike007120426.csv
bike007120427.csv
bike007120428.csv
bike007120429.csv
bike007120430.csv
bike007120501.csv
bike007120502.csv
bike007120503.csv
bike007500423.csv
bike007500424.csv
bike007500425.csv
bike007500426.csv
bike007500427.csv
bike007500428.csv
bike007500429.csv
bike007500430.csv
bike007500501.csv
bike008560422.csv
bike008560424.csv
bike008560425.csv
bike008560426.csv
bike008560428.csv
bike008560429.csv
bike008560430.csv
bike008560501.csv
bike008560502.csv
bike008560503.csv
bike008700421.csv
bike008700422.csv
bike008700423.csv
bike008700424.csv
bike008700425.csv
bike008700426.csv
bike008700427.csv
bike008700428.csv
bike008700429.csv
bike008700430.csv
bike008700501.csv
bike008700502.csv
bike008700503.csv
bike008930421.csv
bike008930422.csv
bike008930423.csv
bike008930424.csv
bike008930425.csv
bike008930426.csv
bike008930427.csv
bike008930428.csv
bike008930429.csv
bike010030420.csv
bike010030421.csv
bike010030422.csv
bike010030423.csv
bike010030424.csv
bike010030425.csv
bike010030426.csv
bike010030427.csv
bike011070420.csv
bike011070421.csv
bike011070422.csv
bike011070423.csv
bike011070424.csv
bike011070425.csv
bike011070426.csv
bike011070427.csv
bike011070428.csv
bike011070429.csv
bike011070430.csv
bike011920420.csv
bike011920427.csv
bike011920428.csv
bike011920429.csv
bike011920430.csv
bike011920501.csv
bike011920508.csv
bike011920511.csv
bike011920512.csv
bike011920513.csv
bike011920514.csv
bike012160421.csv
bike012160422.csv
bike012160423.csv
bike012160424.csv
bike012160425.csv
bike012160426.csv
bike012160427.csv
bike012160428.csv
bike012160429.csv
bike012160430.csv
bike012160501.csv
bike012160502.csv
bike012270421.csv
bike012270428.csv
bike012270429.csv
bike012270430.csv
bike012270501.csv
bike012270502.csv
bike012270503.csv
bike012270504.csv
bike012750421.csv
bike012750422.csv
bike012750423.csv
bike012750426.csv
bike012750427.csv
bike012750428.csv
bike012750501.csv
bike012750502.csv
bike012750503.csv
bike012750504.csv
bike012750507.csv
bike012750508.csv
bike012750509.csv
bike012750510.csv
bike012750511.csv
bike013290421.csv
bike013290422.csv
bike013290424.csv
bike013290425.csv
bike013290426.csv
bike013290427.csv
bike013290428.csv
bike013290429.csv
bike014090421.csv
bike014090422.csv
bike014090423.csv
bike014090424.csv
bike014090425.csv
bike014090426.csv
bike014090427.csv
bike014090428.csv
bike014090429.csv
bike014090430.csv
bike014090501.csv
bike201470422.csv
bike201470424.csv
bike201470425.csv
bike201470427.csv
bike201470428.csv
bike201470429.csv
bike201470430.csv
bike201470501.csv
bike203530421.csv
bike203530426.csv
bike203530427.csv
bike203530428.csv
---------------------------------------------------------------------------
_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

Timeout                                   Traceback (most recent call last)
<ipython-input-23-65a47701b3bb> in <module>()
     15         lat_long = [list(a) for a in zip(lat,long)]
     16 
---> 17         temp1 = snap_to_road(lat_long,True)
     18         temp2 = snap_to_road(lat_long,False)
     19 

<ipython-input-20-ce249a55e026> in snap_to_road(lat_long, flag)
     13        else:
     14            end = points
---> 15        cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
     16        count = len(cor_gps)
     17        for i in range(count):

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in snap_to_roads(client, path, interpolate)
     54                        base_url=_ROADS_BASE_URL,
     55                        accepts_clientid=False,
---> 56                        extract_body=_roads_extract).get("snappedPoints", [])
     57 
     58 

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    199         elapsed = datetime.now() - first_request_time
    200         if elapsed > self.retry_timeout:
--> 201             raise googlemaps.exceptions.Timeout()
    202 
    203         if retry_counter > 0:

Timeout: 

In [3]:
%pylab inline
import geopandas as gpd
from geopandas.tools import sjoin
import pandas as pd
from IPython.display import display
import snap
from pandas import DataFrame
from geopandas import GeoDataFrame
from shapely.geometry import Point


Populating the interactive namespace from numpy and matplotlib

In [4]:
street_gpd = gpd.read_file('../dc-maps-master/maps/street-segments.geojson')
vision0_gpd = gpd.read_file('../dc-maps-master/maps/vision-zero-safety-transportation.geojson')

In [5]:
street_gpd[street_gpd.OBJECTID.isin([2819,1,2818,2820,3267,3268,87])].plot()
street_gpd[street_gpd.OBJECTID==2819].T


Out[5]:
2818
BEGINMEASURE 0
DIRECTIONALITY 2
ENDMEASURE 56.9667
FACILITYID SEGID-6832
FROMADDRESSLEFTTHEO 38
FROMADDRESSRIGHTTHEO 47
FROMNODEID 22079
OBJECTID 2819
OBJECTID_1 3199
QUADRANT NW
REGISTEREDNAME GALLATIN
SEGMENTTYPE 2
SHAPE_Length 56.9667
SOURCEID 13906005
STREETID 103906
STREETSEGID 6832
STREETTYPE ST
TOADDRESSLEFTTHEO 66
TOADDRESSRIGHTTHEO 67
TONODEID 22102
UPDATETIMESTAMP 2005-11-01T12:55:47
geometry LINESTRING (-77.01066020369781 38.952369300992...

In [6]:
joined = sjoin(street_gpd[['OBJECTID', 'geometry']], street_gpd[['OBJECTID', 'geometry']])

In [7]:
len(joined.index)


Out[7]:
79928

In [8]:
joined.index


Out[8]:
Int64Index([    0,  2817,  2818,  2819,  3266,     0,    16,    86,  3267,
             3268,
            ...
            13482, 13484, 13485, 13486, 13497, 13509, 13514, 13497, 13509,
            13514],
           dtype='int64', length=79928)

In [9]:
street_pairs = joined[joined.OBJECTID_left!=joined.OBJECTID_right][['OBJECTID_right','OBJECTID_left']]

In [10]:
street_pairs.info


Out[10]:
<bound method DataFrame.info of        OBJECTID_right  OBJECTID_left
0                2819              1
2817             2819           2818
2819             2819           2820
3266             2819           3267
0                3268              1
16               3268             17
86               3268             87
3268             3268           3269
5785             3268           5786
5786             3268           5787
0                  87              1
3098               87           3099
3267               87           3268
0                2820              1
2818             2820           2819
2820             2820           2821
5786             2820           5787
5787             2820           5788
86                  1             87
2818                1           2819
2819                1           2820
3267                1           3268
1                2243              2
2                2243              3
2241             2243           2242
2243             2243           2244
5788             2243           5789
5789             2243           5790
1                5789              2
2241             5789           2242
...               ...            ...
13454           13453          13455
13438           13467          13439
13439           13467          13440
13440           13467          13441
13464           13467          13465
13465           13467          13466
13468           13471          13469
13469           13471          13470
13471           13484          13472
13472           13484          13473
13476           13476          13477
13490           13476          13491
13491           13476          13492
13475           13477          13476
13490           13477          13491
13491           13477          13492
13475           13492          13476
13476           13492          13477
13490           13492          13491
13477           13483          13478
13478           13483          13479
13479           13483          13480
13480           13483          13481
13481           13483          13482
13484           13487          13485
13485           13487          13486
13509           13498          13510
13514           13498          13515
13497           13510          13498
13514           13510          13515

[66406 rows x 2 columns]>

In [11]:
nodes_in_graph = list(pd.unique(street_pairs.OBJECTID_left.append(street_pairs.OBJECTID_right)))
nodes_in_graph = [int(x) for x in nodes_in_graph]
edges_in_graph = street_pairs.values.tolist()

In [13]:
len(nodes_in_graph)


Out[13]:
13520

In [14]:
len(edges_in_graph)


Out[14]:
66406

In [2]:
%pylab inline
import geopandas as gpd
from geopandas.tools import sjoin
import pandas as pd
from IPython.display import display
import snap
from pandas import DataFrame
from geopandas import GeoDataFrame
from shapely.geometry import Point


Populating the interactive namespace from numpy and matplotlib

In [4]:
street_gpd = gpd.read_file('../dc-maps-master/maps/street-segments.geojson')
vision0_gpd = gpd.read_file('../dc-maps-master/maps/vision-zero-safety-transportation.geojson')
joined = sjoin(street_gpd[['OBJECTID', 'geometry']], street_gpd[['OBJECTID', 'geometry']])
street_pairs = joined[joined.OBJECTID_left!=joined.OBJECTID_right][['OBJECTID_right','OBJECTID_left']]
nodes_in_graph = list(pd.unique(street_pairs.OBJECTID_left.append(street_pairs.OBJECTID_right)))
nodes_in_graph = [int(x) for x in nodes_in_graph]
edges_in_graph = street_pairs.values.tolist()

In [5]:
road_network = snap.TUNGraph.New()
for n in nodes_in_graph:
    road_network.AddNode(n)
for a,b in edges_in_graph:
    road_network.AddEdge(a,b)


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-eace07c7c024> in <module>()
----> 1 road_network = snap.TUNGraph.New()
      2 for n in nodes_in_graph:
      3     road_network.AddNode(n)
      4 for a,b in edges_in_graph:
      5     road_network.AddEdge(a,b)

AttributeError: module 'snap' has no attribute 'TUNGraph'

In [9]:
road_network = snap.TUNGraph.New()
for n in nodes_in_graph:
    road_network.AddNode(n)
for a,b in edges_in_graph:
    road_network.AddEdge(a,b)


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-9-eace07c7c024> in <module>()
----> 1 road_network = snap.TUNGraph.New()
      2 for n in nodes_in_graph:
      3     road_network.AddNode(n)
      4 for a,b in edges_in_graph:
      5     road_network.AddEdge(a,b)

AttributeError: module 'snap' has no attribute 'TUNGraph'

In [10]:
road_network = snap.PUNGraph.New()
for n in nodes_in_graph:
    road_network.AddNode(n)
for a,b in edges_in_graph:
    road_network.AddEdge(a,b)


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-10-c478bfadfb7f> in <module>()
----> 1 road_network = snap.PUNGraph.New()
      2 for n in nodes_in_graph:
      3     road_network.AddNode(n)
      4 for a,b in edges_in_graph:
      5     road_network.AddEdge(a,b)

AttributeError: module 'snap' has no attribute 'PUNGraph'

In [13]:
bike_test_gpd = GeoDataFrame(gpd.read_file("../GPSTRaces/AllTracks_GeoJSON_data/bike001750421.geojson"))

In [14]:
street_buffer_gpd = street_gpd[['OBJECTID','STREETSEGID','geometry']].copy()
street_buffer_gpd.geometry = street_buffer_gpd.buffer(0.0001)

In [15]:
merged = sjoin(bike_test_gpd, street_buffer_gpd, how='left')


Warning: CRS does not match!

In [16]:
merged.plot()


Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x1181d6080>

In [18]:
vision0_buffer_gpd = vision0_gpd[['OBJECTID','STREETSEGID','geometry','REQUESTDATE','USERTYPE', 'REQUESTTYPE']].copy()
vision0_buffer_gpd.geometry = vision0_buffer_gpd.buffer(0.0001)
joined = sjoin(vision0_buffer_gpd, street_buffer_gpd, how='left', op='intersects')

In [19]:
joined.plot()


Out[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x114f7dd30>

In [20]:
bike_test_gpd.crs = street_buffer_gpd.crs

In [21]:
merged = sjoin(bike_test_gpd, street_buffer_gpd, how='left')

In [22]:
merged.plot()


Out[22]:
<matplotlib.axes._subplots.AxesSubplot at 0x141b382b0>

In [23]:
bike_test_gpd.geometry = bike_test_gpd.buffer(0.0001)
merged = sjoin(bike_test_gpd, street_buffer_gpd, how='left', op='intersects')
merged.plot()


Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x1168a4d68>

In [30]:
def snap_to_road(lat_long,flag):
   gmaps = googlemaps.Client(key='AIzaSyCSjoMtSS77aHsxCS3QR3yWK7CbbwWwYAI')#AIzaSyASd63puqw_-zZ9I4rpBtIeHzOPiSHHlfs')
   points = len(lat_long)
   lat_long = lat_long[1:points]
   points = points-1
   iter_end = math.ceil(points/150)
   new_gps = []

   for i in range(iter_end):
       start = i*150
       if(i!=iter_end-1):
           end = start + 149
       else:
           end = points
       cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
       count = len(cor_gps)
       for i in range(count):
           new_gps.append((cor_gps[i]['location']['latitude'],cor_gps[i]['location']['longitude']))
   return new_gps

In [32]:
%pylab inline
import geopandas as gpd
from geopandas.tools import sjoin
import pandas as pd
from IPython.display import display
import snap
from pandas import DataFrame
from geopandas import GeoDataFrame
from shapely.geometry import Point
import googlemaps


Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['long']
`%matplotlib` prevents importing * from pylab and numpy

In [34]:
def snap_to_road(lat_long,flag):
   gmaps = googlemaps.Client(key='AIzaSyCSjoMtSS77aHsxCS3QR3yWK7CbbwWwYAI')#AIzaSyASd63puqw_-zZ9I4rpBtIeHzOPiSHHlfs')
   points = len(lat_long)
   lat_long = lat_long[1:points]
   points = points-1
   iter_end = math.ceil(points/100)
   new_gps = []

   for i in range(iter_end):
       start = i*100
       if(i!=iter_end-1):
           end = start + 99
       else:
           end = points
       cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
       count = len(cor_gps)
       for i in range(count):
           new_gps.append((cor_gps[i]['location']['latitude'],cor_gps[i]['location']['longitude']))
   return new_gps

In [36]:
import csv

In [37]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        if Path(os.path.join(new_dir_true, fname_true)).is_file():
            continue
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        data = data.dropna()
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
bike003440501.csv
bike003440502.csv
bike003440503.csv
bike003440504.csv
bike003440505.csv
bike003440506.csv
bike003440507.csv
bike003440508.csv
bike003580422.csv
bike003580423.csv
bike003580424.csv
bike003580425.csv
bike003580426.csv
bike003580427.csv
bike003580429.csv
bike003580501.csv
bike003580502.csv
bike003580505.csv
bike003860422.csv
bike003860423.csv
bike003860424.csv
bike003860425.csv
bike003860426.csv
bike003860427.csv
bike003860428.csv
bike003860429.csv
bike003860502.csv
bike003860503.csv
bike004170422.csv
bike004170423.csv
bike004170424.csv
bike004170425.csv
bike004170426.csv
bike004170427.csv
bike004170428.csv
bike004170429.csv
bike004170430.csv
bike004170501.csv
bike004170502.csv
bike004170503.csv
bike006310421.csv
bike006310422.csv
bike006310423.csv
bike006310424.csv
bike006310428.csv
bike006310429.csv
bike006310430.csv
bike006310501.csv
bike006310502.csv
bike006310503.csv
bike006810421.csv
bike006810422.csv
bike006810423.csv
bike006810424.csv
bike006810430.csv
bike006810506.csv
bike006810507.csv
bike006810508.csv
bike006810509.csv
bike006810510.csv
bike006810511.csv
bike006810512.csv
bike007080422.csv
bike007080424.csv
bike007080428.csv
bike007080429.csv
bike007080430.csv
bike007080501.csv
bike007080502.csv
bike007080503.csv
bike007080504.csv
bike007080505.csv
bike007080509.csv
bike007080510.csv
bike007080511.csv
bike007080512.csv
bike007080513.csv
bike007120422.csv
bike007120423.csv
bike007120425.csv
bike007120426.csv
bike007120427.csv
bike007120428.csv
bike007120429.csv
bike007120430.csv
bike007120501.csv
bike007120502.csv
bike007120503.csv
bike007500423.csv
bike007500424.csv
bike007500425.csv
bike007500426.csv
bike007500427.csv
bike007500428.csv
bike007500429.csv
bike007500430.csv
bike007500501.csv
bike008560422.csv
bike008560424.csv
bike008560425.csv
bike008560426.csv
bike008560428.csv
bike008560429.csv
bike008560430.csv
bike008560501.csv
bike008560502.csv
bike008560503.csv
bike008700421.csv
bike008700422.csv
bike008700423.csv
bike008700424.csv
bike008700425.csv
bike008700426.csv
bike008700427.csv
bike008700428.csv
bike008700429.csv
bike008700430.csv
bike008700501.csv
bike008700502.csv
bike008700503.csv
bike008930421.csv
bike008930422.csv
bike008930423.csv
bike008930424.csv
bike008930425.csv
bike008930426.csv
bike008930427.csv
bike008930428.csv
bike008930429.csv
bike010030420.csv
bike010030421.csv
bike010030422.csv
bike010030423.csv
bike010030424.csv
bike010030425.csv
bike010030426.csv
bike010030427.csv
bike011070420.csv
bike011070421.csv
bike011070422.csv
bike011070423.csv
bike011070424.csv
bike011070425.csv
bike011070426.csv
bike011070427.csv
bike011070428.csv
bike011070429.csv
bike011070430.csv
bike011920420.csv
bike011920427.csv
bike011920428.csv
bike011920429.csv
bike011920430.csv
bike011920501.csv
bike011920508.csv
bike011920511.csv
bike011920512.csv
bike011920513.csv
bike011920514.csv
bike012160421.csv
bike012160422.csv
bike012160423.csv
bike012160424.csv
bike012160425.csv
bike012160426.csv
bike012160427.csv
bike012160428.csv
bike012160429.csv
bike012160430.csv
bike012160501.csv
bike012160502.csv
bike012270421.csv
bike012270428.csv
bike012270429.csv
bike012270430.csv
bike012270501.csv
bike012270502.csv
bike012270503.csv
bike012270504.csv
bike012750421.csv
bike012750422.csv
bike012750423.csv
bike012750426.csv
bike012750427.csv
bike012750428.csv
bike012750501.csv
bike012750502.csv
bike012750503.csv
bike012750504.csv
bike012750507.csv
bike012750508.csv
bike012750509.csv
bike012750510.csv
bike012750511.csv
bike013290421.csv
bike013290422.csv
bike013290424.csv
bike013290425.csv
bike013290426.csv
bike013290427.csv
bike013290428.csv
bike013290429.csv
bike014090421.csv
bike014090422.csv
bike014090423.csv
bike014090424.csv
bike014090425.csv
bike014090426.csv
bike014090427.csv
bike014090428.csv
bike014090429.csv
bike014090430.csv
bike014090501.csv
bike201470422.csv
bike201470424.csv
bike201470425.csv
bike201470427.csv
bike201470428.csv
bike201470429.csv
bike201470430.csv
bike201470501.csv
bike203530421.csv
bike203530426.csv
bike203530427.csv
bike203530428.csv
bike203530429.csv
bike203530430.csv
bike203530501.csv
bike203530502.csv
bike203770421.csv
bike203770422.csv
bike203770423.csv
bike203770424.csv
bike203770426.csv
bike204150420.csv
bike204150421.csv
bike204150422.csv
bike204150423.csv
bike204150424.csv
bike204150425.csv
bike204150430.csv
bike204150501.csv
bike204150502.csv
bike204270422.csv
bike204270424.csv
bike204270425.csv
bike204270426.csv
bike204270427.csv
bike204540422.csv
bike204540426.csv
bike204540427.csv
bike204540429.csv
bike204540430.csv
bike204540503.csv
bike204540505.csv
bike204540506.csv
bike205200421.csv
bike205200422.csv
bike205200423.csv
bike205200424.csv
bike205200425.csv
bike205200426.csv
bike205200427.csv
bike205200428.csv
bike205220422.csv
bike205220423.csv
bike205220424.csv
bike205220425.csv
bike205220426.csv
bike205220427.csv
bike205220428.csv
bike205220429.csv
bike205670421.csv
bike205670424.csv
bike205670428.csv
bike205670429.csv
bike205670430.csv
bike205670501.csv
bike205670502.csv
bike205670504.csv
bike206380423.csv
bike206380424.csv
bike206380425.csv
bike206380426.csv
bike206380427.csv
bike206380428.csv
bike206380429.csv
bike206380430.csv
bike206570422.csv
bike206570423.csv
bike206570424.csv
bike206570425.csv
bike206570427.csv
bike206570428.csv
bike206570429.csv
bike206570430.csv
bike206570501.csv
bike206570502.csv
bike206570503.csv
bike206570504.csv
bike206570505.csv
bike206860421.csv
bike206860422.csv
bike206860423.csv
bike206860424.csv
bike206860425.csv
bike206860426.csv
bike206860427.csv
bike206860428.csv
bike206860429.csv
bike206870420.csv
bike206870421.csv
bike206870422.csv
bike206870423.csv
bike206870424.csv
bike206870425.csv
bike206870426.csv
bike206870427.csv
bike206870428.csv
bike206870429.csv
bike206960420.csv
bike206960421.csv
bike206960422.csv
bike206960423.csv
bike206960424.csv
bike206960425.csv
bike206960426.csv
bike206960427.csv
bike206960428.csv
bike206960429.csv
bike207240421.csv
bike207240422.csv
bike207240423.csv
bike207240424.csv
bike207240426.csv
bike207240427.csv
bike207510421.csv
bike207510422.csv
bike207510423.csv
bike207510424.csv
bike207510425.csv
bike207510426.csv
bike207510427.csv
bike207510428.csv
bike207510429.csv
bike207510430.csv
bike207510501.csv
bike208000422.csv
bike208000424.csv
bike208000425.csv
bike208000426.csv
bike208000427.csv
bike208000428.csv
bike208000501.csv
bike208000502.csv
bike208000503.csv
bike208240421.csv
bike208240422.csv
bike208240425.csv
bike208240426.csv
bike208240427.csv
bike208240428.csv
bike208240429.csv
bike208240430.csv
bike208440422.csv
bike208440423.csv
bike208440424.csv
bike208440427.csv
bike208440428.csv
bike208440429.csv
bike208440430.csv
bike208440501.csv
bike208940421.csv
bike208940422.csv
bike208940423.csv
bike208940424.csv
bike208940425.csv
---------------------------------------------------------------------------
_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

_RetriableRequest                         Traceback (most recent call last)
//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    237             if extract_body:
--> 238                 result = extract_body(resp)
    239             else:

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in _roads_extract(resp)
    114         if status == "RESOURCE_EXHAUSTED":
--> 115             raise googlemaps.exceptions._RetriableRequest()
    116 

_RetriableRequest: 

During handling of the above exception, another exception occurred:

Timeout                                   Traceback (most recent call last)
<ipython-input-37-65a47701b3bb> in <module>()
     16 
     17         temp1 = snap_to_road(lat_long,True)
---> 18         temp2 = snap_to_road(lat_long,False)
     19 
     20         with open(os.path.join(new_dir_true, fname_true),'w+') as file:

<ipython-input-34-ce249a55e026> in snap_to_road(lat_long, flag)
     13        else:
     14            end = points
---> 15        cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
     16        count = len(cor_gps)
     17        for i in range(count):

//anaconda/lib/python3.5/site-packages/googlemaps/roads.py in snap_to_roads(client, path, interpolate)
     54                        base_url=_ROADS_BASE_URL,
     55                        accepts_clientid=False,
---> 56                        extract_body=_roads_extract).get("snappedPoints", [])
     57 
     58 

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    244             # Retry request.
    245             return self._get(url, params, first_request_time, retry_counter + 1,
--> 246                              base_url, accepts_clientid, extract_body)
    247 
    248     def _get_body(self, resp):

//anaconda/lib/python3.5/site-packages/googlemaps/client.py in _get(self, url, params, first_request_time, retry_counter, base_url, accepts_clientid, extract_body, requests_kwargs)
    199         elapsed = datetime.now() - first_request_time
    200         if elapsed > self.retry_timeout:
--> 201             raise googlemaps.exceptions.Timeout()
    202 
    203         if retry_counter > 0:

Timeout: 

In [41]:
import xlrd

In [44]:
street_pd = pd.read_csv('../Street_Segments_new.csv')
bike_lane_pd = pd.read_csv('../Bike_Lane_Street_RightofWay.csv')
bike_lane_street_join = bike_lane_pd.merge(street_pd, on='STREETSEGID')
bike_lane_street_join.to_csv('../Bike_Lane_Street_Seg_Join.csv')

In [45]:
bike_test_gpd.geometry = bike_test_gpd.buffer(0.0001)
merged = sjoin(bike_test_gpd, street_buffer_gpd, how='left', op='intersects')
merged.plot()


Out[45]:
<matplotlib.axes._subplots.AxesSubplot at 0x13f843390>

In [46]:
merged.to_file('../Bike_Lane_Street_Seg_Join.txt')

In [47]:
merged.head()


Out[47]:
Altitude Course Date Distance Essential Latitude Longitude Speed Time Type geometry index_right OBJECTID STREETSEGID
0 43.02 10 2015-04-21 0.00 1 38.868263 -77.013260 216 14:42:34 -2 POLYGON ((-77.01306012045438 38.86826790676747... 12283.0 12284.0 3999.0
1 46.17 66 2015-04-21 8.08 1 38.868275 -77.013168 72 14:43:55 0 POLYGON ((-77.01296812045437 38.86827990676747... 12283.0 12284.0 3999.0
2 15.52 119 2015-04-21 6.76 1 38.868313 -77.013229 0 14:45:18 0 POLYGON ((-77.01302912045438 38.86831790676747... 12283.0 12284.0 3999.0
3 39.19 149 2015-04-21 3.24 1 38.868290 -77.013206 0 14:45:31 0 POLYGON ((-77.01300612045438 38.86829490676747... 12283.0 12284.0 3999.0
4 109.01 26 2015-04-21 35.97 1 38.867981 -77.013329 0 14:45:45 0 POLYGON ((-77.01312912045438 38.86798590676747... 12283.0 12284.0 3999.0

In [49]:
merged.to_csv('../Bike_1_test_Street_Segment_Join.csv')

In [51]:
bike_test_2_gpd = GeoDataFrame(gpd.read_file("../GPSTRaces/AllTracks_GeoJSON_data/bike001750422.geojson"))
bike_test_2_gpd.crs = street_buffer_gpd.crs
merged = sjoin(bike_test_2_gpd, street_buffer_gpd, how='left', op='intersects')
merged.plot()
merged.to_csv('../Bike_2_test_Street_Segment_Join.csv')



In [52]:
merged[merged.STREETSEGID==579]


Out[52]:
Altitude Course Date Distance Essential Latitude Longitude Speed Time Type geometry index_right OBJECTID STREETSEGID
8 121.08 219 2015-04-22 23.66 1 38.90527 -77.043411 15408 07:40:04 0 POINT (-77.04341100000001 38.90527) 1154.0 1155.0 579.0

In [53]:
street_gpd[street_buffer_gpd.STREETSEGID == 579]


Out[53]:
BEGINMEASURE DIRECTIONALITY ENDMEASURE FACILITYID FROMADDRESSLEFTTHEO FROMADDRESSRIGHTTHEO FROMNODEID OBJECTID OBJECTID_1 QUADRANT ... SHAPE_Length SOURCEID STREETID STREETSEGID STREETTYPE TOADDRESSLEFTTHEO TOADDRESSRIGHTTHEO TONODEID UPDATETIMESTAMP geometry
1154 0 1 212.204956 SEGID-579 1100.0 1101.0 21822 1155 1128 NW ... 212.204977 10190110 100190 579 ST 1198.0 1199.0 21690 2005-11-01T12:55:47 LINESTRING (-77.04345866179624 38.903752066032...

1 rows × 22 columns


In [69]:
test_point = {'Longitude': -77.043411, 'Latitude': 38.90527}
test_df = pd.DataFrame(data=[test_point])

In [70]:
print(test_df)


   Latitude  Longitude
0  38.90527 -77.043411

In [71]:
print(test_df.Longitude)


0   -77.043411
Name: Longitude, dtype: float64

In [72]:
test_gpd = gpd.GeoDataFrame(test_df)

In [73]:
point = [Point(test_df.Longitude, test_df.Latitude)]
test_gpd = GeoDataFrame(test_df,geometry=point)
test_gpd.crs = street_buffer_gpd.crs merge_point = sjoin(test_gpd, street_buffer_gpd, how='left', op='intersects') merge_point.plot()

In [75]:
print(merge_point)


   Latitude  Longitude                             geometry  index_right  \
0  38.90527 -77.043411  POINT (-77.04341100000001 38.90527)         1154   

   OBJECTID  STREETSEGID  
0      1155          579  

In [76]:
merge_point.STREETSEGID


Out[76]:
0    579
Name: STREETSEGID, dtype: int64

In [81]:
merge_point.iloc[0]['STREETSEGID']


Out[81]:
579

In [82]:
street_gpd[street_buffer_gpd.STREETSEGID==merge_point.iloc[0]['STREETSEGID']]


Out[82]:
BEGINMEASURE DIRECTIONALITY ENDMEASURE FACILITYID FROMADDRESSLEFTTHEO FROMADDRESSRIGHTTHEO FROMNODEID OBJECTID OBJECTID_1 QUADRANT ... SHAPE_Length SOURCEID STREETID STREETSEGID STREETTYPE TOADDRESSLEFTTHEO TOADDRESSRIGHTTHEO TONODEID UPDATETIMESTAMP geometry
1154 0 1 212.204956 SEGID-579 1100.0 1101.0 21822 1155 1128 NW ... 212.204977 10190110 100190 579 ST 1198.0 1199.0 21690 2005-11-01T12:55:47 LINESTRING (-77.04345866179624 38.903752066032...

1 rows × 22 columns


In [84]:
def snap_to_road(lat_long,flag):
   gmaps = googlemaps.Client(key='AIzaSyASd63puqw_-zZ9I4rpBtIeHzOPiSHHlfs') #AIzaSyCSjoMtSS77aHsxCS3QR3yWK7CbbwWwYAI')
   points = len(lat_long)
   lat_long = lat_long[1:points]
   points = points-1
   iter_end = math.ceil(points/100)
   new_gps = []

   for i in range(iter_end):
       start = i*100
       if(i!=iter_end-1):
           end = start + 99
       else:
           end = points
       cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
       count = len(cor_gps)
       for i in range(count):
           new_gps.append((cor_gps[i]['location']['latitude'],cor_gps[i]['location']['longitude']))
   return new_gps

In [86]:
def snap_to_road(lat_long,flag):
   gmaps = googlemaps.Client(key='AIzaSyCSjoMtSS77aHsxCS3QR3yWK7CbbwWwYAI') #AIzaSyASd63puqw_-zZ9I4rpBtIeHzOPiSHHlfs')
   points = len(lat_long)
   lat_long = lat_long[1:points]
   points = points-1
   iter_end = math.ceil(points/100)
   new_gps = []

   for i in range(iter_end):
       start = i*100
       if(i!=iter_end-1):
           end = start + 99
       else:
           end = points
       cor_gps = gmaps.snap_to_roads(lat_long[start:end],interpolate = flag)
       count = len(cor_gps)
       for i in range(count):
           new_gps.append((cor_gps[i]['location']['latitude'],cor_gps[i]['location']['longitude']))
   return new_gps

In [87]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        if Path(os.path.join(new_dir_true, fname_true)).is_file():
            continue
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        data = data.dropna()
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
bike003440501.csv
bike003440502.csv
bike003440503.csv
bike003440504.csv
bike003440505.csv
bike003440506.csv
bike003440507.csv
bike003440508.csv
bike003580422.csv
bike003580423.csv
bike003580424.csv
bike003580425.csv
bike003580426.csv
bike003580427.csv
bike003580429.csv
bike003580501.csv
bike003580502.csv
bike003580505.csv
bike003860422.csv
bike003860423.csv
bike003860424.csv
bike003860425.csv
bike003860426.csv
bike003860427.csv
bike003860428.csv
bike003860429.csv
bike003860502.csv
bike003860503.csv
bike004170422.csv
bike004170423.csv
bike004170424.csv
bike004170425.csv
bike004170426.csv
bike004170427.csv
bike004170428.csv
bike004170429.csv
bike004170430.csv
bike004170501.csv
bike004170502.csv
bike004170503.csv
bike006310421.csv
bike006310422.csv
bike006310423.csv
bike006310424.csv
bike006310428.csv
bike006310429.csv
bike006310430.csv
bike006310501.csv
bike006310502.csv
bike006310503.csv
bike006810421.csv
bike006810422.csv
bike006810423.csv
bike006810424.csv
bike006810430.csv
bike006810506.csv
bike006810507.csv
bike006810508.csv
bike006810509.csv
bike006810510.csv
bike006810511.csv
bike006810512.csv
bike007080422.csv
bike007080424.csv
bike007080428.csv
bike007080429.csv
bike007080430.csv
bike007080501.csv
bike007080502.csv
bike007080503.csv
bike007080504.csv
bike007080505.csv
bike007080509.csv
bike007080510.csv
bike007080511.csv
bike007080512.csv
bike007080513.csv
bike007120422.csv
bike007120423.csv
bike007120425.csv
bike007120426.csv
bike007120427.csv
bike007120428.csv
bike007120429.csv
bike007120430.csv
bike007120501.csv
bike007120502.csv
bike007120503.csv
bike007500423.csv
bike007500424.csv
bike007500425.csv
bike007500426.csv
bike007500427.csv
bike007500428.csv
bike007500429.csv
bike007500430.csv
bike007500501.csv
bike008560422.csv
bike008560424.csv
bike008560425.csv
bike008560426.csv
bike008560428.csv
bike008560429.csv
bike008560430.csv
bike008560501.csv
bike008560502.csv
bike008560503.csv
bike008700421.csv
bike008700422.csv
bike008700423.csv
bike008700424.csv
bike008700425.csv
bike008700426.csv
bike008700427.csv
bike008700428.csv
bike008700429.csv
bike008700430.csv
bike008700501.csv
bike008700502.csv
bike008700503.csv
bike008930421.csv
bike008930422.csv
bike008930423.csv
bike008930424.csv
bike008930425.csv
bike008930426.csv
bike008930427.csv
bike008930428.csv
bike008930429.csv
bike010030420.csv
bike010030421.csv
bike010030422.csv
bike010030423.csv
bike010030424.csv
bike010030425.csv
bike010030426.csv
bike010030427.csv
bike011070420.csv
bike011070421.csv
bike011070422.csv
bike011070423.csv
bike011070424.csv
bike011070425.csv
bike011070426.csv
bike011070427.csv
bike011070428.csv
bike011070429.csv
bike011070430.csv
bike011920420.csv
bike011920427.csv
bike011920428.csv
bike011920429.csv
bike011920430.csv
bike011920501.csv
bike011920508.csv
bike011920511.csv
bike011920512.csv
bike011920513.csv
bike011920514.csv
bike012160421.csv
bike012160422.csv
bike012160423.csv
bike012160424.csv
bike012160425.csv
bike012160426.csv
bike012160427.csv
bike012160428.csv
bike012160429.csv
bike012160430.csv
bike012160501.csv
bike012160502.csv
bike012270421.csv
bike012270428.csv
bike012270429.csv
bike012270430.csv
bike012270501.csv
bike012270502.csv
bike012270503.csv
bike012270504.csv
bike012750421.csv
bike012750422.csv
bike012750423.csv
bike012750426.csv
bike012750427.csv
bike012750428.csv
bike012750501.csv
bike012750502.csv
bike012750503.csv
bike012750504.csv
bike012750507.csv
bike012750508.csv
bike012750509.csv
bike012750510.csv
bike012750511.csv
bike013290421.csv
bike013290422.csv
bike013290424.csv
bike013290425.csv
bike013290426.csv
bike013290427.csv
bike013290428.csv
bike013290429.csv
bike014090421.csv
bike014090422.csv
bike014090423.csv
bike014090424.csv
bike014090425.csv
bike014090426.csv
bike014090427.csv
bike014090428.csv
bike014090429.csv
bike014090430.csv
bike014090501.csv
bike201470422.csv
bike201470424.csv
bike201470425.csv
bike201470427.csv
bike201470428.csv
bike201470429.csv
bike201470430.csv
bike201470501.csv
bike203530421.csv
bike203530426.csv
bike203530427.csv
bike203530428.csv
bike203530429.csv
bike203530430.csv
bike203530501.csv
bike203530502.csv
bike203770421.csv
bike203770422.csv
bike203770423.csv
bike203770424.csv
bike203770426.csv
bike204150420.csv
bike204150421.csv
bike204150422.csv
bike204150423.csv
bike204150424.csv
bike204150425.csv
bike204150430.csv
bike204150501.csv
bike204150502.csv
bike204270422.csv
bike204270424.csv
bike204270425.csv
bike204270426.csv
bike204270427.csv
bike204540422.csv
bike204540426.csv
bike204540427.csv
bike204540429.csv
bike204540430.csv
bike204540503.csv
bike204540505.csv
bike204540506.csv
bike205200421.csv
bike205200422.csv
bike205200423.csv
bike205200424.csv
bike205200425.csv
bike205200426.csv
bike205200427.csv
bike205200428.csv
bike205220422.csv
bike205220423.csv
bike205220424.csv
bike205220425.csv
bike205220426.csv
bike205220427.csv
bike205220428.csv
bike205220429.csv
bike205670421.csv
bike205670424.csv
bike205670428.csv
bike205670429.csv
bike205670430.csv
bike205670501.csv
bike205670502.csv
bike205670504.csv
bike206380423.csv
bike206380424.csv
bike206380425.csv
bike206380426.csv
bike206380427.csv
bike206380428.csv
bike206380429.csv
bike206380430.csv
bike206570422.csv
bike206570423.csv
bike206570424.csv
bike206570425.csv
bike206570427.csv
bike206570428.csv
bike206570429.csv
bike206570430.csv
bike206570501.csv
bike206570502.csv
bike206570503.csv
bike206570504.csv
bike206570505.csv
bike206860421.csv
bike206860422.csv
bike206860423.csv
bike206860424.csv
bike206860425.csv
bike206860426.csv
bike206860427.csv
bike206860428.csv
bike206860429.csv
bike206870420.csv
bike206870421.csv
bike206870422.csv
bike206870423.csv
bike206870424.csv
bike206870425.csv
bike206870426.csv
bike206870427.csv
bike206870428.csv
bike206870429.csv
bike206960420.csv
bike206960421.csv
bike206960422.csv
bike206960423.csv
bike206960424.csv
bike206960425.csv
bike206960426.csv
bike206960427.csv
bike206960428.csv
bike206960429.csv
bike207240421.csv
bike207240422.csv
bike207240423.csv
bike207240424.csv
bike207240426.csv
bike207240427.csv
bike207510421.csv
bike207510422.csv
bike207510423.csv
bike207510424.csv
bike207510425.csv
bike207510426.csv
bike207510427.csv
bike207510428.csv
bike207510429.csv
bike207510430.csv
bike207510501.csv
bike208000422.csv
bike208000424.csv
bike208000425.csv
bike208000426.csv
bike208000427.csv
bike208000428.csv
bike208000501.csv
bike208000502.csv
bike208000503.csv
bike208240421.csv
bike208240422.csv
bike208240425.csv
bike208240426.csv
bike208240427.csv
bike208240428.csv
bike208240429.csv
bike208240430.csv
bike208440422.csv
bike208440423.csv
bike208440424.csv
bike208440427.csv
bike208440428.csv
bike208440429.csv
bike208440430.csv
bike208440501.csv
bike208940421.csv
bike208940422.csv
bike208940423.csv
bike208940424.csv
bike208940425.csv
bike208940426.csv
bike208940427.csv
bike208940428.csv
bike208940429.csv
bike209050421.csv
bike209050422.csv
bike209050425.csv
bike209050426.csv
bike209050428.csv
bike209050429.csv
bike209050430.csv
bike209050501.csv
bike209360422.csv
bike209360423.csv
bike209360501.csv
bike209360502.csv
bike209360503.csv
bike209360504.csv
bike209570421.csv
bike209570422.csv
bike209570426.csv
bike209570428.csv
bike209570429.csv
bike209570430.csv
bike210010423.csv
bike210010424.csv
bike210010425.csv
bike210010426.csv
bike210010427.csv
bike210010428.csv
bike210010430.csv
bike210010501.csv
bike210010502.csv
bike210010503.csv
bike210010504.csv
bike210250421.csv
bike210250422.csv
bike210250423.csv
bike210250424.csv
bike210250425.csv
bike210250426.csv
bike210250427.csv
bike210250428.csv
bike210250429.csv
bike210410423.csv
bike210410424.csv
bike210410425.csv
bike210410426.csv
bike210410427.csv
bike210410428.csv
bike210410429.csv
bike210410430.csv
bike211430421.csv
bike211430422.csv
bike211430423.csv
bike211430424.csv
bike211430425.csv
bike211430426.csv
bike211430427.csv
bike211430428.csv
bike211430429.csv
bike211620421.csv
bike211620422.csv
bike211620423.csv
bike211620424.csv
bike211620425.csv
bike211620426.csv
bike211620427.csv
bike211620428.csv
bike211620429.csv
bike211620430.csv
bike211630420.csv
bike211630421.csv
bike211630422.csv
bike211630423.csv
bike211630426.csv
bike211630427.csv
bike211630428.csv
bike211630429.csv
bike211630430.csv
bike211630501.csv
bike212150421.csv
bike212150422.csv
bike212150424.csv
bike212150425.csv
bike212150426.csv
bike212150427.csv
bike212150428.csv
bike212150429.csv
bike212150430.csv
bike212150501.csv
bike212150502.csv
bike212560422.csv
bike212560423.csv
bike212560424.csv
bike212560425.csv
bike212560426.csv
bike212560429.csv
bike212560430.csv
bike212560502.csv
bike212560503.csv
bike212560504.csv
bike212560505.csv
bike212560506.csv
bike212560507.csv
bike212560508.csv
bike212560509.csv
bike212760422.csv
bike212760423.csv
bike212760424.csv
bike212760425.csv
bike212760426.csv
bike212760428.csv
bike212760429.csv
bike212760430.csv
bike212810421.csv
bike212810422.csv
bike212810423.csv
bike212810424.csv
bike212810425.csv
bike212810426.csv
bike212810427.csv
bike212810428.csv
bike213940422.csv
bike213940423.csv
bike213940424.csv
bike213940425.csv
bike213940426.csv
bike213940427.csv
bike213940428.csv
bike213940429.csv
bike213940430.csv
bike214110422.csv
bike214110423.csv
bike214110424.csv
bike214110425.csv
bike214110426.csv
bike214110427.csv
bike214110428.csv
bike214110429.csv
bike214110430.csv
bike214280421.csv
bike214280422.csv
bike214280423.csv
bike214280424.csv
bike214280425.csv
bike214280426.csv
bike214280427.csv
bike214710426.csv
bike214710427.csv
bike214710428.csv
bike214710429.csv
bike214710430.csv
bike214710501.csv
bike214710502.csv
bike214710503.csv
bike214710505.csv
bike214710506.csv
bike214710507.csv
bike215370422.csv
bike215370423.csv
bike215370424.csv
bike215370425.csv
bike215370429.csv
bike215370430.csv
bike215370501.csv
bike215650420.csv
bike215650422.csv
bike215650423.csv
bike215650424.csv
bike215650425.csv
bike215650426.csv
bike215650430.csv
bike215650501.csv
bike215650502.csv
bike215650503.csv
bike215740421.csv
bike215740422.csv
bike215740424.csv
bike215740425.csv
bike215740426.csv
bike215740427.csv
bike215740428.csv
bike215740429.csv
bike215740430.csv
bike216100421.csv
bike216100422.csv
bike216100423.csv
bike216100424.csv
bike216100425.csv
bike216100426.csv
bike216100427.csv
bike216100428.csv
bike216100429.csv
bike216590421.csv
bike216590422.csv
bike216590423.csv
bike216590424.csv
bike216590427.csv
bike216590428.csv
bike216590429.csv
bike217080421.csv
bike217080422.csv
bike217080423.csv
bike217080424.csv
bike217080425.csv
bike217080426.csv
bike217080427.csv
bike217080428.csv
bike217080429.csv
bike217080501.csv
bike217080502.csv
bike217530421.csv
bike217530422.csv
bike217530424.csv
bike217530425.csv
bike217530426.csv
bike217530428.csv
bike217530430.csv
bike217530502.csv
bike217530503.csv
bike217770422.csv
bike217770423.csv
bike217770424.csv
bike217770425.csv
bike217770427.csv
bike217770428.csv
bike217770429.csv
bike217770430.csv
bike217770501.csv
bike218340420.csv
bike218340421.csv
bike218340422.csv
bike218340424.csv
bike218340426.csv
bike218340427.csv
bike218340428.csv
bike218340429.csv
bike218340430.csv
bike218440423.csv
bike218440424.csv
bike218440425.csv
bike218440426.csv
bike218440427.csv
bike218440428.csv
bike218440429.csv
bike218560421.csv
bike218560422.csv
bike218560423.csv
bike218560424.csv
bike218560425.csv
bike218560426.csv
bike218560427.csv
bike219230423.csv
bike219230424.csv
bike219230425.csv
bike219230426.csv
bike219230427.csv
bike219230428.csv
bike219230429.csv
bike219230501.csv
bike220020422.csv
bike220020428.csv
bike220020429.csv
bike220020430.csv
bike220020501.csv
bike220020503.csv
bike220020504.csv
bike220020505.csv
bike220020507.csv
bike220020508.csv
bike220020509.csv
bike220020513.csv
bike220020514.csv
bike220020515.csv
bike220020516.csv
bike220440420.csv
bike220440421.csv
bike220440422.csv
bike220440424.csv
bike220440425.csv
bike220440426.csv
bike220440427.csv
bike220440428.csv
bike220440430.csv
bike220490423.csv
bike220490424.csv
bike220490425.csv
bike220490426.csv
bike220490427.csv
bike220490428.csv
bike220490429.csv
bike220490430.csv
bike220770426.csv
bike220770427.csv
bike220770428.csv
bike220770429.csv
bike220770430.csv
bike220770501.csv
bike220770502.csv
bike220840421.csv
bike220840422.csv
bike220840423.csv
bike220840427.csv
bike220840429.csv
bike220840504.csv
bike220840505.csv
bike220840506.csv
bike220840509.csv
bike220840515.csv
bike220870421.csv
bike220870422.csv
bike220870423.csv
bike220870424.csv
bike220870425.csv
bike220870426.csv
bike220870427.csv
bike220870428.csv
bike220880420.csv
bike220880421.csv
bike220880422.csv
bike220880423.csv
bike220880424.csv
bike220880425.csv
bike220880426.csv
bike220880501.csv
bike220880504.csv
bike220880505.csv
bike220880506.csv
bike220880507.csv
bike220940423.csv
bike220940424.csv
bike220940425.csv
bike220940428.csv
bike220940429.csv
bike220940504.csv
bike220940507.csv
bike220990421.csv
bike220990422.csv
bike221090420.csv
bike221090421.csv
bike221090422.csv
bike221090423.csv
bike221090424.csv
bike221090426.csv
bike221090427.csv
bike221090428.csv
bike221090429.csv
bike221560422.csv
bike221560424.csv
bike221560425.csv
bike221560426.csv
bike221560427.csv
bike221560428.csv
bike221560429.csv
bike221560430.csv
bike221760421.csv
bike221760422.csv
bike221760423.csv
bike221760424.csv
bike221760425.csv
bike221760426.csv
bike221760427.csv
bike221760428.csv
bike221760429.csv
bike221910421.csv
bike221910422.csv
bike221910424.csv
bike221910426.csv
bike221910427.csv
bike221910428.csv
bike221910429.csv
bike221910430.csv
bike221910501.csv
bike221910504.csv
bike221910505.csv
bike222080421.csv
bike222080422.csv
bike222080423.csv
bike222080424.csv
bike222080426.csv
bike222080502.csv
bike222080503.csv
bike222080504.csv
bike222080506.csv
bike222080512.csv
bike222080513.csv
bike222110420.csv
bike222110421.csv
bike222110422.csv
bike222110423.csv
bike222110424.csv
bike222110425.csv
bike222110426.csv
bike222110428.csv
bike222110429.csv
bike222120421.csv
bike222120428.csv
bike222120502.csv
bike222120503.csv
bike222120505.csv
bike222120507.csv
bike222120509.csv
bike222120510.csv
bike222120511.csv
bike222120512.csv
bike222120514.csv
bike222120515.csv
bike222210422.csv
bike222210423.csv
bike222210424.csv
bike222210425.csv
bike222210426.csv
bike222370421.csv
bike222370422.csv
bike222370423.csv
bike222370424.csv
bike222370425.csv
bike222370426.csv
bike222370427.csv
bike222370428.csv
bike222370429.csv
bike222380421.csv
bike222380422.csv
bike222380423.csv
bike222380424.csv
bike222380425.csv
bike222380426.csv
bike222380427.csv
bike222380428.csv
bike222380429.csv
bike222380430.csv
bike222380502.csv
bike222380503.csv
Bike_trace_data_1.csv

In [88]:
directory = "../GPSTRaces/AllTracks/"
new_dir_true = "../GPSTRaces/AllTracks_SnapToRoad_interpolate/"
new_dir_false = "../GPSTRaces/AllTracks_SnapToRoad/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        print(filename)
        fname_true = os.path.splitext(filename)[0] + 'str_true.csv'
        if Path(os.path.join(new_dir_true, fname_true)).is_file():
            continue
        fname_false = os.path.splitext(filename)[0] + 'str_false.csv'
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        data = data.dropna()
        lat = data.Latitude
        long = data.Longitude
        lat_long = [list(a) for a in zip(lat,long)]
        
        temp1 = snap_to_road(lat_long,True)
        temp2 = snap_to_road(lat_long,False)
        
        with open(os.path.join(new_dir_true, fname_true),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp1)
            
        with open(os.path.join(new_dir_false, fname_false),'w+') as file:
            writer = csv.writer(file)
            writer.writerow(["Latitude","Longitude"])
            writer.writerows(temp2)


bike001750421.csv
bike001750422.csv
bike001750423.csv
bike001750428.csv
bike001750429.csv
bike001750430.csv
bike001750502.csv
bike002210421.csv
bike002210422.csv
bike002210428.csv
bike002210429.csv
bike002210430.csv
bike002210501.csv
bike002210502.csv
bike002210503.csv
bike002920423.csv
bike002920424.csv
bike002920425.csv
bike002920426.csv
bike002920427.csv
bike002920428.csv
bike002920429.csv
bike002920430.csv
bike002920501.csv
bike003190421.csv
bike003190422.csv
bike003190423.csv
bike003190430.csv
bike003190501.csv
bike003190502.csv
bike003190503.csv
bike003190504.csv
bike003190505.csv
bike003190506.csv
bike003190507.csv
bike003190508.csv
bike003390421.csv
bike003390422.csv
bike003390423.csv
bike003390424.csv
bike003390426.csv
bike003390428.csv
bike003390429.csv
bike003390430.csv
bike003440422.csv
bike003440427.csv
bike003440429.csv
bike003440430.csv
bike003440501.csv
bike003440502.csv
bike003440503.csv
bike003440504.csv
bike003440505.csv
bike003440506.csv
bike003440507.csv
bike003440508.csv
bike003580422.csv
bike003580423.csv
bike003580424.csv
bike003580425.csv
bike003580426.csv
bike003580427.csv
bike003580429.csv
bike003580501.csv
bike003580502.csv
bike003580505.csv
bike003860422.csv
bike003860423.csv
bike003860424.csv
bike003860425.csv
bike003860426.csv
bike003860427.csv
bike003860428.csv
bike003860429.csv
bike003860502.csv
bike003860503.csv
bike004170422.csv
bike004170423.csv
bike004170424.csv
bike004170425.csv
bike004170426.csv
bike004170427.csv
bike004170428.csv
bike004170429.csv
bike004170430.csv
bike004170501.csv
bike004170502.csv
bike004170503.csv
bike006310421.csv
bike006310422.csv
bike006310423.csv
bike006310424.csv
bike006310428.csv
bike006310429.csv
bike006310430.csv
bike006310501.csv
bike006310502.csv
bike006310503.csv
bike006810421.csv
bike006810422.csv
bike006810423.csv
bike006810424.csv
bike006810430.csv
bike006810506.csv
bike006810507.csv
bike006810508.csv
bike006810509.csv
bike006810510.csv
bike006810511.csv
bike006810512.csv
bike007080422.csv
bike007080424.csv
bike007080428.csv
bike007080429.csv
bike007080430.csv
bike007080501.csv
bike007080502.csv
bike007080503.csv
bike007080504.csv
bike007080505.csv
bike007080509.csv
bike007080510.csv
bike007080511.csv
bike007080512.csv
bike007080513.csv
bike007120422.csv
bike007120423.csv
bike007120425.csv
bike007120426.csv
bike007120427.csv
bike007120428.csv
bike007120429.csv
bike007120430.csv
bike007120501.csv
bike007120502.csv
bike007120503.csv
bike007500423.csv
bike007500424.csv
bike007500425.csv
bike007500426.csv
bike007500427.csv
bike007500428.csv
bike007500429.csv
bike007500430.csv
bike007500501.csv
bike008560422.csv
bike008560424.csv
bike008560425.csv
bike008560426.csv
bike008560428.csv
bike008560429.csv
bike008560430.csv
bike008560501.csv
bike008560502.csv
bike008560503.csv
bike008700421.csv
bike008700422.csv
bike008700423.csv
bike008700424.csv
bike008700425.csv
bike008700426.csv
bike008700427.csv
bike008700428.csv
bike008700429.csv
bike008700430.csv
bike008700501.csv
bike008700502.csv
bike008700503.csv
bike008930421.csv
bike008930422.csv
bike008930423.csv
bike008930424.csv
bike008930425.csv
bike008930426.csv
bike008930427.csv
bike008930428.csv
bike008930429.csv
bike010030420.csv
bike010030421.csv
bike010030422.csv
bike010030423.csv
bike010030424.csv
bike010030425.csv
bike010030426.csv
bike010030427.csv
bike011070420.csv
bike011070421.csv
bike011070422.csv
bike011070423.csv
bike011070424.csv
bike011070425.csv
bike011070426.csv
bike011070427.csv
bike011070428.csv
bike011070429.csv
bike011070430.csv
bike011920420.csv
bike011920427.csv
bike011920428.csv
bike011920429.csv
bike011920430.csv
bike011920501.csv
bike011920508.csv
bike011920511.csv
bike011920512.csv
bike011920513.csv
bike011920514.csv
bike012160421.csv
bike012160422.csv
bike012160423.csv
bike012160424.csv
bike012160425.csv
bike012160426.csv
bike012160427.csv
bike012160428.csv
bike012160429.csv
bike012160430.csv
bike012160501.csv
bike012160502.csv
bike012270421.csv
bike012270428.csv
bike012270429.csv
bike012270430.csv
bike012270501.csv
bike012270502.csv
bike012270503.csv
bike012270504.csv
bike012750421.csv
bike012750422.csv
bike012750423.csv
bike012750426.csv
bike012750427.csv
bike012750428.csv
bike012750501.csv
bike012750502.csv
bike012750503.csv
bike012750504.csv
bike012750507.csv
bike012750508.csv
bike012750509.csv
bike012750510.csv
bike012750511.csv
bike013290421.csv
bike013290422.csv
bike013290424.csv
bike013290425.csv
bike013290426.csv
bike013290427.csv
bike013290428.csv
bike013290429.csv
bike014090421.csv
bike014090422.csv
bike014090423.csv
bike014090424.csv
bike014090425.csv
bike014090426.csv
bike014090427.csv
bike014090428.csv
bike014090429.csv
bike014090430.csv
bike014090501.csv
bike201470422.csv
bike201470424.csv
bike201470425.csv
bike201470427.csv
bike201470428.csv
bike201470429.csv
bike201470430.csv
bike201470501.csv
bike203530421.csv
bike203530426.csv
bike203530427.csv
bike203530428.csv
bike203530429.csv
bike203530430.csv
bike203530501.csv
bike203530502.csv
bike203770421.csv
bike203770422.csv
bike203770423.csv
bike203770424.csv
bike203770426.csv
bike204150420.csv
bike204150421.csv
bike204150422.csv
bike204150423.csv
bike204150424.csv
bike204150425.csv
bike204150430.csv
bike204150501.csv
bike204150502.csv
bike204270422.csv
bike204270424.csv
bike204270425.csv
bike204270426.csv
bike204270427.csv
bike204540422.csv
bike204540426.csv
bike204540427.csv
bike204540429.csv
bike204540430.csv
bike204540503.csv
bike204540505.csv
bike204540506.csv
bike205200421.csv
bike205200422.csv
bike205200423.csv
bike205200424.csv
bike205200425.csv
bike205200426.csv
bike205200427.csv
bike205200428.csv
bike205220422.csv
bike205220423.csv
bike205220424.csv
bike205220425.csv
bike205220426.csv
bike205220427.csv
bike205220428.csv
bike205220429.csv
bike205670421.csv
bike205670424.csv
bike205670428.csv
bike205670429.csv
bike205670430.csv
bike205670501.csv
bike205670502.csv
bike205670504.csv
bike206380423.csv
bike206380424.csv
bike206380425.csv
bike206380426.csv
bike206380427.csv
bike206380428.csv
bike206380429.csv
bike206380430.csv
bike206570422.csv
bike206570423.csv
bike206570424.csv
bike206570425.csv
bike206570427.csv
bike206570428.csv
bike206570429.csv
bike206570430.csv
bike206570501.csv
bike206570502.csv
bike206570503.csv
bike206570504.csv
bike206570505.csv
bike206860421.csv
bike206860422.csv
bike206860423.csv
bike206860424.csv
bike206860425.csv
bike206860426.csv
bike206860427.csv
bike206860428.csv
bike206860429.csv
bike206870420.csv
bike206870421.csv
bike206870422.csv
bike206870423.csv
bike206870424.csv
bike206870425.csv
bike206870426.csv
bike206870427.csv
bike206870428.csv
bike206870429.csv
bike206960420.csv
bike206960421.csv
bike206960422.csv
bike206960423.csv
bike206960424.csv
bike206960425.csv
bike206960426.csv
bike206960427.csv
bike206960428.csv
bike206960429.csv
bike207240421.csv
bike207240422.csv
bike207240423.csv
bike207240424.csv
bike207240426.csv
bike207240427.csv
bike207510421.csv
bike207510422.csv
bike207510423.csv
bike207510424.csv
bike207510425.csv
bike207510426.csv
bike207510427.csv
bike207510428.csv
bike207510429.csv
bike207510430.csv
bike207510501.csv
bike208000422.csv
bike208000424.csv
bike208000425.csv
bike208000426.csv
bike208000427.csv
bike208000428.csv
bike208000501.csv
bike208000502.csv
bike208000503.csv
bike208240421.csv
bike208240422.csv
bike208240425.csv
bike208240426.csv
bike208240427.csv
bike208240428.csv
bike208240429.csv
bike208240430.csv
bike208440422.csv
bike208440423.csv
bike208440424.csv
bike208440427.csv
bike208440428.csv
bike208440429.csv
bike208440430.csv
bike208440501.csv
bike208940421.csv
bike208940422.csv
bike208940423.csv
bike208940424.csv
bike208940425.csv
bike208940426.csv
bike208940427.csv
bike208940428.csv
bike208940429.csv
bike209050421.csv
bike209050422.csv
bike209050425.csv
bike209050426.csv
bike209050428.csv
bike209050429.csv
bike209050430.csv
bike209050501.csv
bike209360422.csv
bike209360423.csv
bike209360501.csv
bike209360502.csv
bike209360503.csv
bike209360504.csv
bike209570421.csv
bike209570422.csv
bike209570426.csv
bike209570428.csv
bike209570429.csv
bike209570430.csv
bike210010423.csv
bike210010424.csv
bike210010425.csv
bike210010426.csv
bike210010427.csv
bike210010428.csv
bike210010430.csv
bike210010501.csv
bike210010502.csv
bike210010503.csv
bike210010504.csv
bike210250421.csv
bike210250422.csv
bike210250423.csv
bike210250424.csv
bike210250425.csv
bike210250426.csv
bike210250427.csv
bike210250428.csv
bike210250429.csv
bike210410423.csv
bike210410424.csv
bike210410425.csv
bike210410426.csv
bike210410427.csv
bike210410428.csv
bike210410429.csv
bike210410430.csv
bike211430421.csv
bike211430422.csv
bike211430423.csv
bike211430424.csv
bike211430425.csv
bike211430426.csv
bike211430427.csv
bike211430428.csv
bike211430429.csv
bike211620421.csv
bike211620422.csv
bike211620423.csv
bike211620424.csv
bike211620425.csv
bike211620426.csv
bike211620427.csv
bike211620428.csv
bike211620429.csv
bike211620430.csv
bike211630420.csv
bike211630421.csv
bike211630422.csv
bike211630423.csv
bike211630426.csv
bike211630427.csv
bike211630428.csv
bike211630429.csv
bike211630430.csv
bike211630501.csv
bike212150421.csv
bike212150422.csv
bike212150424.csv
bike212150425.csv
bike212150426.csv
bike212150427.csv
bike212150428.csv
bike212150429.csv
bike212150430.csv
bike212150501.csv
bike212150502.csv
bike212560422.csv
bike212560423.csv
bike212560424.csv
bike212560425.csv
bike212560426.csv
bike212560429.csv
bike212560430.csv
bike212560502.csv
bike212560503.csv
bike212560504.csv
bike212560505.csv
bike212560506.csv
bike212560507.csv
bike212560508.csv
bike212560509.csv
bike212760422.csv
bike212760423.csv
bike212760424.csv
bike212760425.csv
bike212760426.csv
bike212760428.csv
bike212760429.csv
bike212760430.csv
bike212810421.csv
bike212810422.csv
bike212810423.csv
bike212810424.csv
bike212810425.csv
bike212810426.csv
bike212810427.csv
bike212810428.csv
bike213940422.csv
bike213940423.csv
bike213940424.csv
bike213940425.csv
bike213940426.csv
bike213940427.csv
bike213940428.csv
bike213940429.csv
bike213940430.csv
bike214110422.csv
bike214110423.csv
bike214110424.csv
bike214110425.csv
bike214110426.csv
bike214110427.csv
bike214110428.csv
bike214110429.csv
bike214110430.csv
bike214280421.csv
bike214280422.csv
bike214280423.csv
bike214280424.csv
bike214280425.csv
bike214280426.csv
bike214280427.csv
bike214710426.csv
bike214710427.csv
bike214710428.csv
bike214710429.csv
bike214710430.csv
bike214710501.csv
bike214710502.csv
bike214710503.csv
bike214710505.csv
bike214710506.csv
bike214710507.csv
bike215370422.csv
bike215370423.csv
bike215370424.csv
bike215370425.csv
bike215370429.csv
bike215370430.csv
bike215370501.csv
bike215650420.csv
bike215650422.csv
bike215650423.csv
bike215650424.csv
bike215650425.csv
bike215650426.csv
bike215650430.csv
bike215650501.csv
bike215650502.csv
bike215650503.csv
bike215740421.csv
bike215740422.csv
bike215740424.csv
bike215740425.csv
bike215740426.csv
bike215740427.csv
bike215740428.csv
bike215740429.csv
bike215740430.csv
bike216100421.csv
bike216100422.csv
bike216100423.csv
bike216100424.csv
bike216100425.csv
bike216100426.csv
bike216100427.csv
bike216100428.csv
bike216100429.csv
bike216590421.csv
bike216590422.csv
bike216590423.csv
bike216590424.csv
bike216590427.csv
bike216590428.csv
bike216590429.csv
bike217080421.csv
bike217080422.csv
bike217080423.csv
bike217080424.csv
bike217080425.csv
bike217080426.csv
bike217080427.csv
bike217080428.csv
bike217080429.csv
bike217080501.csv
bike217080502.csv
bike217530421.csv
bike217530422.csv
bike217530424.csv
bike217530425.csv
bike217530426.csv
bike217530428.csv
bike217530430.csv
bike217530502.csv
bike217530503.csv
bike217770422.csv
bike217770423.csv
bike217770424.csv
bike217770425.csv
bike217770427.csv
bike217770428.csv
bike217770429.csv
bike217770430.csv
bike217770501.csv
bike218340420.csv
bike218340421.csv
bike218340422.csv
bike218340424.csv
bike218340426.csv
bike218340427.csv
bike218340428.csv
bike218340429.csv
bike218340430.csv
bike218440423.csv
bike218440424.csv
bike218440425.csv
bike218440426.csv
bike218440427.csv
bike218440428.csv
bike218440429.csv
bike218560421.csv
bike218560422.csv
bike218560423.csv
bike218560424.csv
bike218560425.csv
bike218560426.csv
bike218560427.csv
bike219230423.csv
bike219230424.csv
bike219230425.csv
bike219230426.csv
bike219230427.csv
bike219230428.csv
bike219230429.csv
bike219230501.csv
bike220020422.csv
bike220020428.csv
bike220020429.csv
bike220020430.csv
bike220020501.csv
bike220020503.csv
bike220020504.csv
bike220020505.csv
bike220020507.csv
bike220020508.csv
bike220020509.csv
bike220020513.csv
bike220020514.csv
bike220020515.csv
bike220020516.csv
bike220440420.csv
bike220440421.csv
bike220440422.csv
bike220440424.csv
bike220440425.csv
bike220440426.csv
bike220440427.csv
bike220440428.csv
bike220440430.csv
bike220490423.csv
bike220490424.csv
bike220490425.csv
bike220490426.csv
bike220490427.csv
bike220490428.csv
bike220490429.csv
bike220490430.csv
bike220770426.csv
bike220770427.csv
bike220770428.csv
bike220770429.csv
bike220770430.csv
bike220770501.csv
bike220770502.csv
bike220840421.csv
bike220840422.csv
bike220840423.csv
bike220840427.csv
bike220840429.csv
bike220840504.csv
bike220840505.csv
bike220840506.csv
bike220840509.csv
bike220840515.csv
bike220870421.csv
bike220870422.csv
bike220870423.csv
bike220870424.csv
bike220870425.csv
bike220870426.csv
bike220870427.csv
bike220870428.csv
bike220880420.csv
bike220880421.csv
bike220880422.csv
bike220880423.csv
bike220880424.csv
bike220880425.csv
bike220880426.csv
bike220880501.csv
bike220880504.csv
bike220880505.csv
bike220880506.csv
bike220880507.csv
bike220940423.csv
bike220940424.csv
bike220940425.csv
bike220940428.csv
bike220940429.csv
bike220940504.csv
bike220940507.csv
bike220990421.csv
bike220990422.csv
bike221090420.csv
bike221090421.csv
bike221090422.csv
bike221090423.csv
bike221090424.csv
bike221090426.csv
bike221090427.csv
bike221090428.csv
bike221090429.csv
bike221560422.csv
bike221560424.csv
bike221560425.csv
bike221560426.csv
bike221560427.csv
bike221560428.csv
bike221560429.csv
bike221560430.csv
bike221760421.csv
bike221760422.csv
bike221760423.csv
bike221760424.csv
bike221760425.csv
bike221760426.csv
bike221760427.csv
bike221760428.csv
bike221760429.csv
bike221910421.csv
bike221910422.csv
bike221910424.csv
bike221910426.csv
bike221910427.csv
bike221910428.csv
bike221910429.csv
bike221910430.csv
bike221910501.csv
bike221910504.csv
bike221910505.csv
bike222080421.csv
bike222080422.csv
bike222080423.csv
bike222080424.csv
bike222080426.csv
bike222080502.csv
bike222080503.csv
bike222080504.csv
bike222080506.csv
bike222080512.csv
bike222080513.csv
bike222110420.csv
bike222110421.csv
bike222110422.csv
bike222110423.csv
bike222110424.csv
bike222110425.csv
bike222110426.csv
bike222110428.csv
bike222110429.csv
bike222120421.csv
bike222120428.csv
bike222120502.csv
bike222120503.csv
bike222120505.csv
bike222120507.csv
bike222120509.csv
bike222120510.csv
bike222120511.csv
bike222120512.csv
bike222120514.csv
bike222120515.csv
bike222210422.csv
bike222210423.csv
bike222210424.csv
bike222210425.csv
bike222210426.csv
bike222370421.csv
bike222370422.csv
bike222370423.csv
bike222370424.csv
bike222370425.csv
bike222370426.csv
bike222370427.csv
bike222370428.csv
bike222370429.csv
bike222380421.csv
bike222380422.csv
bike222380423.csv
bike222380424.csv
bike222380425.csv
bike222380426.csv
bike222380427.csv
bike222380428.csv
bike222380429.csv
bike222380430.csv
bike222380502.csv
bike222380503.csv
Bike_trace_data_1.csv

In [89]:
directory = "../GPSTRaces/AllTracks_SnapToRoad/"
new_dir = "../GPSTRaces/AllTracks_STR_GeoJSON/"
for filename in os.listdir(directory):
    if filename.endswith(".csv"):
        data = DataFrame.from_csv(os.path.join(directory, filename), index_col=False)
        points = [Point(row['Longitude'], row['Latitude']) for key, row in data.iterrows()]
        geo_df = GeoDataFrame(data,geometry=points)
        fname = os.path.splitext(filename)[0] + '.geojson'
        geo_df.to_file(os.path.join(new_dir, fname), driver='GeoJSON')

In [ ]: