From f374ee0a1c5c6c9ca87d91d761f5c6ba0c2bc839 Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Thu, 15 May 2014 12:50:56 +0000 Subject: [PATCH 1/5] Added parametes to set map centre. Added station size config for all NL stations. --- www/misc.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/www/misc.js b/www/misc.js index 84f4ed3..713b5cf 100644 --- a/www/misc.js +++ b/www/misc.js @@ -121,7 +121,10 @@ var config = { GE_IBBN: 10, GR_BUG: 10, GR_KAST: 10, + NL_HGN: 3, NL_OPLO: 3, + NL_VKB: 3, + NL_WIT: 3, NL_WTSB: 3, }, }, @@ -136,6 +139,9 @@ $(document).ready(function() { if ( parameters['baselayer'] ) { config['map']['baselayer'] = parameters['baselayer'][0]; }; + if ( Number(parameters['lat']) && Number(parameters['lon']) ) { + config['map']['centerDefault'] = [Number(parameters['lat']), Number(parameters['lon'])]; + }; if ( Number(parameters['minmag']) ) { config['event']['minMag'] = Number(parameters['minmag']); }; From 5a1b780eaf40e19a9ab7ded7c9aeb592cf27b0be Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Thu, 15 May 2014 15:57:52 +0000 Subject: [PATCH 2/5] Added support for detailed station information and download links. Funcionality is still missing. --- www/misc.js | 8 ++++++ www/stations.js | 71 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 64 insertions(+), 15 deletions(-) diff --git a/www/misc.js b/www/misc.js index 713b5cf..5123e25 100644 --- a/www/misc.js +++ b/www/misc.js @@ -127,8 +127,15 @@ var config = { NL_WIT: 3, NL_WTSB: 3, }, + networkBlacklist: ['NL', 'X5'], }, }; +var networkText = { + GE: 'GEOFON Program, GFZ Potsdam, Germany', + GR: 'German Regional Seismic Network, BGR Hannover, Germany', + NL: 'Netherlands Seismic Network, The Netherlands', + RN: 'RuhrNet - Ruhr-University Bochum, Germany', +}; /********************************************************************** * document ready * @@ -168,6 +175,7 @@ $(document).ready(function() { var tabOptions = { active: 0, disabled: [2, 3], + activate: function( event, ui ) { ui['newPanel'].find('table').trigger("update", [true]); }, }; $('#tabs').tabs(tabOptions); }); diff --git a/www/stations.js b/www/stations.js index 33c7f2b..eb826ca 100644 --- a/www/stations.js +++ b/www/stations.js @@ -40,6 +40,7 @@ function loadStations(stime, etime) { 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'], @@ -53,19 +54,27 @@ function loadStations(stime, etime) { success: function (xml) { $(xml).find('Network').each(function () { var network = $(this).attr('code'); - $(this).find('Station').each(function () { - var station = $(this).attr('code'), - lat = $(this).find('Latitude').text(), - lng = $(this).find('Longitude').text(), - stationID = network+'_'+station, - stationText = network+'.'+station; - if ( !stationTable[stationID] ) { // && N >= lat && S <= lat && W<= lng && E >= lng - var row = sprintf('%s%s%7.4f%7.4f' , network, station, Number(lat), Number(lng)); - var r = $(row); - $('#stationstable tbody').append(r); - addStationMarker(stationID, Number(lat), Number(lng), stationText.toUpperCase()); - }; - }); + if ( $.inArray(network, config['station']['networkBlacklist'])<0 ) { + $(this).find('Station').each(function () { + var station = $(this).attr('code'), + lat = $(this).find('Latitude').text(), + lng = $(this).find('Longitude').text(), + stationID = network+'_'+station, + stationText = network+'.'+station; + if ( !stationTable[stationID] ) { + // general station info (1st line) + var row = sprintf('%s%s%7.4f%7.4f' , network, station, Number(lat), Number(lng)); + // setting up network details (2nd line) + row += sprintf('%s', networkText[network] || ''); + // setting up station details (3rd line) + row += 'not implemented'; + // setting up download links (4th line) + row += 'not implemented'; + $('#stationstable tbody').append(row); + addStationMarker(stationID, Number(lat), Number(lng), stationText.toUpperCase()); + }; + }); + }; }); }, complete: function () { @@ -110,7 +119,7 @@ function initStationTable() { // css class names of pager arrows pager_css: { container : 'stations-tablesorter-pager', - errorRow : 'tablesorter-errorRow', // error information row (don't include period at beginning) + errorRow : 'stations-tablesorter-errorRow', // error information row (don't include period at beginning) disabled : 'disabled' // class added to arrows @ extremes (i.e. prev/first arrows "disabled" on first page) }, // jQuery pager selectors @@ -126,7 +135,7 @@ function initStationTable() { }, filter_childRows : true, - filter_cssFilter : 'tablesorter-filter', + filter_cssFilter : 'stations-tablesorter-filter', filter_startsWith : false, filter_ignoreCase : true, scroller_height: $('div.map').height() - 250, @@ -137,6 +146,12 @@ function initStationTable() { showProcessing: true, } }); + // hide child rows + $('#stationstable > tbody > tr.tablesorter-childRow > td').hide(); + // update map after filtering + // $('#stationsstable').bind('filterEnd', function(){ + // toggleFilteredMarkers(); + // }); }; /********************************************************************** @@ -144,4 +159,30 @@ function initStationTable() { **********************************************************************/ $(document).ready(function() { loadStations(); + // show / hide station info + $('#stationstable').delegate('.toggle', 'click' , function(){ + // toggle visibility of selected row + $(this).closest('tr').nextUntil('tr.tablesorter-hasChildRow').find('td').toggle('slow'); + // mark currently selected row and remove class selected from all other rows + // hide other rows + $(this).closest('tr').nextUntil('tr.tablesorter-hasChildRow').find('td').addClass('selected-now'); + $(this).closest('tbody').find('td.selected').each(function(){ + if ( ! $(this).hasClass('selected-now') ) { + $(this).hide(); + $(this).removeClass('selected'); + }; + }); + $(this).closest('tr').nextUntil('tr.tablesorter-hasChildRow').find('td').each(function(){ + $(this).removeClass('selected-now'); + var selected = $(this).hasClass('selected'); + if ( selected ) { + $(this).removeClass('selected'); + //highlightFirstEvent(); + } else { + $(this).addClass('selected'); + //toggleHighlightStation($(this).attr('stationid')); + }; + }); + return false; + }); }); From 9ea976c762d76dbebf4dc9ac080115dbc6f2ea0d Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Fri, 16 May 2014 16:32:24 +0000 Subject: [PATCH 3/5] Added support for detailed station information and download links. Download links and some information are now visible. TODO: add detailed station info. --- www/index.html.de | 5 +++-- www/misc.js | 15 +++++++++++---- www/stations.js | 32 +++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/www/index.html.de b/www/index.html.de index 3c72833..078bd3b 100644 --- a/www/index.html.de +++ b/www/index.html.de @@ -115,8 +115,8 @@ - - + + @@ -129,6 +129,7 @@ +

Download als CSV

diff --git a/www/misc.js b/www/misc.js index 5123e25..04ac8e4 100644 --- a/www/misc.js +++ b/www/misc.js @@ -92,6 +92,7 @@ var config = { ajax: { timeout: 10000, // 10 seconds eventURL: 'https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query', + dlsvURL: 'dlsv', mseedURL: 'https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/dataselect/1/query', stationURL: 'https://ariadne.geophysik.ruhr-uni-bochum.de/fdsnws/station/1/query', nominatimURL: '//open.mapquestapi.com/nominatim/v1/reverse.php', @@ -130,12 +131,18 @@ var config = { networkBlacklist: ['NL', 'X5'], }, }; +var networkURL = { + 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', + NL: 'http://www.knmi.nl/seismologie/seismisch_network_knmi3.html', +}; var networkText = { - GE: 'GEOFON Program, GFZ Potsdam, Germany', - GR: 'German Regional Seismic Network, BGR Hannover, Germany', - NL: 'Netherlands Seismic Network, The Netherlands', + GE: 'GEOFON Program, GFZ Potsdam', + GR: 'German Regional Seismic Network, BGR Hannover', + NL: 'Netherlands Seismic Network, The Netherlands', RN: 'RuhrNet - Ruhr-University Bochum, Germany', }; +var bochumStation = ['BUG', 'IBBN', 'KERA', 'KARP']; /********************************************************************** * document ready * @@ -173,7 +180,7 @@ $(document).ready(function() { // create tabs var tabOptions = { - active: 0, + active: 1, disabled: [2, 3], activate: function( event, ui ) { ui['newPanel'].find('table').trigger("update", [true]); }, }; diff --git a/www/stations.js b/www/stations.js index eb826ca..f9d5d36 100644 --- a/www/stations.js +++ b/www/stations.js @@ -65,11 +65,30 @@ function loadStations(stime, etime) { // general station info (1st line) var row = sprintf('%s%s%7.4f%7.4f' , network, station, Number(lat), Number(lng)); // setting up network details (2nd line) - row += sprintf('%s', networkText[network] || ''); - // setting up station details (3rd line) - row += 'not implemented'; - // setting up download links (4th line) - row += 'not implemented'; + row += sprintf('%s', networkText[network] || ''); + row += ( $.inArray(station, bochumStation)+1 ) ? '
Betreiber: Ruhr-Universität Bochum' : '' ; + if ( network == 'RN' || network == 'X5' || $.inArray(station, bochumStation)+1 ) { + // setting up station details (3rd line) + row += 'not implemented'; + // setting up download links (4th line) + var URL, fdsnxmlURL, fdsnxmlRespURL, sc3mlURL, sc3mlRespURL, dlsvURL; + URL = sprintf('%s?network=%s&station=%s', config['ajax']['stationURL'], network, station); + fdsnxmlURL = URL + '&level=station&format=xml'; + fdsnxmlRespURL = URL + '&level=response&format=xml'; + sc3mlURL = URL + '&level=station&format=sc3ml'; + sc3mlRespURL = URL + '&level=response&format=sc3ml'; + dlsvFile = sprintf('%s_%s.dlsv', network.toUpperCase(), station.toUpperCase()); + row += '' + + sprintf('Download details: FDSNxml or SC3ml
', fdsnxmlURL, sc3mlURL) + + sprintf('Response files: FDSNxml, SC3ml ', fdsnxmlRespURL, sc3mlRespURL) + + sprintf('or datalessSEED', config['ajax']['dlsvURL'] + '/' + dlsvFile, dlsvFile.toLowerCase()) + + ''; + } + else { + row += 'Kontaktieren Sie den '; + row += ( networkURL[network.toUpperCase()] ) ? 'Netzwerkkoordinator' : 'Netzwerkkoordinator'; + row += ' für weitere Details.'; + }; $('#stationstable tbody').append(row); addStationMarker(stationID, Number(lat), Number(lng), stationText.toUpperCase()); }; @@ -88,6 +107,9 @@ function loadStations(stime, etime) { stationLayer.bringToFront(); } }); + // create stations csv download link + request_data['format'] = 'text'; + $('#stations-csv-link').attr('href', config['ajax']['stationURL']+'?'+$.param(request_data)); }; /* initStationTable */ From fd135405db0a0f6c3ad333b71113ea345d54d492 Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Fri, 16 May 2014 16:33:26 +0000 Subject: [PATCH 4/5] Changed svn:ignore property. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f47c021..1c5f384 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +www/dlsv www/event.xml www/geolocation.js www/stations.xml From 873a21f5393cf8bd393354cfab0736d7d96579d5 Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Mon, 19 May 2014 20:08:38 +0000 Subject: [PATCH 5/5] Added new funcionality: special events can now be loaded to the table and map, eg. Seeheim-Jugenheim event of May 17th, 2014. --- www/events.js | 45 +++++++++++++++++++++++++------------------ www/map.js | 53 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 63 insertions(+), 35 deletions(-) diff --git a/www/events.js b/www/events.js index 504fa91..1cfee10 100644 --- a/www/events.js +++ b/www/events.js @@ -50,24 +50,29 @@ function getGeolocation(id, lat, lng) { }; /* Load events using ajax */ -function ajaxLoadEvents(stime, etime) { - var request_data = {}; - if ( !stime ) { - stime = new Date(); - stime.setDate(stime.getDate()-config['map']['timespan']); - }; +function ajaxLoadEvents(stime, etime, id) { var mapBounds = map.getBounds(); - request_data = { - starttime: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()), - orderby: 'time-asc', - minlat: sprintf('%.2f', mapBounds.getSouth()-config['map']['latlngDelta']), - maxlat: sprintf('%.2f', mapBounds.getNorth()+config['map']['latlngDelta']), - minlon: sprintf('%.2f', mapBounds.getWest()-config['map']['latlngDelta']), - maxlon: sprintf('%.2f', mapBounds.getEast()+config['map']['latlngDelta']), - minmag: sprintf('%.1f', config['event']['minMag']-config['event']['minMagDelta']), - }; - if ( etime ) { - request_data['endtime'] = sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()); + var request_data = {}; + if ( id ) { + if ( id == 'bug2014jptq' ) console.log('Loading special event '+id); + request_data = { eventid: id }; + } else { + if ( !stime ) { + stime = new Date(); + stime.setDate(stime.getDate()-config['map']['timespan']); + }; + request_data = { + starttime: sprintf("%d-%02d-%02d", stime.getFullYear(), stime.getMonth()+1, stime.getDate()), + orderby: 'time-asc', + minlat: sprintf('%.2f', mapBounds.getSouth()-config['map']['latlngDelta']), + maxlat: sprintf('%.2f', mapBounds.getNorth()+config['map']['latlngDelta']), + minlon: sprintf('%.2f', mapBounds.getWest()-config['map']['latlngDelta']), + maxlon: sprintf('%.2f', mapBounds.getEast()+config['map']['latlngDelta']), + minmag: sprintf('%.1f', config['event']['minMag']-config['event']['minMagDelta']), + }; + if ( etime ) { + request_data['endtime'] = sprintf("%d-%02d-%02d", etime.getFullYear(), etime.getMonth()+1, etime.getDate()); + }; }; $.ajax({ type: "GET", @@ -87,10 +92,12 @@ function ajaxLoadEvents(stime, etime) { var type = $(this).find('type').last().text(); var location // get location, try this in order: - // cached value, nominatim lookup, regional map name, or given value - location = geolocationTable[id] || getGeolocation(id, lat, lng) || getLocation(lat, lng)[0] || $(this).find('description > text').text(); + // regional map name, given value, cached value, or nominatim lookup + location = ( getLocation(lat, lng)[0] || $(this).find('description > text').text() ); + location = ( geolocationTable[id] || getGeolocation(id, lat, lng) ); // 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 ( id == 'bug2014jptq' ) console.log('Adding row for special event '+id); // general event info (1st line) var row = '' + ''+otime.split('.')[0]+'Z' diff --git a/www/map.js b/www/map.js index 2cf0d28..19f578c 100644 --- a/www/map.js +++ b/www/map.js @@ -42,25 +42,32 @@ function addStationMarker(id, lat, lng, station) { /* add event marker */ function addEventMarker(id, lat, lng, mag) { - var markerOptions = { - gradient: true, - dropShadow: false, - fillColor: config['event']['markerColor'], - fillOpacity: config['event']['markerOpacity'], - color: config['event']['markerColor'], - weight: 0, - opacity: 1, - className: id+' eventMarker', - radius: mag2radius(mag) + if ( id == 'bug2014jptq' ) console.log('Adding marker for special event '+id); + if ( eventTable[id] ) { + return eventTable[id]; + console.log('Marker allready exists ID: '+id); + } else { + var markerOptions = { + gradient: true, + dropShadow: false, + fillColor: config['event']['markerColor'], + fillOpacity: config['event']['markerOpacity'], + color: config['event']['markerColor'], + weight: 0, + opacity: 1, + className: id+' eventMarker', + radius: mag2radius(mag) + }; + var marker = L.circleMarker(L.latLng(lat, lng), markerOptions); + eventLayer.addLayer(marker); + eventTable[id] = marker; + return marker; }; - var marker = L.circleMarker(L.latLng(lat, lng), markerOptions); - eventLayer.addLayer(marker); - eventTable[id] = marker; - return marker; }; /* handle to show events on map */ function initMapLink() { + $("#eventstable > tbody > tr > td > a.map-link").off('click'); $("#eventstable > tbody > tr > td > a.map-link").on('click' , function(){ var highlightStyle = { color: config['event']['markerColorH'], @@ -89,15 +96,15 @@ function initMapLink() { if ( $(this).hasClass('selected') ) { $(this).removeClass('selected'); $(this).text('Karte'); - eventTable[$(this).attr('eventid')].setStyle(normalStyle); map.setView(config['map']['centerDefault'], config['map']['zoomDefault']); + eventTable[$(this).attr('eventid')].setStyle(normalStyle); highlightFirstEvent(); // unselected -> selected } else { $(this).addClass('selected'); $(this).text('im Fokus (rot)'); - eventTable[$(this).attr('eventid')].setStyle(highlightStyle); map.setView(eventTable[$(this).attr('eventid')].getLatLng(), config['map']['zoomFocus']); + eventTable[$(this).attr('eventid')].setStyle(highlightStyle) }; }); return false; @@ -116,6 +123,12 @@ $(document).ready(function() { // create baselayer switch ( config['map']['baselayer'] ) { + case 'osmde': // add OpenStreetMap.DE tile layer + L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', + { + attribution: '© OpenStreetMap contributors, CC-BY-SA', + }).addTo(map); + break; case 'esrigray': // add ESRI Grayscale World Map (neither city nor road names) L.tileLayer('//server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', { @@ -123,6 +136,12 @@ $(document).ready(function() { maxZoom: 16 }).addTo(map); break; + case 'aerial': // add ESRI WordImagery tile layer + L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + { + attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' + }).addTo(map); + break; case 'mapquestgray': // add MapQuestOSM tile layer L.tileLayer.grayscale('http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg', { @@ -150,6 +169,8 @@ $(document).ready(function() { // load events ajaxLoadEvents(); + //ajaxLoadEvents([], [], ['bug2014jptq', 'gfz2013yvko']); + ajaxLoadEvents([], [], 'bug2014jptq'); toggleFilteredMarkers(); // bind popupopen event