In [1]:
# start with same libraries as vector tutorial
%matplotlib inline

from __future__ import (absolute_import, division, print_function)
import os

import matplotlib as mpl
import matplotlib.pyplot as plt

from shapely.geometry import Point
import pandas as pd
import geopandas as gpd
from geopandas import GeoSeries, GeoDataFrame
/root/miniconda/envs/backend/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  return f(*args, **kwds)
In [2]:
%run -i load_data.py
In [3]:
co2_data_table.head()
Out[3]:
Reference Site Type Latitude Longitude DateTime Altitude Discharge Stream Slope Width Depth ... Air Temperature DO Chl a CO2 k k600 CO2 Flux CO2 Flux.1 Source geometry
0 Alin and Richey, 2012 small stream -10.066 -67.606 20040701 150.0 NaN NaN NaN NaN ... 28.1 NaN NaN 140.5 NaN -18.104 1381.28 NaN Alin, S.R., and J.E. Richey. 2012. LBA-ECO CD-... POINT (-67.60599999999999 -10.066)
1 Alin and Richey, 2012 small stream -10.066 -67.606 20040701 150.0 NaN NaN NaN NaN ... 28.1 NaN NaN 140.5 NaN -18.320 1267.75 NaN Alin, S.R., and J.E. Richey. 2012. LBA-ECO CD-... POINT (-67.60599999999999 -10.066)
2 Alin and Richey, 2012 small stream -10.066 -67.606 20040701 150.0 NaN NaN NaN NaN ... 28.1 NaN NaN 140.5 NaN -35.512 1449.39 NaN Alin, S.R., and J.E. Richey. 2012. LBA-ECO CD-... POINT (-67.60599999999999 -10.066)
3 Alin and Richey, 2012 small stream -10.066 -67.606 20040701 150.0 NaN NaN NaN NaN ... 28.1 NaN NaN 140.5 NaN -20.488 1025.55 NaN Alin, S.R., and J.E. Richey. 2012. LBA-ECO CD-... POINT (-67.60599999999999 -10.066)
4 Alin and Richey, 2012 small stream -10.066 -67.606 20040701 150.0 NaN NaN NaN NaN ... 28.1 NaN NaN 140.5 NaN -22.272 1411.55 NaN Alin, S.R., and J.E. Richey. 2012. LBA-ECO CD-... POINT (-67.60599999999999 -10.066)

5 rows × 27 columns

In [4]:
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.head(2)
Out[4]:
pop_est continent name iso_a3 gdp_md_est geometry
0 28400000.0 Asia Afghanistan AFG 22270.0 POLYGON ((61.21081709172574 35.65007233330923,...
1 12799293.0 Africa Angola AGO 110300.0 (POLYGON ((16.32652835456705 -5.87747039146621...

Visualize the map

In [5]:
f, ax = plt.subplots(1, figsize=(12, 6))
ax.set_title('co2 site locations')
world.plot(ax=ax, edgecolor='gray')
co2_geo_data_table.plot(ax=ax, marker='.', color='r')
ax.set_ylim([-90, 90])
ax.set_axis_off()
plt.axis('equal');

Subsetting North America & Draw Interactive Map

In [6]:
NA_co2_geo_data_table = co2_geo_data_table[co2_geo_data_table.Latitude.between(23, 90) & 
                                           co2_geo_data_table.Longitude.between(-131, -68)] 
In [7]:
import folium
firstmap = folium.Map(location=[39.8283, -98.5795], tiles='Stamen Terrain', zoom_start=4)
for index, row in NA_co2_geo_data_table.iterrows():
     iconcolor='blue'
#      if row['Status'] == "major":
#          iconcolor = 'darkred'
#      elif row['Status'] == 'action':
#          iconcolor = 'lightred'
     marker = folium.Marker((row['Latitude'],row['Longitude']), popup="{}:{}".format(row['Reference'], row['Site Type']))
     marker.add_to(firstmap)
firstmap
Out[7]:

Clustering Markers

In [8]:
import folium
from folium.plugins import MarkerCluster

mymap1 = folium.Map(location=[39.8283, -98.5795], tiles='Stamen Terrain', zoom_start=4)

mcluster = MarkerCluster().add_to(mymap1)

for index, row in NA_co2_geo_data_table.iterrows():
    folium.Marker(location=[row['Latitude'],row['Longitude']], popup=row.Reference).add_to(mcluster)

mymap1
Out[8]:
In [9]:
import folium
from folium.plugins import MarkerCluster

mymap2 = folium.Map(location=[co2_geo_data_table['Latitude'].mean(),co2_geo_data_table['Longitude'].mean()], 
                    tiles='Stamen Terrain', zoom_start=1)

mcluster2 = MarkerCluster().add_to(mymap2)

for index, row in co2_geo_data_table.iterrows():
    folium.Marker(location=[row['Latitude'],row['Longitude']], popup=row.Reference).add_to(mcluster2)

mymap2
Out[9]:

Different Types

In [10]:
import folium
mymap3 = folium.Map(location=[co2_geo_data_table['Latitude'].mean(),co2_geo_data_table['Longitude'].mean()], tiles='Stamen Terrain', zoom_start=1)

mcluster3 = MarkerCluster().add_to(mymap3)

for index, row in co2_geo_data_table.iterrows():
    iconcolor='blue'
    if pd.isnull(row['CO2']): # no CO2 values
        if pd.isnull(row['CO2 Flux.1']): # no CO2 values and no flux values
            iconcolor = 'red'
            marker = folium.Marker((row['Latitude'],row['Longitude']), popup="{}: no CO2 values".format(row['Site Type']),
                                  icon=folium.Icon(color=iconcolor, icon='warning-sign'))
            marker.add_to(mcluster3)
        else:
            iconcolor = 'blue'
            marker = folium.Marker((row['Latitude'],row['Longitude']), popup="{}: CO2 flux =\n {} mg C m-2 d-1".format(row['Site Type'], row['CO2 Flux.1']),
                                  icon=folium.Icon(color=iconcolor, icon='info-sign'))
            marker.add_to(mcluster3)
    else: # CO2 values
        if pd.isnull(row['CO2 Flux.1']): # CO2 values but no flux values
            iconcolor = 'purple'
            marker = folium.Marker((row['Latitude'],row['Longitude']), popup="{}: CO2 =\n {} micro-atm".format(row['Site Type'], row['CO2']),
                                  icon=folium.Icon(color=iconcolor, icon='info-sign'))
            marker.add_to(mcluster3)
        else:
            iconcolor = 'green' # both CO2 values and flux values
            marker = folium.Marker((row['Latitude'],row['Longitude']), popup="{}: \n CO2 = {} micro-atm \n CO2 flux = {} mg C m-2 d-1".format(row['Site Type'], row['CO2'], row['CO2 Flux.1']),
                                  icon=folium.Icon(color=iconcolor, icon='info-sign'))
            marker.add_to(mcluster3)
  
mymap3
Out[10]: