{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import geoviews as gv\n", "import cartopy.io.shapereader as shpreader\n", "import shapely.geometry as sgeom\n", "\n", "gv.extension('matplotlib')\n", "\n", "gv.output(fig='svg', size=250)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def sample_data():\n", " \"\"\"\n", " Returns a list of latitudes and a list of longitudes (lons, lats)\n", " for Hurricane Katrina (2005).\n", "\n", " The data was originally sourced from the HURDAT2 dataset from AOML/NOAA:\n", " http://www.aoml.noaa.gov/hrd/hurdat/newhurdat-all.html on 14th Dec 2012.\n", "\n", " \"\"\"\n", " lons = [-75.1, -75.7, -76.2, -76.5, -76.9, -77.7, -78.4, -79.0,\n", " -79.6, -80.1, -80.3, -81.3, -82.0, -82.6, -83.3, -84.0,\n", " -84.7, -85.3, -85.9, -86.7, -87.7, -88.6, -89.2, -89.6,\n", " -89.6, -89.6, -89.6, -89.6, -89.1, -88.6, -88.0, -87.0,\n", " -85.3, -82.9]\n", "\n", " lats = [23.1, 23.4, 23.8, 24.5, 25.4, 26.0, 26.1, 26.2, 26.2, 26.0,\n", " 25.9, 25.4, 25.1, 24.9, 24.6, 24.4, 24.4, 24.5, 24.8, 25.2,\n", " 25.7, 26.3, 27.2, 28.2, 29.3, 29.5, 30.2, 31.1, 32.6, 34.1,\n", " 35.6, 37.0, 38.6, 40.1]\n", "\n", " return lons, lats\n", "\n", "shapename = 'admin_1_states_provinces_lakes'\n", "states_shp = shpreader.natural_earth(resolution='110m',\n", " category='cultural', name=shapename)\n", "\n", "lons, lats = sample_data()\n", "track = sgeom.LineString(zip(lons, lats))\n", "\n", "title = 'US States which intersect the track of Hurricane Katrina (2005)'\n", "\n", "track_buffer = track.buffer(2)\n", "intersects, buffers, other = [], [], []\n", "for state in shpreader.Reader(states_shp).geometries():\n", " if state.intersects(track):\n", " intersects.append(state)\n", " elif state.intersects(track_buffer):\n", " buffers.append(state)\n", " else:\n", " other.append(state)\n", "\n", "intersects = gv.Polygons(intersects, label='State directly intersects with track').opts(facecolor='#FF0000')\n", "buffers = gv.Polygons(buffers, label='State is within 2 degrees of track').opts(facecolor='#FF7E00')\n", "other = gv.Polygons(other).opts(facecolor=(0.9375, 0.9375, 0.859375))\n", "track_buffer = gv.Shape(track_buffer).opts(alpha=0.5)\n", "track = gv.Shape(track)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(intersects * buffers * other * track_buffer * track).opts(title=title)" ] } ], "metadata": { "language_info": { "name": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 2 }