5 ms·
It would be nice if there was a way to manually enter location, since the location API on desktop is for me inaccurate by hundreds of miles.
by PostOnce 7y ago
It would be nice if there was a way to manually enter location, since the location API on desktop is for me inaccurate by hundreds of miles.
- CraftThatBlock 7y agoYou can spoof it in the inspector, under application/sensors I think
- mkl 7y agoAgreed. 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... Edit: Someone already did it for Iceland (though without marking the volcano positions): https://www.flickr.com/photos/78506020@N00/6807458402/ https://www.flickr.com/photos/78506020@N00/6807458402/
- mkl 7y agoI worked out how to make matplotlib do it: https://imgur.com/lsxjRXP https://imgur.com/lsxjRXP
- rontoes 7y agoDo you have any experience with the Google Maps API? I would love to implement this.
- mkl 7y agoNo 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)
- bonoboTP 7y agoYou have to use "is not None" instead of "!= None"
- manojlds 7y agoLooks off even on mobile with location enabled.
- ComputerGuru 7y agoWhere I am, it seems it could be off hundreds of miles in any direction and I’d still be far away from any volcano whatsoever.
- sleavey 7y agoOr 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.
- mobilemidget 7y agoFor me it doesn't seem to return anything via the API, just says calculating indefinitely
- rontoes 7y agoWhich browser/device are you using?
- egfx 7y agoiOS SE safari
- mobilemidget 7y agocatalina safari
- rontoes 7y agoI will add this feature!