Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# if dead_ends is False, discard dead-end nodes to only work with edge
# intersections
if not dead_ends:
if 'streets_per_node' in G.graph:
streets_per_node = G.graph['streets_per_node']
else:
streets_per_node = count_streets_per_node(G)
dead_end_nodes = [node for node, count in streets_per_node.items() if count <= 1]
G = G.copy()
G.remove_nodes_from(dead_end_nodes)
# create a GeoDataFrame of nodes, buffer to passed-in distance, merge
# overlaps
gdf_nodes = graph_to_gdfs(G, edges=False)
buffered_nodes = gdf_nodes.buffer(tolerance).unary_union
if isinstance(buffered_nodes, Polygon):
# if only a single node results, make it iterable so we can turn it into
# a GeoSeries
buffered_nodes = [buffered_nodes]
# get the centroids of the merged intersection polygons
unified_intersections = gpd.GeoSeries(list(buffered_nodes))
intersection_centroids = unified_intersections.centroid
return intersection_centroids
edge_width : numeric
width of the edge lines
edge_opacity : numeric
opacity of the edge lines
Returns
-------
graph_map : folium.folium.Map
"""
# check if we were able to import folium successfully
if not folium:
raise ImportError('The folium package must be installed to use this optional feature.')
# create gdf of the graph edges
gdf_edges = graph_to_gdfs(G, nodes=False, fill_edge_geometry=True)
# get graph centroid
x, y = gdf_edges.unary_union.centroid.xy
graph_centroid = (y[0], x[0])
# create the folium web map if one wasn't passed-in
if graph_map is None:
graph_map = folium.Map(location=graph_centroid, zoom_start=zoom, tiles=tiles)
# add each graph edge to the map
for _, row in gdf_edges.iterrows():
pl = make_folium_polyline(edge=row, edge_color=edge_color, edge_width=edge_width,
edge_opacity=edge_opacity, popup_attribute=popup_attribute)
pl.add_to(graph_map)
# if fit_bounds is True, fit the map to the bounds of the route by passing
route_width : numeric
width of the route's line
route_opacity : numeric
opacity of the route lines
Returns
-------
route_map : folium.folium.Map
"""
# check if we were able to import folium successfully
if not folium:
raise ImportError('The folium package must be installed to use this optional feature.')
# create gdf of the route edges
gdf_edges = graph_to_gdfs(G, nodes=False, fill_edge_geometry=True)
route_nodes = list(zip(route[:-1], route[1:]))
index = [gdf_edges[(gdf_edges['u']==u) & (gdf_edges['v']==v)].index[0] for u, v in route_nodes]
gdf_route_edges = gdf_edges.loc[index]
# get route centroid
x, y = gdf_route_edges.unary_union.centroid.xy
route_centroid = (y[0], x[0])
# create the folium web map if one wasn't passed-in
if route_map is None:
route_map = folium.Map(location=route_centroid, zoom_start=zoom, tiles=tiles)
# add each route edge to the map
for _, row in gdf_route_edges.iterrows():
pl = make_folium_polyline(edge=row, edge_color=route_color, edge_width=route_width,
edge_opacity=route_opacity, popup_attribute=popup_attribute)
geographically accurate edges, rather than just lines straight from node
to node
Returns
-------
fig, ax : tuple
"""
log('Begin plotting the graph...')
node_Xs = [float(x) for _, x in G.nodes(data='x')]
node_Ys = [float(y) for _, y in G.nodes(data='y')]
# get north, south, east, west values either from bbox parameter or from the
# spatial extent of the edges' geometries
if bbox is None:
edges = graph_to_gdfs(G, nodes=False, fill_edge_geometry=True)
west, south, east, north = edges.total_bounds
else:
north, south, east, west = bbox
# if caller did not pass in a fig_width, calculate it proportionately from
# the fig_height and bounding box aspect ratio
bbox_aspect_ratio = (north-south)/(east-west)
if fig_width is None:
fig_width = fig_height / bbox_aspect_ratio
# create the figure and axis
fig, ax = plt.subplots(figsize=(fig_width, fig_height), facecolor=bgcolor)
ax.set_facecolor(bgcolor)
# draw the edges as lines from node to node
start_time = time.time()
close : bool
close the figure (only if show equals False) to prevent display
dpi : int
the resolution of the image file if saving
Returns
-------
fig, ax : tuple
"""
multiplier = 1.2
# if G was passed-in, use this graph in the plot, centered on the centroid
# of its nodes
if G is not None:
gdf_nodes = graph_to_gdfs(G, edges=False, node_geometry=True)
lnglat_point = gdf_nodes.unary_union.centroid.coords[0]
point = tuple(reversed(lnglat_point))
# otherwise, get the network by either address or point, whichever was
# passed-in, using a distance multiplier to make sure we get more than
# enough network. simplify in non-strict mode to not combine multiple street
# types into single edge
elif address is not None:
G, point = graph_from_address(address, distance=dist*multiplier, distance_type='bbox', network_type=network_type,
simplify=False, truncate_by_edge=True, return_coords=True)
G = simplify_graph(G, strict=False)
elif point is not None:
G = graph_from_point(point, distance=dist*multiplier, distance_type='bbox', network_type=network_type,
simplify=False, truncate_by_edge=True)
G = simplify_graph(G, strict=False)
else: