In [1]:
%pylab inline
import geopandas as gpd
from geopandas.tools import sjoin
import pandas as pd
from IPython.display import display
import snap
In [2]:
bikex_gpd = gpd.read_file("../GPSTRaces/AllTracks_GeoJSON_data/bike001750428.geojson")
bikex_gpd.plot()
Out[2]:
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]:
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()
Out[11]:
In [12]:
street_gpd.plot()
Out[12]:
In [13]:
street_gpd.head().T
Out[13]:
In [14]:
bike_trace_1 = gpd.read_file('../GPSTRaces/AllTracks_GeoJSON_data/bike001750421.geojson')
bike_trace_1.head().T
Out[14]:
In [15]:
vision0_gpd = gpd.read_file('../dc-maps-master/maps/vision-zero-safety-transportation.geojson')
vision0_gpd.head().T
Out[15]:
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
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')
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)
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)
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)
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)
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
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]:
In [6]:
joined = sjoin(street_gpd[['OBJECTID', 'geometry']], street_gpd[['OBJECTID', 'geometry']])
In [7]:
len(joined.index)
Out[7]:
In [8]:
joined.index
Out[8]:
In [9]:
street_pairs = joined[joined.OBJECTID_left!=joined.OBJECTID_right][['OBJECTID_right','OBJECTID_left']]
In [10]:
street_pairs.info
Out[10]:
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]:
In [14]:
len(edges_in_graph)
Out[14]:
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
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)
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)
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)
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')
In [16]:
merged.plot()
Out[16]:
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]:
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]:
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]:
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
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)
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]:
In [46]:
merged.to_file('../Bike_Lane_Street_Seg_Join.txt')
In [47]:
merged.head()
Out[47]:
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]:
In [53]:
street_gpd[street_buffer_gpd.STREETSEGID == 579]
Out[53]:
In [69]:
test_point = {'Longitude': -77.043411, 'Latitude': 38.90527}
test_df = pd.DataFrame(data=[test_point])
In [70]:
print(test_df)
In [71]:
print(test_df.Longitude)
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)
In [75]:
print(merge_point)
In [76]:
merge_point.STREETSEGID
Out[76]:
In [81]:
merge_point.iloc[0]['STREETSEGID']
Out[81]:
In [82]:
street_gpd[street_buffer_gpd.STREETSEGID==merge_point.iloc[0]['STREETSEGID']]
Out[82]:
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)
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)
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 [ ]: