16 Commits

Author SHA1 Message Date
43d809cc18 Merge branch 'release/v20200714' into main 2020-07-14 21:13:41 +02:00
e3f27aac7e update copyright information 2020-07-14 21:13:15 +02:00
b7a09e98e3 Merge branch 'develop' into main 2020-07-14 19:35:31 +02:00
2251f25fcb Integrating changes made on web server 2020-07-14 19:31:46 +02:00
9bb73b9ab5 Updated svn:ignore property 2017-12-03 11:24:51 +00:00
87af90f047 Updated WSGI scripts. 2017-12-03 11:23:41 +00:00
aed22c7567 Updated JavaScript files to use new mapquest api after the old one wasn't supported unexpectedly. 2017-12-03 11:22:37 +00:00
703834c9da Updated scripts to create events.xml and geolocation.js cache files. 2017-12-03 11:18:55 +00:00
26d6b0f252 Updated scripts to create events.xml and geolocation.js cache files. 2017-12-03 11:18:07 +00:00
3b5b07968e Merging changes from life branch. 2015-10-01 15:44:23 +00:00
23ccbb8d9b Switched Komoot Geolocation url to https 2015-10-01 15:13:56 +00:00
dff6994a2b Switched to Komoot/Photon reverse geolocation service. 2015-10-01 14:37:41 +00:00
31fb40a220 Changed Nominatim (Reverse Geocoding) service to Komoot Photon. 2015-10-01 11:53:10 +00:00
1d286c3f50 Adding Komoot tile service. 2015-10-01 11:43:37 +00:00
70f933d8e2 Merging branches/life with trunk 2015-09-04 13:25:27 +00:00
2134402e93 Fixed date bug which surfaced in Chromium Browser 2015-09-04 13:13:58 +00:00
20 changed files with 415 additions and 215 deletions

1
.gitattributes vendored
View File

@@ -1,5 +1,6 @@
* text=auto !eol * text=auto !eol
scripts/mkEvents.csh -text scripts/mkEvents.csh -text
wsgi/showEnv.py -text
www/.htaccess -text www/.htaccess -text
www/copyright.inc.de -text www/copyright.inc.de -text
www/external/TileLayer.Grayscale.js -text www/external/TileLayer.Grayscale.js -text

4
.gitignore vendored
View File

@@ -1,3 +1,5 @@
scripts/events.xml
scripts/geolocation.js
wsgi/.idea wsgi/.idea
www/dlsv www/dlsv
www/event.xml www/event.xml
@@ -5,3 +7,5 @@ www/events.xml
www/geolocation.js www/geolocation.js
www/geolocationTable.js www/geolocationTable.js
www/stations.xml www/stations.xml
.vscode/settings.json

View File

@@ -1 +1,4 @@
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" #!/bin/bash
STIME=$1
curl -o events.xml "https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?starttime=${STIME}&orderby=time&minlat=50.92&maxlat=52.76&minlon=4.26&maxlon=9.74&minmag=1.1"

View File

@@ -13,7 +13,7 @@
curl -s "https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?minlat=50&maxlat=54&minlon=3&maxlon=10&minmag=1" | mkGeolocationTable.py > geolocationTable.js curl -s "https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?minlat=50&maxlat=54&minlon=3&maxlon=10&minmag=1" | mkGeolocationTable.py > geolocationTable.js
License License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -39,6 +39,8 @@ def mkGeolocationTable(file=''):
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from sys import stdin from sys import stdin
import warnings import warnings
from time import sleep
from geopy.geocoders import Photon
import urllib2 as URL import urllib2 as URL
import json as JSON import json as JSON
@@ -51,6 +53,7 @@ def mkGeolocationTable(file=''):
warnings.formatwarning = simple_warning warnings.formatwarning = simple_warning
# try loading the file # try loading the file
geolocationTable = {}
if file : if file :
try: try:
jsonfile = open(file) jsonfile = open(file)
@@ -62,6 +65,7 @@ def mkGeolocationTable(file=''):
# parse event.xml # parse event.xml
DOM = ET.parse(stdin).getroot() DOM = ET.parse(stdin).getroot()
geolocator = Photon()
# iterate over all events # iterate over all events
for event in DOM.iterfind('qml:eventParameters/qml:event', namespaces): for event in DOM.iterfind('qml:eventParameters/qml:event', namespaces):
@@ -75,37 +79,30 @@ def mkGeolocationTable(file=''):
elif evaluationMode == 'automatic': elif evaluationMode == 'automatic':
warnings.warn('Skipping automatic event %s' %(publicID)) warnings.warn('Skipping automatic event %s' %(publicID))
else: else:
#warnings.warn('Processing event %s' %publicID) try:
# send and evaluate nominatim request location = geolocator.reverse("{lat}, {lng}".format(lat=lat, lng=lng))
url = 'https://open.mapquestapi.com/nominatim/v1/reverse.php?lat={0}&lon={1}&zoom=10&format=json'.format(lat, lng) except:
response = URL.urlopen(url) warnings.warn('Reverse Geolocation failed. Skipping event.')
if ( response.msg == 'OK' ): sleep(1.1)
data = JSON.loads(response.read()) continue
city = [] place = []
try:
place = location.raw['properties']['city']
except KeyError:
try: try:
place = location.raw['properties']['town']
except KeyError:
try: try:
city = data['address']['city'] place = location.raw['properties']['village']
except: except KeyError:
warnings.warn('Request {3} for event {0} at {1} N / {2} E did not provide city attribute\n\t(Response: {4})'.format(publicID, lat, lng, url, data))
try: try:
city = data['address']['town'] place = location.raw['properties']['county']
warnings.warn('Using attribute town ({1}) for event {0}'.format(publicID, city)) except KeyError:
except: warnings.warn('Could not extract city for event {0} at {1} N / {2} E (URL: {3})'.format(publicID, lat, lng, url))
try: warnings.warn('Sucessfully looked up location for event {0}.'.format(publicID))
city = data['address']['county'] geolocationTable[publicID] = place
warnings.warn('Using attribute county ({1}) for event {0}'.format(publicID, city)) sleep(1.1)
except:
warnings.warn('Skipping event')
continue
countryCode = data['address']['country_code'].upper()
if ( countryCode == 'DE' ):
geolocationTable[publicID] = city.encode('utf-8')
else:
geolocationTable[publicID] = '{0} ({1})'.format(city.encode('utf-8'), countryCode)
except:
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 # dump json
print 'var geolocationTable = '+JSON.dumps(geolocationTable, sort_keys=True)+';' print 'var geolocationTable = '+JSON.dumps(geolocationTable, sort_keys=True)+';'

View File

@@ -8,7 +8,7 @@
$Id$ $Id$
:license :license
Copyright 2015 Kasper Fischer <kasper.fischer@ruhr-uni-bochum.de> Copyright 2020 Kasper Fischer <kasper.fischer@ruhr-uni-bochum.de>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -133,7 +133,7 @@ def fancy_plot(st, wsgi=False, img_format='png', color=True):
def trace_dayplot(st, deltat = None, def trace_dayplot(st, deltat = None,
ftype='bandpass', fmin=1.0, fmax=7.0, ftype='none', fmin=1.0, fmax=7.0,
col=('b', 'r', 'g'), interval=20, outpattern='', col=('b', 'r', 'g'), interval=20, outpattern='',
wsgi=False): wsgi=False):
""" """
@@ -260,18 +260,24 @@ def main(backend=None, args=None, wsgi=False):
if args['stime']: if args['stime']:
otime = UTCDateTime(args['stime']) otime = UTCDateTime(args['stime'])
else: else:
otime = UTCDateTime() - 3600 - deltat otime = UTCDateTime() - 3600. - deltat
network = args['station'].split('.')[0] network = args['station'].split('.')[0]
station = args['station'].split('.')[1] station = args['station'].split('.')[1]
if args['type'] == 'dayplot': if args['type'] == 'dayplot':
channel = 'BHZ' if network == 'Z3':
channel = 'HHZ'
else:
channel = 'BHZ'
else: else:
if args['length'] < 3600: if args['length'] < 3600.:
channel = 'HH?' channel = 'HH?'
else: else:
channel = 'BH?' if network == 'Z3':
channel = 'HH?'
else:
channel = 'BH?'
else: else:
otime = UTCDateTime('2014-11-15T11:35:25Z') otime = UTCDateTime() - 3600.
deltat = 30 deltat = 30
network = 'GR' network = 'GR'
station = 'BUG' station = 'BUG'

17
wsgi/showEnv.py Normal file
View File

@@ -0,0 +1,17 @@
def application(environ, start_response):
"""
Function application - Wrapper to process wsgi request
:param environ: contains information on the wsgi environment
:type environ: dict
:param start_response: function to process response header by the wsgi server
:type start_response: function
:return: response to be sent to the client by the wsgi server
:rtype: list
"""
from cgi import FieldStorage
form = FieldStorage(fp=environ['wsgi.input'], environ=environ)
start_response('200 OK', [('Content-Type', 'text/html')])
return [form]

View File

