# The usual imports
import altair as alt
import geopandas as gpd
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
Week 5A
Geospatial Data: Street Networks
- Monday, October 2, 2023
- Section 401
# Show all columns in dataframes
= 999 pd.options.display.max_columns
# Hide warnings due to issue in shapely package
# See: https://github.com/shapely/shapely/issues/1345
="ignore"); np.seterr(invalid
Today: Urban street networks and OpenStreetMap (OSM)
- Two tools that make working with OSM data very easy
- What kind of questions can we answer?
- Street orientations
- Mapping event points to streets: car crashes
- Mapping amenities
- Network-constrained distances: accessibility
OSM: what is it?
- Collaborative mapping
- A free editable map of the World
- Sort of like Wikipedia for maps
Great source of data: street networks and a wealth of amenity information
https://www.openstreetmap.org
Working with OSM data
- Raw data is very messy
- Two relatively new, amazing Python packages greatly simply the process
- Related, but complementary features
- OSMnx: downloading and manipulating streets as networks
- Pandana: networks focused on accessibility of amenities
Related: interactive web maps in Python
Part 1: OSMnx
Relatively new package (just a few years old), but quickly becoming the go to package for working with street networks and OpenStreetMap data in Python.
Several key features:
Downloading political boundaries for cities, states, countries, etc
Downloading street networks
Analyzing networks: routing, visualization, statistics
import osmnx as ox
1.1. Getting boundary shapefiles from OSM
Key function: geocode_to_gdf()
(docs)
We can get the boundary for anything identified as a “place” by OSM.
Important: Be careful to pass the right place name that OSM needs
= ox.geocode_to_gdf("Philadelphia, PA")
philly
philly.head()
geometry | bbox_north | bbox_south | bbox_east | bbox_west | place_id | osm_type | osm_id | lat | lon | class | type | place_rank | importance | addresstype | name | display_name | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | POLYGON ((-75.28030 39.97500, -75.28022 39.974... | 40.137959 | 39.867005 | -74.955831 | -75.280298 | 14128726 | relation | 188022 | 39.952724 | -75.163526 | boundary | administrative | 16 | 0.713797 | city | Philadelphia | Philadelphia, Pennsylvania, United States |
philly.crs
<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
We can plot it just like any other GeoDataFrame
# Project it to Web Mercator first and plot
= philly.to_crs(epsg=3857).plot(facecolor="none", edgecolor="black")
ax ax.set_axis_off()
1.2 Projecting with OSMnx
Key function: project_gdf()
(docs)
Automatically projects to the Universal Transverse Mercator (UTM) CRS for the UTM zone that the centroid of the polygon lies in
A good, general projection that works for most latitudes except very northern locations.
= ox.project_gdf(philly).plot(fc="lightblue", ec="gray")
ax ax.set_axis_off()
Some more examples:
# Some examples
= ox.geocode_to_gdf("Manhattan, New York City, New York, USA")
place1 = ox.geocode_to_gdf("Miami-Dade County, Florida")
place2 = ox.geocode_to_gdf("Florida, USA")
place3 = ox.geocode_to_gdf("Spain") place4
# Manhattan
= ox.project_gdf(place1).plot(fc="lightblue", ec="gray")
ax ax.set_axis_off()
# Miami-Dade County
= ox.project_gdf(place2).plot(fc="lightblue", ec="gray")
ax ax.set_axis_off()
# Florida
= ox.project_gdf(place3).plot(fc="lightblue", ec="gray")
ax ax.set_axis_off()
# Spain
= ox.project_gdf(place4).plot(fc="lightblue", ec="gray")
ax ax.set_axis_off()
1.3 Downloading OSM features
Key functions: features_from_*
features_from_place()
(docs)- Download features within an OSM place boundary
features_from_address()
(docs)- Download features within a certain distance of an address
features_from_bbox()
(docs)- Download features within a N, S, E, W bounding box
features_from_point()
(docs)- Download features within a certain distance of a specified point
features_from_polygon()
(docs)- Download features within a polygon object
Important reference: https://wiki.openstreetmap.org/wiki/Map_Features
- OSM uses a tagging system to categorize different map features
- The main feature categories are available on the OSM Wikipedia
- Examples: ‘amenity’, ‘building’, ‘landuse’, ‘highway’
- There are specific sub-categories for each feature type too:
- Amenity examples: ‘bar’, ‘college’, ‘library’
In the language of OSM, the “key” is the main feature category (e.g., amenity) and the “value” is the sub-category type (e.g., “bar”)
osmnx
mirrors the key/value syntax of OSM. Use a dict to specify the features you want:
# Get all amenities in Philadelphia
= ox.features_from_place("Philadelphia, PA", tags={"amenity": True}) amenities
len(amenities)
10647
amenities.head()
geometry | amenity | created_by | cuisine | name | brand | brand:wikidata | brand:wikipedia | operator | operator:wikidata | operator:wikipedia | short_name | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | contact:website | official_name | opening_hours | phone | takeaway | source | wheelchair | healthcare | internet_access | url | contact:phone | description | website | wikidata | internet_access:ssid | brewery | alt_name | ele | gnis:county_id | gnis:created | gnis:feature_id | gnis:state_id | religion | historic:amenity | old_name | denomination | building | comment | operator:type | school | wikipedia | gnis:edited | check_date | craft | microbrewery | restaurant | contact:facebook | name:en | social_facility | operator:short | emergency | healthcare:speciality | bicycle_parking | capacity | covered | barrier | atm | attraction | gnis:county_name | gnis:import_uuid | gnis:reviewed | internet_access:fee | addr:county | addr:country | outdoor_seating | artist_name | artwork_subject | artwork_type | image | start_date | statue | subject:wikidata | tourism | reservation | website:menu | air_conditioning | shop | training | toilets:wheelchair | addr:housename | bottle | parking | designation | not:brand:wikidata | dispensing | drive_through | screen | delivery | diet:vegan | payment:cash | payment:coins | indoor_seating | smoking | architect | contact:instagram | collection_times | ref | male | female | fee | diet:vegetarian | fax | bar | source:pkey | fixme | access | changing_table | toilets | name:zh | addr:full | entrance | level | name:he | fuel:biodiesel | fuel:biogas | fuel:cng | fuel:diesel | fuel:e10 | fuel:e85 | fuel:electricity | sport | wifi | collection_times:signed | ref:signed | drive_in | check_date:collection_times | food | toilets:access | payment:bitcoin | diet:halal | disused:amenity | branch | self_service | diet:meat | note | leisure | drink:club-mate | car_wash | compressed_air | toilets:disposal | unisex | contact:twitter | currency:XBT | diet:pescetarian | lgbtq | payment:credit_cards | payment:debit_cards | park_ride | supervised | check_date:opening_hours | opening_hours:signed | landuse | flickr | contact:email | service_times | youtube | source:cuisine | social_facility:for | disused:shop | toilets:position | maxheight | wheelchair:description | wheelchair:description:en | layer | service:bicycle:chain_tool | service:bicycle:pump | currency:USD | drink:coca-cola | drink:coke | drink:cola | drink:cola_zero | drink:soda | drink:water | vending | opening_hours:kitchen | bicycle_rental | network | network:wikidata | network:wikipedia | amenity_1 | recycling:computers | recycling:tv_monitor | recycling_type | ferry | public_transport | toilets:unisex | kitchen_hours | animal | addr:unit | was:amenity | was:cuisine | was:delivery | was:drive_through | was:name | was:outdoor_seating | was:takeaway | direction | backrest | service:bicycle:repair | payment:cards | name:es | diet:kosher | theatre:genre | service:bicycle:tools | beds | payment:visa | cash_in | currency:BCH | currency:LTC | office | date | display | faces | studio | name:ca | bench | lit | shelter_type | addr:city:ar | name:ar | colour | material | fountain | addr:block_number | seats | brand:type | indoor | parcel_locker:type | parcel_mail_in | parcel_pickup | historic | type | payment:american_express | payment:discover_card | payment:mastercard | dog | recycling:beverage_cartons | recycling:cans | recycling:glass_bottles | recycling:paper | recycling:plastic | recycling:plastic_bottles | recycling:plastic_packaging | portable | toilets:handwashing | opening_hours:drive_through | internet_access:description | name:vi | payment:cheque | min_age | bus | tram | waste | payment:cash_app | payment:venmo | seating | street_vendor | theatre:type | smoothness | surface | brand:en | brand:zh | location | drinking_water | height | fridge | wikimedia_commons | opening_hours:covid19 | diet:healthy | abandoned:amenity | memorial | payment:lightning | payment:lightning_contactless | payment:onchain | country | payment:contactless | delivery:partner | internet_access:password | post_box:type | description:en | inscription | check_date:currency:XBT | public_bookcase:type | urgent_care | diet:gluten_free | community_centre:for | community_centre | animal_shelter | name:etymology | name:etymology:wikidata | mobile | nodes | building:levels | capacity:disabled | building:floor | ref:nrhp | vehicle | natural | water | building:use | ship:type | roof:shape | automated | brand:website | building:material | source:name | roof:levels | roof:material | access:conditional | rite | heritage | heritage:operator | architect:wikidata | building:levels:underground | heritage:website | nrhp:criteria | nrhp:inscription_date | building:colour | area | check_date:compressed_air | gnis:fcode | nonsquare | name:ja | name:zn | roof:orientation | happy_hours | building:part | elevation | historic:name | grades | maxstay | monastery:type | library | theme | owner | loc_name | drink | bin | police | school:type | old_name1 | old_name2 | fuel:octane_95 | fuel:gasoline | fuel:octane_87 | healthcare:counselling | orientation | parking:orientation | protection_title | source_ref | parking_space | ways | healthcare:for | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element_type | osmid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node | 109811385 | POINT (-75.19487 40.05846) | bench | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
274215467 | POINT (-75.19492 39.95935) | fast_food | Potlatch 0.9c | pizza | Powelton Pizza | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
274216093 | POINT (-75.19125 39.95764) | atm | NaN | NaN | Citibank | Citibank | Q857063 | en:Citibank | Citibank | Q857063 | en:Citibank | Citi | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
274217596 | POINT (-75.19229 39.95301) | cafe | NaN | coffee_shop | Starbucks | Starbucks | Q37158 | en:Starbucks | NaN | NaN | NaN | NaN | Philadelphia | 3401 | 19104 | PA | Walnut Street | https://www.starbucks.com/store-locator/store/... | Starbucks Coffee | Mo-Fr 05:30-24:00; Sa,Su 06:00-24:00 | 215-387-1914 | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
313440966 | POINT (-75.16694 39.96394) | car_sharing | Potlatch 0.10f | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | local_knowledge | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get all bars in philadelphia
= ox.features_from_place("Philadelphia, PA", tags={"amenity": "bar"}) bars
len(bars)
165
bars.head()
addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | amenity | brewery | craft | gnis:county_id | microbrewery | name | operator | restaurant | website | wikidata | wikipedia | geometry | contact:phone | contact:website | description | opening_hours | outdoor_seating | check_date | contact:facebook | phone | air_conditioning | smoking | toilets:wheelchair | wheelchair | indoor_seating | designation | addr:housename | source | wifi | leisure | sport | cuisine | diet:vegan | diet:vegetarian | food | internet_access | brand | brand:wikidata | wheelchair:description | fixme | name:en | name:es | addr:unit | check_date:opening_hours | min_age | alt_name | level | height | opening_hours:signed | nodes | atm | building | building:levels | nonsquare | heritage | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element_type | osmid | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node | 357303425 | Philadelphia | 500 | 19123 | PA | Spring Garden Street | bar | yes | brewery | 101 | yes | Yards Brewing Company | Yards Brewing Company | yes | https://yardsbrewing.com/ | Q16903914 | en:Yards Brewing Company | POINT (-75.14712 39.96067) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
655425272 | NaN | NaN | NaN | NaN | NaN | bar | NaN | NaN | NaN | NaN | Drinkers West | NaN | NaN | NaN | NaN | NaN | POINT (-75.20020 39.95521) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
1033935437 | NaN | 2101 | NaN | NaN | Chestnut Street | bar | NaN | NaN | NaN | NaN | Mix Bar & Grill | NaN | NaN | NaN | NaN | NaN | POINT (-75.17552 39.95242) | +1 215-568-3355 | https://mixbarandgrillphilly.com/location/mix-... | The bar is open until whenever the rush ends. | Mo-We,Su 11:00-22:00; Th-Sa 11:00-23:00 | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
1167079387 | NaN | 401 | NaN | NaN | South Street | bar | NaN | NaN | NaN | NaN | MilkBoy South Street | NaN | NaN | NaN | NaN | NaN | POINT (-75.14925 39.94170) | +1 215-925-6455 | https://www.milkboy.tv/southstreet | NaN | Mo-Tu,Su 11:00-24:00; We-Sa 11:00-25:00 | NaN | 2023-04-12 | https://www.facebook.com/milkboysouthstreet | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
1204761128 | NaN | NaN | NaN | NaN | NaN | bar | NaN | NaN | NaN | NaN | Vikings High School Club | NaN | NaN | NaN | NaN | NaN | POINT (-75.16363 39.92685) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get bar, pub, and restaurant features in Philadelphia
= ox.features_from_place(
food_and_drink "Philadelphia, PA", tags={"amenity": ["pub", "bar", "restaurant"]}
)
len(food_and_drink)
1075
food_and_drink.head()
amenity | created_by | name | source | wheelchair | geometry | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | brewery | opening_hours | craft | gnis:county_id | microbrewery | operator | restaurant | website | wikidata | wikipedia | cuisine | outdoor_seating | brand | brand:wikidata | check_date | contact:facebook | contact:website | phone | reservation | website:menu | description | designation | not:brand:wikidata | contact:phone | contact:instagram | internet_access | diet:vegan | diet:vegetarian | fax | air_conditioning | smoking | bar | takeaway | addr:housename | toilets:wheelchair | addr:country | alt_name | short_name | name:zh | level | indoor_seating | sport | wifi | delivery | drive_in | payment:cash | food | payment:bitcoin | diet:halal | disused:amenity | brand:wikipedia | official_name | diet:meat | capacity | note | leisure | contact:twitter | currency:XBT | fixme | diet:pescetarian | lgbtq | payment:credit_cards | payment:debit_cards | branch | source:cuisine | wheelchair:description | opening_hours:kitchen | ref | amenity_1 | kitchen_hours | name:en | name:es | addr:unit | check_date:opening_hours | name:ca | internet_access:fee | toilets | payment:american_express | payment:discover_card | payment:mastercard | payment:visa | start_date | internet_access:description | internet_access:ssid | min_age | diet:healthy | drive_through | country | delivery:partner | toilets:access | height | payment:contactless | opening_hours:signed | diet:gluten_free | nodes | building | historic | payment:cards | ship:type | atm | building:levels | area | image | roof:levels | name:ja | name:zn | happy_hours | nonsquare | theme | heritage | layer | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element_type | osmid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node | 333786044 | restaurant | Potlatch 0.10f | Sam's Morning Glory | knowledge | limited | POINT (-75.15893 39.94086) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
343293806 | pub | NaN | Prohibition Taproom | survey | NaN | POINT (-75.15946 39.96073) | Philadelphia | 501 | 19123 | PA | North 13th Street | yes | Mo-Su 11:00-02:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
357303425 | bar | NaN | Yards Brewing Company | NaN | NaN | POINT (-75.14712 39.96067) | Philadelphia | 500 | 19123 | PA | Spring Garden Street | yes | NaN | brewery | 101 | yes | Yards Brewing Company | yes | https://yardsbrewing.com/ | Q16903914 | en:Yards Brewing Company | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
566683522 | restaurant | NaN | Spring Garden Pizza & Restaurant | NaN | NaN | POINT (-75.15755 39.96205) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | pizza | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
596230881 | restaurant | NaN | NaN | NaN | NaN | POINT (-75.18682 40.05492) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get bus stop features
= ox.features_from_place("Philadelphia, PA", tags={"highway": "bus_stop"}) bus_stops
len(bus_stops)
290
bus_stops.head()
bench | bus | covered | highway | name | network | network:wikidata | operator | public_transport | shelter | geometry | network:wikipedia | ref | tactile_paving | wheelchair | route_ref | local_ref | designation | source | bin | lit | departures_board | internet_access | addr:street | route_ref_1 | description | note | operator:wikidata | brand | brand:wikidata | railway | tram | trolleybus | network:short | not:network:wikidata | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element_type | osmid | |||||||||||||||||||||||||||||||||||
node | 361011456 | yes | yes | yes | bus_stop | 13th St & Market St | SEPTA | Q2037863 | SEPTA | platform | yes | POINT (-75.16166 39.95223) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
750281693 | NaN | yes | NaN | bus_stop | NaN | NaN | NaN | NaN | platform | NaN | POINT (-75.07732 40.01797) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
768271130 | NaN | yes | NaN | bus_stop | Wissahickon Transportation Center | SEPTA | Q2037863 | SEPTA | platform | yes | POINT (-75.20726 40.01487) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
1015342921 | NaN | yes | NaN | bus_stop | NaN | NaN | NaN | NaN | platform | NaN | POINT (-75.18187 39.96640) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
1015342926 | NaN | yes | NaN | bus_stop | NaN | NaN | NaN | NaN | platform | NaN | POINT (-75.18024 39.96670) | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get commercial and retail landuse features
= ox.features_from_place(
landuse "Philadelphia, PA", tags={"landuse": ["commercial", "retail"]}
)
len(landuse)
349
Let’s plot the land use features:
= plt.subplots(figsize=(10, 6))
fig, ax
= landuse.plot(ax=ax)
ax ax.set_axis_off()
1.4 Downloading street networks
Key functions: graph_from_*
graph_from_place()
(docs)- Download street network within an OSM place boundary
graph_from_address()
(docs)- Download street network within a certain distance of an address
graph_from_bbox()
(docs)- Download street network within a N, S, E, W bounding box
graph_from_point()
(docs)- Download street network within a certain distance of a specified point
graph_from_polygon()
(docs)- Download street network within a polygon object
Street network around an address
Get streets within 500 meters of the center of Center City
= ox.graph_from_address("Center City, Philadelphia, PA", dist=500) G
Project and plot it:
= ox.project_graph(G)
G_projected ; ox.plot_graph(G_projected)
Remove the nodes:
=0); ox.plot_graph(G_projected, node_size
Let’s zoom out to 2,000 meters. This will take a little longer.
= ox.graph_from_address("Center City, Philadelphia, PA", dist=2000)
G = ox.project_graph(G) G_projected
=0); ox.plot_graph(G_projected, node_size
Getting different network types
drive
- get drivable public streets (but not service roads)drive_service
- get drivable streets, including service roadswalk
- get all streets and paths that pedestrians can use (this network type ignores one-way directionality)bike
- get all streets and paths that cyclists can useall
- download all non-private OSM streets and pathsall_private
- download all OSM streets and paths, including private-access ones (default)
# the "drive" network
= ox.graph_from_address("Center City, Philadelphia, PA", network_type="drive")
G ; ox.plot_graph(G)
# the "walk" network
= ox.graph_from_address("Center City, Philadelphia, PA", network_type="walk")
G ; ox.plot_graph(ox.project_graph(G))
Street network within a place boundary
Use graph_from_place()
to get the streets within a specific OSM place.
A couple of things to watch out for: 1. The place query has to be resolved by OSM. 2. If the place is a big city, you might be downloading a lot of data!
Let’s check out the street network for Berkeley, CA:
= ox.graph_from_place("Berkeley, California, USA") berkeley
=0); ox.plot_graph(ox.project_graph(berkeley), node_size
Streets within a specific polygon
Example: Let’s download all streets within Center City. We will use the “Central” planning district as a proxy for this area. The city’s planning districts are available on Open Data Philly.
= gpd.read_file(
planning_districts "https://opendata.arcgis.com/datasets/0960ea0f38f44146bb562f2b212075aa_0.geojson"
)
len(planning_districts)
18
planning_districts.head()
OBJECTID_1 | OBJECTID | DIST_NAME | ABBREV | Shape__Area | Shape__Length | PlanningDist | DaytimePop | geometry | |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 14 | River Wards | RW | 2.107270e+08 | 66931.595020 | NaN | NaN | POLYGON ((-75.09798 40.00496, -75.09687 40.005... |
1 | 2 | 3 | North Delaware | NDEL | 2.700915e+08 | 89213.074378 | NaN | NaN | POLYGON ((-74.98159 40.05363, -74.98139 40.053... |
2 | 3 | 0 | Lower Far Northeast | LFNE | 3.068529e+08 | 92703.285159 | NaN | NaN | POLYGON ((-74.96443 40.11728, -74.96434 40.117... |
3 | 4 | 9 | Central | CTR | 1.782880e+08 | 71405.143450 | NaN | NaN | POLYGON ((-75.14791 39.96733, -75.14715 39.967... |
4 | 5 | 10 | University Southwest | USW | 1.296468e+08 | 65267.676141 | NaN | NaN | POLYGON ((-75.18742 39.96338, -75.18644 39.963... |
Trim to the central district:
= planning_districts.query("DIST_NAME == 'Central'") central_district
And plot it:
= ox.project_gdf(central_district).plot(fc="lightblue", ec="gray")
ax ax.set_axis_off()
central_district
OBJECTID_1 | OBJECTID | DIST_NAME | ABBREV | Shape__Area | Shape__Length | PlanningDist | DaytimePop | geometry | |
---|---|---|---|---|---|---|---|---|---|
3 | 4 | 9 | Central | CTR | 1.782880e+08 | 71405.14345 | NaN | NaN | POLYGON ((-75.14791 39.96733, -75.14715 39.967... |
Squeeze it so we can get the geometry polygon:
= central_district.squeeze().geometry
center_city_outline
center_city_outline
Now, let’s use ox.graph_from_polygon()
to extract streets within this polygon.
# Get the graph
= ox.graph_from_polygon(center_city_outline, network_type="drive") G_cc
# Viola!
=0); ox.plot_graph(ox.project_graph(G_cc), node_size
1.5 Converting from a graph to a GeoDataFrame
Key function: ox.graph_to_gdfs()
(docs)
You can get a GeoDataFrame for both the nodes (points) and edges (lines)
type(G_cc)
networkx.classes.multidigraph.MultiDiGraph
# only get the edges
= ox.graph_to_gdfs(G_cc, edges=True, nodes=False) cc_edges
# we have lots of data associated with each edge!
cc_edges.head()
osmid | oneway | name | highway | reversed | length | geometry | maxspeed | lanes | bridge | ref | tunnel | width | service | access | junction | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
u | v | key | ||||||||||||||||
109727439 | 109911666 | 0 | 132508434 | True | Bainbridge Street | residential | False | 44.137 | LINESTRING (-75.17104 39.94345, -75.17053 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
109727448 | 109727439 | 0 | 12109011 | True | South Colorado Street | residential | False | 109.484 | LINESTRING (-75.17125 39.94248, -75.17120 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
110034229 | 0 | 12159387 | True | Fitzwater Street | residential | False | 91.353 | LINESTRING (-75.17125 39.94248, -75.17137 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
109727507 | 110024052 | 0 | 193364514 | True | Carpenter Street | residential | False | 53.208 | LINESTRING (-75.17196 39.93973, -75.17134 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
109728761 | 110274344 | 0 | 672312336 | True | Brown Street | residential | False | 58.270 | LINESTRING (-75.17317 39.96951, -75.17250 39.9... | 25 mph | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# plot it like any old GeoDataFrame
= cc_edges.to_crs(epsg=3857).plot(color="gray")
ax
# add the neighborhood boundaries
= gpd.GeoSeries([center_city_outline], crs="EPSG:4326")
boundary =3857).plot(
boundary.to_crs(epsg=ax, facecolor="none", edgecolor="red", linewidth=3, zorder=2
ax
)
ax.set_axis_off()
Don’t forget: We can use the .explore()
function to get an interactive web map via Folium:
='cartodb positron') cc_edges.explore(tiles
1.6 What can we do with the graph?
- Network-based statistics
- Routing
- Street orientations
- Visualizing crashes
And much more: see the OSMnx repository of Jupyter notebook examples
Street orientations
A great blog post on street orientations across different US and global cities.
One of my favorite examples of data viz, using matplotlib for radial histograms of street orientations…
The code for these histograms is available in the osmnx examples repository.
Network statistics
We can use the ox.basic_stats()
to get some basic network statistics
ox.basic_stats(G_cc)
{'n': 2026,
'm': 3902,
'k_avg': 3.8519249753208293,
'edge_length_total': 349745.43700000027,
'edge_length_avg': 89.63235187083554,
'streets_per_node_avg': 3.428923988153998,
'streets_per_node_counts': {0: 0, 1: 55, 2: 9, 3: 996, 4: 948, 5: 14, 6: 4},
'streets_per_node_proportions': {0: 0.0,
1: 0.027147087857847977,
2: 0.004442250740375123,
3: 0.491609081934847,
4: 0.46791707798617965,
5: 0.006910167818361303,
6: 0.0019743336623889436},
'intersection_count': 1971,
'street_length_total': 306400.7959999999,
'street_segment_count': 3384,
'street_length_avg': 90.54397044917255,
'circuity_avg': 1.0172703832466288,
'self_loop_proportion': 0.0008865248226950354}
Finding the shortest route
Let’s calculate the shortest route between the Art Museum and the Liberty Bell.
We’ll need to download all amenities in Philadelphia of type “tourism”.
- The
ox.features_from_place()
can download OSM features with a specific tag - You can consult the OSM pages (the Art Museum and Liberty Bell) for each feature for additional info
- Both features are categorized as “tourism” in the OSM data — use the “tags” keyword to select this category
= ox.features_from_place("Philadelphia, PA", tags={"tourism": True}) philly_tourism
len(philly_tourism)
593
philly_tourism.head()
ref | geometry | ele | gnis:county_id | gnis:created | gnis:feature_id | gnis:state_id | name | tourism | brand | brand:wikidata | brand:wikipedia | operator | artwork_type | historic | source | wikidata | information | artist_name | material | website | addr:state | gnis:county_name | gnis:reviewed | gnis:import_uuid | fee | opening_hours | amenity | artwork_subject | image | start_date | statue | subject:wikidata | colour | wheelchair | wikipedia | addr:city | name:de | designation | description | museum | operator:type | alt_name | barrier | heritage | heritage:operator | heritage:website | nrhp:criteria | nrhp:inscription_date | nrhp:nhl | protection_title | ref:nrhp | source_ref | artist:wikidata | height | name:fr | addr:housenumber | addr:postcode | addr:street | memorial | year_of_construction | name:ru | layer | phone | check_date | contact:email | name:en | board_type | toilets:wheelchair | inscription | subject:wikipedia | level | natural | attraction | note | display | end_date | comment | historic:amenity | garden:type | leisure | postal_code | official_name | internet_access | short_name | parking | guest_house | inscription:url | gender | bicycle | hiking | covered | drinking_water | openfire | addr:unit | mimics | source:url | direction | departures_board | map_size | map_type | direction_north | direction_southeast | direction_west | direction_east | direction_south | direction_northeast | direction_northwest | direction_southwest | nodes | building | building:material | name:hi | building:levels | roof:shape | highway | incline | step_count | building:wikidata | building:wikipedia | check_date:opening_hours | old_name | smoking | building:colour | air_conditioning | fax | rooms | stars | roof:colour | addr:country | contact:fax | contact:phone | ship:type | addr:housename | bar | disused:amenity | roof:material | internet_access:fee | abandoned:amenity | fixme | internet_access:ssid | fee:conditional | shop | roof:levels | name:zh | artist:website | bridge | foot | horse | lit | sac_scale | surface | trail_visibility | width | bridge:structure | man_made | disused:website | boundary | operator:short | operator:wikidata | ownership | protected | building:part | area | subject | contact:facebook | ways | type | place | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element_type | osmid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node | 357371322 | NaN | POINT (-75.19580 39.96970) | 17 | 101 | 08/23/2007 | 2347097 | 42 | Bird Lake Picnic Area | picnic_site | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
360500844 | NaN | POINT (-75.19582 39.95352) | NaN | NaN | NaN | NaN | NaN | Hilton Inn at Penn | hotel | Hilton | Q598884 | en:Hilton Hotels & Resorts | Hilton | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
360515304 | NaN | POINT (-75.14860 39.94771) | NaN | NaN | NaN | NaN | NaN | Robert Morris | artwork | NaN | NaN | NaN | NaN | statue | memorial | survey | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
360542779 | NaN | POINT (-75.18932 39.95540) | NaN | NaN | NaN | NaN | NaN | Mario the Magnificent | artwork | NaN | NaN | NaN | NaN | statue | NaN | NaN | Q98563440 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
360777728 | NaN | POINT (-75.19021 39.95230) | NaN | NaN | NaN | NaN | NaN | Pennsylvania Historical Marker: ENIAC, first a... | information | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | board | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# How to find the name of the POI: search for keywords
'name'].str.contains("Art", na=False)] philly_tourism.loc[philly_tourism[
ref | geometry | ele | gnis:county_id | gnis:created | gnis:feature_id | gnis:state_id | name | tourism | brand | brand:wikidata | brand:wikipedia | operator | artwork_type | historic | source | wikidata | information | artist_name | material | website | addr:state | gnis:county_name | gnis:reviewed | gnis:import_uuid | fee | opening_hours | amenity | artwork_subject | image | start_date | statue | subject:wikidata | colour | wheelchair | wikipedia | addr:city | name:de | designation | description | museum | operator:type | alt_name | barrier | heritage | heritage:operator | heritage:website | nrhp:criteria | nrhp:inscription_date | nrhp:nhl | protection_title | ref:nrhp | source_ref | artist:wikidata | height | name:fr | addr:housenumber | addr:postcode | addr:street | memorial | year_of_construction | name:ru | layer | phone | check_date | contact:email | name:en | board_type | toilets:wheelchair | inscription | subject:wikipedia | level | natural | attraction | note | display | end_date | comment | historic:amenity | garden:type | leisure | postal_code | official_name | internet_access | short_name | parking | guest_house | inscription:url | gender | bicycle | hiking | covered | drinking_water | openfire | addr:unit | mimics | source:url | direction | departures_board | map_size | map_type | direction_north | direction_southeast | direction_west | direction_east | direction_south | direction_northeast | direction_northwest | direction_southwest | nodes | building | building:material | name:hi | building:levels | roof:shape | highway | incline | step_count | building:wikidata | building:wikipedia | check_date:opening_hours | old_name | smoking | building:colour | air_conditioning | fax | rooms | stars | roof:colour | addr:country | contact:fax | contact:phone | ship:type | addr:housename | bar | disused:amenity | roof:material | internet_access:fee | abandoned:amenity | fixme | internet_access:ssid | fee:conditional | shop | roof:levels | name:zh | artist:website | bridge | foot | horse | lit | sac_scale | surface | trail_visibility | width | bridge:structure | man_made | disused:website | boundary | operator:short | operator:wikidata | ownership | protected | building:part | area | subject | contact:facebook | ways | type | place | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element_type | osmid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node | 367974278 | NaN | POINT (-75.15240 40.03748) | 61 | NaN | NaN | 2349240 | NaN | La Salle University Art Museum | museum | NaN | NaN | NaN | NaN | NaN | NaN | USGS Geonames | Q16893816 | NaN | NaN | NaN | https://artcollection.lasalle.edu/ | PA | Philadelphia | no | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4064343335 | NaN | POINT (-75.22113 40.02427) | NaN | NaN | NaN | NaN | NaN | Soft Illusions Fine Art Gallery | gallery | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | http://www.softillusions.net/ | PA | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Philadelphia | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 4226 | 19127 | Main Street | NaN | NaN | NaN | NaN | +1 215-840-0832 | 2023-08-08 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
5368454121 | NaN | POINT (-75.19477 39.95406) | NaN | NaN | NaN | NaN | NaN | Institute of Contemporary Art | museum | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | https://icaphila.org/ | PA | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | NaN | Philadelphia | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 118 | 19104 | South 36th Street | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
5718906477 | NaN | POINT (-75.13058 39.99573) | NaN | NaN | NaN | NaN | NaN | Art Making Machine Studios | gallery | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | PA | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Philadelphia | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 3000 | 19133 | North Hope Street | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
6639391809 | NaN | POINT (-75.16088 39.96383) | NaN | NaN | NaN | NaN | NaN | Philadelphia Museum of Jewish Art | museum | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | https://rodephshalom.org/community/philadelphi... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
6680708848 | NaN | POINT (-75.16833 39.94733) | NaN | NaN | NaN | NaN | NaN | Romanian Folk Art Museum | museum | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Q113484178 | NaN | NaN | NaN | http://www.romanianculture.us/ | PA | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Philadelphia | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1606 | 19103 | Spruce Street | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
way | 28533972 | NaN | POLYGON ((-75.18116 39.96467, -75.18138 39.964... | 32 | NaN | NaN | NaN | NaN | Philadelphia Museum of Art | museum | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Q510324 | NaN | NaN | NaN | https://www.philamuseum.org/ | PA | NaN | NaN | NaN | NaN | Su,Mo,Th,Sa 10:00-17:00; Fr 10:00-20:45 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | en:Philadelphia Museum of Art | Philadelphia | NaN | NaN | NaN | art | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2600 | 19130 | Benjamin Franklin Parkway | NaN | NaN | NaN | NaN | +1-215-763-8100 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | [313440467, 313440468, 313440469, 313440470, 3... | yes | NaN | फिलाडेल्फिया कला संग्रहालय | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
333931830 | NaN | POLYGON ((-75.16410 39.95543, -75.16416 39.955... | 13 | NaN | NaN | 1196718 | NaN | Pennsylvania Academy of the Fine Arts | museum | NaN | NaN | NaN | NaN | NaN | building | NaN | Q1952033 | NaN | NaN | NaN | https://www.pafa.org/ | PA | NaN | NaN | NaN | NaN | Tu-Fr 10:00-17:00; Sa-Su 11:00-17:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | en:Pennsylvania Academy of the Fine Arts | Philadelphia | NaN | NaN | NaN | art | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 71000731 | NaN | NaN | NaN | NaN | 118 | 19102 | North Broad Street | NaN | NaN | NaN | NaN | +1-215-972-7600 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | [3409804705, 3409804706, 3453181052, 340980470... | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | US | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
988345364 | NaN | POLYGON ((-75.21926 40.08320, -75.21931 40.083... | 84 | NaN | NaN | NaN | NaN | Woodmere Art Museum | museum | NaN | NaN | NaN | NaN | NaN | NaN | esri/Philadelphia_PA_Buildings_OSM | Q2424929 | NaN | NaN | NaN | https://woodmereartmuseum.org/ | PA | NaN | NaN | NaN | yes | We-Su 10:00-17:00; Sa 10:00-18:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | NaN | Philadelphia | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 20.72 | NaN | 9201 | 19118 | Germantown Avenue | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | [10968493549, 9135569442, 9135569424, 91355694... | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2023-06-10 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
= philly_tourism.query("name == 'Philadelphia Museum of Art'").squeeze()
art_museum
art_museum.geometry
= philly_tourism.query("name == 'Liberty Bell'").squeeze()
liberty_bell
liberty_bell.geometry
Now, extract the lat and lng coordinates
For the Art Museum geometry, we can use the .geometry.centroid
attribute to calculate the centroid of the building footprint.
= liberty_bell.geometry.x
liberty_bell_x = liberty_bell.geometry.y liberty_bell_y
= art_museum.geometry.centroid.x
art_museum_x = art_museum.geometry.centroid.y art_museum_y
Find the nearest nodes on our OSMnx graph, using the ox.nearest_nodes()
function
ox.nearest_nodes?
Signature: ox.nearest_nodes(G, X, Y, return_dist=False) Docstring: Find the nearest node to a point or to each of several points. If `X` and `Y` are single coordinate values, this will return the nearest node to that point. If `X` and `Y` are lists of coordinate values, this will return the nearest node to each point. If the graph is projected, this uses a k-d tree for euclidean nearest neighbor search, which requires that scipy is installed as an optional dependency. If it is unprojected, this uses a ball tree for haversine nearest neighbor search, which requires that scikit-learn is installed as an optional dependency. Parameters ---------- G : networkx.MultiDiGraph graph in which to find nearest nodes X : float or list points' x (longitude) coordinates, in same CRS/units as graph and containing no nulls Y : float or list points' y (latitude) coordinates, in same CRS/units as graph and containing no nulls return_dist : bool optionally also return distance between points and nearest nodes Returns ------- nn or (nn, dist) : int/list or tuple nearest node IDs or optionally a tuple where `dist` contains distances between the points and their nearest nodes File: ~/mambaforge/envs/musa-550-fall-2023/lib/python3.10/site-packages/osmnx/distance.py Type: function
# Get the origin node
= ox.nearest_nodes(G_cc, liberty_bell_x, liberty_bell_y)
orig_node
# Get the destination node
= ox.nearest_nodes(G_cc, art_museum_x, art_museum_y) dest_node
Now, we can use ox.shortest_path()
function to find the shortest path between these graph nodes.
We need to specify weight=‘length’ to find the shortest path by minimizing distance traveled (otherwise it treats each edge as weight=1).
# get the shortest path --> just a list of node IDs
= ox.shortest_path(G_cc, orig_node, dest_node, weight="length")
route1
route1
[3408446156,
110217312,
109814427,
5372039288,
109814445,
8588123388,
109814449,
5358069713,
5372059864,
2644235371,
5534891499,
110540235,
109750941,
110402209,
110402230,
534960802,
110391250,
637791907,
637791980,
110329803,
110329806,
775897224,
3414249481,
110329822,
110353061,
11162290432,
110054089,
775897147,
110329848,
110329851,
110125895,
534969088,
109745905,
109740423,
110330569,
550175455,
550175399]
Use ox.plot_graph_route()
to plot a graph and highlight a specific route
=0); ox.plot_graph_route(G_cc, route1, node_size
How about an interactive version?
osmnx
has a helper function ox.utils_graph.route_to_gdf()
to convert a route to a GeoDataFrame of edges.
="length").explore(
ox.utils_graph.route_to_gdf(G_cc, route1, weight="cartodb positron",
tiles="red",
color )
Finding the shortest travel time
The add_edge_speeds
function add edge speeds (km per hour) to graph as new speed_kph
edge attributes.
The function will add free-flow travel speeds for all edges based on the average maxspeed
value of edges, per highway type. This process can definitely be imprecise, but in the case that you happen to have more precise speed data, you can supply your own data instead of relying on OSM data.
# impute speed on all edges missing data
= ox.add_edge_speeds(G_cc)
G_cc
# calculate travel time (seconds) for all edges
= ox.add_edge_travel_times(G_cc) G_cc
# Get the graph edges
= ox.graph_to_gdfs(G_cc, nodes=False) edges
edges.head()
osmid | oneway | name | highway | reversed | length | speed_kph | travel_time | geometry | maxspeed | lanes | bridge | ref | tunnel | width | service | access | junction | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
u | v | key | ||||||||||||||||||
109727439 | 109911666 | 0 | 132508434 | True | Bainbridge Street | residential | False | 44.137 | 37.0 | 4.3 | LINESTRING (-75.17104 39.94345, -75.17053 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
109727448 | 109727439 | 0 | 12109011 | True | South Colorado Street | residential | False | 109.484 | 37.0 | 10.7 | LINESTRING (-75.17125 39.94248, -75.17120 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
110034229 | 0 | 12159387 | True | Fitzwater Street | residential | False | 91.353 | 37.0 | 8.9 | LINESTRING (-75.17125 39.94248, -75.17137 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
109727507 | 110024052 | 0 | 193364514 | True | Carpenter Street | residential | False | 53.208 | 37.0 | 5.2 | LINESTRING (-75.17196 39.93973, -75.17134 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
109728761 | 110274344 | 0 | 672312336 | True | Brown Street | residential | False | 58.270 | 40.2 | 5.2 | LINESTRING (-75.17317 39.96951, -75.17250 39.9... | 25 mph | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Groupby highway type and get the mean values
"highway"] = edges["highway"].astype(str)
edges["highway")[["length", "speed_kph", "travel_time"]].mean() edges.groupby(
length | speed_kph | travel_time | |
---|---|---|---|
highway | |||
['secondary', 'primary'] | 676.801000 | 43.300000 | 56.300000 |
['tertiary', 'motorway_link'] | 151.615000 | 42.100000 | 13.000000 |
living_street | 52.877143 | 47.200000 | 4.028571 |
motorway | 451.723346 | 83.038462 | 19.323077 |
motorway_link | 295.568174 | 47.200000 | 22.550000 |
primary | 103.286915 | 44.870944 | 8.251816 |
primary_link | 56.531789 | 40.200000 | 5.063158 |
residential | 81.302576 | 37.001304 | 7.920488 |
secondary | 93.164418 | 43.312000 | 7.877818 |
secondary_link | 65.884000 | 47.200000 | 5.000000 |
tertiary | 80.093234 | 42.094659 | 6.867507 |
tertiary_link | 37.969000 | 47.200000 | 2.850000 |
trunk | 72.969538 | 54.507692 | 4.800000 |
trunk_link | 176.703500 | 47.200000 | 13.500000 |
unclassified | 126.344395 | 32.200000 | 14.128947 |
# calculate two routes by minimizing travel time
= ox.shortest_path(G_cc, orig_node, dest_node, weight="travel_time") route2
# plot the routes
= ox.plot_graph_routes(
fig, ax
G_cc,=[route1, route2],
routes=["r", "y"],
route_colors=6,
route_linewidth=0,
node_size )
Let’s plot both in an interactive map:
= ox.utils_graph.route_to_gdf(G_cc, route1, weight="length").explore(
m ="cartodb dark matter",
tiles="red",
color
)
= ox.utils_graph.route_to_gdf(G_cc, route2, weight="length").explore(
m ="cartodb dark matter",
tiles="yellow",
color=m
m
)
m
Let’s compare to the two routes:
Distances:
= 0.0006213712
meters_to_miles
# compare the two routes
= (
route1_length ="length")["length"].sum()
ox.utils_graph.route_to_gdf(G_cc, route1, weight* meters_to_miles
)
= (
route2_length ="length")["length"].sum()
ox.utils_graph.route_to_gdf(G_cc, route2, weight* meters_to_miles
)
Travel times:
= 1.0 / 60
seconds_to_mins
= (
route1_time ="travel_time")["travel_time"].sum()
ox.utils_graph.route_to_gdf(G_cc, route1, weight* seconds_to_mins
)= (
route2_time ="travel_time")["travel_time"].sum()
ox.utils_graph.route_to_gdf(G_cc, route2, weight* seconds_to_mins
)
Summarize:
print(f"Route 1 is {route1_length:.2f} miles and takes {route1_time:.2f} minutes.")
print(f"Route 2 is {route2_length:.2f} miles and takes {route2_time:.2f} minutes.")
Route 1 is 2.19 miles and takes 5.04 minutes.
Route 2 is 2.46 miles and takes 4.46 minutes.
Part 2: Pandana
“Pandas Network Analysis - dataframes of network queries, quickly”
A complementary set of OSM-related features: - Downloading OSM-based networks - Extracting amenity data (so-called “Points of Interest”) - Calculating network-constrained distances
import pandana as pnda
from pandana.loaders import osm
Step 1: Get amenity data
Key function: osm.node_query()
- This will extract amenities within a given bounding box.
- Similar to the
ox.features_from_bbox()
function in OSMnx, but we slightly different syntax.
osm.node_query?
Signature: osm.node_query(lat_min, lng_min, lat_max, lng_max, tags=None) Docstring: Search for OSM nodes within a bounding box that match given tags. Parameters ---------- lat_min, lng_min, lat_max, lng_max : float tags : str or list of str, optional Node tags that will be used to filter the search. See http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide for information about OSM Overpass queries and http://wiki.openstreetmap.org/wiki/Map_Features for a list of tags. Returns ------- nodes : pandas.DataFrame Will have 'lat' and 'lon' columns, plus other columns for the tags associated with the node (these will vary based on the query). Index will be the OSM node IDs. File: ~/mambaforge/envs/musa-550-fall-2023/lib/python3.10/site-packages/pandana/loaders/osm.py Type: function
Get the bounding box:
= center_city_outline.bounds
boundary boundary
(-75.193582452986, 39.9286257450627, -75.1259307965391, 39.9738724134056)
= boundary [lng_min, lat_min, lng_max, lat_max]
# query OSM
= osm.node_query(lat_min, lng_min, lat_max, lng_max)
poi_df
# remove missing data
= poi_df.dropna(subset=["amenity"]) poi_df
poi_df.head()
lat | lon | railway | light_rail | name | network | operator | public_transport | wheelchair | highway | traffic_signals | old_ref | ref | noref | traffic_signals:direction | direction | traffic_calming | crossing | crossing:markings | tactile_paving | stop | noexit | crossing:barrier | barrier | crossing:island | disused:railway | crossing_ref | supervised | railway:signal:direction | ele | gnis:feature_id | place | wikidata | wikipedia | alt_name | gnis:Class | gnis:County | gnis:County_num | gnis:ST_alpha | gnis:ST_num | import_uuid | is_in | name:en | name:zh | amenity | brand | brand:wikidata | brand:wikipedia | operator:wikidata | operator:wikipedia | short_name | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | contact:website | cuisine | official_name | opening_hours | phone | takeaway | shop | website | ferry | building | addr:housename | healthcare | internet_access | internet_access:ssid | brewery | description | gnis:county_id | gnis:created | gnis:state_id | historic:amenity | note | old_name | craft | microbrewery | restaurant | leisure | sport | man_made | tower:type | gnis:edited | operator:short | operator:type | check_date | emergency | healthcare:speciality | railway:position | train | artwork_type | historic | tourism | atm | information | artist_name | material | attraction | office | bench | bus | covered | network:wikidata | shelter | memorial | gnis:county_name | gnis:import_uuid | gnis:reviewed | comment | historic:tourism | aeroway | gnis:feature_type | addr:country | platforms | station | subway | kerb | junction | iata | railway:ref | railway:switch:local_operated | railway:signal:position | addr:unit | internet_access:fee | crossing:light | start_date | subject:wikidata | artwork_subject | image | statue | tram | contact:facebook | reservation | website:menu | colour | parking | designation | not:brand:wikidata | entrance | denomination | religion | screen | delivery | diet:vegan | outdoor_seating | payment:cash | payment:coins | air_conditioning | contact:phone | indoor_seating | smoking | architect | disused:amenity | contact:instagram | network:wikipedia | collection_times | male | female | dispensing | name:de | drive_through | diet:vegetarian | fax | bar | service:bicycle:pump | service:bicycle:repair | service:bicycle:retail | toilets:wheelchair | route_ref | capacity | source:pkey | power | access | level | museum | name:he | fuel:biodiesel | fuel:biogas | fuel:cng | fuel:diesel | fuel:e10 | fuel:e85 | fuel:electricity | collection_times:signed | ref:signed | check_date:collection_times | clothes | addr:full | branch | name:ja | operator:en | fair_trade | organic | disused:shop | fixme | artist:wikidata | inscription:url | name:ga | contact:email | payment:bitcoin | source:name | phone:mnemonic | disused:brand | disused:brand:wikidata | disused:brand:wikipedia | disused:dispensing | disused:drive_through | disused:healthcare | disused:opening_hours | diet:pescetarian | lgbtq | payment:credit_cards | payment:debit_cards | drink:club-mate | fare_zone | toilets | toilets:access | building:levels | is_in:state_code | population | farm_boxes | compost | addr:place | social_facility | check_date:opening_hours | source:cuisine | social_facility:for | demolished:amenity | demolished:opening_hours | demolished:phone | demolished:social_facility | maxheight | access:delivery | wheelchair:description | wheelchair:description:en | beauty | elevation | fee | park_ride | layer | height | name:es | service:bicycle:chain_tool | natural | name:fr | name:signed | bin | lit | departures_board | denotation | currency:USD | drink:coca-cola | drink:coke | drink:cola | drink:cola_zero | drink:soda | drink:water | vending | opening_hours:kitchen | bicycle_rental | disused:leisure | year_of_construction | name:ru | toilets:unisex | toilets:disposal | unisex | kitchen_hours | currency:XBT | animal | owner | button_operated | traffic_signals:sound | traffic_signals:vibration | source:lgbtq | service:bicycle:rental | service:bicycle:second_hand | bicycle | horse | motor_vehicle | bottle | surface | lamp_type | theatre:genre | service:bicycle:tools | bicycle_parking | ref:retrofitness | leaf_cycle | leaf_type | capital | loc_name | name:ar | name:azb | name:be | name:bn | name:ca | name:cs | name:el | name:fa | name:grc | name:hi | name:it | name:kn | name:ko | name:lv | name:moh | name:oc | name:ono | name:pa | name:pl | name:pt | name:sr | name:ta | name:te | name:tr | name:uk | name:ur | name:zh-Hans | name:zh-Hant | population:date | source:name:oc | source:population | payment:cheque | advertising | payment:american_express | payment:mastercard | payment:visa | backrest | fire_hydrant:position | fire_hydrant:type | club | playground | date | display | faces | studio | seamark:type | amenity_1 | payment:venmo | self_service | payment:cards | payment:contactless | payment:notes | fountain | camera:direction | camera:mount | camera:type | surveillance | surveillance:type | manhole | drink:beer | recycling_type | addr:block_number | seats | brand:type | end_date | subject:wikipedia | type | authority | marker_date | historic:name | parcel_locker:type | parcel_mail_in | consulate | country | diplomatic | target | dog | recycling:beverage_cartons | recycling:cans | recycling:glass_bottles | recycling:paper | recycling:plastic | recycling:plastic_bottles | recycling:plastic_packaging | postal_code | changing_table | portable | seasonal | toilets:handwashing | toilets:position | locked | payment:discover_card | flag:name | flag:type | flag:wikidata | subject | flag:colour | foot | communication:mobile_phone | school | dance:style | dance:teaching | waste | landuse | military_service | generator:method | generator:output:electricity | generator:source | generator:type | payment:cash_app | seating | street_vendor | books | gender | inscription | hiking | support | door | smoothness | contact:flickr | contact:mastodon | contact:twitter | indoor | name:etymology:wikidata | payment:paypal | min_age | was:amenity | Business | network:short | mimics | source:url | disused | opening_hours:signed | location | water_source | drinking_water | fridge | wikimedia_commons | ramp:wheelchair | food | generator:output:hot_water | not:network:wikidata | bridge:support | opening_hours:url | payment:lightning | payment:lightning_contactless | payment:onchain | fishing | couplings | government | self_checkout | flickr | disused:payment:cash | disused:payment:contactless | disused:payment:credit_cards | disused:payment:debit_cards | disused:phone | disused:ref | delivery:partner | internet_access:password | surveillance:zone | post_box:type | fire_mains | fire_sprinkler | bonnet:colour | lamp_mount | openplaques:id | description:en | military | memorial:website | ref:hmdb | post_office | service:bicycle:sales | service:bicycle:service | diet:gluten_free | addr:door | community_centre:for | community_centre | cycleway | name:etymology | collector | bollard | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
274216093 | 39.957640 | -75.191254 | NaN | NaN | Citibank | NaN | Citibank | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | atm | Citibank | Q857063 | en:Citibank | Q857063 | en:Citibank | Citi | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
274217596 | 39.953015 | -75.192289 | NaN | NaN | Starbucks | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | cafe | Starbucks | Q37158 | en:Starbucks | NaN | NaN | NaN | Philadelphia | 3401 | 19104 | PA | Walnut Street | https://www.starbucks.com/store-locator/store/... | coffee_shop | Starbucks Coffee | Mo-Fr 05:30-24:00; Sa,Su 06:00-24:00 | 215-387-1914 | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
313440966 | 39.963935 | -75.166939 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | car_sharing | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
313440968 | 39.963978 | -75.170407 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | car_sharing | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
326519551 | 39.944261 | -75.132616 | NaN | NaN | Camden RiverLink Ferry Landing | NaN | NaN | station | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ferry_terminal | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | https://www.delawareriverwaterfront.com/places... | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
len(poi_df)
2383
"lat", "lon", "amenity"]].head(10) poi_df[[
lat | lon | amenity | |
---|---|---|---|
id | |||
274216093 | 39.957640 | -75.191254 | atm |
274217596 | 39.953015 | -75.192289 | cafe |
313440966 | 39.963935 | -75.166939 | car_sharing |
313440968 | 39.963978 | -75.170407 | car_sharing |
326519551 | 39.944261 | -75.132616 | ferry_terminal |
333786044 | 39.940858 | -75.158928 | restaurant |
333786095 | 39.941924 | -75.157357 | cafe |
333786448 | 39.942642 | -75.157958 | bank |
333786774 | 39.943102 | -75.160030 | pharmacy |
343293716 | 39.960440 | -75.159770 | cafe |
Explore the amenities in this region
For the full list of amenities, see the OSM Wikipedia
= (
chart
alt.Chart(poi_df)
.mark_bar()=alt.Y("amenity", sort="-x"), x="count()", tooltip=["amenity", "count()"])
.encode(y
)
chart
/Users/nhand/mambaforge/envs/musa-550-fall-2023/lib/python3.10/site-packages/altair/utils/schemapi.py:353: DeprecationWarning: jsonschema.RefResolver is deprecated as of v4.18.0, in favor of the https://github.com/python-jsonschema/referencing library, which provides more compliant referencing behavior as well as more flexible APIs for customization. A future release will remove RefResolver. Please file a feature request (on referencing) if you are missing an API for the kind of customization you need.
resolver = jsonschema.RefResolver.from_schema(root or schema)
/Users/nhand/mambaforge/envs/musa-550-fall-2023/lib/python3.10/site-packages/altair/utils/schemapi.py:118: DeprecationWarning: jsonschema.RefResolver is deprecated as of v4.18.0, in favor of the https://github.com/python-jsonschema/referencing library, which provides more compliant referencing behavior as well as more flexible APIs for customization. A future release will remove RefResolver. Please file a feature request (on referencing) if you are missing an API for the kind of customization you need.
resolver = jsonschema.RefResolver.from_schema(rootschema)