In [3]:
import json, shapely, fiona, os
import seaborn as sns
import pandas as pd
import geopandas as gpd
import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline
In [6]:
trails = gpd.read_file('data/OSMPTrails.shp')
prairie = gpd.read_file('data/OSMPPrairieDogColonies.shp')
print("Same CRS: ", trails.crs==prairie.crs)
trails.head(1)
Out[6]:
In [10]:
trails.plot()
Out[10]:
In [11]:
prairie.plot()
Out[11]:
In [17]:
# Now do a spatial join to learn which trails go through prairie dog zones!
trails_with_prairie_dogs = gpd.sjoin(trails, prairie)
trails_with_prairie_dogs.head(3)
Out[17]:
In [107]:
trails_with_prairie_dogs = trails_with_prairie_dogs.dissolve(
by='TrlID',aggfunc='sum')
trails_with_prairie_dogs.head(10)
Out[107]:
In [108]:
trails_with_prairie_dogs.plot(
column = 'Mileage',
scheme='quantiles',
cmap='Purples', figsize=(8,8)
).set_title("OSMP Trails Where you can find Prairie Dogs");
In [96]:
veg = gpd.read_file('data/OSMPVegetation.shp')
print("Vegetation: ", len(veg))
veg.head(4)
Out[96]:
In [93]:
veg.plot()
Out[93]:
In [141]:
veg.d_SUBCLASS.value_counts()
Out[141]:
In [147]:
#What if I wanted to ride my bike in Evergreen Forests?
bike_in_evergreen_forests = gpd.sjoin(
trails[trails.Bicycles=='Yes'],
veg[veg.d_SUBCLASS=='Evergreen Forest']
).dissolve(by='TrlID',aggfunc='sum')
print("Found {} trails with Bicycles through Evergreen Forests".format(len(bike_in_evergreen_forests)))
bike_in_evergreen_forests.head()
Out[147]:
In [148]:
wgs84 = bike_in_evergreen_forests.to_crs(
{'init':'epsg:4326'}
)
In [149]:
wgs84.plot(figsize=(4,4)
).set_title("Biking trails through Evergreen Forests")
Out[149]:
In [150]:
#How about visualizing it in a browser?
with open('/home/cc/www/biking-trails-in-evergreen-forests.geojson','w') as outFile:
outFile.write(wgs84.to_json())
print("Now visit: http://townsendjennings.com/geo/?src=http://yetilabs.science/biking-trails-in-evergreen-forests.geojson")
In [154]:
#OR: Do a different search:
value = 'Consolidated Rock Sparse Vegetation'
#What if I wanted to ride my bike in Evergreen Forests?
bike_trails = gpd.sjoin(
trails[trails.Bicycles=='Yes'],
veg[veg.d_SUBCLASS==value]
).dissolve(by='TrlID',aggfunc='sum')
print("Found {} trails with Bicycles through {}".format(len(bike_trails), value))
bike_trails.head()
Out[154]:
In [157]:
#Write the file to disk and take a look...
with open('/home/cc/www/biking-trails-custom.geojson','w') as outFile:
outFile.write(bike_trails.to_crs({'init':'epsg:4326'}).to_json())
print("Now visit: http://townsendjennings.com/geo/?src=http://yetilabs.science/biking-trails-custom.geojson")
In [173]:
trails_with_water = gpd.sjoin(
trails[trails.Bicycles=='Yes'],
hydro
).dissolve(by='TrlID',aggfunc='sum')
print("Found {} trails that cross water".format(len(trails_with_water)))
In [190]:
with open('/home/cc/www/biking-trails-water.geojson','w') as outFile:
outFile.write(trails_with_water.query(
'Mileage<0.5'
).to_crs({'init':'epsg:4326'}
).to_json()
);
In [191]:
print("Now visit: http://townsendjennings.com/geo/?src=http://yetilabs.science/biking-trails-water.geojson")
In [136]:
buildings = gpd.read_file('data/Building_Footprints.shp')
print("Found {0} buildings".format(len(buildings)))
buildings.head()
Out[136]:
In [194]:
crime = gpd.read_file('data/Target_Crime_Locations.shp')
crime.head()
Out[194]:
In [212]:
buildings.head(1000).buffer(0.00001).plot()
Out[212]: