diff --git a/scripts/mkEvents.csh b/scripts/mkEvents.csh index a4cb770..4b6d670 100755 --- a/scripts/mkEvents.csh +++ b/scripts/mkEvents.csh @@ -1 +1 @@ -curl -o events.xml "https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?starttime=2014-08-01&orderby=time&minlat=50.92&maxlat=52.76&minlon=4.26&maxlon=9.74&minmag=1.1" +curl -o events.xml "https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?starttime=2015-04-01&orderby=time&minlat=50.92&maxlat=52.76&minlon=4.26&maxlon=9.74&minmag=1.1" diff --git a/scripts/mkGeolocationTable.py b/scripts/mkGeolocationTable.py index fd2a891..64082c5 100755 --- a/scripts/mkGeolocationTable.py +++ b/scripts/mkGeolocationTable.py @@ -39,6 +39,8 @@ def mkGeolocationTable(file=''): import xml.etree.ElementTree as ET from sys import stdin import warnings + from time import sleep + from geopy.geocoders import Photon import urllib2 as URL import json as JSON @@ -51,6 +53,7 @@ def mkGeolocationTable(file=''): warnings.formatwarning = simple_warning # try loading the file + geolocationTable = {} if file : try: jsonfile = open(file) @@ -62,6 +65,7 @@ def mkGeolocationTable(file=''): # parse event.xml DOM = ET.parse(stdin).getroot() + geolocator = Photon() # iterate over all events for event in DOM.iterfind('qml:eventParameters/qml:event', namespaces): @@ -75,9 +79,32 @@ def mkGeolocationTable(file=''): elif evaluationMode == 'automatic': warnings.warn('Skipping automatic event %s' %(publicID)) else: + try: + location = geolocator.reverse("{lat}, {lng}".format(lat=lat, lng=lng)) + except: + warnings.warn('Reverse Geolocation failed. Skipping event.') + continue + place = [] + try: + place = location.raw['properties']['city'] + except KeyError: + try: + place = location.raw['properties']['town'] + except KeyError: + try: + place = location.raw['properties']['village'] + except KeyError: + try: + place = location.raw['properties']['county'] + except KeyError: + warnings.warn('Could not extract city for event {0} at {1} N / {2} E (URL: {3})'.format(publicID, lat, lng, url)) + geolocationTable[publicID] = place + sleep(1.1) + + ''' #warnings.warn('Processing event %s' %publicID) # send and evaluate nominatim request - url = 'https://open.mapquestapi.com/nominatim/v1/reverse.php?lat={0}&lon={1}&zoom=10&format=json'.format(lat, lng) + url = 'https://open.mapquestapi.com/nominatim/v1/reverse.php?key=oE512xGQxeH1n2cueacJ6xzRv7qFlCib&lat={0}&lon={1}&zoom=10&format=json'.format(lat, lng) response = URL.urlopen(url) if ( response.msg == 'OK' ): data = JSON.loads(response.read()) @@ -106,6 +133,7 @@ def mkGeolocationTable(file=''): warnings.warn('Could not extract city for event {0} at {1} N / {2} E (URL: {3})'.format(publicID, lat, lng, url)) else: warnings.warn('Request {0} failed'.format(url)) + ''' # dump json print 'var geolocationTable = '+JSON.dumps(geolocationTable, sort_keys=True)+';' diff --git a/www/events.js b/www/events.js index 1d736c5..3bc68e5 100644 --- a/www/events.js +++ b/www/events.js @@ -41,15 +41,18 @@ function addTableRow(row, table) { /* do reverse geolocation lookup */ function getGeolocation(id, lat, lng) { if ( !geolocationTable[id] ) { - $.getJSON( config['ajax']['nominatimURL'], { lat: lat, lon: lng, zoom: 10, format: "json" } ) + $.getJSON( config['ajax']['nominatimURL'], { lat: lat, lon: lng } ) .done(function( json ) { var city = json.address["city"]; if ( ~city ) { city = json.address["town"]; }; if ( ~city ) { city = json.address["village"]; }; var country = json.address["country"]; var countryCode = json.address["country_code"].toUpperCase(); + var city = json.features[0].properties.city; + var countryCode = json.features[0].properties.country; geolocationTable[id] = city; ( countryCode != "DE" ) ? geolocationTable[id] = geolocationTable[id] + " ("+countryCode+")" : null; + ( countryCode != "Germany" ) ? geolocationTable[id] = geolocationTable[id] + " ("+countryCode+")" : null; if ( city ) { $("#eventstable a.toggle[eventid="+id+"]").text(geolocationTable[id]); var sort = [[0,1],[1,1],[2,1]]; @@ -120,12 +123,10 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) { var evaluationStatus = $(this).find('origin > evaluationStatus').text(); var type = $(this).find('type').last().text(); var location - // get location, try this in order: - // regional map name, given value, cached value, or nominatim lookup - geolocationTable[id] ? null : getGeolocation(id, lat, lng); // do AJAX lookup if not cached, location will be updated later - location = ( geolocationTable[id] || getLocation(lat, lng)[0] || $(this).find('description > text').text() ); // create table row: Date, Time, Mag, Location if ( !eventTable[id] && $.inArray(type, config['event']['typeWhitelist'] )+1 && $.inArray(evaluationStatus, config['event']['evaluationBlacklist'])<0 && Number(mag)+0.05 >= config['event']['minMag'] ) { + geolocationTable[id] ? null : getGeolocation(id, lat, lng); // do AJAX lookup if not cached, location will be updated later + location = ( geolocationTable[id] || getLocation(lat, lng)[0] || $(this).find('description > text').text() ); // general event info (1st line) var row = '