Skip to content

Instantly share code, notes, and snippets.

@Kyrremann
Last active March 25, 2021 13:23
Show Gist options
  • Save Kyrremann/995ed352b53b83a8f197281ceb4e1998 to your computer and use it in GitHub Desktop.
Save Kyrremann/995ed352b53b83a8f197281ceb4e1998 to your computer and use it in GitHub Desktop.
Simple Ruby script to get elevations for Norwegian cities
require 'httparty'
require 'nokogiri'
require 'open-uri'
require 'cgi'
require 'json'
cities = ['Alta', 'Arendal', 'Askim_(tettsted)', 'Bergen', 'Bodø', 'Brekstad', 'Brevik', 'Brumunddal', 'Bryne', 'Brønnøysund', 'Drammen', 'Drøbak', 'Egersund', 'Elverum', 'Fagernes', 'Farsund', 'Fauske', 'Finnsnes', 'Flekkefjord', 'Florø', 'Fosnavåg', 'Fredrikstad', 'Førde', 'Gjøvik', 'Grimstad', 'Halden', 'Hamar', 'Hammerfest', 'Harstad', 'Haugesund', 'Hokksund', 'Holmestrand', 'Honningsvåg', 'Horten', 'Hønefoss', 'Jessheim', 'Jørpeland', 'Kirkenes', 'Kolvereid', 'Kongsberg', 'Kongsvinger', 'Kopervik', 'Kragerø', 'Kristiansand', 'Kristiansund', 'Langesund', 'Larvik', 'Leknes', 'Levanger', 'Lillehammer', 'Lillesand', 'Lillestrøm', 'Lyngdal', 'Mandal', 'Mo_i_Rana', 'Moelv', 'Molde', 'Mosjøen', 'Moss', 'Mysen', 'Måløy', 'Namsos', 'Narvik', 'Notodden', 'Odda', 'Orkanger', 'Oslo', 'Otta', 'Porsgrunn', 'Raufoss', 'Risør', 'Rjukan', 'Røros', 'Sandefjord', 'Sandnes', 'Sandnessjøen', 'Sandvika', 'Sarpsborg', 'Sauda', 'Ski_(tettsted)', 'Skien', 'Skudeneshavn', 'Sortland', 'Stathelle', 'Stavanger', 'Stavern', 'Steinkjer', 'Stjørdalshalsen', 'Stokmarknes', 'Stord', 'Svelvik_(tettsted)', 'Svolvær', 'Tromsø', 'Trondheim', 'Tvedestrand', 'Tønsberg', 'Ulsteinvik', 'Vadsø', 'Vardø', 'Verdalsøra', 'Vinstra', 'Åkrehamn', 'Ålesund', 'Åndalsnes', 'Åsgårdstrand']
# 69°58′36″
# 60°47′N 10°41′Ø
def to_dd(coord)
coord.scan(/(\d+).(\d+).(\d+)?/).map{|x,y,z|x.to_f+y.to_f/60+z.to_f/3600}.first
end
elevations = {}
begin
cities.each do |city|
doc = Nokogiri::HTML(URI.open("https://no.wikipedia.org/wiki/#{CGI.escape(city)}"))
moh = doc.at('tr:contains("Høyde over havet")')
print "#{city}: "
if moh
elevation = moh.text.delete("^0-9,").to_f
elevations[city] = elevation
else
latitude = to_dd(doc.at('span[class="latitude"]').text)
longitude = to_dd(doc.at('span[class="longitude"]').text)
# response = HTTParty.get("https://api.opentopodata.org/v1/eudem25m?locations=#{latitude},#{longitude}") # https://www.opentopodata.org/#public-api # free
# elevation = response['results'].first['elevation'] # not properly tested
response = HTTParty.get("https://elevation-api.io/api/elevation?points=#{latitude},#{longitude}&resolution=30&key=API_TOKEN") # not free
elevation = response['elevations'].first['elevation']
elevations[city] = elevation
end
p elevation
sleep(0.1)
end
rescue => e
p e
end
puts elevations.to_json
elevations.sort_by {|city,elevation| elevation }.reverse.map {|city,elevation| p "#{city}: #{elevation}" }
@Kyrremann
Copy link
Author

