From 41b22418e1e60dc2adcafa8072685ef3225497d7 Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Tue, 23 Apr 2013 09:34:25 +0000 Subject: [PATCH] Updated html, javascript and python files to produce station and event maps. --- .gitattributes | 2 + index.html | 8 ++-- mapkey.js | 87 ++++++++++++++++++++++++++++++++++++++ mapkey_yearly.js | 1 + station_map_www.js | 103 ++++++++++++++++++++++++++++++++++++++++----- stations2kml.py | 75 ++++++++++++++------------------- 6 files changed, 218 insertions(+), 58 deletions(-) create mode 100644 mapkey.js create mode 120000 mapkey_yearly.js diff --git a/.gitattributes b/.gitattributes index 4ec8e92..9f85968 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,4 @@ * text=auto !eol +/mapkey.js -text +/mapkey_yearly.js -text /quakes2kml.py -text diff --git a/index.html b/index.html index 33a7eb5..e358544 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,6 @@ - + RUB SeisObs - Station and Seismicity Map @@ -26,8 +26,8 @@ position: absolute; top: 18px; left: 80px; - width: 320px; - height: 34px; + width: 420px; + height: 80px; z-index: 20000; background: rgb(255, 255, 255); background: rgba(255, 255, 255, 0.7); @@ -71,7 +71,9 @@ 'Google Maps (Terrain)': 'Google Maps (Gelände)', 'Google Maps (Satellite)': 'Google Maps (Satellit)', 'Google Maps (Streets)': 'Google Maps (Straßen)', + 'Year': 'Jahr', 'Magnitudes': 'Magnituden', + 'Magnitude': 'Magnitude', 'stations': 'Stationen', 'Zoom in to resolve individual stations.': 'Zum Anzeigen der einzelnen Stationen vergrößern.' }); diff --git a/mapkey.js b/mapkey.js new file mode 100644 index 0000000..2bf230c --- /dev/null +++ b/mapkey.js @@ -0,0 +1,87 @@ +/* + * JavaScript code to generate maps used by the + * Seismological Observatory of the Ruhr-University Bochum + * + * Copyright 2012 Kasper D. Fischer + * + * License + * + * 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 Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + * $Id: station_map.js 321 2012-02-13 14:52:11Z kasper $ + +*/ + +/* Global variables */ +var mapkey; + +/* Main function to create the map */ +function initKey(showMag, showAge, showStation) { + + /* Creating map */ + wgs84 = new OpenLayers.Projection("EPSG:4326"); + mapkey = new OpenLayers.Map( + 'mapkey', + { + projection: wgs84, + displayProjection: wgs84, + controls: [] + } + ); + + // Show Magnitudes + mag_layer = new OpenLayers.Layer.Vector( + 'Magnitude Scale', + { + projection: wgs84, + isBaseLayer: true + } + ); + + // Adding custom style for Magnitudes + var mag_style_default = new OpenLayers.Style({ + fillColor: '#ff0000', fillOpacity: 0.2, + strokeColor: '#ff0000', strokeWidth: 2, + pointRadius: "${pntsize}", + label: "${text}", labelXOffset: "${offset}", + graphicName: 'circle' + }); + var mag_style_map = new OpenLayers.StyleMap({ + 'default': mag_style_default + }); + mag_layer.styleMap = mag_style_map; + + // Adding points as map key, size: mag*3.5+2.0 + var pointt = new OpenLayers.Geometry.Point(-10, 0); + var mag_pointt = new OpenLayers.Feature.Vector(pointt, {pntsize: 0, text: 'Magnitude', offset: 2}); + var point0 = new OpenLayers.Geometry.Point(0, 0); + var mag_point0 = new OpenLayers.Feature.Vector(point0, {pntsize: 0.5*3.5+2.0, text: '0.5', offset: 17}); + var point1 = new OpenLayers.Geometry.Point(10, 0); + var mag_point1 = new OpenLayers.Feature.Vector(point1, {pntsize: 1.5*3.5+2.0, text: '1.5', offset: 20.5}); + var point2 = new OpenLayers.Geometry.Point(20, 0); + var mag_point2 = new OpenLayers.Feature.Vector(point2, {pntsize: 2.5*3.5+2.0, text: '2.5', offset: 24.0}); + var point3 = new OpenLayers.Geometry.Point(30, 0); + var mag_point3 = new OpenLayers.Feature.Vector(point3, {pntsize: 3.5*3.5+2.0, text: '3.5', offset: 27.5}); + mag_layer.addFeatures([mag_pointt, mag_point0, mag_point1, mag_point2, mag_point3]); + + + mapkey.addLayer(mag_layer); + mag_layer.setVisibility(true); + + // Set initial view + if (!mapkey.getCenter()) { + mapkey.setCenter(0,0); + mapkey.zoomToExtent(mag_layer.getDataExtent()); + } +} diff --git a/mapkey_yearly.js b/mapkey_yearly.js new file mode 120000 index 0000000..8973e9f --- /dev/null +++ b/mapkey_yearly.js @@ -0,0 +1 @@ +mapkey.js \ No newline at end of file diff --git a/station_map_www.js b/station_map_www.js index a8ca957..b218cc6 100644 --- a/station_map_www.js +++ b/station_map_www.js @@ -24,11 +24,35 @@ */ /* Global variables */ -var map; +var map, mapargs; /* Main function to create the map */ function init(showGoogle, showStations, showQuakes, noFrils) { + /* get parameters from url */ + mapargs = OpenLayers.Util.getParameters(); + if (mapargs['print']) { + if (mapargs['print'] == 'true') { + noFrils = true; + } else { + noFrils = false; + } + } + if (mapargs['quakes']) { + if (mapargs['quakes'] == 'true') { + showQuakes = true; + } else { + showQuakes = false; + } + } + if (mapargs['stations']) { + if (mapargs['stations'] == 'true') { + showStations = true; + } else { + showStations = false; + } + } + /* Creating map */ if ( !noFrils ) { map = new OpenLayers.Map( @@ -44,7 +68,7 @@ function init(showGoogle, showStations, showQuakes, noFrils) { new OpenLayers.Control.Navigation(), new OpenLayers.Control.OverviewMap(), new OpenLayers.Control.PanZoomBar({zoomWorldIcon: true}), - new OpenLayers.Control.Permalink(), + new OpenLayers.Control.Permalink({anchor: noFrils}), new OpenLayers.Control.ScaleLine({geodesic: true}) ] } @@ -59,7 +83,7 @@ function init(showGoogle, showStations, showQuakes, noFrils) { new OpenLayers.Control.Attribution(), new OpenLayers.Control.KeyboardDefaults(), new OpenLayers.Control.Navigation(), - new OpenLayers.Control.Permalink({anchor: true}), + new OpenLayers.Control.Permalink({anchor: noFrils}), new OpenLayers.Control.ScaleLine({geodesic: true}) ] } @@ -131,6 +155,27 @@ function init(showGoogle, showStations, showQuakes, noFrils) { map.addLayer(quakes_layer); quakes_layer.setVisibility(showQuakes); + // color coding of events + var day2sec = 86400.; + var timeNow = new Date().getTime()/1000.; + var timeCoding; + if (mapargs['timeCoding']) { + switch ( mapargs['timeCoding'] ){ + case 'decade': + timeCoding = { + 'colors': [ '#0000ff', '#ff0000', '#ffa500', '#ffff00'], + 'times': [1262300400, 946681200, 631148400, 315529200] + // 1.1.2010, 1.1.2000, 1.1.1990, 1.1.1980 + }; + }; + }; + if (!mapargs['timeCoding'] || !timeCoding ) { + timeCoding = { + 'colors': ['#0000ff', '#ff0000', '#ffa500', '#ffff00'], + 'ages': [7*day2sec, 30.4375*day2sec, 182.625*day2sec, 365.25*day2sec] + }; + }; + // Adding custom style to quakes var quake_style_default = new OpenLayers.Style({ fillColor: '${pntcolor}', fillOpacity: 0.2, @@ -140,10 +185,37 @@ function init(showGoogle, showStations, showQuakes, noFrils) { { context: { pntcolor: function(feature){ - return feature.data.pntcolor.value; + return feature.data.pntcolor.value; }, + /* if (timeCoding['ages']) { + quakeAge = feature.data.age.value; + // quakeAge = timeNow - feature.data.stime.value; + for ( level = 0; level < timeCoding['ages'].length; level += 1 ) { + if ( quakeAge <= timeCoding['ages'][level] ) { + return timeCoding['colors'][level]; + }; + }; + } else if (timeCoding['decade']) { + return feature.data.pntcolor.value; + } else { + quakeTime = timeNow + feature.data.age.value; + // quakeTime = feature.data.stime.value; + for ( level = 0; level < timeCoding['times'].length; level += 1 ) { + if ( quakeTime >= timeCoding['times'][level] ) { + return timeCoding['colors'][level]; + }; + }; + }; + //return '#ffffff00'; + }, */ pntsize: function(feature){ - return feature.data.pntsize.value; + // quakeAge = feature.data.age.value; + // quakeAge = timeNow - feature.data.time.value; + // if ( timeCoding['ages'] && quakeAge > timeCoding['ages'][timeCoding['ages'].length-1] ) { + // return 0; + // } else { + return feature.data.pntsize.value; + //} } } }); @@ -163,7 +235,7 @@ function init(showGoogle, showStations, showQuakes, noFrils) { // Adding custom style to stations var station_style_default = new OpenLayers.Style({ - fillColor: '#8dae10', fillOpacity: 0.8, + fillColor: '${pointColor}', fillOpacity: 0.8, // #8dae10 strokeColor: 'black', strokeWidth: 2, label: "${text}", labelXOffset: 15, labelAlign: 'l', fontColor: "${tcolor}", fontFamily: 'sans-serif', fontWeight: 'bold', @@ -172,6 +244,13 @@ function init(showGoogle, showStations, showQuakes, noFrils) { }, { context: { + pointColor: function(feature){ + if (feature.attributes.count) { + return '#8dae10'; + } else { + return '#8dae10'; //return feature.data.pntcolor.value; + } + }, text: function(feature){ if (feature.attributes.count) { var c = feature.attributes.count; @@ -220,9 +299,9 @@ function init(showGoogle, showStations, showQuakes, noFrils) { } // Enable animated zoom - // for (var i=map.layers.length-1; i>=0; --i) { - // map.layers[i].animationEnabled = true; - //} + for (var i=map.layers.length-1; i>=0; --i) { + map.layers[i].animationEnabled = true; + } // Show description select = new OpenLayers.Control.SelectFeature([quakes_layer, stations_layer]); @@ -344,7 +423,9 @@ function setQuakesMapkeyVisibility() { mapkey_div.style.display = "block"; mapkey_div.style.visibility = "visible"; } else { - mapkey_div.style.display = "none"; - mapkey_div.style.visibility = "hidden"; + if (mapkey_div) { + mapkey_div.style.visibility = "hidden"; + mapkey_div.style.display = "none"; + } } } diff --git a/stations2kml.py b/stations2kml.py index 1097793..2c5d11d 100755 --- a/stations2kml.py +++ b/stations2kml.py @@ -28,60 +28,47 @@ import simplekml kml = simplekml.Kml() # create empyt folder to contain styles and stations -stations_folder = kml.newfolder(name="Stations") - -# style of broad-band stations -BBstyle = simplekml.Style() -BBstyle.iconstyle.icon.href = 'https://maps.google.com/mapfiles/ms/micons/red-dot.png' -BBtcolor = '#003560' - -# style of short periode stations -SPstyle = simplekml.Style() -SPstyle.iconstyle.icon.href = 'https://maps.google.com/mapfiles/ms/micons/orange-dot.png' -SPtcolor = '#003560' - -# style of short periode stations -AUXstyle = simplekml.Style() -AUXstyle.iconstyle.icon.href = 'https://maps.google.com/mapfiles/ms/micons/yellow-dot.png' -AUXtcolor = '#003560' +stationsFolder = kml.newfolder(name="Stations") +# station types +stationTypes = { + 'broadband': {'textColor': '#003560', 'pointSize': 10, 'pointColor': '#ff0000'}, + 'shortperiod': {'textColor': '#003560', 'pointSize': 10, 'pointColor': '#ffa500'}, + 'auxiliary': {'textColor': '#003560', 'pointSize': 8, 'pointColor': '#ffff00'}, + 'geothermie': {'textColor': '#003560', 'pointSize': 10, 'pointColor': '#ffff00'} + } # setting station info stations = { - 'BUG, BKLB': [(7.2693, 51.4406), "GRSN station BUG, STS-2 seismometer
RuhrNet station BKLB, GS-13 seismometer", BBstyle, 10, '#ff0000', 'BUG (Bochum University Germany), BKLB (Bochum - Klosterbusch)', BBtcolor, 1], - 'BULI': [(7.2602, 51.4544), 'RuhrNet station BULI, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'BULI', AUXtcolor, 0], - 'BTEZ': [(7.2790, 51.4490), 'RuhrNet station BTEZ, GS-13 seismometer', AUXstyle, 8, '#ffff00', 'BTEZ', AUXtcolor, 0], - 'BPFI': [(7.2276, 51.4185 ), 'RuhrNet station BBFI, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'BPFI', AUXtcolor, 0], - 'HMES': [(7.7263, 51.6578), 'RuhrNet station HMES, Trillium 40 seismometer', BBstyle, 10, '#ff0000', 'HMES', BBtcolor, 0], - 'BRHE': [(6.5710, 51.5155), 'RuhrNet station BRHE, Mark L-4C 3D seismometer', SPstyle, 10, '#ffa500', 'BRHE', SPtcolor, 0], - 'ZERL': [(6.8695, 51.6207), 'RuhrNet station ZERL, Mark L-4C 3D seismometer', SPstyle, 10, '#ffa500', 'ZERL', SPtcolor, 0], - 'ZER1': [(6.8252, 51.5948), 'RuhrNet station ZER1, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'ZER1', AUXtcolor, 0], - 'ZER2': [(6.9062, 51.5871 ), 'RuhrNet station ZER2, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'ZER2', AUXtcolor, 0], - 'ZER3': [(6.8384, 51.61274), 'RuhrNet station ZER3, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'ZER3', AUXtcolor, 0], - 'BAVN': [(7.1220, 51.7380), 'RuhrNet station BAVN, STS-2 seismometer', BBstyle, 10, '#ff0000', 'BAVN', BBtcolor, 0], - 'BAVS': [(7.13307, 51.7000), 'RuhrNet station BAVS, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'BAVS', AUXtcolor, 0], - 'IBBN': [(7.7566, 52.3072), 'GEOFON station IBBN, STS-2 seismometer', BBstyle, 10, '#ff0000', 'IBBN', BBtcolor, 0], - 'IBBE': [(7.7943, 52.2998), 'RuhrNet station IBBE, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'IBBE', AUXtcolor, 0], - 'IBBS': [(7.7486, 52.2843), 'RuhrNet station IBBS, Mark L-4C 3D seismometer', AUXstyle, 8, '#ffff00', 'IBBS', AUXtcolor, 0], - 'KERA': [(23.55769, 35.36919), 'GEOFON station KERA, STS-2 seismometer', BBstyle, 10, '#ff0000', 'KERA', BBtcolor, 0], - 'KARP': [(27.16117, 35.54717), 'GEOFON station KARP, STS-2 seismometer', BBstyle, 10, '#ff0000', 'KARP', BBtcolor, 0] + 'BUG, BKLB': [( 7.2693, 51.4406), 'broadband', 1, "GRSN station BUG, STS-2 seismometer
RuhrNet station BKLB, GS-13 seismometer"], + 'BULI': [( 7.2602, 51.4544), 'auxiliary', 0, 'RuhrNet station BULI, Mark L4c-3D seismometer'], + 'BTEZ': [( 7.2790, 51.4490), 'auxiliary', 0, 'RuhrNet station BTEZ, GS-13 seismometer'], + 'BPFI': [( 7.2276, 51.4185), 'auxiliary', 0, 'RuhrNet station BBFI, Mark L4c-3D seismometer'], + 'HMES': [( 7.7263, 51.6578), 'broadband', 0, 'RuhrNet station HMES, Trillium 40 seismometer'], + 'BRHE': [( 6.5710, 51.5155), 'shortperiod', 0, 'RuhrNet station BRHE, Mark L4c-3D seismometer'], + 'ZERL': [( 6.8695, 51.6207), 'shortperiod', 0, 'RuhrNet station ZERL, Mark L4c-3D seismometer'], + 'ZER1': [( 6.8252, 51.5948), 'auxiliary', 0, 'RuhrNet station ZER1, Mark L4c-3D seismometer'], + 'ZER2': [( 6.9062, 51.5871), 'auxiliary', 0, 'RuhrNet station ZER2, Mark L4c-3D seismometer'], + 'ZER3': [( 6.8384, 51.6127), 'auxiliary', 0, 'RuhrNet station ZER3, Mark L4c-3D seismometer'], + 'BAVN': [( 7.1220, 51.7380), 'broadband', 0, 'RuhrNet station BAVN, STS-2 seismometer'], + 'BAVS': [( 7.1331, 51.7000), 'auxiliary', 0, 'RuhrNet station BAVS, Mark L4c-3D seismometer'], + 'IBBN': [( 7.7566, 52.3072), 'broadband', 0, 'GEOFON station IBBN, STS-2 seismometer'], + 'IBBE': [( 7.7943, 52.2998), 'auxiliary', 0, 'RuhrNet station IBBE, Mark L4c-3D seismometer'], + 'IBBS': [( 7.7486, 52.2843), 'auxiliary', 0, 'RuhrNet station IBBS, Mark L4c-3D seismometer'], + 'KERA': [(23.5577, 35.3692), 'broadband', 0, 'GEOFON station KERA, STS-2 seismometer'], + 'KARP': [(27.1612, 35.5472), 'broadband', 0, 'GEOFON station KARP, STS-2 seismometer'] } -# 'BHOF': [(7.2614, 51.4289), 'RuhrNet station BHOF, GS-13 seismometer', AUXstyle, 8, '#ffff00', 'BHOF', AUXtcolor, 0], -# 'BSHA': [(7.2445, 51.4469), 'RuhrNet station BSHA, GS-13 seismometer', AUXstyle, 8, '#ffff00', '', 'black'], -# 'BKLB': [(7.2697, 51.4401), 'RuhrNet station BKLB, GS-13 seismometer', AUXstyle, 8, '#ffff00', 'BKLB', AUXtcolor], # adding station markers for key, value in stations.iteritems(): - pnt = stations_folder.newpoint( + pnt = stationsFolder.newpoint( name = key, coords = [(value[0][0], value[0][1])], - description = value[1] + description = value[3] ) - pnt.style = value[2] - pnt.extendeddata.newdata('pntsize', value[3]) - pnt.extendeddata.newdata('pntcolor', value[4]) - pnt.extendeddata.newdata('text', value[5]) - pnt.extendeddata.newdata('tcolor', value[6]) - pnt.extendeddata.newdata('extrastation', value[7]) + pnt.extendeddata.newdata('pntsize', stationTypes[value[1]]['pointSize']) + pnt.extendeddata.newdata('pntcolor', stationTypes[value[1]]['pointColor']) + pnt.extendeddata.newdata('tcolor', stationTypes[value[1]]['textColor']) + pnt.extendeddata.newdata('extrastation', value[2]) # saving the KML file kml.save('stations.kml')