@@ -7,7 +7,7 @@ Subversion information:
$Id$ $Id$
license: gpl3 license: gpl3
Copyright 2012-2015 Seismological Observatory, Ruhr-University Bochum Copyright 2012-2020 Seismological Observatory, Ruhr-University Bochum
http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs
Contributors: Contributors:
Martina Rische <martina.rische@rub.de> Martina Rische <martina.rische@rub.de>

View File

@@ -1 +1,7 @@
Allow from all Allow from all
Header always set Access-Control-Allow-Origin "https://fdsnws.geophysik.ruhr-uni-bochum.de"
Header always append Access-Control-Allow-Origin "https://photon.komoot.de"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
Header always set Access-Control-Max-Age "600"

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -40,22 +40,23 @@ function addTableRow(row, table) {
/* do reverse geolocation lookup */ /* do reverse geolocation lookup */
function getGeolocation(id, lat, lng) { function getGeolocation(id, lat, lng) {
if ( !geolocationTable[id] ) { if ( $.inArray(id, geolocationTable) == -1 ) {
$.getJSON( config['ajax']['nominatimURL'], { lat: lat, lon: lng, zoom: 10, format: "json" } ) $.getJSON( config['ajax']['nominatimURL'], { lat: lat, lon: lng } )
.done(function( json ) { .done(function( json ) {
var city = json.address["city"]; if ( json.features[0] ) {
var country = json.address["country"]; var city = json.features[0].properties.city;
var countryCode = json.address["country_code"].toUpperCase(); var countryCode = json.features[0].properties.country;
geolocationTable[id] = city; geolocationTable[id] = city;
( country != "Deutschland" ) ? geolocationTable[id] = geolocationTable[id] + " ("+countryCode+")" : null; ( countryCode != "Germany" ) ? geolocationTable[id] = geolocationTable[id] + " ("+countryCode+")" : null;
if ( city ) { if ( city ) {
$("#eventstable a.toggle[eventid="+id+"]").text(geolocationTable[id]); $("#eventstable a.toggle[eventid="+id+"]").text(geolocationTable[id]);
var sort = [[0,1],[1,1],[2,1]]; var sort = [[0,1],[1,1],[2,1]];
$("#eventstable").trigger("update", [true]); $("#eventstable").trigger("update", [true]);
$("#eventstable").trigger("updateCache"); $("#eventstable").trigger("updateCache");
$("#eventstable").trigger("sorton", [sort]); $("#eventstable").trigger("sorton", [sort]);
} else { } else {
console.log("Nominatim did not provide a city tag for "+lat+" / "+lng); // console.log("Nominatim did not provide a city tag for "+lat+" / "+lng);
};
}; };
}) })
.fail(function( jqxhr, textStatus, error ) { .fail(function( jqxhr, textStatus, error ) {
@@ -88,7 +89,7 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
} else { } else {
request_data = { request_data = {
starttime: sprintf("%d-%02d-%02d", rtime.getFullYear(), rtime.getMonth()+1, rtime.getDate()), starttime: sprintf("%d-%02d-%02d", rtime.getFullYear(), rtime.getMonth()+1, rtime.getDate()),
orderby: 'time', orderby: 'time-asc',
minlat: sprintf('%.2f', mapBounds.getSouth()-config['map']['latlngDelta']), minlat: sprintf('%.2f', mapBounds.getSouth()-config['map']['latlngDelta']),
maxlat: sprintf('%.2f', mapBounds.getNorth()+config['map']['latlngDelta']), maxlat: sprintf('%.2f', mapBounds.getNorth()+config['map']['latlngDelta']),
minlon: sprintf('%.2f', mapBounds.getWest()-config['map']['latlngDelta']), minlon: sprintf('%.2f', mapBounds.getWest()-config['map']['latlngDelta']),
@@ -118,12 +119,10 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
var evaluationStatus = $(this).find('origin > evaluationStatus').text(); var evaluationStatus = $(this).find('origin > evaluationStatus').text();
var type = $(this).find('type').last().text(); var type = $(this).find('type').last().text();
var location 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 // 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'] ) { if ( !eventTable[id] && $.inArray(type, config['event']['typeWhitelist'] ) >= 0 && $.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) // general event info (1st line)
var row = '<tr class="tablesorter-hasChildRow">' var row = '<tr class="tablesorter-hasChildRow">'
+ '<td class="utctime-date">'+otime.split('.')[0]+'Z</td>' + '<td class="utctime-date">'+otime.split('.')[0]+'Z</td>'
@@ -137,6 +136,9 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
// setting up download links (3nd line) // setting up download links (3nd line)
var xmlurl = sprintf('%s?formatted=true&includearrivals=true&eventid=%s', config['ajax']['eventURL'], id); var xmlurl = sprintf('%s?formatted=true&includearrivals=true&eventid=%s', config['ajax']['eventURL'], id);
var oTime = new Date(otime); var oTime = new Date(otime);
if ( ~oTime ) {
oTime = new Date(otime.split('.')[0]);
};
var sTime = new Date(oTime.getTime()-10*1000.-oTime.getMilliseconds()); var sTime = new Date(oTime.getTime()-10*1000.-oTime.getMilliseconds());
var eTime = new Date(oTime.getTime()+50*1000.-oTime.getMilliseconds()); var eTime = new Date(oTime.getTime()+50*1000.-oTime.getMilliseconds());
var mseedurl = sprintf('%s?net=GE,GR,RN&cha=EH?,HH?&start=%04d-%02d-%02dT%02d:%02d:%02d&end=%04d-%02d-%02dT%02d:%02d:%02d', config['ajax']['mseedURL'], Number(sTime.getUTCFullYear()), Number(sTime.getUTCMonth())+1, Number(sTime.getUTCDate()), Number(sTime.getUTCHours()), Number(sTime.getUTCMinutes()), Number(sTime.getUTCSeconds()), Number(eTime.getUTCFullYear()), Number(eTime.getUTCMonth())+1, Number(eTime.getUTCDate()), Number(eTime.getUTCHours()), Number(eTime.getUTCMinutes()), Number(eTime.getUTCSeconds())); var mseedurl = sprintf('%s?net=GE,GR,RN&cha=EH?,HH?&start=%04d-%02d-%02dT%02d:%02d:%02d&end=%04d-%02d-%02dT%02d:%02d:%02d', config['ajax']['mseedURL'], Number(sTime.getUTCFullYear()), Number(sTime.getUTCMonth())+1, Number(sTime.getUTCDate()), Number(sTime.getUTCHours()), Number(sTime.getUTCMinutes()), Number(sTime.getUTCSeconds()), Number(eTime.getUTCFullYear()), Number(eTime.getUTCMonth())+1, Number(eTime.getUTCDate()), Number(eTime.getUTCHours()), Number(eTime.getUTCMinutes()), Number(eTime.getUTCSeconds()));
@@ -155,11 +157,11 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
if ((stime <= oTime && etime >= oTime ) || ( id == eventid )) { if ((stime <= oTime && etime >= oTime ) || ( id == eventid )) {
var marker = addEventMarker(id, Number(lat), Number(lng), Number(mag), type); var marker = addEventMarker(id, Number(lat), Number(lng), Number(mag), type);
var text = sprintf('<h3 eventid="%s">%s</h3>', id, location) var text = sprintf('<h3 eventid="%s">%s</h3>', id, location)
+ sprintf('<p>Ereignis: %s</br>', id) + sprintf('<p>Ereignis: %s<br />', id)
+ sprintf('Type: %s</br>', type) + sprintf('Type: %s<br />', type)
+ sprintf('Magnitude: %3.1f</br>', Number(mag)) + sprintf('Magnitude: %3.1f<br />', Number(mag))
+ sprintf('Ort: %.4f °N, %.4f °O </br>', Number(lat), Number(lng)) + sprintf('Ort: %.4f °N, %.4f °O <br />', Number(lat), Number(lng))
+ sprintf('Tiefe: %.1f km</br>', Number(depth)/1000.) + sprintf('Tiefe: %.1f km<br />', Number(depth)/1000.)
+ sprintf('Zeit: <span class="utctime">%sZ</span></p>', otime.split('.')[0], otime.split('.')[0]); + sprintf('Zeit: <span class="utctime">%sZ</span></p>', otime.split('.')[0], otime.split('.')[0]);
marker.bindPopup(text); marker.bindPopup(text);
}; };
@@ -426,7 +428,12 @@ $(document).ready(function() {
typetext += '(bergbau-)induziertes Ereignis&nbsp;(Kreis)'; typetext += '(bergbau-)induziertes Ereignis&nbsp;(Kreis)';
break; break;
case 'quarry blast': case 'quarry blast':
typetext += 'Steinbruchsprengung&nbsp;(Rad)'; case 'controlled explosion':
case 'explosion':
typetext += 'Sprengung&nbsp;(Rad)';
break;
case 'nuclear explosion':
typetext += 'Atomwaffentest&nbsp;(Viereck)';
break; break;
}; };
$("#events-type").append(typetext); $("#events-type").append(typetext);

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -40,22 +40,23 @@ function addTableRow(row, table) {
/* do reverse geolocation lookup */ /* do reverse geolocation lookup */
function getGeolocation(id, lat, lng) { function getGeolocation(id, lat, lng) {
if ( !geolocationTable[id] ) { if ( $.inArray(id, geolocationTable) == -1 ) {
$.getJSON( config['ajax']['nominatimURL'], { lat: lat, lon: lng, zoom: 10, format: "json" } ) $.getJSON( config['ajax']['nominatimURL'], { lat: lat, lon: lng } )
.done(function( json ) { .done(function( json ) {
var city = json.address["city"]; if ( json.features[0] ) {
var country = json.address["country"]; var city = json.features[0].properties.city;
var countryCode = json.address["country_code"].toUpperCase(); var countryCode = json.features[0].properties.country;
geolocationTable[id] = city; geolocationTable[id] = city;
( country != "Deutschland" ) ? geolocationTable[id] = geolocationTable[id] + " ("+countryCode+")" : null; ( countryCode != "Germany" ) ? geolocationTable[id] = geolocationTable[id] + " ("+countryCode+")" : null;
if ( city ) { if ( city ) {
$("#eventstable a.toggle[eventid="+id+"]").text(geolocationTable[id]); $("#eventstable a.toggle[eventid="+id+"]").text(geolocationTable[id]);
var sort = [[0,1],[1,1],[2,1]]; var sort = [[0,1],[1,1],[2,1]];
$("#eventstable").trigger("update", [true]); $("#eventstable").trigger("update", [true]);
$("#eventstable").trigger("updateCache"); $("#eventstable").trigger("updateCache");
$("#eventstable").trigger("sorton", [sort]); $("#eventstable").trigger("sorton", [sort]);
} else { } else {
console.log("Nominatim did not provide a city tag for "+lat+" / "+lng); // console.log("Nominatim did not provide a city tag for "+lat+" / "+lng);
};
}; };
}) })
.fail(function( jqxhr, textStatus, error ) { .fail(function( jqxhr, textStatus, error ) {
@@ -88,7 +89,7 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
} else { } else {
request_data = { request_data = {
starttime: sprintf("%d-%02d-%02d", rtime.getFullYear(), rtime.getMonth()+1, rtime.getDate()), starttime: sprintf("%d-%02d-%02d", rtime.getFullYear(), rtime.getMonth()+1, rtime.getDate()),
orderby: 'time', orderby: 'time-asc',
minlat: sprintf('%.2f', mapBounds.getSouth()-config['map']['latlngDelta']), minlat: sprintf('%.2f', mapBounds.getSouth()-config['map']['latlngDelta']),
maxlat: sprintf('%.2f', mapBounds.getNorth()+config['map']['latlngDelta']), maxlat: sprintf('%.2f', mapBounds.getNorth()+config['map']['latlngDelta']),
minlon: sprintf('%.2f', mapBounds.getWest()-config['map']['latlngDelta']), minlon: sprintf('%.2f', mapBounds.getWest()-config['map']['latlngDelta']),
@@ -118,12 +119,10 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
var evaluationStatus = $(this).find('origin > evaluationStatus').text(); var evaluationStatus = $(this).find('origin > evaluationStatus').text();
var type = $(this).find('type').last().text(); var type = $(this).find('type').last().text();
var location 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 // 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'] ) { if ( !eventTable[id] && $.inArray(type, config['event']['typeWhitelist'] ) >= 0 && $.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) // general event info (1st line)
var row = '<tr class="tablesorter-hasChildRow">' var row = '<tr class="tablesorter-hasChildRow">'
+ '<td class="utctime-date">'+otime.split('.')[0]+'Z</td>' + '<td class="utctime-date">'+otime.split('.')[0]+'Z</td>'
@@ -137,6 +136,9 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
// setting up download links (3nd line) // setting up download links (3nd line)
var xmlurl = sprintf('%s?formatted=true&includearrivals=true&eventid=%s', config['ajax']['eventURL'], id); var xmlurl = sprintf('%s?formatted=true&includearrivals=true&eventid=%s', config['ajax']['eventURL'], id);
var oTime = new Date(otime); var oTime = new Date(otime);
if ( ~oTime ) {
oTime = new Date(otime.split('.')[0]);
};
var sTime = new Date(oTime.getTime()-10*1000.-oTime.getMilliseconds()); var sTime = new Date(oTime.getTime()-10*1000.-oTime.getMilliseconds());
var eTime = new Date(oTime.getTime()+50*1000.-oTime.getMilliseconds()); var eTime = new Date(oTime.getTime()+50*1000.-oTime.getMilliseconds());
var mseedurl = sprintf('%s?net=GE,GR,RN&cha=EH?,HH?&start=%04d-%02d-%02dT%02d:%02d:%02d&end=%04d-%02d-%02dT%02d:%02d:%02d', config['ajax']['mseedURL'], Number(sTime.getUTCFullYear()), Number(sTime.getUTCMonth())+1, Number(sTime.getUTCDate()), Number(sTime.getUTCHours()), Number(sTime.getUTCMinutes()), Number(sTime.getUTCSeconds()), Number(eTime.getUTCFullYear()), Number(eTime.getUTCMonth())+1, Number(eTime.getUTCDate()), Number(eTime.getUTCHours()), Number(eTime.getUTCMinutes()), Number(eTime.getUTCSeconds())); var mseedurl = sprintf('%s?net=GE,GR,RN&cha=EH?,HH?&start=%04d-%02d-%02dT%02d:%02d:%02d&end=%04d-%02d-%02dT%02d:%02d:%02d', config['ajax']['mseedURL'], Number(sTime.getUTCFullYear()), Number(sTime.getUTCMonth())+1, Number(sTime.getUTCDate()), Number(sTime.getUTCHours()), Number(sTime.getUTCMinutes()), Number(sTime.getUTCSeconds()), Number(eTime.getUTCFullYear()), Number(eTime.getUTCMonth())+1, Number(eTime.getUTCDate()), Number(eTime.getUTCHours()), Number(eTime.getUTCMinutes()), Number(eTime.getUTCSeconds()));
@@ -155,11 +157,11 @@ function ajaxLoadEvents(stime, etime, eventid, url, target) {
if ((stime <= oTime && etime >= oTime ) || ( id == eventid )) { if ((stime <= oTime && etime >= oTime ) || ( id == eventid )) {
var marker = addEventMarker(id, Number(lat), Number(lng), Number(mag), type); var marker = addEventMarker(id, Number(lat), Number(lng), Number(mag), type);
var text = sprintf('<h3 eventid="%s">%s</h3>', id, location) var text = sprintf('<h3 eventid="%s">%s</h3>', id, location)
+ sprintf('<p>Ereignis: %s</br>', id) + sprintf('<p>Ereignis: %s<br />', id)
+ sprintf('Type: %s</br>', type) + sprintf('Type: %s<br />', type)
+ sprintf('Magnitude: %3.1f</br>', Number(mag)) + sprintf('Magnitude: %3.1f<br />', Number(mag))
+ sprintf('Ort: %.4f °N, %.4f °O </br>', Number(lat), Number(lng)) + sprintf('Ort: %.4f °N, %.4f °O <br />', Number(lat), Number(lng))
+ sprintf('Tiefe: %.1f km</br>', Number(depth)/1000.) + sprintf('Tiefe: %.1f km<br />', Number(depth)/1000.)
+ sprintf('Zeit: <span class="utctime">%sZ</span></p>', otime.split('.')[0], otime.split('.')[0]); + sprintf('Zeit: <span class="utctime">%sZ</span></p>', otime.split('.')[0], otime.split('.')[0]);
marker.bindPopup(text); marker.bindPopup(text);
}; };
@@ -426,8 +428,13 @@ $(document).ready(function() {
typetext += '(mining-)induced event&nbsp;(circle)'; typetext += '(mining-)induced event&nbsp;(circle)';
break; break;
case 'quarry blast': case 'quarry blast':
case 'controlled explosion':
case 'explosion':
typetext += 'quarry blast&nbsp;(wheel)'; typetext += 'quarry blast&nbsp;(wheel)';
break; break;
case 'nuclear explosion':
typetext += 'nuclear weapon test&nbsp;(square)';
break;
}; };
$("#events-type").append(typetext); $("#events-type").append(typetext);
}); });

View File

@@ -1,23 +1,23 @@
<div class="accordioncontent"> <div class="accordioncontent">
<h4>Anschrift</h4> <h4>Anschrift</h4>
Seismologisches Observatorium der</br> Seismologisches Observatorium der<br />
Ruhr-Universität Bochum</br> Ruhr-Universität Bochum<br />
NA 3/174</br> NA 3/174<br />
44780 Bochum</br> 44780 Bochum<br />
Tel.: 0234 32-27574</br> Tel.: 0234 32-27574<br />
Fax: 0234 32-07574</br> Fax: 0234 32-07574<br />
<p>Die Ruhr-Universität ist eine Körperschaft des Öffentlichen Rechts. Sie wird durch ihren Rektor Herrn Prof. Dr. Elmar W. Weiler gesetzlich vertreten.</p> <p>Die Ruhr-Universität ist eine Körperschaft des Öffentlichen Rechts. Sie wird durch ihren Rektor Herrn Prof. Dr. Elmar W. Weiler gesetzlich vertreten.</p>
<p>Zuständige Aufsichtsbehörde ist das Ministerium für Innovation, Wissenschaft und Forschung des Landes Nordrhein-Westfalen, Völklinger Straße 49, 40221 Düsseldorf.</p> <p>Zuständige Aufsichtsbehörde ist das Ministerium für Innovation, Wissenschaft und Forschung des Landes Nordrhein-Westfalen, Völklinger Straße 49, 40221 Düsseldorf.</p>
<p>Umsatzsteuer-Identifikationsnummer: DE 127 056 261</p> <p>Umsatzsteuer-Identifikationsnummer: DE 127 056 261</p>
<h4>Inhaltliche und technische Verantwortung für die Seiten des Seismologischen Observatoriums der Ruhr-Universität Bochum</h4> <h4>Inhaltliche und technische Verantwortung für die Seiten des Seismologischen Observatoriums der Ruhr-Universität Bochum</h4>
Herr Dr. Kasper D. Fischer</br> Herr Dr. Kasper D. Fischer<br />
Ruhr-Universität Bochum</br> Ruhr-Universität Bochum<br />
44780 Bochum</br> 44780 Bochum<br />
Tel.: 0234 32-27574</br> Tel.: 0234 32-27574<br />
Fax: 0234 32-07574</br> Fax: 0234 32-07574<br />
E-Mail: kasper.fischer@ruhr-uni-bochum.de</br> E-Mail: kasper.fischer@ruhr-uni-bochum.de<br />
<p>Meldungen über missbräuchliche Nutzungen, die von Stationen aus dem IP-Namensbereich ruhr-uni-bochum.de ausgehen, senden Sie bitte an die Email-Adresse <p>Meldungen über missbräuchliche Nutzungen, die von Stationen aus dem IP-Namensbereich ruhr-uni-bochum.de ausgehen, senden Sie bitte an die Email-Adresse
abuse@ruhr-uni-bochum.de. Gleichfalls bittet die Ruhr-Universität um Mitteilung an dieselbe Email-Adresse, wenn rechtswidrige Inhalte durch Links auf Seiten der Ruhr-Universität zu abuse@ruhr-uni-bochum.de. Gleichfalls bittet die Ruhr-Universität um Mitteilung an dieselbe Email-Adresse, wenn rechtswidrige Inhalte durch Links auf Seiten der Ruhr-Universität zu

View File

@@ -39,6 +39,8 @@
<script type="text/javascript" src="external/leaflet.label.js"></script> <script type="text/javascript" src="external/leaflet.label.js"></script>
<script src="external/jQuery.print.js"></script> <script src="external/jQuery.print.js"></script>
<script src="external/leaflet.easyPrint.js"></script> <script src="external/leaflet.easyPrint.js"></script>
<script src="https://open.mapquestapi.com/sdk/leaflet/v2.2/mq-map.js?key=RPOPuz3lA2GGBtVpEU0ugxtVoGba53Dt"></script>
<!-- <script src="https://www.mapquestapi.com/sdk/leaflet/v2.2/mq-map.js?key=RPOPuz3lA2GGBtVpEU0ugxtVoGba53Dt"></script> -->
<!-- Map, Events & Stations --> <!-- Map, Events & Stations -->
<script type="text/javascript" src="misc.js"></script> <script type="text/javascript" src="misc.js"></script>
@@ -115,7 +117,7 @@
<span id="events-type">Symbole:</span> <span id="events-type">Symbole:</span>
</p> </p>
<p class="table-caption"> <p class="table-caption">
Nominatim Search Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> <img alt="Mapquest Logo" src="//developer.mapquest.com/content/osm/mq_logo.png" /> Reverse Geolocation courtesy of <a href="http://photon.komoot.de/" target="_blank">Photon by Komoot</a>
</p> </p>
</div> </div>
<!-- Stations --> <!-- Stations -->
@@ -178,6 +180,6 @@
<div class="rublogo"><a href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs"><img class="rublogo" src="logo_RUB_155x30.png" alt="Ruhr-Universität Bochum" title="Ruhr-Universität Bochum" border="0"/></a></div> <div class="rublogo"><a href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs"><img class="rublogo" src="logo_RUB_155x30.png" alt="Ruhr-Universität Bochum" title="Ruhr-Universität Bochum" border="0"/></a></div>
<!-- Map --> <!-- Map -->
<div id="map" class="map"></div> <div id="map" class="map"></div>
<div id="spinner" class="spinner" style="display:none;"><img id="img-spinner" src="spinner.gif" alt="Loading"/></br>Loading ...</div> <div id="spinner" class="spinner" style="display:none;"><img id="img-spinner" src="spinner.gif" alt="Loading"/><br />Loading ...</div>
</body> </body>
</html> </html>

View File

@@ -15,7 +15,7 @@
<link rel="stylesheet" href="external/leaflet.css" /> <link rel="stylesheet" href="external/leaflet.css" />
<!-- link rel="stylesheet" href="external/css/dvf.css" type="text/css" media="screen" / --> <!-- link rel="stylesheet" href="external/css/dvf.css" type="text/css" media="screen" / -->
<link rel="stylesheet" href="external/css/leaflet.label.css" type="text/css" media="screen" /> <link rel="stylesheet" href="external/css/leaflet.label.css" type="text/css" media="screen" />
<!-- <link rel="stylesheet" href="external/easyPrint.css"/> --> <link rel="stylesheet" href="external/easyPrint.css"/>
<!-- jQuery & jQueryUI --> <!-- jQuery & jQueryUI -->
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
@@ -37,8 +37,11 @@
<script type="text/javascript" src="external/TileLayer.Grayscale.js"></script> <script type="text/javascript" src="external/TileLayer.Grayscale.js"></script>
<script type="text/javascript" src="external/leaflet-dvf.markers.min.js"></script> <script type="text/javascript" src="external/leaflet-dvf.markers.min.js"></script>
<script type="text/javascript" src="external/leaflet.label.js"></script> <script type="text/javascript" src="external/leaflet.label.js"></script>
<!-- <script src="external/jQuery.print.js"></script> --> <script src="external/jQuery.print.js"></script>
<!-- <script src="external/leaflet.easyPrint.js"></script> --> <script src="external/leaflet.easyPrint.js"></script>
<script src="https://open.mapquestapi.com/sdk/leaflet/v2.2/mq-map.js?key=RPOPuz3lA2GGBtVpEU0ugxtVoGba53Dt"></script>
<!-- <script src="https://www.mapquestapi.com/sdk/leaflet/v2.2/mq-map.js?key=RPOPuz3lA2GGBtVpEU0ugxtVoGba53Dt"></script> -->
<!-- Map, Events & Stations --> <!-- Map, Events & Stations -->
<script type="text/javascript" src="misc.js"></script> <script type="text/javascript" src="misc.js"></script>
@@ -96,7 +99,6 @@
<col width="50" /> <col width="50" />
<col width="50" /> <col width="50" />
<col /> <col />
<col width="30" />
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
@@ -116,7 +118,7 @@
<span id="events-type">Symbols:</span> <span id="events-type">Symbols:</span>
</p> </p>
<p class="table-caption"> <p class="table-caption">
Nominatim Search Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> <img alt="Mapquest Logo" src="//developer.mapquest.com/content/osm/mq_logo.png" /> Reverse Geolocation courtesy of <a href="http://photon.komoot.de/" target="_blank">Photon by Komoot</a>
</p> </p>
</div> </div>
<!-- Stations --> <!-- Stations -->
@@ -179,6 +181,6 @@
<div class="rublogo"><a href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs"><img class="rublogo" src="logo_RUB_155x30.png" alt="Ruhr-University Bochum" title="Ruhr-University Bochum" border="0"/></a></div> <div class="rublogo"><a href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs"><img class="rublogo" src="logo_RUB_155x30.png" alt="Ruhr-University Bochum" title="Ruhr-University Bochum" border="0"/></a></div>
<!-- Map --> <!-- Map -->
<div id="map" class="map"></div> <div id="map" class="map"></div>
<div id="spinner" class="spinner" style="display:none;"><img id="img-spinner" src="spinner.gif" alt="Loading"/></br>Loading ...</div> <div id="spinner" class="spinner" style="display:none;"><img id="img-spinner" src="spinner.gif" alt="Loading"/><br />Loading ...</div>
</body> </body>
</html> </html>

View File

@@ -1,7 +1,7 @@
<div class="accordioncontent"> <div class="accordioncontent">
<h4>Navigation zu den Internetseiten</h4> <h4>Navigation zu den Internetseiten</h4>
<ul> <ul>
<li>des <a class="intern" href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs">Seismologisches Observatorium</a></br> der Ruhr-Universität Bochum</li> <li>des <a class="intern" href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seisobs">Seismologisches Observatorium</a><br /> der Ruhr-Universität Bochum</li>
<li>der <a class="intern" href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seismology">Arbeitsgruppe Seismologie</a></li> <li>der <a class="intern" href="http://www.gmg.ruhr-uni-bochum.de/geophysik/seismology">Arbeitsgruppe Seismologie</a></li>
<li>des <a class="intern" href="http://www.gmg.ruhr-uni-bochum.de">Instituts für Geologie, Mineralogie und Geophysik</a></li> <li>des <a class="intern" href="http://www.gmg.ruhr-uni-bochum.de">Instituts für Geologie, Mineralogie und Geophysik</a></li>
<li>der <a class="intern" href="http://www.rub.de">Ruhr-Universität Bochum</a></li> <li>der <a class="intern" href="http://www.rub.de">Ruhr-Universität Bochum</a></li>

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -17,7 +17,7 @@
for more details. for more details.
You should have received a copy of the GNU General Public License along You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. with this program. If not, see https://www.gnu.org/licenses/.
$Id$ $Id$
*/ */
@@ -32,7 +32,7 @@ function addStationMarker(id, lat, lng, station) {
color: config['station']['markerColor'], color: config['station']['markerColor'],
weight: 1, weight: 1,
opacity: 1, opacity: 1,
radius: config['station']['markerSize'][id] || config['station']['markerSize']['default'], radius: config['station']['markerSize'][id] || config['station']['markerSize']['defaultSize'],
className: id+' stationMarker', className: id+' stationMarker',
}); });
marker.bindLabel('Station '+station); marker.bindLabel('Station '+station);
@@ -61,6 +61,12 @@ function addEventMarker(id, lat, lng, mag, type) {
case 'earthquake': case 'earthquake':
marker = L.starMarker(L.latLng(lat, lng), markerOptions); marker = L.starMarker(L.latLng(lat, lng), markerOptions);
break; break;
case 'nuclear explosion':
markerOptions['numberOfSides'] = 4;
markerOptions['radius'] = 2.0*markerOptions['radius'];
markerOptions['innerRadius'] = 0.3*markerOptions['radius'];
marker = L.regularPolygonMarker(L.latLng(lat, lng), markerOptions);
break;
case 'explosion': case 'explosion':
markerOptions['numberOfSides'] = 6; markerOptions['numberOfSides'] = 6;
markerOptions['radius'] = 2.0*markerOptions['radius']; markerOptions['radius'] = 2.0*markerOptions['radius'];
@@ -68,6 +74,7 @@ function addEventMarker(id, lat, lng, mag, type) {
marker = L.regularPolygonMarker(L.latLng(lat, lng), markerOptions); marker = L.regularPolygonMarker(L.latLng(lat, lng), markerOptions);
break; break;
case 'quarry blast': case 'quarry blast':
case 'controlled explosion':
markerOptions['numberOfPoints'] = 7; markerOptions['numberOfPoints'] = 7;
markerOptions['innerRadius'] = 0.3*markerOptions['radius']; markerOptions['innerRadius'] = 0.3*markerOptions['radius'];
marker = L.starMarker(L.latLng(lat, lng), markerOptions); marker = L.starMarker(L.latLng(lat, lng), markerOptions);
@@ -133,19 +140,18 @@ function initMapLink() {
$(document).ready(function() { $(document).ready(function() {
// create a map in the "map" div, set the view to a given place and zoom // create a map in the "map" div, set the view to a given place and zoom
map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
new L.Control.Zoom({ position: 'topright' }).addTo(map);
new L.control.scale({position: 'bottomright', imperial: false}).addTo(map);
// create baselayer // create baselayer
switch ( config['map']['baselayer'] ) { switch ( config['map']['baselayer'] ) {
case 'osmde': // add OpenStreetMap.DE tile layer case 'osmde': // add OpenStreetMap.DE tile layer
L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
{ {
attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>', attribution: '&copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
}).addTo(map); }).addTo(map);
break; break;
case 'esrigray': // add ESRI Grayscale World Map (neither city nor road names) case 'esrigray': // add ESRI Grayscale World Map (neither city nor road names)
map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('//server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', L.tileLayer('//server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',
{ {
attribution: 'Tiles &copy; Esri &mdash; Esri, DeLorme, NAVTEQ', attribution: 'Tiles &copy; Esri &mdash; Esri, DeLorme, NAVTEQ',
@@ -153,30 +159,50 @@ $(document).ready(function() {
}).addTo(map); }).addTo(map);
break; break;
case 'aerial': // add ESRI WordImagery tile layer case 'aerial': // add ESRI WordImagery tile layer
L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
{ {
attribution: 'Tiles &copy; Esri &mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' attribution: 'Tiles &copy; Esri &mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
}).addTo(map); }).addTo(map);
break; break;
case 'mapquestgray': // add MapQuestOSM tile layer case 'komoot': // add OpenStreetMap.DE tile layer
L.tileLayer.grayscale('http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg', map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('//www.komoot.de/tiles/{s}/{z}/{x}/{y}.png',
{ {
subdomains: '1234', attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="https://www.komoot.de/">Komoot</a>',
detectRetina: true,
attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">',
}).addTo(map); }).addTo(map);
break; break;
case 'mapquestgray': // add MapQuestOSM tile layer
null;
// map = L.map('map', { zoomControl: false, worldCopyJump: true, layers: mapLayer }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
// L.tileLayer.grayscale('https://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg',
// {
// subdomains: '1234',
// detectRetina: true,
// attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="https://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">',
//}).addTo(map);
//break;
case 'mapquest': // add MapQuestOSM tile layer case 'mapquest': // add MapQuestOSM tile layer
null; null;
default: default:
L.tileLayer('http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg', var mapLayer = MQ.mapLayer();
{ map = L.map('map', {
subdomains: '1234', zoomControl: false,
detectRetina: true, worldCopyJump: true,
attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">', layers: mapLayer,
}).addTo(map); }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
//L.tileLayer('https://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg',
//{
//subdomains: '1234',
//detectRetina: true,
//attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="https://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">',
//}).addTo(map);
}; };
// add controls
new L.Control.Zoom({ position: 'topright' }).addTo(map);
new L.control.scale({position: 'bottomright', imperial: false}).addTo(map);
// create station and event layer // create station and event layer
// stationLayer = L.geoJson().addTo(map); // stationLayer = L.geoJson().addTo(map);
stationLayer = new L.MarkerGroup().addTo(map); stationLayer = new L.MarkerGroup().addTo(map);

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -17,7 +17,7 @@
for more details. for more details.
You should have received a copy of the GNU General Public License along You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. with this program. If not, see https://www.gnu.org/licenses/.
$Id$ $Id$
*/ */
@@ -32,7 +32,7 @@ function addStationMarker(id, lat, lng, station) {
color: config['station']['markerColor'], color: config['station']['markerColor'],
weight: 1, weight: 1,
opacity: 1, opacity: 1,
radius: config['station']['markerSize'][id] || config['station']['markerSize']['default'], radius: config['station']['markerSize'][id] || config['station']['markerSize']['defaultSize'],
className: id+' stationMarker', className: id+' stationMarker',
}); });
marker.bindLabel('Station '+station); marker.bindLabel('Station '+station);
@@ -61,6 +61,12 @@ function addEventMarker(id, lat, lng, mag, type) {
case 'earthquake': case 'earthquake':
marker = L.starMarker(L.latLng(lat, lng), markerOptions); marker = L.starMarker(L.latLng(lat, lng), markerOptions);
break; break;
case 'nuclear explosion':
markerOptions['numberOfSides'] = 4;
markerOptions['radius'] = 2.0*markerOptions['radius'];
markerOptions['innerRadius'] = 0.3*markerOptions['radius'];
marker = L.regularPolygonMarker(L.latLng(lat, lng), markerOptions);
break;
case 'explosion': case 'explosion':
markerOptions['numberOfSides'] = 6; markerOptions['numberOfSides'] = 6;
markerOptions['radius'] = 2.0*markerOptions['radius']; markerOptions['radius'] = 2.0*markerOptions['radius'];
@@ -68,6 +74,7 @@ function addEventMarker(id, lat, lng, mag, type) {
marker = L.regularPolygonMarker(L.latLng(lat, lng), markerOptions); marker = L.regularPolygonMarker(L.latLng(lat, lng), markerOptions);
break; break;
case 'quarry blast': case 'quarry blast':
case 'controlled explosion':
markerOptions['numberOfPoints'] = 7; markerOptions['numberOfPoints'] = 7;
markerOptions['innerRadius'] = 0.3*markerOptions['radius']; markerOptions['innerRadius'] = 0.3*markerOptions['radius'];
marker = L.starMarker(L.latLng(lat, lng), markerOptions); marker = L.starMarker(L.latLng(lat, lng), markerOptions);
@@ -133,19 +140,19 @@ function initMapLink() {
$(document).ready(function() { $(document).ready(function() {
// create a map in the "map" div, set the view to a given place and zoom // create a map in the "map" div, set the view to a given place and zoom
map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
new L.Control.Zoom({ position: 'topright' }).addTo(map);
new L.control.scale({position: 'bottomright', imperial: false}).addTo(map);
// create baselayer // create baselayer
switch ( config['map']['baselayer'] ) { switch ( config['map']['baselayer'] ) {
case 'osmde': // add OpenStreetMap.DE tile layer case 'osmde': // add OpenStreetMap.DE tile layer
L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
{ {
attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>', attribution: '&copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
}).addTo(map); }).addTo(map);
break; break;
case 'esrigray': // add ESRI Grayscale World Map (neither city nor road names) case 'esrigray': // add ESRI Grayscale World Map (neither city nor road names)
map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('//server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', L.tileLayer('//server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',
{ {
attribution: 'Tiles &copy; Esri &mdash; Esri, DeLorme, NAVTEQ', attribution: 'Tiles &copy; Esri &mdash; Esri, DeLorme, NAVTEQ',
@@ -153,29 +160,48 @@ $(document).ready(function() {
}).addTo(map); }).addTo(map);
break; break;
case 'aerial': // add ESRI WordImagery tile layer case 'aerial': // add ESRI WordImagery tile layer
L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
{ {
attribution: 'Tiles &copy; Esri &mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' attribution: 'Tiles &copy; Esri &mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
}).addTo(map); }).addTo(map);
break; break;
case 'mapquestgray': // add MapQuestOSM tile layer case 'komoot': // add OpenStreetMap.DE tile layer
L.tileLayer.grayscale('http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg', map = L.map('map', { zoomControl: false, worldCopyJump: true }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
L.tileLayer('//www.komoot.de/tiles/{s}/{z}/{x}/{y}.png',
{ {
subdomains: '1234', attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="https://www.komoot.de/">Komoot</a>',
detectRetina: true,
attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">',
}).addTo(map); }).addTo(map);
break; break;
case 'mapquestgray': // add MapQuestOSM tile layer
null;
// map = L.map('map', { zoomControl: false, worldCopyJump: true, layers: mapLayer }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
// L.tileLayer.grayscale('https://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg',
// {
// subdomains: '1234',
// detectRetina: true,
// attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="https://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">',
//}).addTo(map);
//break;
case 'mapquest': // add MapQuestOSM tile layer case 'mapquest': // add MapQuestOSM tile layer
null; null;
default: default:
L.tileLayer('http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg', var mapLayer = MQ.mapLayer();
{ map = L.map('map', {
subdomains: '1234', zoomControl: false,
detectRetina: true, worldCopyJump: true,
attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">', layers: mapLayer,
}).addTo(map); }).setView(config['map']['centerDefault'], config['map']['zoomDefault']);
//L.tileLayer('https://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg',
//{
//subdomains: '1234',
//detectRetina: true,
//attribution: 'Map data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> | Tiles Courtesy of <a href="https://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png">',
//}).addTo(map);
}; };
// add controls
new L.Control.Zoom({ position: 'topright' }).addTo(map);
new L.control.scale({position: 'bottomright', imperial: false}).addTo(map);
// create station and event layer // create station and event layer
// stationLayer = L.geoJson().addTo(map); // stationLayer = L.geoJson().addTo(map);
@@ -216,6 +242,5 @@ $(document).ready(function() {
}); });
// print icon // print icon
// L.easyPrint().addTo(map); L.easyPrint().addTo(map);
}); });

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -90,14 +90,13 @@ var eventDetails = {};
var stationTable = {}; var stationTable = {};
var config = { var config = {
ajax: { ajax: {
timeout: 10000, // 10 seconds timeout: 20000, // 20 seconds
eventURL: '/fdsnws/event/1/query', eventURL: 'https://fdsnws.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query',
dlsvURL: 'dlsv', dlsvURL: 'dlsv',
mseedURL: '/fdsnws/dataselect/1/query', mseedURL: 'https://fdsnws.geophysik.ruhr-uni-bochum.de/fdsnws/dataselect/1/query',
stationURL: '/fdsnws/station/1/query', stationURL: 'https://fdsnws.geophysik.ruhr-uni-bochum.de/fdsnws/station/1/query',
nominatimURL: '//open.mapquestapi.com/nominatim/v1/reverse.php', nominatimURL: 'https://photon.komoot.de/reverse',
// nominatimURL: '//nominatim.openstreetmap.org/reverse', timespan: 180,
timespan: 60,
}, },
event: { event: {
evaluationBlacklist: ['automatic', 'preliminary', 'rejected'], evaluationBlacklist: ['automatic', 'preliminary', 'rejected'],
@@ -106,7 +105,9 @@ var config = {
markerColorH: 'red', markerColorH: 'red',
minMag: 1.2, minMag: 1.2,
minMagDelta: 0.1, minMagDelta: 0.1,
typeWhitelist: ['earthquake', 'induced or triggered event', 'quarry blast', 'explosion'], typeWhitelist: ['earthquake', 'induced or triggered event', 'controlled explosion'],
// typeWhitelist: ['earthquake', 'induced or triggered event', 'controlled explosion', 'nuclear explosion'],
// typeWhitelist: ['earthquake', 'induced or triggered event'],
}, },
map: { map: {
zoomDefault: 9, zoomDefault: 9,
@@ -119,7 +120,7 @@ var config = {
markerColor: 'darkgreen', markerColor: 'darkgreen',
markerOpacity: 1, markerOpacity: 1,
markerSize: { markerSize: {
default: 8, defaultSize: 8,
GE_IBBN: 10, GE_IBBN: 10,
GR_BUG: 10, GR_BUG: 10,
GR_KAST: 10, GR_KAST: 10,
@@ -129,7 +130,11 @@ var config = {
NL_WIT: 3, NL_WIT: 3,
NL_WTSB: 3, NL_WTSB: 3,
}, },
networkBlacklist: ['NL', 'X5'], networkBlacklist: ['NL', 'X5', '1A', 'AM'],
stationBlacklist: ['RN_WEA2', 'RN_ACN', 'RN_BHE', 'RN_ENT', 'RN_GSH', 'RN_HES', 'RN_JCKS', 'RN_LOH',
'RN_OLF', 'RN_PLH', 'RN_RWB', 'RN_SOR', 'RN_TDN', 'RN_WBS',
'RN_HAM1', 'RN_HAM2', 'RN_HAM3', 'RN_HAM4', 'RN_HAM5', 'RN_HAM6', 'RN_HAM7', 'RN_HAM8', 'RN_HAM9',
'RN_HAM10', 'RN_HAM11', 'RN_HAM12', 'RN_HAM13', 'RN_HAM14', 'RN_HAM15', 'RN_HAM16', 'RN_HAM17'],
}, },
tab: { tab: {
active: 0, active: 0,
@@ -140,13 +145,18 @@ var config = {
var networkURL = { var networkURL = {
GE: 'http://dx.doi.org/10.14470/TR560404', GE: 'http://dx.doi.org/10.14470/TR560404',
GR: 'http://www.bgr.bund.de/DE/Themen/Erdbeben-Gefaehrdungsanalysen/Seismologie/Seismologie/Seismometer_Stationen/Stationsnetze/d_stationsnetz_node.html', GR: 'http://www.bgr.bund.de/DE/Themen/Erdbeben-Gefaehrdungsanalysen/Seismologie/Seismologie/Seismometer_Stationen/Stationsnetze/d_stationsnetz_node.html',
NH: 'http://www.gd.nrw.de/gg_le.htm',
NL: 'http://www.knmi.nl/seismologie/seismisch_network_knmi3.html', NL: 'http://www.knmi.nl/seismologie/seismisch_network_knmi3.html',
RN: 'https://doi.org/10.7914/SN/RN',
YD: 'https://doi.org/10.7914/SN/YD_2020',
}; };
var networkText = { var networkText = {
GE: '<a href="'+networkURL['GE']+'" target="_blank">GEOFON</a> Program, GFZ Potsdam', GE: '<a href="'+networkURL['GE']+'" target="_blank">GEOFON Seismic Network</a> - Deutsches GeoForschungsZentrum GFZ',
GR: '<a href="'+networkURL['GR']+'" target="_blank">German Regional Seismic Network</a>, BGR Hannover', GR: '<a href="'+networkURL['GR']+'" target="_blank">German Regional Seismic Network</a>, BGR Hannover',
NH: '<a href="'+networkURL['NH']+'" target="_blank">Geologischer Dienst NRW</a>, Krefeld',
NL: '<a href="'+networkURL['NL']+'" target="_blank">Netherlands Seismic Network</a>, The Netherlands', NL: '<a href="'+networkURL['NL']+'" target="_blank">Netherlands Seismic Network</a>, The Netherlands',
RN: 'RuhrNet - Ruhr-University Bochum, Germany', RN: '<a href="'+networkURL['RN']+'" target="_blank">RuhrNet - Ruhr-University Bochum, Germany</a>',
YD: '<a href="'+networkURL['YD']+'" target="_blank">FloodRisk Seismic Network</a>',
}; };
var bochumStation = ['BUG', 'IBBN', 'KERA', 'KARP']; var bochumStation = ['BUG', 'IBBN', 'KERA', 'KARP'];

View File

@@ -9,6 +9,29 @@ var specialEvents = [
//'bug2014ilxd', // Bassum //'bug2014ilxd', // Bassum
//'bug2014gfzw', // Darmstadt //'bug2014gfzw', // Darmstadt
//'bug2014datb', // Groningen //'bug2014datb', // Groningen
'bug2013yvko', // Haltern 3.4 // 'bug2013yvko', // Haltern 3.4
'bug2015fdpy', // Darmstadt 3.0 // 'bug2015fdpy', // Darmstadt 3.0
// 'bug2016ajgm', // CTBT violation North Korea
// 'bug2016cqkd', // Taunusstein 2.5
// 'bug2016hdae', // Aldenhoven 2.6
// 'bug2016hdaj', // Aldenhoven 2.4
// 'bug2016kkrq', // Bottrop 3.3
// 'bug2016qphy', // Central Italy 6.1
// 'bug2016rslt', // CTBT violation North Korea
// 'bug2016ueqo', // Darmstadt 2.4
// 'bug2016ufpi', // Darmstadt 3.0
// 'bug2016vico', // Central Italy 6.5
// 'bug2016vrnc', // Nörvenich 3.2
// 'bug2016zawb', // St Goar 3.2
// 'bug2017iyhl', // Hürtgenwald 2.1
// 'bug2017omwg', // Brühl 2.3
// 'bug2017rfxe', // CTBT violation North Korea 6.1
// 'bug2017rjvq', // Dreieich / Hessen 2.6
// 'bug2017vxmm', // Brühl / Hürth 3.1
// 'bug2018nyax' // Ochtendung 2.7
// 'bug2019cxga', // Ochtendung 3.0
// 'bug2019czbt', // Ochtendung 2.9
// 'bug2019fura', // Sprengung Duisburg-Hochheide (Weißer Riese) 2.0
// 'bug2019yeij', // Tektonisch, Hambach 2.2
'bug2020fqxf' // Meckenheim, 2.5
]; ];

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -23,7 +23,7 @@
*/ */
/* Load the stations using ajax */ /* Load the stations using ajax */
function loadStations(stime, etime) { function loadStations(station, stime, etime) {
var mapBounds = map.getBounds(); var mapBounds = map.getBounds();
var N = mapBounds.getNorth(); var N = mapBounds.getNorth();
var E = mapBounds.getEast(); var E = mapBounds.getEast();
@@ -37,14 +37,23 @@ function loadStations(stime, etime) {
var etime = new Date(); var etime = new Date();
etime.setDate(etime.getDate()+1); etime.setDate(etime.getDate()+1);
}; };
var request_data = { if ( !station ) {
endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()), var request_data = {
startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()), endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()),
level: 'channel', startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()),
minlat: S-config['map']['latlngDelta'], level: 'station',
maxlat: N+config['map']['latlngDelta'], minlat: S-config['map']['latlngDelta'],
minlon: W-config['map']['latlngDelta'], maxlat: N+config['map']['latlngDelta'],
maxlon: E+config['map']['latlngDelta'], minlon: W-config['map']['latlngDelta'],
maxlon: E+config['map']['latlngDelta'],
};
} else {
var request_data = {
endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()),
startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()),
level: 'channel',
station: station,
};
}; };
$.ajax({ $.ajax({
type: "GET", type: "GET",
@@ -61,13 +70,13 @@ function loadStations(stime, etime) {
lng = $(this).find('Longitude:first').text(), lng = $(this).find('Longitude:first').text(),
stationID = network+'_'+station, stationID = network+'_'+station,
stationText = network+'.'+station; stationText = network+'.'+station;
if ( !stationTable[stationID] ) { if ( !stationTable[stationID] && $.inArray(stationID, config['station']['stationBlacklist']) <0 ) {
// general station info (1st line) // general station info (1st line)
var row = sprintf('<tr><td><a href="#" class="toggle">%s</a></td><td><a href="#" class="toggle">%s</a></td><td class="ar">%7.4f</td><td class="ar">%7.4f</td></tr>' , network, station, Number(lat), Number(lng)); var row = sprintf('<tr><td><a href="#" class="toggle">%s</a></td><td><a href="#" class="toggle">%s</a></td><td class="ar">%7.4f</td><td class="ar">%7.4f</td></tr>' , network, station, Number(lat), Number(lng));
// setting up network details (2nd line) // setting up network details (2nd line)
row += sprintf('<tr class="tablesorter-childRow station-details"><td colspan="4">%s', networkText[network] || ''); row += sprintf('<tr class="tablesorter-childRow station-details"><td colspan="4">%s', networkText[network] || '');
row += ( $.inArray(station, bochumStation)+1 ) ? '</br><em>Betreiber:</em> Ruhr-Universität Bochum</td></tr>' : '</td></tr>' ; row += ( $.inArray(station, bochumStation)+1 ) ? '<br /><em>Betreiber:</em> Ruhr-Universität Bochum</td></tr>' : '</td></tr>' ;
if ( network == 'RN' || network == 'X5' || $.inArray(station, bochumStation)+1 ) { if ( network == 'RN' || network == 'Z3' || network == '1A' || network == 'YD' || $.inArray(station, bochumStation)+1 ) {
// setting up station details (3rd line) // setting up station details (3rd line)
row += '<tr class="tablesorter-childRow station-details"><td colspan="4">'; row += '<tr class="tablesorter-childRow station-details"><td colspan="4">';
row += stationDetails(station, network, lat, lng, stationID, stationText, $(this)); row += stationDetails(station, network, lat, lng, stationID, stationText, $(this));
@@ -81,7 +90,7 @@ function loadStations(stime, etime) {
sc3mlRespURL = URL + '&level=response&format=sc3ml'; sc3mlRespURL = URL + '&level=response&format=sc3ml';
dlsvFile = sprintf('%s_%s.dlsv', network.toUpperCase(), station.toUpperCase()); dlsvFile = sprintf('%s_%s.dlsv', network.toUpperCase(), station.toUpperCase());
row += '<tr class="tablesorter-childRow station-download"><td colspan="4">' row += '<tr class="tablesorter-childRow station-download"><td colspan="4">'
+ sprintf('Download details: <a download="%s.xml" href="%s" target="_blank">FDSNxml</a> or <a download="%s.sc3" href="%s" target="_blank">SC3ml</a></br> ', stationID, fdsnxmlURL, stationID, sc3mlURL) + sprintf('Download details: <a download="%s.xml" href="%s" target="_blank">FDSNxml</a> or <a download="%s.sc3" href="%s" target="_blank">SC3ml</a><br /> ', stationID, fdsnxmlURL, stationID, sc3mlURL)
+ sprintf('Response files: <a download="%s_response.xml" href="%s" target="_blank">FDSNxml</a>, <a download="%s_response.sc3" href="%s" target="_blank">SC3ml</a> ', stationID, fdsnxmlRespURL, stationID, sc3mlRespURL) + sprintf('Response files: <a download="%s_response.xml" href="%s" target="_blank">FDSNxml</a>, <a download="%s_response.sc3" href="%s" target="_blank">SC3ml</a> ', stationID, fdsnxmlRespURL, stationID, sc3mlRespURL)
+ sprintf('or <a href="%s" download="%s" type="application/octet-stream">datalessSEED</a>', config['ajax']['dlsvURL'] + '/' + dlsvFile, dlsvFile.toLowerCase()) + sprintf('or <a href="%s" download="%s" type="application/octet-stream">datalessSEED</a>', config['ajax']['dlsvURL'] + '/' + dlsvFile, dlsvFile.toLowerCase())
+ '</td></tr>'; + '</td></tr>';
@@ -114,7 +123,16 @@ function loadStations(stime, etime) {
} }
}); });
// create stations csv download link // create stations csv download link
request_data['format'] = 'text'; var request_data = {
endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()),
startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()),
level: 'station',
minlat: S-config['map']['latlngDelta'],
maxlat: N+config['map']['latlngDelta'],
minlon: W-config['map']['latlngDelta'],
maxlon: E+config['map']['latlngDelta'],
format: 'text',
};
$('#stations-csv-link').attr('href', config['ajax']['stationURL']+'?'+$.param(request_data)); $('#stations-csv-link').attr('href', config['ajax']['stationURL']+'?'+$.param(request_data));
}; };
@@ -124,13 +142,13 @@ function stationDetails(station, network, lat, lng, stationId, stationText, stat
var elevation = stationObject.find('Elevation:first').text(); var elevation = stationObject.find('Elevation:first').text();
var name = stationObject.find('Site > Name').text(); var name = stationObject.find('Site > Name').text();
output = '<pre>' output = '<pre>'
+ name + '</br>' + name + '<br />'
+ 'Position: ' + lat + '°N ' + lng + '°E, Höhe: ' + elevation + ' m NN</br>'; + 'Position: ' + lat + '°N ' + lng + '°E, Höhe: ' + elevation + ' m NN<br />';
stationObject.find('Channel').each(function() { stationObject.find('Channel').each(function() {
var code = $(this).attr('code'); var code = $(this).attr('code');
var sensor = $(this).find('Sensor > Type').text().split(',')[0]; var sensor = $(this).find('Sensor > Type').text().split(',')[0];
var sampleRate = $(this).find('SampleRate').text(); var sampleRate = $(this).find('SampleRate').text();
output += '</br>Kanal ' + code + ', Abtastrate ' + sampleRate + ' Hz, Sensor ' + sensor; output += '<br />Kanal ' + code + ', Abtastrate ' + sampleRate + ' Hz, Sensor ' + sensor;
}); });
output += '</pre>'; output += '</pre>';
return output; return output;
@@ -205,6 +223,20 @@ function initStationTable() {
**********************************************************************/ **********************************************************************/
$(document).ready(function() { $(document).ready(function() {
loadStations(); loadStations();
loadStations('A100A');
loadStations('A101B');
loadStations('A102A');
loadStations('A103A');
loadStations('A103B');
loadStations('A104A');
loadStations('A104B');
loadStations('A105A');
loadStations('A106B');
loadStations('A107C');
loadStations('A108A');
loadStations('A109A');
// loadStations('KERA');
// loadStations('KARP');
// show / hide station info // show / hide station info
$('#stationstable').delegate('.toggle', 'click' , function(){ $('#stationstable').delegate('.toggle', 'click' , function(){
// toggle visibility of selected row // toggle visibility of selected row

View File

@@ -4,7 +4,7 @@
**********************************************************************/ **********************************************************************/
/* License /* License
Copyright 2014 Kasper D. Fischer <kasper.fischer@rub.de> Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de>
This program is free software: you can redistribute it and/or modify it This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
@@ -23,7 +23,7 @@
*/ */
/* Load the stations using ajax */ /* Load the stations using ajax */
function loadStations(stime, etime) { function loadStations(station, stime, etime) {
var mapBounds = map.getBounds(); var mapBounds = map.getBounds();
var N = mapBounds.getNorth(); var N = mapBounds.getNorth();
var E = mapBounds.getEast(); var E = mapBounds.getEast();
@@ -37,14 +37,23 @@ function loadStations(stime, etime) {
var etime = new Date(); var etime = new Date();
etime.setDate(etime.getDate()+1); etime.setDate(etime.getDate()+1);
}; };
var request_data = { if ( !station ) {
endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()), var request_data = {
startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()), endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()),
level: 'channel', startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()),
minlat: S-config['map']['latlngDelta'], level: 'station',
maxlat: N+config['map']['latlngDelta'], minlat: S-config['map']['latlngDelta'],
minlon: W-config['map']['latlngDelta'], maxlat: N+config['map']['latlngDelta'],
maxlon: E+config['map']['latlngDelta'], minlon: W-config['map']['latlngDelta'],
maxlon: E+config['map']['latlngDelta'],
};
} else {
var request_data = {
endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()),
startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()),
level: 'channel',
station: station,
};
}; };
$.ajax({ $.ajax({
type: "GET", type: "GET",
@@ -61,13 +70,13 @@ function loadStations(stime, etime) {
lng = $(this).find('Longitude:first').text(), lng = $(this).find('Longitude:first').text(),
stationID = network+'_'+station, stationID = network+'_'+station,
stationText = network+'.'+station; stationText = network+'.'+station;
if ( !stationTable[stationID] ) { if ( !stationTable[stationID] && $.inArray(stationID, config['station']['stationBlacklist']) <0 ) {
// general station info (1st line) // general station info (1st line)
var row = sprintf('<tr><td><a href="#" class="toggle">%s</a></td><td><a href="#" class="toggle">%s</a></td><td class="ar">%7.4f</td><td class="ar">%7.4f</td></tr>' , network, station, Number(lat), Number(lng)); var row = sprintf('<tr><td><a href="#" class="toggle">%s</a></td><td><a href="#" class="toggle">%s</a></td><td class="ar">%7.4f</td><td class="ar">%7.4f</td></tr>' , network, station, Number(lat), Number(lng));
// setting up network details (2nd line) // setting up network details (2nd line)
row += sprintf('<tr class="tablesorter-childRow station-details"><td colspan="4">%s', networkText[network] || ''); row += sprintf('<tr class="tablesorter-childRow station-details"><td colspan="4">%s', networkText[network] || '');
row += ( $.inArray(station, bochumStation)+1 ) ? '</br><em>Operator:</em> Ruhr-University Bochum</td></tr>' : '</td></tr>' ; row += ( $.inArray(station, bochumStation)+1 ) ? '<br /><em>Operator:</em> Ruhr-University Bochum, Germany</td></tr>' : '</td></tr>' ;
if ( network == 'RN' || network == 'X5' || $.inArray(station, bochumStation)+1 ) { if ( network == 'RN' || network == 'Z3' || network == '1A' || network == 'YD' || $.inArray(station, bochumStation)+1 ) {
// setting up station details (3rd line) // setting up station details (3rd line)
row += '<tr class="tablesorter-childRow station-details"><td colspan="4">'; row += '<tr class="tablesorter-childRow station-details"><td colspan="4">';
row += stationDetails(station, network, lat, lng, stationID, stationText, $(this)); row += stationDetails(station, network, lat, lng, stationID, stationText, $(this));
@@ -81,7 +90,7 @@ function loadStations(stime, etime) {
sc3mlRespURL = URL + '&level=response&format=sc3ml'; sc3mlRespURL = URL + '&level=response&format=sc3ml';
dlsvFile = sprintf('%s_%s.dlsv', network.toUpperCase(), station.toUpperCase()); dlsvFile = sprintf('%s_%s.dlsv', network.toUpperCase(), station.toUpperCase());
row += '<tr class="tablesorter-childRow station-download"><td colspan="4">' row += '<tr class="tablesorter-childRow station-download"><td colspan="4">'
+ sprintf('Download details: <a download="%s.xml" href="%s" target="_blank">FDSNxml</a> or <a download="%s.sc3" href="%s" target="_blank">SC3ml</a></br> ', stationID, fdsnxmlURL, stationID, sc3mlURL) + sprintf('Download details: <a download="%s.xml" href="%s" target="_blank">FDSNxml</a> or <a download="%s.sc3" href="%s" target="_blank">SC3ml</a><br /> ', stationID, fdsnxmlURL, stationID, sc3mlURL)
+ sprintf('Response files: <a download="%s_response.xml" href="%s" target="_blank">FDSNxml</a>, <a download="%s_response.sc3" href="%s" target="_blank">SC3ml</a> ', stationID, fdsnxmlRespURL, stationID, sc3mlRespURL) + sprintf('Response files: <a download="%s_response.xml" href="%s" target="_blank">FDSNxml</a>, <a download="%s_response.sc3" href="%s" target="_blank">SC3ml</a> ', stationID, fdsnxmlRespURL, stationID, sc3mlRespURL)
+ sprintf('or <a href="%s" download="%s" type="application/octet-stream">datalessSEED</a>', config['ajax']['dlsvURL'] + '/' + dlsvFile, dlsvFile.toLowerCase()) + sprintf('or <a href="%s" download="%s" type="application/octet-stream">datalessSEED</a>', config['ajax']['dlsvURL'] + '/' + dlsvFile, dlsvFile.toLowerCase())
+ '</td></tr>'; + '</td></tr>';
@@ -114,7 +123,16 @@ function loadStations(stime, etime) {
} }
}); });
// create stations csv download link // create stations csv download link
request_data['format'] = 'text'; var request_data = {
endafter: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()),
startbefore: sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()),
level: 'station',
minlat: S-config['map']['latlngDelta'],
maxlat: N+config['map']['latlngDelta'],
minlon: W-config['map']['latlngDelta'],
maxlon: E+config['map']['latlngDelta'],
format: 'text',
};
$('#stations-csv-link').attr('href', config['ajax']['stationURL']+'?'+$.param(request_data)); $('#stations-csv-link').attr('href', config['ajax']['stationURL']+'?'+$.param(request_data));
}; };
@@ -124,13 +142,13 @@ function stationDetails(station, network, lat, lng, stationId, stationText, stat
var elevation = stationObject.find('Elevation:first').text(); var elevation = stationObject.find('Elevation:first').text();
var name = stationObject.find('Site > Name').text(); var name = stationObject.find('Site > Name').text();
output = '<pre>' output = '<pre>'
+ name + '</br>' + name + '<br />'
+ 'Position: ' + lat + '°N ' + lng + '°E, height: ' + elevation + ' m a.s.l.</br>'; + 'Position: ' + lat + '°N ' + lng + '°E, height: ' + elevation + ' m a.s.l.<br />';
stationObject.find('Channel').each(function() { stationObject.find('Channel').each(function() {
var code = $(this).attr('code'); var code = $(this).attr('code');
var sensor = $(this).find('Sensor > Type').text().split(',')[0]; var sensor = $(this).find('Sensor > Type').text().split(',')[0];
var sampleRate = $(this).find('SampleRate').text(); var sampleRate = $(this).find('SampleRate').text();
output += '</br>Chanel ' + code + ', Samplingrate ' + sampleRate + ' Hz, Sensor ' + sensor; output += '<br />Channel ' + code + ', Samplingrate ' + sampleRate + ' Hz, Sensor ' + sensor;
}); });
output += '</pre>'; output += '</pre>';
return output; return output;
@@ -205,6 +223,20 @@ function initStationTable() {
**********************************************************************/ **********************************************************************/
$(document).ready(function() { $(document).ready(function() {
loadStations(); loadStations();
loadStations('A100A');
loadStations('A101B');
loadStations('A102A');
loadStations('A103A');
loadStations('A103B');
loadStations('A104A');
loadStations('A104B');
loadStations('A105A');
loadStations('A106B');
loadStations('A107C');
loadStations('A108A');
loadStations('A109A');
// loadStations('KERA');
// loadStations('KARP');
// show / hide station info // show / hide station info
$('#stationstable').delegate('.toggle', 'click' , function(){ $('#stationstable').delegate('.toggle', 'click' , function(){
// toggle visibility of selected row // toggle visibility of selected row