Kyrremann commented Mar 25, 2021

Output from local run

"Røros: 628.0"
"Fagernes: 360.0"
"Raufoss: 334.0"
"Rjukan: 296.0"
"Otta: 274.0"
"Vinstra: 241.0"
"Jessheim: 201.0"
"Elverum: 186.0"
"Gjøvik: 168.0"
"Lillehammer: 162.0"
"Kongsberg: 162.0"
"Moelv: 148.0"
"Kongsvinger: 145.0"
"Brumunddal: 137.0"
"Hamar: 134.0"
"Lillestrøm: 131.0"
"Askim_(tettsted): 130.0"
"Molde: 130.0"
"Ski_(tettsted): 118.0"
"Mysen: 109.0"
"Hønefoss: 96.0"
"Holmestrand: 83.0"
"Kolvereid: 65.0"
"Harstad: 62.0"
"Notodden: 58.0"
"Alta: 56.0"
"Narvik: 51.0"
"Steinkjer: 46.0"
"Egersund: 42.0"
"Moss: 41.0"
"Kristiansund: 38.0"
"Risør: 37.0"
"Stord: 35.0"
"Stathelle: 33.0"
"Sarpsborg: 31.0"
"Haugesund: 30.0"
"Bryne: 30.0"
"Brevik: 30.0"
"Tvedestrand: 29.0"
"Åsgårdstrand: 29.0"
"Lillesand: 28.0"
"Grimstad: 26.0"
"Mo_i_Rana: 26.0"
"Larvik: 24.0"
"Drøbak: 24.0"
"Oslo: 23.0"
"Jørpeland: 23.0"
"Kragerø: 21.0"
"Horten: 21.0"
"Sandnessjøen: 20.0"
"Tønsberg: 20.0"
"Tromsø: 20.0"
"Florø: 18.0"
"Stokmarknes: 18.0"
"Stavern: 17.0"
"Svelvik_(tettsted): 17.0"
"Åndalsnes: 16.0"
"Porsgrunn: 15.0"
"Levanger: 14.0"
"Sandefjord: 14.0"
"Hokksund: 14.0"
"Lyngdal: 13.0"
"Skien: 12.0"
"Flekkefjord: 12.0"
"Sandvika: 12.0"
"Bodø: 12.0"
"Honningsvåg: 12.0"
"Arendal: 12.0"
"Orkanger: 11.0"
"Langesund: 11.0"
"Førde: 10.0"
"Leknes: 10.0"
"Kirkenes: 9.0"
"Drammen: 9.0"
"Farsund: 9.0"
"Halden: 9.0"
"Namsos: 8.0"
"Fauske: 8.0"
"Finnsnes: 8.0"
"Sortland: 8.0"
"Sauda: 7.0"
"Stjørdalshalsen: 7.0"
"Vadsø: 7.0"
"Fredrikstad: 7.0"
"Verdalsøra: 6.0"
"Kristiansand: 6.0"
"Trondheim: 6.0"
"Åkrehamn: 6.0"
"Ulsteinvik: 5.0"
"Kopervik: 5.0"
"Bergen: 5.0"
"Skudeneshavn: 4.0"
"Brønnøysund: 4.0"
"Hammerfest: 4.0"
"Odda: 3.0"
"Måløy: 3.0"
"Svolvær: 3.0"
"Brekstad: 3.0"
"Fosnavåg: 3.0"
"Mandal: 1.0"
"Stavanger: 1.0"
"Ålesund: 0.0"
"Sandnes: 0.0"
"Vardø: 0.0"
"Mosjøen: 0.0"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment