# OSMnx features demo

Author: Geoff Boeing

Get street networks and other spatial data anywhere in the world from OpenStreetMap then analyze and visualize them.

More info:

- Overview of OSMnx
- Documentation and install instructions
- Examples, demos, tutorials
- Journal article and citation info

This notebook provides a quick tour of some of OSMnx's key features including how to:

- download/model street networks
- calculate stats
- visualize centrality
- impute speeds/travel times and calculate shortest paths
- attach and visualize elevation data and edge grades
- download/model other infrastructure types
- download points of interest data

## Working with street networks

OSMnx geocodes the query "Piedmont, California, USA" to retrieve the place boundaries of that city from the Nominatim API, retrieves the drivable street network data within those boundaries from the Overpass API, constructs a graph model, then simplifies/corrects its topology such that nodes represent intersections and dead-ends and edges represent the street segments linking them. All of this is discussed in detail in the documentation and these examples.

OSMnx models all networks as NetworkX `MultiDiGraph`

objects. You can convert to:

- undirected MultiGraphs
- DiGraphs without (possible) parallel edges
- GeoPandas node/edge GeoDataFrames

You can create a graph from node/edge GeoDataFrames, as long as gdf_nodes is indexed by osmid and gdf_edges is multi-indexed by u, v, key (following normal MultiDiGraph structure). This allows you to load graph node/edge shapefiles or GeoPackage layers as GeoDataFrames then convert to a MultiDiGraph for graph analytics.

## Basic street network stats

stats documentation: https://osmnx.readthedocs.io/en/stable/osmnx.html#module-osmnx.stats

The radius (i.e., minimum eccentricity) of this street network is approximately 2.5 kilometers.

## Visualize street centrality

Here we plot the street network and color its edges (streets) by their relative closeness centrality.

## Routing

Nodes are colored from lowest elevation (dark blue) to highest (bright yellow).

Example: create elevation-based impedance functions to route around hills.

## Get networks other ways

make queries less ambiguous to help the geocoder out, if it's not finding what you're looking for

Examples of getting networks by coordinates, bounding box, or any custom polygon shape.

## Get other networked infrastructure types

...like rail or electric grids or even the canals of Venice and Amsterdam, using the `custom_filter`

parameter: see more examples.

## Get any geospatial entities' geometries and attributes

Use the `geometries`

module to download entities, such as local amenities, points of interest, or building footprints, and turn them into a GeoDataFrame: see docs. For more usage examples of downloading geospatial objects from OSM, see this notebook.

See the other notebooks for more examples of visualization with OSMnx.