Agreed. Actually, I think the default behaviour should be to show a map with a Voronoi diagram so you can immediately see the closest volcano for any location.
Hm. The volcano locations are in a JSON list, and SciPy can do spherical Voronoi calculations...
No I don't. All you need, though, is the ability to draw straight lines (well, great circle lines) between points. You could do the region generation once offline, in Python:
import numpy as np
from scipy.spatial import SphericalVoronoi
import json
with open('volcanos.json', 'rt') as f:
volcanos = json.load(f)
#There are some nulls in the data:
volcanos = [v for v in volcanos if v['longitude'] != None and v['latitude'] != None]
def longlat_to_xyz(longlat):
longlat = longlat.reshape((-1, 2))*(np.pi/180.)
r = np.cos(longlat[:, 1])
return np.column_stack((r*np.cos(longlat[:, 0]), r*np.sin(longlat[:, 0]), np.sin(longlat[:, 1])))
#go through set to remove duplicates:
volcano_longlat = np.array(list(set((v['longitude'], v['latitude']) for v in volcanos)))
volcano_xyz = longlat_to_xyz(volcano_longlat)
sv = SphericalVoronoi(volcano_xyz)
sv.sort_vertices_of_regions() #make the vertices go around each shape
#find unique edges (they're shared between regions):
edges = set()
for region in sv.regions:
region.append(region[0])
for i in range(len(region)-1):
edges.add((region[i], region[i+1]))
long_min = -30.
long_max = 330.
def xyz_to_longlat(xyz, long_min=long_min, long_max=long_max):
long = np.arctan2(xyz[:, 1], xyz[:, 0])*(180./np.pi)
long[long<long_min] += 360.
long[long>long_max] -= 360.
return np.column_stack((long, np.arcsin(xyz[:, 2])*(180./np.pi)))
vertices = xyz_to_longlat(sv.vertices)
#To draw the regions on Google Maps etc., save edges and vertices as JSON and load into JS.
#To draw the linked map with Matplotlib (very slow for hi-res, and it was fiddly setting up the right conda environment):
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
fig, ax = plt.subplots(figsize=(16, 10))
m = Basemap(projection='robin', lon_0=-200, resolution='h', ax=ax)
m.drawcoastlines(linewidth=.1)
m.drawcountries(linewidth=.1)
volcano_longlat2 = xyz_to_longlat(volcano_xyz)
x, y = m(volcano_longlat2[:, 0], volcano_longlat2[:, 1])
m.plot(x, y, 'ro', markersize=.5)
for edge in edges:
m.drawgreatcircle(vertices[edge[0], 0], vertices[edge[0], 1],
vertices[edge[1], 0], vertices[edge[1], 1],
color='b', linewidth=.3)
fig.tight_layout()
fig.savefig('volcano_voronoi.png', dpi=600)
Or for those who disable the location requests. I never give websites permission to see my location (not that it's very useful on desktops without GPS). Almost all websites fall back to a search box when they can't get the location automatically.
I'm curious, when I was a kid we were taught about the active/dormant/extinct distinction, but my understanding has been that more modern thinking doesn't really go for the dormant label, because dormant on a human timescale doesn't really mean much on a geologic timescale.
Huh. It's just a black screen with a red "Calculating..." in the upper left corner and a Bitcoin wallet in the upper right. Nothing else. Safari 12.1.2
Closest to me (in Austin, TX) is the massive Carrizozo Lava Flow in NM. I've actually been there via the Valley of Fires State Park. It's an amazing place, and seems to be usually empty- definitely worth a visit if you're in the area!
Currently in a country with some excellent volcanoes: Ethiopia. Sadly this site isn't loading - I assume it is too big a download (not great internet up here in the mountains). A lightweight version would be great:)
Will try to reduce the download size. Unfortunately I don't have much control over the embedded map but I assume Google has optimised this to a decent extent
ATM this returns an incorrect answer for me (at Strasbourg, yet returning Dôme volcano circus in the center of France, 645km) as the closest volcano is actually the Nideck, a 250'000'000 year old volcano, a mere 35km from here.
Thank you for the feedback! I am going to collate the inaccuracies and update the volcano database. I am also going to try to fix the errors a few of you have experienced.
There are lava flows from ancient rifts, dating to the separation of North America from Pangaea, all over the East Coast, for instance the Connecticut River Valley.
For active volcano, see Iceland or Montserrat or Yellowstone.
That's right. Honestly, web development is far from my expertise, I'm more of an AI guy. Data is mainly from http://volcano.oregonstate.edu/volcano_table and a few other sources.
At least we're not Tacoma or Bellingham? Plus, as someone who's always really been into volcanoes since early childhood being able drive two hours and climb multiple volcanoes with exciting fumaroles and weird geology is pretty great...