Gull Tracking#

The Research Institute for Nature and Forest (INBO) has been monitoring GPS locations of herring gulls breeding at the North Sea coast of Belgium since 2013. For 2018, there are 2.4 million bird-tracking coordinates, which are difficult to visualize with most plotting libraries but are easily visualized using Datashader. See DOI 10.5281/zenodo.3541812 for details and how to download the data.

import pandas as pd
import hvplot.pandas # noqa
from holoviews.util.transform import lon_lat_to_easting_northing as ll_en

The CSV file contains latitude and longitude information in degrees. Here we will want to overlay this data onto geographic mapping tiles that use the Web Mercator projection, so we use a utility from HoloViews to project the spherical coordinates into the tiles’ coordinate system to allow them to be overlaid correctly.

We will also center the plot on where most of the data is concentrated by plotting within selected longitude and latitude locations.

df = pd.read_csv('./data/HG_OOSTENDE-gps-2018.csv', usecols=['location-long', 'location-lat'])
df['easting'], df['northing'] = ll_en(df['location-long'], df['location-lat'])

df = df[(df['location-long'] > -14) & (df['location-lat'] < 53.3)]

print(f"Length of data: {len(df)}")
   location-long  location-lat        easting      northing
0       2.819559     50.978461  313871.827614  6.617485e+06
1       2.819568     50.978458  313872.885149  6.617484e+06
2       2.819568     50.978466  313872.918545  6.617486e+06
3       2.819576     50.978476  313873.797969  6.617487e+06
4       2.819571     50.978457  313873.219107  6.617484e+06
Length of data: 2432290
df.hvplot.points(x='easting', y='northing', rasterize=True, tiles='EsriImagery',
                 cmap='fire', cnorm='eq_hist', dynspread=True, width=800, height=800)
/home/runner/work/examples/examples/gull_tracking/envs/default/lib/python3.11/site-packages/dask/dataframe/ FutureWarning: 
Dask dataframe query planning is disabled because dask-expr is not installed.

You can install it with `pip install dask[dataframe]` or `conda install dask`.
This will raise in a future version.

  warnings.warn(msg, FutureWarning)