ORFEUS Workshop - Lisbon 2017
ORFEUS EIDA Webservices

Seismo-Live: http://seismo-live.org

Authors:

1 Basic Webservice Usage

1.1 Introduction

EIDA webservices are designed to provide programmatic access to waveform data and instrument metadata from EIDA. FDSN standerdised webservices are running since 2015 and are scheduled to replace Arclink and other deprecated procotols in the near future. Because webservices requests are URLs It is possible to communicate directly with the webservice APIs in a browser, command-line tools (e.g. curl; wget) or through abstracted clients (e.g. ObsPy, fdsnws-fetch).

Webservices are identified by the service domain (URL) that is data center specific, a label that identifies the service (e.g. dataselect; station) and a list of request options (e.g. stream identifiers or time window) included in its query string. In this initial exercise we will introduce five webservices:

  • 1.2 FDSNWS-Dataselect - Raw waveform service
  • 1.3 FDSNWS-Station - Station metadata and instrument specifics
  • 1.4 EIDAWS-Routing - Service routing within EIDA
  • 1.5 EIDAWS-WFCatalog - Waveform metadata
  • 1.6 EIDA Mediator - Automatically federated requests across EIDA

In this notebook we will practise direct communication with the webservice APIs in addition to recommended and more convenient workflows using ObsPy.

1.2 FDSNWS-Dataselect

1.2.1 Interacting with the API

The following example makes a request to the FDSNWS-Dataselect API hosted at ORFEUS Data Center (http://orfeus-eu.org). We will request a 10-minute window of miniSEED data from a single station. The data will be read and plotted using ObsPy. Alternatively, we could save the data to disk. The service label for FDSNWS-Dataselect is:

fdsnws/dataselect/1/query

In [1]:
%matplotlib inline

# Import the read module from ObsPy
from obspy import read

# The URL that points to the dataselect service
# The label that identifies the service
SERVICE_DOMAIN = "http://www.orfeus-eu.org"
LABEL = "fdsnws/dataselect/1/query"

# The 10-minute time window tuple
starttime, endtime = ("2016-01-01T00:00:00", "2016-01-01T00:10:00")

# Get the SEED codes, we will use wildcards for location, channel
network, station, location, channel = "NL", "HGN", "*", "*"

# Create a query string
queryString = "&".join([
    "network=%s" % network,
    "station=%s" % station,
    "location=%s" % location,
    "channel=%s" % channel,
    "starttime=%s" % starttime,
    "endtime=%s" % endtime
])

# The URL that we are requesting data from
# Try visiting this URL in your browser:
# http://www.orfeus-eu.org/fdsnws/dataselect/1/query?network=NL&station=HGN&location=*&channel=*&starttime=2016-01-01T00:00:00&endtime=2016-01-01T00:10:00
st = read("%s/%s?%s" % (SERVICE_DOMAIN, LABEL, queryString))

# Plot the data returned by the webservice
st.plot();

1.2.2 Waveforms through ObsPy (recommended usage)

Alternatively we can use the ObsPy library to communicate with the API through an abstracted client. All we need to do is call an ObsPy function with our time window constraint and SEED identifiers. This function will do all the work of the previous exercise for us internally and make the result available for use within ObsPy.

Note: Instead of building the URL yourself in the previous exercise, when working with ObsPy it is recommended that the client class is used.

In [2]:
# Include the Client class from ObsPy
from obspy.clients.fdsn import Client

# Create an ObsPy Client that points to ODC (http://www.orfeus-eu.org)
client = Client("ODC")

# Get the waveforms for the same trace identifiers and time window
st = client.get_waveforms(network, station, location, channel, starttime, endtime)

# Plot identical result
st.plot();

1.3 FDSNWS-Station

1.3.1 Interacting with the API

The fdsnws-station service works similar to the fdsnws-dataselect but has a service different label (station instead of dataselect). The response of this webservice is StationXML by default. In the following example we will however request the output formatted as text for clarity. The label for this webservice is:

fdsnws/station/1/query

In [3]:
# Import a library to make a HTTP request to the webservice
import requests

# The URL that points to the station service
SERVICE_DOMAIN = "http://www.orfeus-eu.org"
LABEL = "fdsnws/station/1/query"

# Get the SEED codes for the entire NL network
network, station, location, channel = "NL", "*", "*", "*"

# The query string includes our seed identifiers
# and we request output format text
queryString = "&".join([
    "network=%s" % network,
    "station=%s" % station,
    "location=%s" % location,
    "channel=%s" % channel,
    "format=text",
    "level=station"
])

# The URL that we are requesing
# Try this in your browser:
# http://www.orfeus-eu.org/fdsnws/station/1/query?network=NL&station=*&location=*&channel=*&format=text
r = requests.get("%s/%s?%s" % (SERVICE_DOMAIN, LABEL, queryString))

# This will print station information for all stations in network NL
print(r.text)
#Network|Station|Latitude|Longitude|Elevation|SiteName|StartTime|EndTime
NL|0171|51.03544|5.86908|35.0|Nieuwstadt|2006-01-27T00:00:00|2011-11-25T00:00:00
NL|1979|50.9708|5.9268|80.0|Bingelrade|2009-03-10T00:00:00|2014-11-28T00:00:00
NL|1980|50.8|5.9727|154.0|Mamelis|2009-03-10T00:00:00|2015-04-17T00:00:00
NL|1982|50.86939|6.08469|145.0|Rolduc|2007-12-10T00:00:00|2015-04-17T00:00:00
NL|ALK2|52.65104|4.723407|-1.0|Alkmaar - Bergerweg|2019-07-24T00:00:00|
NL|ARCN|51.5013|6.1942|0.0|Arcen|2018-05-23T00:00:00|
NL|BAPP|53.31482|6.83539|0.0|Appingedam|2013-10-07T00:00:00|
NL|BBER|52.661427|4.7045|2.0|Bergen|2017-12-04T00:00:00|2019-05-21T00:00:00
NL|BER2|52.6478|4.714988|-1.0|Bergen - Groeneweg|2019-07-25T00:00:00|
NL|BFB2|53.18751|6.76549|1.0|Froombosch2|2014-09-17T00:00:00|
NL|BGAR|53.36786|6.71359|1.0|Garsthuizen|2014-09-17T00:00:00|
NL|BHAR|53.22916|6.70898|1.0|Harkstede|2014-09-17T00:00:00|
NL|BHKS|53.29195|6.78502|1.0|Hoeksmeer|2014-09-17T00:00:00|
NL|BING|50.9708|5.9268|80.0|Bingelrade|2014-11-27T00:00:00|
NL|BKMZ|53.290115|6.318887|2.0|Kommerzijl|2015-12-08T00:00:00|
NL|BLOP|53.33391|6.74663|1.0|Loppersum|2013-09-23T00:00:00|
NL|BMD1|53.34726|6.64225|2.0|Middelstum 1|2013-09-11T00:00:00|2014-03-11T05:16:01
NL|BMD2|53.35325|6.6472|0.0|Middelstum 2|2013-09-10T00:00:00|
NL|BONL|53.40014|6.75483|1.0|Oosternienland|2013-09-19T00:00:00|2015-08-23T00:00:00
NL|BOWW|53.34053|6.8125|1.0|Oosterwijterd|2013-10-01T00:00:00|
NL|BSTD|53.312297|6.692137|1.0|Stedum|2014-09-17T00:00:00|
NL|BUHZ|53.40704|6.67266|2.0|Uithuizen|2013-10-07T00:00:00|
NL|BWIN|53.3112|6.74837|1.0|Winneweer|2014-09-17T00:00:00|
NL|BWIR|53.32257|6.7861|0.0|Wirdum|2013-09-24T00:00:00|
NL|BWSE|53.34442|6.70989|1.0|Westeremden|2013-04-24T00:00:00|
NL|BZN1|53.36567|6.77512|1.0|t Zandt 1|2013-10-24T00:00:00|
NL|BZN2|53.35683|6.75474|1.0|t Zandt 2|2013-09-23T00:00:00|
NL|CHA1|51.5043|4.9212|20.0|Chaam niveau 1|2011-07-03T00:00:00|
NL|CHA2|51.5043|4.9212|20.0|Chaam niveau 2|2011-07-03T00:00:00|2018-05-25T00:00:00
NL|CHA3|51.5043|4.9212|20.0|Chaam niveau 3|2011-07-03T00:00:00|
NL|CHA4|51.5043|4.9212|20.0|Chaam niveau 4|2011-07-03T00:00:00|
NL|CHA5|51.5043|4.9212|20.0|Chaam niveau 5|2011-07-03T00:00:00|
NL|CIA01|51.96884|4.92793|-1.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA02|51.96968|4.92881|-1.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA03|51.96859|4.92949|-1.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA04|51.96786|4.92801|-2.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA05|51.9685|4.92642|-2.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA06|51.96962|4.92692|-1.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA07|51.97071|4.92579|0.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA08|51.97209|4.92395|-1.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA09|51.97421|4.92298|-1.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|CIA10|51.97297|4.92662|-2.0|Cabauw Infrasound Array|2012-07-04T10:30:00|
NL|COE|52.66055|6.783616|9.7|Coevorden|2019-05-28T00:00:00|
NL|DBN|52.1017|5.1767|3.0|De Bilt, Netherlands|1997-11-25T00:00:00|
NL|DBN01|52.09887|5.17589|4.0|De Bilt Infrasound Array|2002-08-21T14:30:00|
NL|DBN02|52.09897|5.17621|3.0|De Bilt Infrasound Array|2002-08-21T14:30:00|
NL|DBN03|52.09897|5.17685|1.0|De Bilt Infrasound Array|2002-08-21T14:30:00|
NL|DBN04|52.09875|5.17683|2.0|De Bilt Infrasound Array|2002-08-21T14:30:00|
NL|DBN05|52.09842|5.17653|2.0|De Bilt Infrasound Array|2002-08-21T14:30:00|
NL|DBN06|52.09853|5.17623|3.0|De Bilt Infrasound Array|2002-08-21T14:30:00|
NL|DL01|52.06011|5.8873|52.0|Deelen Infrasound Array|1999-07-01T00:00:00|
NL|DL14|52.05514|5.88275|49.0|Deelen Infrasound Array|1999-07-01T00:00:00|
NL|DL17|52.06005|5.88747|49.0|Deelen Infrasound Array|1999-07-01T00:00:00|
NL|DR010|52.7987|6.178458|1.7|Kallenkote (niveau 0)|2018-06-25T00:00:00|
NL|DR011|52.7987|6.178458|1.7|Kallenkote (niveau 1)|2018-06-25T00:00:00|
NL|DR012|52.7987|6.178458|1.7|Kallenkote (niveau 2)|2018-06-25T00:00:00|
NL|DR013|52.7987|6.178458|1.7|Kallenkote (niveau 3)|2018-06-25T00:00:00|
NL|DR014|52.7987|6.178458|1.7|Kallenkote (niveau 4)|2018-06-25T00:00:00|
NL|DR020|52.703377|6.508147|11.2|Hollandscheveld (niveau 0)|2019-06-20T00:00:00|
NL|DR021|52.703377|6.508147|11.2|Hollandscheveld (niveau 1)|2019-06-20T00:00:00|
NL|DR022|52.703377|6.508147|11.2|Hollandscheveld (niveau 2)|2019-06-20T00:00:00|
NL|DR023|52.703377|6.508147|11.2|Hollandscheveld (niveau 3)|2019-06-20T00:00:00|
NL|DR024|52.703377|6.508147|11.2|Hollandscheveld (niveau 4)|2019-06-20T00:00:00|
NL|ELE|52.956616|6.577619|12.3|Eleveld|2019-01-11T00:00:00|
NL|ENM1|53.4064|6.4817|1.0|Eenrum (Westernieland) niveau 1|1995-04-12T00:00:00|
NL|ENM2|53.4064|6.4817|1.0|Eenrum (Westernieland) niveau 2|1995-04-12T00:00:00|
NL|ENM3|53.4064|6.4817|1.0|Eenrum (Westernieland) niveau 3|1995-04-12T00:00:00|
NL|ENM4|53.4064|6.4817|1.0|Eenrum (Westernieland) niveau 4|1995-04-12T00:00:00|
NL|ENV1|52.8944|6.6337|17.0|Elp (Enerveen) niveau 1|1995-09-09T00:00:00|
NL|ENV2|52.8944|6.6337|17.0|Elp (Enerveen) niveau 2|1995-09-09T00:00:00|
NL|ENV3|52.8944|6.6337|17.0|Elp (Enerveen) niveau 3|1995-09-09T00:00:00|
NL|ENV4|52.8944|6.6337|17.0|Elp (Enerveen) niveau 4|1995-09-09T00:00:00|
NL|EXL01|52.908069|6.865355|6.0|Exloo Infrasound Array|2005-01-01T00:00:00|
NL|EXL02|52.906795|6.865549|7.0|Exloo Infrasound Array|2005-01-01T00:00:00|
NL|EXL03|52.90829|6.86401|6.0|Exloo Infrasound Array|2005-01-01T00:00:00|
NL|EXL04|52.906704|6.865989|4.0|Exloo Infrasound Array|2005-01-01T00:00:00|
NL|EXL05|52.908257|6.867829|6.0|Exloo Infrasound Array|2005-01-01T00:00:00|
NL|EXL06|52.907097|6.865533|6.0|Exloo Infrasound Array|2005-01-01T00:00:00|
NL|FDG1|53.2562|5.5481|1.0|Firdgum niveau 1|2009-10-13T00:00:00|
NL|FDG2|53.2562|5.5481|1.0|Firdgum niveau 2|2009-10-13T00:00:00|
NL|FDG3|53.2562|5.5481|1.0|Firdgum niveau 3|2009-10-13T00:00:00|
NL|FDG4|53.2562|5.5481|1.0|Firdgum niveau 4|2009-10-13T00:00:00|
NL|FR010|53.142396|5.886762|-0.5|Warten (niveau 0)|2019-06-14T00:00:00|
NL|FR011|53.142396|5.886762|-0.5|Warten (niveau 1)|2019-06-14T00:00:00|
NL|FR012|53.142396|5.886762|-0.5|Warten (niveau 2)|2019-06-14T00:00:00|
NL|FR013|53.142396|5.886762|-0.5|Warten (niveau 3)|2019-06-14T00:00:00|
NL|FR014|53.142396|5.886762|-0.5|Warten (niveau 4)|2019-06-14T00:00:00|
NL|FR020|52.855913|5.930424|-0.7|Oldetrijne (niveau 0)|2019-06-14T00:00:00|
NL|FR021|52.855913|5.930424|-0.7|Oldetrijne (niveau 1)|2019-06-14T00:00:00|
NL|FR022|52.855913|5.930424|-0.7|Oldetrijne (niveau 2)|2019-06-14T00:00:00|
NL|FR023|52.855913|5.930424|-0.7|Oldetrijne (niveau 3)|2019-06-14T00:00:00|
NL|FR024|52.855913|5.930424|-0.7|Oldetrijne (niveau 4)|2019-06-14T00:00:00|
NL|FR030|52.981469|5.712568|-0.9|Boornzwaag (niveau 0)|2019-06-14T00:00:00|
NL|FR031|52.981469|5.712568|-0.9|Boornzwaag (niveau 1)|2019-06-14T00:00:00|
NL|FR032|52.981469|5.712568|-0.9|Boornzwaag (niveau 2)|2019-06-14T00:00:00|
NL|FR033|52.981469|5.712568|-0.9|Boornzwaag (niveau 3)|2019-06-14T00:00:00|
NL|FR034|52.981469|5.712568|-0.9|Boornzwaag (niveau 4)|2019-06-14T00:00:00|
NL|FSW1|53.2135|7.1195|1.0|Finsterwolde niveau 1|1995-05-05T00:00:00|
NL|FSW2|53.2135|7.1195|1.0|Finsterwolde niveau 2|1995-05-05T00:00:00|
NL|FSW3|53.2135|7.1195|1.0|Finsterwolde niveau 3|1995-05-05T00:00:00|
NL|FSW4|53.2135|7.1195|1.0|Finsterwolde niveau 4|1995-05-05T00:00:00|2016-06-14T08:00:00
NL|FSW5|53.2135|7.1195|1.0|Finsterwolde niveau 5|1995-05-05T00:00:00|
NL|G010|53.442535|6.731191|2.0|Uithuizermeeden (niveau 0)|2015-02-10T00:00:00|
NL|G011|53.442535|6.731191|2.0|Uithuizermeeden (niveau 1)|2015-02-10T00:00:00|
NL|G012|53.442535|6.731191|2.0|Uithuizermeeden (niveau 2)|2015-02-10T00:00:00|
NL|G013|53.442535|6.731191|2.0|Uithuizermeeden (niveau 3)|2015-02-10T00:00:00|
NL|G014|53.442535|6.731191|2.0|Uithuizermeeden (niveau 4)|2015-02-10T00:00:00|
NL|G020|53.44901|6.805842|2.0|Eemshaven (niveau 0)|2015-02-10T00:00:00|
NL|G021|53.44901|6.805842|2.0|Eemshaven (niveau 1)|2015-02-10T00:00:00|
NL|G022|53.44901|6.805842|2.0|Eemshaven (niveau 2)|2015-02-10T00:00:00|
NL|G023|53.44901|6.805842|2.0|Eemshaven (niveau 3)|2015-02-10T00:00:00|
NL|G024|53.44901|6.805842|2.0|Eemshaven (niveau 4)|2015-02-10T00:00:00|
NL|G030|53.415886|6.597559|2.0|Usquert (niveau 0)|2015-02-10T00:00:00|
NL|G031|53.415886|6.597559|2.0|Usquert (niveau 1)|2015-02-10T00:00:00|
NL|G032|53.415886|6.597559|2.0|Usquert (niveau 2)|2015-02-10T00:00:00|
NL|G033|53.415886|6.597559|2.0|Usquert (niveau 3)|2015-02-10T00:00:00|
NL|G034|53.415886|6.597559|2.0|Usquert (niveau 4)|2015-02-10T00:00:00|
NL|G040|53.41469|6.67472|2.0|Uithuizen (niveau 0)|2015-06-04T00:00:00|
NL|G041|53.41469|6.67472|2.0|Uithuizen (niveau 1)|2015-06-04T00:00:00|
NL|G042|53.41469|6.67472|2.0|Uithuizen (niveau 2)|2015-06-04T00:00:00|
NL|G043|53.41469|6.67472|2.0|Uithuizen (niveau 3)|2015-06-04T00:00:00|
NL|G044|53.41469|6.67472|2.0|Uithuizen (niveau 4)|2015-06-04T00:00:00|
NL|G050|53.418438|6.771304|2.0|Roodeschool (niveau 0)|2015-07-16T00:00:00|
NL|G051|53.418438|6.771304|2.0|Roodeschool (niveau 1)|2015-07-16T00:00:00|
NL|G052|53.418438|6.771304|2.0|Roodeschool (niveau 2)|2015-07-16T00:00:00|
NL|G053|53.418438|6.771304|2.0|Roodeschool (niveau 3)|2015-07-16T00:00:00|
NL|G054|53.418438|6.771304|2.0|Roodeschool (niveau 4)|2015-07-16T00:00:00|
NL|G060|53.411095|6.870878|2.0|Spijk - Vierhuizen (niveau 0)|2015-09-15T00:00:00|
NL|G061|53.411095|6.870878|2.0|Spijk - Vierhuizen (niveau 1)|2015-09-15T00:00:00|
NL|G062|53.411095|6.870878|2.0|Spijk - Vierhuizen (niveau 2)|2015-09-15T00:00:00|
NL|G063|53.411095|6.870878|2.0|Spijk - Vierhuizen (niveau 3)|2015-09-15T00:00:00|
NL|G064|53.411095|6.870878|2.0|Spijk - Vierhuizen (niveau 4)|2015-09-15T00:00:00|
NL|G070|53.39458|6.545769|2.0|Warffum (niveau 0)|2015-09-24T00:00:00|
NL|G071|53.39458|6.545769|2.0|Warffum (niveau 1)|2015-09-24T00:00:00|
NL|G072|53.39458|6.545769|2.0|Warffum (niveau 2)|2015-09-24T00:00:00|
NL|G073|53.39458|6.545769|2.0|Warffum (niveau 3)|2015-09-24T00:00:00|
NL|G074|53.39458|6.545769|2.0|Warffum (niveau 4)|2015-09-24T00:00:00|
NL|G080|53.395447|6.643896|2.0|Rottum (niveau 0)|2015-09-22T00:00:00|
NL|G081|53.395447|6.643896|2.0|Rottum (niveau 1)|2015-09-22T00:00:00|
NL|G082|53.395447|6.643896|2.0|Rottum (niveau 2)|2015-09-22T00:00:00|
NL|G083|53.395447|6.643896|2.0|Rottum (niveau 3)|2015-09-22T00:00:00|
NL|G084|53.395447|6.643896|2.0|Rottum (niveau 4)|2015-09-22T00:00:00|
NL|G090|53.387764|6.724525|2.0|Oldenzijl (niveau 0)|2015-09-18T00:00:00|
NL|G091|53.387764|6.724525|2.0|Oldenzijl (niveau 1)|2015-09-18T00:00:00|
NL|G092|53.387764|6.724525|2.0|Oldenzijl (niveau 2)|2015-09-18T00:00:00|
NL|G093|53.387764|6.724525|2.0|Oldenzijl (niveau 3)|2015-09-18T00:00:00|
NL|G094|53.387764|6.724525|2.0|Oldenzijl (niveau 4)|2015-09-18T00:00:00|
NL|G100|53.37847|6.804435|2.0|Godlinze (niveau 0)|2015-09-08T00:00:00|
NL|G101|53.37847|6.804435|2.0|Godlinze (niveau 1)|2015-09-08T00:00:00|
NL|G102|53.37847|6.804435|2.0|Godlinze (niveau 2)|2015-09-08T00:00:00|
NL|G103|53.37847|6.804435|2.0|Godlinze (niveau 3)|2015-09-08T00:00:00|
NL|G104|53.37847|6.804435|2.0|Godlinze (niveau 4)|2015-09-08T00:00:00|
NL|G110|53.366917|6.889139|2.0|Holwierde (niveau 0)|2015-12-08T00:00:00|
NL|G111|53.366917|6.889139|2.0|Holwierde (niveau 1)|2015-12-08T00:00:00|
NL|G112|53.366917|6.889139|2.0|Holwierde (niveau 2)|2015-12-08T00:00:00|
NL|G113|53.366917|6.889139|2.0|Holwierde (niveau 3)|2015-12-08T00:00:00|
NL|G114|53.366917|6.889139|2.0|Holwierde (niveau 4)|2015-12-08T00:00:00|
NL|G120|53.36992|6.57139|2.0|Warffum (niveau 0)|2017-10-05T00:00:00|
NL|G121|53.36992|6.57139|2.0|Warffum (niveau 1)|2017-10-05T00:00:00|
NL|G122|53.36992|6.57139|2.0|Warffum (niveau 2)|2017-10-05T00:00:00|
NL|G123|53.36992|6.57139|2.0|Warffum (niveau 3)|2017-10-05T00:00:00|
NL|G124|53.36992|6.57139|2.0|Warffum (niveau 4)|2017-10-05T00:00:00|
NL|G130|53.34894|6.668564|2.0|Middelstum (niveau 0)|2015-09-22T00:00:00|
NL|G131|53.34894|6.668564|2.0|Middelstum (niveau 1)|2015-09-22T00:00:00|
NL|G132|53.34894|6.668564|2.0|Middelstum (niveau 2)|2015-09-22T00:00:00|
NL|G133|53.34894|6.668564|2.0|Middelstum (niveau 3)|2015-09-22T00:00:00|
NL|G134|53.34894|6.668564|2.0|Middelstum (niveau 4)|2015-09-22T00:00:00|
NL|G140|53.358604|6.770835|2.0|t Zandt GN (niveau 0)|2015-02-11T00:00:00|
NL|G141|53.358604|6.770835|2.0|t Zandt GN (niveau 1)|2015-02-11T00:00:00|
NL|G142|53.358604|6.770835|2.0|t Zandt GN (niveau 2)|2015-02-11T00:00:00|
NL|G143|53.358604|6.770835|2.0|t Zandt GN (niveau 3)|2015-02-11T00:00:00|
NL|G144|53.358604|6.770835|2.0|t Zandt GN (niveau 4)|2015-02-11T00:00:00|
NL|G160|53.338528|6.531397|2.0|Winsum (niveau 0)|2015-09-17T00:00:00|
NL|G161|53.338528|6.531397|2.0|Winsum (niveau 1)|2015-09-17T00:00:00|
NL|G162|53.338528|6.531397|2.0|Winsum (niveau 2)|2015-09-17T00:00:00|
NL|G163|53.338528|6.531397|2.0|Winsum (niveau 3)|2015-09-17T00:00:00|
NL|G164|53.338528|6.531397|2.0|Winsum (niveau 4)|2015-09-17T00:00:00|
NL|G170|53.336197|6.636346|2.0|Middelstum (niveau 0)|2015-04-29T00:00:00|
NL|G171|53.336197|6.636346|2.0|Middelstum (niveau 1)|2015-04-29T00:00:00|
NL|G172|53.336197|6.636346|2.0|Middelstum (niveau 2)|2015-04-29T00:00:00|
NL|G173|53.336197|6.636346|2.0|Middelstum (niveau 3)|2015-04-29T00:00:00|
NL|G174|53.336197|6.636346|2.0|Middelstum (niveau 4)|2015-04-29T00:00:00|
NL|G180|53.330624|6.721702|2.0|Loppersum (niveau 0)|2015-09-18T00:00:00|
NL|G181|53.330624|6.721702|2.0|Loppersum (niveau 1)|2015-09-18T00:00:00|
NL|G182|53.330624|6.721702|2.0|Loppersum (niveau 2)|2015-09-18T00:00:00|
NL|G183|53.330624|6.721702|2.0|Loppersum (niveau 3)|2015-09-18T00:00:00|
NL|G184|53.330624|6.721702|2.0|Loppersum (niveau 4)|2015-09-18T00:00:00|
NL|G190|53.337814|6.817032|2.0|Oostwijtwerd (niveau 0)|2015-09-18T00:00:00|
NL|G191|53.337814|6.817032|2.0|Oostwijtwerd (niveau 1)|2015-09-18T00:00:00|
NL|G192|53.337814|6.817032|2.0|Oostwijtwerd (niveau 2)|2015-09-18T00:00:00|
NL|G193|53.337814|6.817032|2.0|Oostwijtwerd (niveau 3)|2015-09-18T00:00:00|
NL|G194|53.337814|6.817032|2.0|Oostwijtwerd (niveau 4)|2015-09-18T00:00:00|
NL|G200|53.335297|6.895165|2.0|Biessum (niveau 0)|2015-05-28T00:00:00|
NL|G201|53.335297|6.895165|2.0|Biessum (niveau 1)|2015-05-28T00:00:00|
NL|G202|53.335297|6.895165|2.0|Biessum (niveau 2)|2015-05-28T00:00:00|
NL|G203|53.335297|6.895165|2.0|Biessum (niveau 3)|2015-05-28T00:00:00|
NL|G204|53.335297|6.895165|2.0|Biessum (niveau 4)|2015-05-28T00:00:00|
NL|G210|53.313374|6.593737|2.0|Vroetende mol (niveau 0)|2015-09-17T00:00:00|
NL|G211|53.313374|6.593737|2.0|Vroetende mol (niveau 1)|2015-09-17T00:00:00|
NL|G212|53.313374|6.593737|2.0|Vroetende mol (niveau 2)|2015-09-17T00:00:00|
NL|G213|53.313374|6.593737|2.0|Vroetende mol (niveau 3)|2015-09-17T00:00:00|
NL|G214|53.313374|6.593737|2.0|Vroetende mol (niveau 4)|2015-09-17T00:00:00|
NL|G220|53.31035|6.677621|2.0|Stedum (niveau 0)|2015-02-10T00:00:00|
NL|G221|53.31035|6.677621|2.0|Stedum (niveau 1)|2015-02-10T00:00:00|
NL|G222|53.31035|6.677621|2.0|Stedum (niveau 2)|2015-02-10T00:00:00|
NL|G223|53.31035|6.677621|2.0|Stedum (niveau 3)|2015-02-10T00:00:00|
NL|G224|53.31035|6.677621|2.0|Stedum (niveau 4)|2015-02-10T00:00:00|
NL|G230|53.30949|6.767527|2.0|Garrelsweer (niveau 0)|2015-02-16T00:00:00|
NL|G231|53.30949|6.767527|2.0|Garrelsweer (niveau 1)|2015-02-16T00:00:00|
NL|G232|53.30949|6.767527|2.0|Garrelsweer (niveau 2)|2015-02-16T00:00:00|
NL|G233|53.30949|6.767527|2.0|Garrelsweer (niveau 3)|2015-02-16T00:00:00|
NL|G234|53.30949|6.767527|2.0|Garrelsweer (niveau 4)|2015-02-16T00:00:00|
NL|G240|53.289974|6.856169|2.0|Steendam (niveau 0)|2014-11-12T00:00:00|
NL|G241|53.289974|6.856169|2.0|Steendam (niveau 1)|2014-11-12T00:00:00|
NL|G242|53.289974|6.856169|2.0|Steendam (niveau 2)|2014-11-12T00:00:00|
NL|G243|53.289974|6.856169|2.0|Steendam (niveau 3)|2014-11-12T00:00:00|
NL|G244|53.289974|6.856169|2.0|Steendam (niveau 4)|2014-11-12T00:00:00|
NL|G250|53.308117|6.943312|2.0|Weiwerd (niveau 0)|2017-05-12T00:00:00|
NL|G251|53.308117|6.943312|2.0|Weiwerd (niveau 1)|2017-05-12T00:00:00|
NL|G252|53.308117|6.943312|2.0|Weiwerd (niveau 2)|2017-05-12T00:00:00|
NL|G253|53.308117|6.943312|2.0|Weiwerd (niveau 3)|2017-05-12T00:00:00|
NL|G254|53.308117|6.943312|2.0|Weiwerd (niveau 4)|2017-05-12T00:00:00|
NL|G260|53.28208|6.545806|2.0|Adorp (niveau 0)|2015-10-22T00:00:00|
NL|G261|53.28208|6.545806|2.0|Adorp (niveau 1)|2015-10-22T00:00:00|
NL|G262|53.28208|6.545806|2.0|Adorp (niveau 2)|2015-10-22T00:00:00|
NL|G263|53.28208|6.545806|2.0|Adorp (niveau 3)|2015-10-22T00:00:00|
NL|G264|53.28208|6.545806|2.0|Adorp (niveau 4)|2015-10-22T00:00:00|
NL|G270|53.28318|6.628118|2.0|Ellerhuizen (niveau 0)|2015-11-27T00:00:00|
NL|G271|53.28318|6.628118|2.0|Ellerhuizen (niveau 1)|2015-11-27T00:00:00|
NL|G272|53.28318|6.628118|2.0|Ellerhuizen (niveau 2)|2015-11-27T00:00:00|
NL|G273|53.28318|6.628118|2.0|Ellerhuizen (niveau 3)|2015-11-27T00:00:00|
NL|G274|53.28318|6.628118|2.0|Ellerhuizen (niveau 4)|2015-11-27T00:00:00|
NL|G280|53.27221|6.729164|2.0|Woltersum (niveau 0)|2016-03-28T00:00:00|
NL|G281|53.27221|6.729164|2.0|Woltersum (niveau 1)|2016-03-28T00:00:00|
NL|G282|53.27221|6.729164|2.0|Woltersum (niveau 2)|2016-03-28T00:00:00|
NL|G283|53.27221|6.729164|2.0|Woltersum (niveau 3)|2016-03-28T00:00:00|
NL|G284|53.27221|6.729164|2.0|Woltersum (niveau 4)|2016-03-28T00:00:00|
NL|G290|53.281406|6.786966|2.0|Overschild (niveau 0)|2015-09-22T00:00:00|
NL|G291|53.281406|6.786966|2.0|Overschild (niveau 1)|2015-09-22T00:00:00|
NL|G292|53.281406|6.786966|2.0|Overschild (niveau 2)|2015-09-22T00:00:00|
NL|G293|53.281406|6.786966|2.0|Overschild (niveau 3)|2015-09-22T00:00:00|
NL|G294|53.281406|6.786966|2.0|Overschild (niveau 4)|2015-09-22T00:00:00|
NL|G300|53.27917|6.895145|2.0|Meedhuizen (niveau 0)|2014-10-23T00:00:00|
NL|G301|53.27917|6.895145|2.0|Meedhuizen (niveau 1)|2014-10-23T00:00:00|
NL|G302|53.27917|6.895145|2.0|Meedhuizen (niveau 2)|2014-10-23T00:00:00|
NL|G303|53.27917|6.895145|2.0|Meedhuizen (niveau 3)|2014-10-23T00:00:00|
NL|G304|53.27917|6.895145|2.0|Meedhuizen (niveau 4)|2014-10-23T00:00:00|
NL|G310|53.296196|7.021759|2.0|Borgsweer (niveau 0)|2015-11-27T00:00:00|
NL|G311|53.296196|7.021759|2.0|Borgsweer (niveau 1)|2015-11-27T00:00:00|
NL|G312|53.296196|7.021759|2.0|Borgsweer (niveau 2)|2015-11-27T00:00:00|
NL|G313|53.296196|7.021759|2.0|Borgsweer (niveau 3)|2015-11-27T00:00:00|
NL|G314|53.296196|7.021759|2.0|Borgsweer (niveau 4)|2015-11-27T00:00:00|
NL|G320|53.24981|6.57919|2.0|Groningen - Hornbach (niveau 0)|2015-11-27T00:00:00|
NL|G321|53.24981|6.57919|2.0|Groningen - Hornbach (niveau 1)|2015-11-27T00:00:00|
NL|G322|53.24981|6.57919|2.0|Groningen - Hornbach (niveau 2)|2015-11-27T00:00:00|
NL|G323|53.24981|6.57919|2.0|Groningen - Hornbach (niveau 3)|2015-11-27T00:00:00|
NL|G324|53.24981|6.57919|2.0|Groningen - Hornbach (niveau 4)|2015-11-27T00:00:00|
NL|G330|53.24991|6.670763|2.0|Garmerwolde (niveau 0)|2016-01-22T00:00:00|
NL|G331|53.24991|6.670763|2.0|Garmerwolde (niveau 1)|2016-01-22T00:00:00|
NL|G332|53.24991|6.670763|2.0|Garmerwolde (niveau 2)|2016-01-22T00:00:00|
NL|G333|53.24991|6.670763|2.0|Garmerwolde (niveau 3)|2016-01-22T00:00:00|
NL|G334|53.24991|6.670763|2.0|Garmerwolde (niveau 4)|2016-01-22T00:00:00|
NL|G340|53.25252|6.76508|2.0|Overschild (niveau 0)|2014-10-23T00:00:00|
NL|G341|53.25252|6.76508|2.0|Overschild (niveau 1)|2014-10-23T00:00:00|
NL|G342|53.25252|6.76508|2.0|Overschild (niveau 2)|2014-10-23T00:00:00|
NL|G343|53.25252|6.76508|2.0|Overschild (niveau 3)|2014-10-23T00:00:00|
NL|G344|53.25252|6.76508|2.0|Overschild (niveau 4)|2014-10-23T00:00:00|
NL|G350|53.254936|6.862136|2.0|Sidderburen (niveau 0)|2017-04-04T00:00:00|
NL|G351|53.254936|6.862136|2.0|Sidderburen (niveau 1)|2017-04-04T00:00:00|
NL|G352|53.254936|6.862136|2.0|Sidderburen (niveau 2)|2017-04-04T00:00:00|
NL|G353|53.254936|6.862136|2.0|Sidderburen (niveau 3)|2017-04-04T00:00:00|
NL|G354|53.254936|6.862136|2.0|Sidderburen (niveau 4)|2017-04-04T00:00:00|
NL|G360|53.26505|6.924454|2.0|Wagenborgen (niveau 0)|2015-12-07T00:00:00|
NL|G361|53.26505|6.924454|2.0|Wagenborgen (niveau 1)|2015-12-07T00:00:00|
NL|G362|53.26505|6.924454|2.0|Wagenborgen (niveau 2)|2015-12-07T00:00:00|
NL|G363|53.26505|6.924454|2.0|Wagenborgen (niveau 3)|2015-12-07T00:00:00|
NL|G364|53.26505|6.924454|2.0|Wagenborgen (niveau 4)|2015-12-07T00:00:00|
NL|G370|53.273952|7.035|2.0|Woldendorp (niveau 0)|2015-12-02T00:00:00|
NL|G371|53.273952|7.035|2.0|Woldendorp (niveau 1)|2015-12-02T00:00:00|
NL|G372|53.273952|7.035|2.0|Woldendorp (niveau 2)|2015-12-02T00:00:00|
NL|G373|53.273952|7.035|2.0|Woldendorp (niveau 3)|2015-12-02T00:00:00|
NL|G374|53.273952|7.035|2.0|Woldendorp (niveau 4)|2015-12-02T00:00:00|
NL|G380|53.200512|6.547563|2.0|Groningen - gasunie (niveau 0)|2016-04-11T00:00:00|
NL|G381|53.200512|6.547563|2.0|Groningen - gasunie (niveau 1)|2016-04-11T00:00:00|
NL|G382|53.200512|6.547563|2.0|Groningen - gasunie (niveau 2)|2016-04-11T00:00:00|
NL|G383|53.200512|6.547563|2.0|Groningen - gasunie (niveau 3)|2016-04-11T00:00:00|
NL|G384|53.200512|6.547563|2.0|Groningen - gasunie (niveau 4)|2016-04-11T00:00:00|
NL|G390|53.22525|6.724121|2.0|Woudbloemsloot (niveau 0)|2014-10-24T00:00:00|
NL|G391|53.22525|6.724121|2.0|Woudbloemsloot (niveau 1)|2014-10-24T00:00:00|
NL|G392|53.22525|6.724121|2.0|Woudbloemsloot (niveau 2)|2014-10-24T00:00:00|
NL|G393|53.22525|6.724121|2.0|Woudbloemsloot (niveau 3)|2014-10-24T00:00:00|
NL|G394|53.22525|6.724121|2.0|Woudbloemsloot (niveau 4)|2014-10-24T00:00:00|
NL|G400|53.22501|6.809874|2.0|Schildwolde (niveau 0)|2014-10-24T00:00:00|
NL|G401|53.22501|6.809874|2.0|Schildwolde (niveau 1)|2014-10-24T00:00:00|
NL|G402|53.22501|6.809874|2.0|Schildwolde (niveau 2)|2014-10-24T00:00:00|
NL|G403|53.22501|6.809874|2.0|Schildwolde (niveau 3)|2014-10-24T00:00:00|
NL|G404|53.22501|6.809874|2.0|Schildwolde (niveau 4)|2014-10-24T00:00:00|
NL|G410|53.223434|6.891867|2.0|Noordbroek (niveau 0)|2015-09-22T00:00:00|
NL|G411|53.223434|6.891867|2.0|Noordbroek (niveau 1)|2015-09-22T00:00:00|
NL|G412|53.223434|6.891867|2.0|Noordbroek (niveau 2)|2015-09-22T00:00:00|
NL|G413|53.223434|6.891867|2.0|Noordbroek (niveau 3)|2015-09-22T00:00:00|
NL|G414|53.223434|6.891867|2.0|Noordbroek (niveau 4)|2015-09-22T00:00:00|
NL|G420|53.221687|6.988649|2.0|Nieuwolda (niveau 0)|2015-02-11T00:00:00|
NL|G421|53.221687|6.988649|2.0|Nieuwolda (niveau 1)|2015-02-11T00:00:00|
NL|G422|53.221687|6.988649|2.0|Nieuwolda (niveau 2)|2015-02-11T00:00:00|
NL|G423|53.221687|6.988649|2.0|Nieuwolda (niveau 3)|2015-02-11T00:00:00|
NL|G424|53.221687|6.988649|2.0|Nieuwolda (niveau 4)|2015-02-11T00:00:00|
NL|G430|53.231853|7.079074|2.0|Finsterwolde (niveau 0)|2015-06-25T00:00:00|
NL|G431|53.231853|7.079074|2.0|Finsterwolde (niveau 1)|2015-06-25T00:00:00|
NL|G432|53.231853|7.079074|2.0|Finsterwolde (niveau 2)|2015-06-25T00:00:00|
NL|G433|53.231853|7.079074|2.0|Finsterwolde (niveau 3)|2015-06-25T00:00:00|
NL|G434|53.231853|7.079074|2.0|Finsterwolde (niveau 4)|2015-06-25T00:00:00|
NL|G440|53.204193|6.683958|2.0|Harkstede (niveau 0)|2015-02-11T00:00:00|
NL|G441|53.204193|6.683958|2.0|Harkstede (niveau 1)|2015-02-11T00:00:00|
NL|G442|53.204193|6.683958|2.0|Harkstede (niveau 2)|2015-02-11T00:00:00|
NL|G443|53.204193|6.683958|2.0|Harkstede (niveau 3)|2015-02-11T00:00:00|
NL|G444|53.204193|6.683958|2.0|Harkstede (niveau 4)|2015-02-11T00:00:00|
NL|G450|53.199535|6.764478|2.0|Ruiten (niveau 0)|2014-10-23T00:00:00|
NL|G451|53.199535|6.764478|2.0|Ruiten (niveau 1)|2014-10-23T00:00:00|
NL|G452|53.199535|6.764478|2.0|Ruiten (niveau 2)|2014-10-23T00:00:00|
NL|G453|53.199535|6.764478|2.0|Ruiten (niveau 3)|2014-10-23T00:00:00|
NL|G454|53.199535|6.764478|2.0|Ruiten (niveau 4)|2014-10-23T00:00:00|
NL|G460|53.19783|6.849796|2.0|Noordbroek (niveau 0)|2014-10-31T00:00:00|
NL|G461|53.19783|6.849796|2.0|Noordbroek (niveau 1)|2014-10-31T00:00:00|
NL|G462|53.19783|6.849796|2.0|Noordbroek (niveau 2)|2014-10-31T00:00:00|
NL|G463|53.19783|6.849796|2.0|Noordbroek (niveau 3)|2014-10-31T00:00:00|
NL|G464|53.19783|6.849796|2.0|Noordbroek (niveau 4)|2014-10-31T00:00:00|
NL|G470|53.19635|6.941322|2.0|Nieuw Scheemda (niveau 0)|2016-03-28T00:00:00|
NL|G471|53.19635|6.941322|2.0|Nieuw Scheemda (niveau 1)|2016-03-28T00:00:00|
NL|G472|53.19635|6.941322|2.0|Nieuw Scheemda (niveau 2)|2016-03-28T00:00:00|
NL|G473|53.19635|6.941322|2.0|Nieuw Scheemda (niveau 3)|2016-03-28T00:00:00|
NL|G474|53.19635|6.941322|2.0|Nieuw Scheemda (niveau 4)|2016-03-28T00:00:00|
NL|G480|53.19726|7.028954|2.0|Midwolda (niveau 0)|2016-06-21T00:00:00|
NL|G481|53.19726|7.028954|2.0|Midwolda (niveau 1)|2016-06-21T00:00:00|
NL|G482|53.19726|7.028954|2.0|Midwolda (niveau 2)|2016-06-21T00:00:00|
NL|G483|53.19726|7.028954|2.0|Midwolda (niveau 3)|2016-06-21T00:00:00|
NL|G484|53.19726|7.028954|2.0|Midwolda (niveau 4)|2016-06-21T00:00:00|
NL|G490|53.17647|6.730598|2.0|Kolham (niveau 0)|2014-10-23T00:00:00|
NL|G491|53.17647|6.730598|2.0|Kolham (niveau 1)|2014-10-23T00:00:00|
NL|G492|53.17647|6.730598|2.0|Kolham (niveau 2)|2014-10-23T00:00:00|
NL|G493|53.17647|6.730598|2.0|Kolham (niveau 3)|2014-10-23T00:00:00|
NL|G494|53.17647|6.730598|2.0|Kolham (niveau 4)|2014-10-23T00:00:00|
NL|G500|53.174526|6.809343|2.0|Sappemeer (niveau 0)|2015-08-28T00:00:00|
NL|G501|53.174526|6.809343|2.0|Sappemeer (niveau 1)|2015-08-28T00:00:00|
NL|G502|53.174526|6.809343|2.0|Sappemeer (niveau 2)|2015-08-28T00:00:00|
NL|G503|53.174526|6.809343|2.0|Sappemeer (niveau 3)|2015-08-28T00:00:00|
NL|G504|53.174526|6.809343|2.0|Sappemeer (niveau 4)|2015-08-28T00:00:00|
NL|G510|53.1732|6.88481|2.0|Zuidbroek (niveau 0)|2015-02-11T00:00:00|
NL|G511|53.1732|6.88481|2.0|Zuidbroek (niveau 1)|2015-02-11T00:00:00|
NL|G512|53.1732|6.88481|2.0|Zuidbroek (niveau 2)|2015-02-11T00:00:00|
NL|G513|53.1732|6.88481|2.0|Zuidbroek (niveau 3)|2015-02-11T00:00:00|
NL|G514|53.1732|6.88481|2.0|Zuidbroek (niveau 4)|2015-02-11T00:00:00|
NL|G520|53.16989|6.983663|2.0|Scheemda (niveau 0)|2015-02-12T00:00:00|
NL|G521|53.16989|6.983663|2.0|Scheemda (niveau 1)|2015-02-12T00:00:00|
NL|G522|53.16989|6.983663|2.0|Scheemda (niveau 2)|2015-02-12T00:00:00|
NL|G523|53.16989|6.983663|2.0|Scheemda (niveau 3)|2015-02-12T00:00:00|
NL|G524|53.16989|6.983663|2.0|Scheemda (niveau 4)|2015-02-12T00:00:00|
NL|G530|53.167362|7.08012|2.0|Beerta (niveau 0)|2015-10-29T00:00:00|
NL|G531|53.167362|7.08012|2.0|Beerta (niveau 1)|2015-10-29T00:00:00|
NL|G532|53.167362|7.08012|2.0|Beerta (niveau 2)|2015-10-29T00:00:00|
NL|G533|53.167362|7.08012|2.0|Beerta (niveau 3)|2015-10-29T00:00:00|
NL|G534|53.167362|7.08012|2.0|Beerta (niveau 4)|2015-10-29T00:00:00|
NL|G540|53.124283|6.757957|2.0|Kielwinde (niveau 0)|2015-09-15T00:00:00|
NL|G541|53.124283|6.757957|2.0|Kielwinde (niveau 1)|2015-09-15T00:00:00|
NL|G542|53.124283|6.757957|2.0|Kielwinde (niveau 2)|2015-09-15T00:00:00|
NL|G543|53.124283|6.757957|2.0|Kielwinde (niveau 3)|2015-09-15T00:00:00|
NL|G544|53.124283|6.757957|2.0|Kielwinde (niveau 4)|2015-09-15T00:00:00|
NL|G550|53.143345|6.846056|2.0|Muntendam (niveau 0)|2015-02-12T00:00:00|
NL|G551|53.143345|6.846056|2.0|Muntendam (niveau 1)|2015-02-12T00:00:00|
NL|G552|53.143345|6.846056|2.0|Muntendam (niveau 2)|2015-02-12T00:00:00|
NL|G553|53.143345|6.846056|2.0|Muntendam (niveau 3)|2015-02-12T00:00:00|
NL|G554|53.143345|6.846056|2.0|Muntendam (niveau 4)|2015-02-12T00:00:00|
NL|G560|53.14844|6.930871|2.0|Meeden (niveau 0)|2015-02-12T00:00:00|
NL|G561|53.14844|6.930871|2.0|Meeden (niveau 1)|2015-02-12T00:00:00|
NL|G562|53.14844|6.930871|2.0|Meeden (niveau 2)|2015-02-12T00:00:00|
NL|G563|53.14844|6.930871|2.0|Meeden (niveau 3)|2015-02-12T00:00:00|
NL|G564|53.14844|6.930871|2.0|Meeden (niveau 4)|2015-02-12T00:00:00|
NL|G570|53.13513|7.022222|2.0|Winschoten (niveau 0)|2015-02-12T00:00:00|
NL|G571|53.13513|7.022222|2.0|Winschoten (niveau 1)|2015-02-12T00:00:00|
NL|G572|53.13513|7.022222|2.0|Winschoten (niveau 2)|2015-02-12T00:00:00|
NL|G573|53.13513|7.022222|2.0|Winschoten (niveau 3)|2015-02-12T00:00:00|
NL|G574|53.13513|7.022222|2.0|Winschoten (niveau 4)|2015-02-12T00:00:00|
NL|G580|53.110264|6.907052|2.0|Veendam (niveau 0)|2015-06-30T00:00:00|
NL|G581|53.110264|6.907052|2.0|Veendam (niveau 1)|2015-06-30T00:00:00|
NL|G582|53.110264|6.907052|2.0|Veendam (niveau 2)|2015-06-30T00:00:00|
NL|G583|53.110264|6.907052|2.0|Veendam (niveau 3)|2015-06-30T00:00:00|
NL|G584|53.110264|6.907052|2.0|Veendam (niveau 4)|2015-06-30T00:00:00|
NL|G590|53.116028|6.987698|2.0|Oude Pekela (niveau 0)|2015-12-04T00:00:00|
NL|G591|53.116028|6.987698|2.0|Oude Pekela (niveau 1)|2015-12-04T00:00:00|
NL|G592|53.116028|6.987698|2.0|Oude Pekela (niveau 2)|2015-12-04T00:00:00|
NL|G593|53.116028|6.987698|2.0|Oude Pekela (niveau 3)|2015-12-04T00:00:00|
NL|G594|53.116028|6.987698|2.0|Oude Pekela (niveau 4)|2015-12-04T00:00:00|
NL|G600|53.297935|7.075193|2.0|Ter Munten (niveau 0)|2015-08-28T00:00:00|
NL|G601|53.297935|7.075193|2.0|Ter Munten (niveau 1)|2015-08-28T00:00:00|
NL|G602|53.297935|7.075193|2.0|Ter Munten (niveau 2)|2015-08-28T00:00:00|
NL|G603|53.297935|7.075193|2.0|Ter Munten (niveau 3)|2015-08-28T00:00:00|
NL|G604|53.297935|7.075193|2.0|Ter Munten (niveau 4)|2015-08-28T00:00:00|
NL|G610|53.381855|6.681333|2.0|Zandeweer (niveau 0)|2015-11-27T00:00:00|
NL|G611|53.381855|6.681333|2.0|Zandeweer (niveau 1)|2015-11-27T00:00:00|
NL|G612|53.381855|6.681333|2.0|Zandeweer (niveau 2)|2015-11-27T00:00:00|
NL|G613|53.381855|6.681333|2.0|Zandeweer (niveau 3)|2015-11-27T00:00:00|
NL|G614|53.381855|6.681333|2.0|Zandeweer (niveau 4)|2015-11-27T00:00:00|
NL|G620|53.38698|6.841949|2.0|Spijk (niveau 0)|2015-09-08T00:00:00|
NL|G621|53.38698|6.841949|2.0|Spijk (niveau 1)|2015-09-08T00:00:00|
NL|G622|53.38698|6.841949|2.0|Spijk (niveau 2)|2015-09-08T00:00:00|
NL|G623|53.38698|6.841949|2.0|Spijk (niveau 3)|2015-09-08T00:00:00|
NL|G624|53.38698|6.841949|2.0|Spijk (niveau 4)|2015-09-08T00:00:00|
NL|G630|53.33143|6.910878|2.0|Delfzijl (niveau 0)|2015-09-15T00:00:00|
NL|G631|53.33143|6.910878|2.0|Delfzijl (niveau 1)|2015-09-15T00:00:00|
NL|G632|53.33143|6.910878|2.0|Delfzijl (niveau 2)|2015-09-15T00:00:00|
NL|G633|53.33143|6.910878|2.0|Delfzijl (niveau 3)|2015-09-15T00:00:00|
NL|G634|53.33143|6.910878|2.0|Delfzijl (niveau 4)|2015-09-15T00:00:00|
NL|G640|53.220726|7.038012|2.0|Oostwold (niveau 0)|2015-09-15T00:00:00|
NL|G641|53.220726|7.038012|2.0|Oostwold (niveau 1)|2015-09-15T00:00:00|
NL|G642|53.220726|7.038012|2.0|Oostwold (niveau 2)|2015-09-15T00:00:00|
NL|G643|53.220726|7.038012|2.0|Oostwold (niveau 3)|2015-09-15T00:00:00|
NL|G644|53.220726|7.038012|2.0|Oostwold (niveau 4)|2015-09-15T00:00:00|
NL|G650|53.169216|6.95428|2.0|Scheemda (niveau 0)|2015-11-30T00:00:00|
NL|G651|53.169216|6.95428|2.0|Scheemda (niveau 1)|2015-11-30T00:00:00|
NL|G652|53.169216|6.95428|2.0|Scheemda (niveau 2)|2015-11-30T00:00:00|
NL|G653|53.169216|6.95428|2.0|Scheemda (niveau 3)|2015-11-30T00:00:00|
NL|G654|53.169216|6.95428|2.0|Scheemda (niveau 4)|2015-11-30T00:00:00|
NL|G660|53.179398|6.585236|2.0|Haren (niveau 0)|2015-11-27T00:00:00|
NL|G661|53.179398|6.585236|2.0|Haren (niveau 1)|2015-11-27T00:00:00|
NL|G662|53.179398|6.585236|2.0|Haren (niveau 2)|2015-11-27T00:00:00|
NL|G663|53.179398|6.585236|2.0|Haren (niveau 3)|2015-11-27T00:00:00|
NL|G664|53.179398|6.585236|2.0|Haren (niveau 4)|2015-11-27T00:00:00|
NL|G670|53.32134|6.822783|2.0|Appingedam (niveau 0)|2015-10-29T00:00:00|
NL|G671|53.32134|6.822783|2.0|Appingedam (niveau 1)|2015-10-29T00:00:00|
NL|G672|53.32134|6.822783|2.0|Appingedam (niveau 2)|2015-10-29T00:00:00|
NL|G673|53.32134|6.822783|2.0|Appingedam (niveau 3)|2015-10-29T00:00:00|
NL|G674|53.32134|6.822783|2.0|Appingedam (niveau 4)|2015-10-29T00:00:00|
NL|G680|53.235077|6.63466|2.0|Ruicherbrug (niveau 0)|2015-09-16T00:00:00|
NL|G681|53.235077|6.63466|2.0|Ruicherbrug (niveau 1)|2015-09-16T00:00:00|
NL|G682|53.235077|6.63466|2.0|Ruicherbrug (niveau 2)|2015-09-16T00:00:00|
NL|G683|53.235077|6.63466|2.0|Ruicherbrug (niveau 3)|2015-09-16T00:00:00|
NL|G684|53.235077|6.63466|2.0|Ruicherbrug (niveau 4)|2015-09-16T00:00:00|
NL|G690|53.212837|6.643776|2.0|Engelbert (niveau 0)|2015-10-22T00:00:00|
NL|G691|53.212837|6.643776|2.0|Engelbert (niveau 1)|2015-10-22T00:00:00|
NL|G692|53.212837|6.643776|2.0|Engelbert (niveau 2)|2015-10-22T00:00:00|
NL|G693|53.212837|6.643776|2.0|Engelbert (niveau 3)|2015-10-22T00:00:00|
NL|G694|53.212837|6.643776|2.0|Engelbert (niveau 4)|2015-10-22T00:00:00|
NL|G700|53.2385392|6.5367816|2.0|Groningen - Universiteitscomplex (niveau 0)|2016-04-28T00:00:00|
NL|G701|53.2385392|6.5367816|2.0|Groningen - Universiteitscomplex (niveau 1)|2016-04-28T00:00:00|
NL|G702|53.2385392|6.5367816|2.0|Groningen - Universiteitscomplex (niveau 2)|2016-04-28T00:00:00|
NL|G703|53.2385392|6.5367816|2.0|Groningen - Universiteitscomplex (niveau 3)|2016-04-28T00:00:00|
NL|G704|53.2385392|6.5367816|2.0|Groningen - Universiteitscomplex (niveau 4)|2016-04-28T00:00:00|
NL|G710|53.148299|6.650657|2.0|Onnen (niveau 0)|2017-12-04T00:00:00|
NL|G720|53.246248|6.479189|2.0|Aduard (niveau 0)|2018-06-04T00:00:00|
NL|G730|53.271889|6.430106|2.0|Den Ham (niveau 0)|2017-12-04T00:00:00|
NL|G740|53.304267|6.389409|2.0|Oldenhove (niveau 0)|2017-12-04T00:00:00|
NL|G750|53.307755|6.487526|2.0|Garnwerd (niveau 0)|2017-12-04T00:00:00|
NL|G760|53.350715|6.390067|2.0|Zuurdijk (niveau 0)|2017-12-04T00:00:00|
NL|G770|53.340286|6.330437|2.0|Niekerk (niveau 0)|2017-12-04T00:00:00|
NL|G780|53.364822|6.489397|2.0|Baflo (niveau 0)|2017-12-04T00:00:00|
NL|G790|53.383557|6.331927|2.0|Hornhuizen (niveau 0)|2017-12-04T00:00:00|
NL|G800|53.415374|6.487625|2.0|Westernieland (niveau 0)|2017-12-04T00:00:00|
NL|GK010|53.290633|6.247106|1.0|Warfstermolen (niveau 0)|2019-01-11T00:00:00|
NL|GK011|53.290633|6.247106|1.0|Warfstermolen (niveau 1)|2019-01-11T00:00:00|
NL|GK012|53.290633|6.247106|1.0|Warfstermolen (niveau 2)|2019-01-11T00:00:00|
NL|GK013|53.290633|6.247106|1.0|Warfstermolen (niveau 3)|2019-01-11T00:00:00|
NL|GK014|53.290633|6.247106|1.0|Warfstermolen (niveau 4)|2019-01-11T00:00:00|
NL|GK020|53.300992|6.292682|1.0|Lauwerzijl (niveau 0)|2018-11-26T00:00:00|
NL|GK021|53.300992|6.292682|1.0|Lauwerzijl (niveau 1)|2018-11-26T00:00:00|
NL|GK022|53.300992|6.292682|1.0|Lauwerzijl (niveau 2)|2018-11-26T00:00:00|
NL|GK023|53.300992|6.292682|1.0|Lauwerzijl (niveau 3)|2018-11-26T00:00:00|
NL|GK024|53.300992|6.292682|1.0|Lauwerzijl (niveau 4)|2018-11-26T00:00:00|
NL|GK030|53.282677|6.305645|1.0|Grijpskerk (niveau 0)|2018-06-07T00:00:00|
NL|GK031|53.282677|6.305645|1.0|Grijpskerk (niveau 1)|2018-06-07T00:00:00|
NL|GK032|53.282677|6.305645|1.0|Grijpskerk (niveau 2)|2018-06-07T00:00:00|
NL|GK033|53.282677|6.305645|1.0|Grijpskerk (niveau 3)|2018-06-07T00:00:00|
NL|GK034|53.282677|6.305645|1.0|Grijpskerk (niveau 4)|2018-06-07T00:00:00|
NL|GK040|53.246199|6.326054|-1.0|Oosterzand (niveau 0)|2019-01-11T00:00:00|
NL|GK041|53.246199|6.326054|-1.0|Oosterzand (niveau 1)|2019-01-11T00:00:00|
NL|GK042|53.246199|6.326054|-1.0|Oosterzand (niveau 2)|2019-01-11T00:00:00|
NL|GK043|53.246199|6.326054|-1.0|Oosterzand (niveau 3)|2019-01-11T00:00:00|
NL|GK044|53.246199|6.326054|-1.0|Oosterzand (niveau 4)|2019-01-11T00:00:00|
NL|GUR1|51.1687|5.7846|30.0|Neeritter   n|2006-01-27T00:00:00|
NL|HGN|50.764|5.9317|135.0|HEIMANSGROEVE, NETHERLANDS|2001-06-06T00:00:00|
NL|HLB|53.146404|7.003644|0.0|Heiligerlee HLB|2018-09-01T00:00:00|
NL|HLG|53.149097|7.00712|0.0|Heiligerlee HLG|2018-09-01T00:00:00|
NL|HLH|53.140404|7.006501|0.0|Heiligerlee HLH|2018-09-01T00:00:00|
NL|HLK|53.14489|7.00975|0.0|Heiligerlee HLK|2018-09-01T00:00:00|
NL|HRKB|51.1879|6.1678|0.0|Herkenbosch|2018-06-08T00:00:00|
NL|HWF1|53.071|6.3512|7.0|Haulerwijk (Een) niveau 1|1995-06-02T00:00:00|
NL|HWF2|53.071|6.3512|7.0|Haulerwijk (Een) niveau 2|1995-06-02T00:00:00|
NL|HWF3|53.071|6.3512|7.0|Haulerwijk (Een) niveau 3|1995-06-02T00:00:00|
NL|HWF4|53.071|6.3512|7.0|Haulerwijk (Een) niveau 4|1995-06-02T00:00:00|
NL|IS103|52.91521|6.896464|6.0|Exloerveen|2011-10-19T00:00:00|
NL|IS106|52.873598|6.984754|8.0|Valthermond Seismo-Acoustic Array|2011-06-28T00:00:00|
NL|IS107|52.921273|7.096486|12.0|Ter Wisch Seismo-Acoustic Array|2012-11-14T00:00:00|
NL|IS205|52.857911|6.896994|9.0|Valthe|2011-06-09T00:00:00|
NL|IS206|52.811922|6.822437|16.0|t Haantje Seismo-Acoustic Array|2011-10-31T00:00:00|
NL|IS207|52.757875|6.972268|21.0|Nieuw-Dordrecht Seismo-Acoustic Array|2011-08-15T00:00:00|
NL|IS208|52.668713|6.917914|12.0|Schoonebeek Seismo-Acoustic Array|2012-11-14T00:00:00|
NL|IS302|52.901047|6.848749|16.0|Exloo|2011-06-09T00:00:00|
NL|IS307|52.80384|6.67971|20.0|Aalden|2011-06-09T00:00:00|
NL|IS311|52.811785|6.394668|14.0|Dwingeloo|2012-11-14T00:00:00|
NL|IS406|53.015064|6.755422|26.0|Gieten|2011-08-17T00:00:00|
NL|IS411|53.03551|6.63569|3.0|Taarlo Seismo-Acoustic Array|2012-11-14T00:00:00|
NL|IS412|52.91479|6.60611|19.0|Westerbork|2011-08-09T00:00:00|
NL|IS503|52.945337|6.850156|3.0|Buinen|2012-11-14T00:00:00|
NL|IS507|53.0687|7.0072|0.0|Alteveer|2011-08-17T00:00:00|2015-10-09T00:00:00
NL|IS508|53.239546|6.953285|-5.0|Nieuwolda Seismo-Acoustic Array|2011-08-15T00:00:00|
NL|IS509|53.408419|6.784943|-2.0|Spijk Seismo-Acoustic Array|2011-06-22T00:00:00|
NL|J01|52.76501|5.05455|-4.9|Middenmeer|2014-06-01T00:00:00|
NL|J02|52.725492|5.194842|-4.9|Andijk|2018-09-01T00:00:00|
NL|L1061|52.87542|6.98441|9.69|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1062|52.87386|6.98293|9.79|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1063|52.87386|6.9859|9.89|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1064|52.87438|6.98441|9.84|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1065|52.87438|6.98441|9.84|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1066|52.87438|6.98441|9.84|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1067|52.87438|6.98441|9.84|Valthermond Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L1071|52.9213|7.09626|8.9|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L1072|52.92051|7.09358|8.06|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L1073|52.9195|7.09605|8.94|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L1074|52.92044|7.0953|8.77|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L1075|52.92044|7.0953|8.77|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L1076|52.92044|7.0953|8.77|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L1077|52.92044|7.0953|8.77|Ter Wisch Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2061|52.80937|6.8247|17.64|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2062|52.81106|6.82368|17.44|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2063|52.80968|6.82178|17.68|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2064|52.81004|6.82339|17.25|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2065|52.81004|6.82339|17.25|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2066|52.81004|6.82339|17.25|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2067|52.81004|6.82339|17.25|t Haantje Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2071|52.75723|6.97533|22.27|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2072|52.75726|6.97237|22.01|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2073|52.75568|6.97381|21.23|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2074|52.75672|6.97384|21.97|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2075|52.75672|6.97384|21.97|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2076|52.75672|6.97384|21.97|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2077|52.75672|6.97384|21.97|Nieuw-Dordrecht Seismo-Acoustic Array|2018-06-06T00:00:00|
NL|L2081|52.67004|6.92|13.26|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2082|52.66842|6.91869|13.09|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2083|52.66992|6.91705|12.66|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2084|52.66946|6.91858|13.0|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2085|52.66946|6.91858|13.0|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2086|52.66946|6.91858|13.0|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L2087|52.66946|6.91858|13.0|Schoonebeek Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4111|53.03103|6.62996|5.36|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4112|53.03149|6.63284|5.57|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4113|53.03276|6.63074|5.46|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4114|53.03176|6.63118|5.62|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4115|53.03176|6.63118|5.62|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4116|53.03176|6.63118|5.62|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L4117|53.03176|6.63118|5.62|Taarlo Seismo-Acoustic Array|2018-03-02T00:00:00|
NL|L5081|53.24128|6.95386|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L5082|53.23972|6.95535|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L5083|53.2397|6.95235|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L5084|53.24024|6.95385|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L5085|53.24024|6.95385|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L5086|53.24024|6.95385|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|L5087|53.24024|6.95385|-2.2|Nieuwolda Seismo-Acoustic Array|2018-07-06T00:00:00|
NL|MAME|50.8|5.9727|154.0|Mamelis|2015-04-16T00:00:00|
NL|N010|53.11851|6.473259|2.0|Lieveren (niveau 0)|2016-04-14T00:00:00|
NL|N011|53.11851|6.473259|2.0|Lieveren (niveau 1)|2016-04-14T00:00:00|
NL|N012|53.11851|6.473259|2.0|Lieveren (niveau 2)|2016-04-14T00:00:00|
NL|N013|53.11851|6.473259|2.0|Lieveren (niveau 3)|2016-04-14T00:00:00|
NL|N014|53.11851|6.473259|2.0|Lieveren (niveau 4)|2016-04-14T00:00:00|
NL|N020|53.071995|6.452966|2.0|Norg (niveau 0)|2016-02-04T00:00:00|
NL|N021|53.071995|6.452966|2.0|Norg (niveau 1)|2016-02-04T00:00:00|
NL|N022|53.071995|6.452966|2.0|Norg (niveau 2)|2016-02-04T00:00:00|
NL|N023|53.071995|6.452966|2.0|Norg (niveau 3)|2016-02-04T00:00:00|
NL|N024|53.071995|6.452966|2.0|Norg (niveau 4)|2016-02-04T00:00:00|
NL|N030|53.11103|6.404509|2.0|Steenbergen (niveau 0)|2016-02-04T00:00:00|
NL|N031|53.11103|6.404509|2.0|Steenbergen (niveau 1)|2016-02-04T00:00:00|
NL|N032|53.11103|6.404509|2.0|Steenbergen (niveau 2)|2016-02-04T00:00:00|
NL|N033|53.11103|6.404509|2.0|Steenbergen (niveau 3)|2016-02-04T00:00:00|
NL|N034|53.11103|6.404509|2.0|Steenbergen (niveau 4)|2016-02-04T00:00:00|
NL|NIW1|53.3548|6.043|-1.0|Niawier (Wetzens) niveau 1|2009-05-20T00:00:00|
NL|NIW2|53.3548|6.043|-1.0|Niawier (Wetzens) niveau 2|2009-05-20T00:00:00|
NL|NIW3|53.3548|6.043|-1.0|Niawier (Wetzens) niveau 3|2009-05-20T00:00:00|
NL|NIW4|53.3548|6.043|-1.0|Niawier (Wetzens) niveau 4|2009-05-20T00:00:00|
NL|OPLO|51.5888|5.8121|0.0|Oploo|1998-09-03T00:00:00|
NL|OTL1|52.6289|4.8227|1.0|Oterleek niveau 1|1995-04-21T00:00:00|
NL|OTL2|52.6289|4.8227|1.0|Oterleek niveau 2|1995-04-21T00:00:00|
NL|OTL3|52.6289|4.8227|1.0|Oterleek niveau 3|1995-04-21T00:00:00|
NL|OTL4|52.6289|4.8227|1.0|Oterleek niveau 4|1995-04-21T00:00:00|
NL|PET|52.770593|4.659526|6.0|Petten|2019-07-24T00:00:00|
NL|PPB1|52.6526|4.67|1.0|Philisteinsche Polder niveau 1|1995-02-10T00:00:00|
NL|PPB2|52.6526|4.67|1.0|Philisteinsche Polder niveau 2|1995-02-10T00:00:00|
NL|PPB3|52.6526|4.67|1.0|Philisteinsche Polder niveau 3|1995-02-10T00:00:00|
NL|PPB4|52.6526|4.67|1.0|Philisteinsche Polder niveau 4|1995-02-10T00:00:00|
NL|ROLD|50.86939|6.08469|145.0|Rolduc|2015-04-16T00:00:00|
NL|SL010|52.855091|4.868278|2.0|Anna Paulowna (niveau 0)|2017-05-12T00:00:00|
NL|SL011|52.855091|4.868278|2.0|Anna Paulowna (niveau 1)|2017-05-12T00:00:00|
NL|SL012|52.855091|4.868278|2.0|Anna Paulowna (niveau 2)|2017-05-12T00:00:00|
NL|SL013|52.855091|4.868278|2.0|Anna Paulowna (niveau 3)|2017-05-12T00:00:00|
NL|SL014|52.855091|4.868278|2.0|Anna Paulowna (niveau 4)|2017-05-12T00:00:00|
NL|SPY1|53.4098|6.7838|1.0|Spijk (Roodeschool) niveau 1|2010-07-08T00:00:00|
NL|SPY2|53.4098|6.7838|1.0|Spijk (Roodeschool) niveau 2|2010-07-08T00:00:00|
NL|SPY3|53.4098|6.7838|1.0|Spijk (Roodeschool) niveau 3|2010-07-08T00:00:00|
NL|SPY4|53.4098|6.7838|1.0|Spijk (Roodeschool) niveau 4|2010-07-08T00:00:00|
NL|SUH1|53.2113|6.211|0.0|Surhuizum niveau 1|2009-08-26T00:00:00|
NL|SUH2|53.2113|6.211|0.0|Surhuizum niveau 2|2009-08-26T00:00:00|
NL|SUH3|53.2113|6.211|0.0|Surhuizum niveau 3|2009-08-26T00:00:00|
NL|SUH4|53.2113|6.211|0.0|Surhuizum niveau 4|2009-08-26T00:00:00|
NL|T010|52.464256|6.740072|2.0|Langeveen (niveau 0)|2015-12-08T00:00:00|
NL|T011|52.464256|6.740072|2.0|Langeveen (niveau 1)|2015-12-08T00:00:00|
NL|T012|52.464256|6.740072|2.0|Langeveen (niveau 2)|2015-12-08T00:00:00|
NL|T013|52.464256|6.740072|2.0|Langeveen (niveau 3)|2015-12-08T00:00:00|
NL|T014|52.464256|6.740072|2.0|Langeveen (niveau 4)|2015-12-08T00:00:00|
NL|T020|52.463356|6.978702|2.0|Breklenkamp (niveau 0)|2016-01-13T00:00:00|
NL|T021|52.463356|6.978702|2.0|Breklenkamp (niveau 1)|2016-01-13T00:00:00|
NL|T022|52.463356|6.978702|2.0|Breklenkamp (niveau 2)|2016-01-13T00:00:00|
NL|T023|52.463356|6.978702|2.0|Breklenkamp (niveau 3)|2016-01-13T00:00:00|
NL|T024|52.463356|6.978702|2.0|Breklenkamp (niveau 4)|2016-01-13T00:00:00|
NL|T030|52.42968|6.79178|2.0|Mander (niveau 0)|2015-12-08T00:00:00|
NL|T031|52.42968|6.79178|2.0|Mander (niveau 1)|2015-12-08T00:00:00|
NL|T032|52.42968|6.79178|2.0|Mander (niveau 2)|2015-12-08T00:00:00|
NL|T033|52.42968|6.79178|2.0|Mander (niveau 3)|2015-12-08T00:00:00|
NL|T034|52.42968|6.79178|2.0|Mander (niveau 4)|2015-12-08T00:00:00|
NL|T040|52.437466|6.89045|2.0|Hezingen (niveau 0)|2016-01-13T00:00:00|
NL|T041|52.437466|6.89045|2.0|Hezingen (niveau 1)|2016-01-13T00:00:00|
NL|T042|52.437466|6.89045|2.0|Hezingen (niveau 2)|2016-01-13T00:00:00|
NL|T043|52.437466|6.89045|2.0|Hezingen (niveau 3)|2016-01-13T00:00:00|
NL|T044|52.437466|6.89045|2.0|Hezingen (niveau 4)|2016-01-13T00:00:00|
NL|T050|52.380554|6.905661|2.0|Agelo (niveau 0)|2015-12-08T00:00:00|
NL|T051|52.380554|6.905661|2.0|Agelo (niveau 1)|2015-12-08T00:00:00|
NL|T052|52.380554|6.905661|2.0|Agelo (niveau 2)|2015-12-08T00:00:00|
NL|T053|52.380554|6.905661|2.0|Agelo (niveau 3)|2015-12-08T00:00:00|
NL|T054|52.380554|6.905661|2.0|Agelo (niveau 4)|2015-12-08T00:00:00|
NL|T060|52.343227|6.909716|2.0|Weerselo (niveau 0)|2016-02-04T00:00:00|
NL|T061|52.343227|6.909716|2.0|Weerselo (niveau 1)|2016-02-04T00:00:00|
NL|T062|52.343227|6.909716|2.0|Weerselo (niveau 2)|2016-02-04T00:00:00|
NL|T063|52.343227|6.909716|2.0|Weerselo (niveau 3)|2016-02-04T00:00:00|
NL|T064|52.343227|6.909716|2.0|Weerselo (niveau 4)|2016-02-04T00:00:00|
NL|T080|52.38933|6.996486|2.0|Denekamp (niveau 0)|2016-04-07T00:00:00|
NL|T081|52.38933|6.996486|2.0|Denekamp (niveau 1)|2016-04-07T00:00:00|
NL|T082|52.38933|6.996486|2.0|Denekamp (niveau 2)|2016-04-07T00:00:00|
NL|T083|52.38933|6.996486|2.0|Denekamp (niveau 3)|2016-04-07T00:00:00|
NL|T084|52.38933|6.996486|2.0|Denekamp (niveau 4)|2016-04-07T00:00:00|
NL|TERZ|50.756763|5.906114|150.0|Terziet|2019-06-03T00:00:00|
NL|VBG1|52.544|6.6693|11.0|Venebrugge niveau 1|1995-04-28T00:00:00|
NL|VBG2|52.544|6.6693|11.0|Venebrugge niveau 2|1995-04-28T00:00:00|
NL|VBG3|52.544|6.6693|11.0|Venebrugge niveau 3|1995-04-28T00:00:00|
NL|VBG4|52.544|6.6693|11.0|Venebrugge niveau 4|1995-04-28T00:00:00|
NL|VEN2|51.4283|6.0937|25.0|Grubbenvorst|2012-05-08T00:00:00|2017-07-06T00:00:00
NL|VKB|50.8669|5.7847|90.0|Valkenburg, Netherlands|2011-06-01T12:00:00|
NL|VLW1|52.9682|7.0972|7.0|Vlagtwedde niveau 1|1995-05-23T00:00:00|
NL|VLW2|52.9682|7.0972|7.0|Vlagtwedde niveau 2|1995-05-23T00:00:00|
NL|VLW3|52.9682|7.0972|7.0|Vlagtwedde niveau 3|1995-05-23T00:00:00|
NL|VLW4|52.9682|7.0972|7.0|Vlagtwedde niveau 4|1995-05-23T00:00:00|
NL|VNDM0|53.115086|6.839044|1.5|Veendam - Nedmag (niveau 0)|2019-05-28T00:00:00|
NL|VNDM1|53.115086|6.839044|1.5|Veendam - Nedmag (niveau 1)|2019-05-28T00:00:00|
NL|VNDM2|53.115086|6.839044|1.5|Veendam - Nedmag (niveau 2)|2019-05-28T00:00:00|
NL|VNDM3|53.115086|6.839044|1.5|Veendam - Nedmag (niveau 3)|2019-05-28T00:00:00|
NL|VNDM4|53.115086|6.839044|1.5|Veendam - Nedmag (niveau 4)|2019-05-28T00:00:00|
NL|VRS|53.036023|6.604592|7.6|Vries|2019-02-18T00:00:00|
NL|WDB1|53.2083|6.7355|-2.0|Woudbloem niveau 1|1995-04-12T00:00:00|
NL|WDB2|53.2083|6.7355|-2.0|Woudbloem niveau 2|1995-04-12T00:00:00|
NL|WDB3|53.2083|6.7355|-2.0|Woudbloem niveau 3|1995-04-12T00:00:00|
NL|WDB4|53.2083|6.7355|-2.0|Woudbloem niveau 4|1995-04-12T00:00:00|
NL|WIT|52.8135|6.6695|17.0|WIT|1993-11-16T00:00:00|2013-12-01T00:00:00
NL|WMH1|52.7096|4.7498|-1.0|Warmenhuizen niveau 1|1995-04-21T00:00:00|
NL|WMH2|52.7096|4.7498|-1.0|Warmenhuizen niveau 2|1995-04-21T00:00:00|
NL|WMH3|52.7096|4.7498|-1.0|Warmenhuizen niveau 3|1995-04-21T00:00:00|
NL|WMH4|52.7096|4.7498|-1.0|Warmenhuizen niveau 4|1995-04-21T00:00:00|
NL|WTSB|51.9663|6.7989|43.0|Winterswijk, The Netherlands|2000-02-21T00:00:00|
NL|WYN1|53.1995|5.4578|0.0|Wijnaldum niveau 1|2010-03-03T00:00:00|
NL|WYN2|53.1995|5.4578|0.0|Wijnaldum niveau 2|2010-03-03T00:00:00|
NL|WYN3|53.1995|5.4578|0.0|Wijnaldum niveau 3|2010-03-03T00:00:00|
NL|WYN4|53.1995|5.4578|0.0|Wijnaldum niveau 4|2010-03-03T00:00:00|
NL|ZH010|51.913745|4.288099|-2.0|Vlaardingen (niveau 0)|2018-12-14T00:00:00|
NL|ZH011|51.913745|4.288099|-2.0|Vlaardingen (niveau 1)|2018-12-14T00:00:00|
NL|ZH012|51.913745|4.288099|-2.0|Vlaardingen (niveau 2)|2018-12-14T00:00:00|
NL|ZH013|51.913745|4.288099|-2.0|Vlaardingen (niveau 3)|2018-12-14T00:00:00|
NL|ZH014|51.913745|4.288099|-2.0|Vlaardingen (niveau 4)|2018-12-14T00:00:00|
NL|ZL21|53.0921|6.7533|2.0|Zuidlaarderveen 2 niveau 1|1995-04-12T00:00:00|
NL|ZL22|53.0921|6.7533|2.0|Zuidlaarderveen 2 niveau 2|1995-04-12T00:00:00|
NL|ZL23|53.0921|6.7533|2.0|Zuidlaarderveen 2 niveau 3|1995-04-12T00:00:00|
NL|ZL24|53.0921|6.7533|2.0|Zuidlaarderveen 2 niveau 4|1995-04-12T00:00:00|
NL|ZLV1|53.0921|6.7533|2.0|Zuidlaarderveen 1 niveau 1|1995-04-12T00:00:00|
NL|ZLV2|53.0921|6.7533|2.0|Zuidlaarderveen 1 niveau 2|1995-04-12T00:00:00|
NL|ZLV3|53.0921|6.7533|2.0|Zuidlaarderveen 1 niveau 3|1995-04-12T00:00:00|
NL|ZLV4|53.0921|6.7533|2.0|Zuidlaarderveen 1 niveau 4|1995-04-12T00:00:00|
NL|ZLV5|53.0921|6.7533|2.0|Zuidlaarderveen 1 oppervlaktesensor|1995-04-12T00:00:00|2016-06-15T11:00:00
NL|ZWE1|53.1885|5.6045|0.0|Zweins niveau 1|2010-03-24T00:00:00|
NL|ZWE2|53.1885|5.6045|0.0|Zweins niveau 2|2010-03-24T00:00:00|
NL|ZWE3|53.1885|5.6045|0.0|Zweins niveau 3|2010-03-24T00:00:00|
NL|ZWE4|53.1885|5.6045|0.0|Zweins niveau 4|2010-03-24T00:00:00|

Practically, the data would be requested in StatonXML format and saved to file, to be further used during data processing. In the following exercise we will read the data directly into ObsPy. Note again that when working with ObsPy, using the client class is the best solution.

1.3.2 Station Metadata through ObsPy (recommended usage)

Alternatively, we use an ObsPy client to be able to directly manipulate the data in ObsPy. In the following example we request the instrument response for a single channel and print the response information. In combination with the raw waveform data returned from dataselect service we can deconvolve the frequency response for this sensor.

In [4]:
# We will request instrument metadata for a single trace
network, station, location, channel = "NL", "HGN", "02", "BH*"

# We pass level=response to request instrument response metadata
inv = client.get_stations(
    network=network,
    station=station,
    location=location,
    channel=channel,
    level="response"
)

# This object now has response information for the selected trace (NL.HGN.02.BHZ)
for network in inv:
    for station in network:
        for channel in station:
            print(channel.response)

# Deconvolve instrument response
st.remove_response(inventory=inv)

# Plot the data (output units = velocity)
st.plot();
Channel Response
	From M/S () to COUNTS ()
	Overall Sensitivity: 3.84869e+09 defined at 1.000 Hz
	3 stages:
		Stage 1: PolesZerosResponseStage from M/S to V, gain: 2294
		Stage 2: CoefficientsTypeResponseStage from V to COUNTS, gain: 1.67772e+06
		Stage 3: FIRResponseStage from COUNTS to COUNTS, gain: 1
Channel Response
	From M/S () to COUNTS ()
	Overall Sensitivity: 3.88225e+09 defined at 1.000 Hz
	3 stages:
		Stage 1: PolesZerosResponseStage from M/S to V, gain: 2314
		Stage 2: CoefficientsTypeResponseStage from V to COUNTS, gain: 1.67772e+06
		Stage 3: FIRResponseStage from COUNTS to COUNTS, gain: 1
Channel Response
	From M/S () to COUNTS ()
	Overall Sensitivity: 3.91245e+09 defined at 1.000 Hz
	3 stages:
		Stage 1: PolesZerosResponseStage from M/S to V, gain: 2332
		Stage 2: CoefficientsTypeResponseStage from V to COUNTS, gain: 1.67772e+06
		Stage 3: FIRResponseStage from COUNTS to COUNTS, gain: 1

1.4 EIDAWS-Routing

The seismic archive of EIDA is distributed across 11 different data centers, called EIDA Nodes. EIDAWS-routing helps you to find data within this federated data archive. If you don't know which EIDA node holds your data of interest the routing service will provide you with the appropriate EIDA node and corresponding webservice URL to be queried.

In this example we will request the "get" format (i.e. URLs that hold the data) for four networks. We are asking for all routes to the station webservice. The label for this service is:

eidaws/routing/1/query

Note: routing and communication with all EIDA nodes individually can be omitted by using the EIDA Mediator in federated mode (see section 1.6).

In [5]:
# The URL that points to the routing service (notice the different eidaws label)
SERVICE_DOMAIN = "http://www.orfeus-eu.org"
LABEL = "eidaws/routing/1/query"

# Network codes must be comma delimited
network = ",".join(["HL", "GE", "NL", "KO"])

# The query string includes our network codes and our output format must is set as URLs (get)
# We specify the service as fdsnws-station (change this to dataselect)
queryString = "&".join([
    "network=%s" % network,
    "format=get",
    "service=station"
])

# The URL that we are requesing
# Try this in your browser:
# http://www.orfeus-eu.org/eidaws/routing/1/query?network=HL,GE,NL,KO&format=get
r = requests.get("%s/%s?%s" % (SERVICE_DOMAIN, LABEL, queryString))

# Should print four routes to different data centers
# Here we can find station metadata for these four networks respectively
# We make a request to all returned routes (status 200 indicates success!)
for line in r.text.split("\n"):
    r = requests.get(line)
    print("[%i] %s" % (r.status_code, line))
[200] http://eida.gein.noa.gr/fdsnws/station/1/query?net=HL&start=1997-01-01T00:00:00
[200] http://geofon.gfz-potsdam.de/fdsnws/station/1/query?net=GE&start=1993-01-01T00:00:00
[200] http://www.orfeus-eu.org/fdsnws/station/1/query?net=NL&start=1980-01-01T00:00:00
[200] http://eida-service.koeri.boun.edu.tr/fdsnws/station/1/query?net=KO&start=1980-01-01T00:00:00

1.5 EIDAWS-WFCatalog

The WFCatalog is a catalogue of seismic waveform metadata. This is not to be confused with station metadata but contains purely metadata describing the waveforms. These metadata include availability information (e.g. gaps), sample metrics (e.g. mean, standard deviations, median values) and miniSEED header flags.

The EIDAWS-WFCatalog webservice returns quality metrics from raw waveform data. The WFCatalog can serve as a powerful waveform index for data discovery by appending filters (e.g. lt, ge) to the query string. This can help identify waveforms with metric values below or above a certain threshold. The label for this service is:

eidaws/wfcatalog/1/query

In [6]:
# The URL that points to the routing service (notice the different eidaws label)
SERVICE_DOMAIN = "http://www.orfeus-eu.org"
LABEL = "eidaws/wfcatalog/1/query"

# The start and end date for the metrics
# Feel free to change the window
starttime, endtime = ("2010-11-01", "2010-11-07")

# Network codes must be comma delimited
network, station, location, channel = "NL.HGN.02.BHZ".split(".")

# The query string includes our seed identifiers, temporal constraints, we ask for sample metrics to be included
# include can be either (default, sample, header, all)
# We request metrics for daily waveforms with an availability over 50%
# Try changing the percent_availability to 100 - less documents will be returned
queryString = "&".join([
    "network=%s" % network,
    "station=%s" % station,
    "location=%s" % location,
    "channel=%s" % channel,
    "starttime=%s" % starttime,
    "endtime=%s" % endtime,
    "include=sample",
    "percent_availability_ge=50"
])

# Try this in your browser:
# http://www.orfeus-eu.org/eidaws/wfcatalog/1/query?network=NL&station=HGN&location=02&channel=BHZ&start=2010-11-01&end=2010-11-07&include=sample
r = requests.get("%s/%s?%s" % (SERVICE_DOMAIN, LABEL, queryString))

# Should print JSON response of quality metrics for three days.
r.json()
Out[6]:
[{'version': '1.0.0',
  'producer': {'name': 'ORFEUS ODC/KNMI',
   'agent': 'ObsPy mSEED-QC',
   'created': '2016-06-26T05:04:02.156Z'},
  'station': 'HGN',
  'network': 'NL',
  'location': '02',
  'channel': 'BHZ',
  'num_gaps': 0,
  'num_overlaps': 0,
  'sum_gaps': 0,
  'sum_overlaps': 0,
  'max_gap': None,
  'max_overlap': None,
  'record_length': [4096],
  'sample_rate': [40],
  'percent_availability': 100,
  'encoding': ['STEIM2'],
  'num_records': 992,
  'start_time': '2010-11-01T00:00:00.000Z',
  'end_time': '2010-11-02T00:00:00.000Z',
  'format': 'miniSEED',
  'quality': 'D',
  'sample_min': -7365,
  'sample_max': 9006,
  'sample_mean': 1128.8762473958334,
  'sample_median': 1109,
  'sample_stdev': 1910.6907336014126,
  'sample_rms': 2219.2567813132405,
  'sample_lower_quartile': -178,
  'sample_upper_quartile': 2415},
 {'version': '1.0.0',
  'producer': {'name': 'ORFEUS ODC/KNMI',
   'agent': 'ObsPy mSEED-QC',
   'created': '2016-06-26T05:39:45.988Z'},
  'station': 'HGN',
  'network': 'NL',
  'location': '02',
  'channel': 'BHZ',
  'num_gaps': 0,
  'num_overlaps': 0,
  'sum_gaps': 0,
  'sum_overlaps': 0,
  'max_gap': None,
  'max_overlap': None,
  'record_length': [4096],
  'sample_rate': [40],
  'percent_availability': 100,
  'encoding': ['STEIM2'],
  'num_records': 1018,
  'start_time': '2010-11-02T00:00:00.000Z',
  'end_time': '2010-11-03T00:00:00.000Z',
  'format': 'miniSEED',
  'quality': 'D',
  'sample_min': -9099,
  'sample_max': 10556,
  'sample_mean': 1133.3378449074073,
  'sample_median': 1131,
  'sample_stdev': 2127.3194940882645,
  'sample_rms': 2410.382314203976,
  'sample_lower_quartile': -278,
  'sample_upper_quartile': 2562},
 {'version': '1.0.0',
  'producer': {'name': 'ORFEUS ODC/KNMI',
   'agent': 'ObsPy mSEED-QC',
   'created': '2016-06-26T06:14:10.656Z'},
  'station': 'HGN',
  'network': 'NL',
  'location': '02',
  'channel': 'BHZ',
  'num_gaps': 0,
  'num_overlaps': 0,
  'sum_gaps': 0,
  'sum_overlaps': 0,
  'max_gap': None,
  'max_overlap': None,
  'record_length': [4096],
  'sample_rate': [40],
  'percent_availability': 100,
  'encoding': ['STEIM2'],
  'num_records': 1007,
  'start_time': '2010-11-03T00:00:00.000Z',
  'end_time': '2010-11-04T00:00:00.000Z',
  'format': 'miniSEED',
  'quality': 'D',
  'sample_min': -49107,
  'sample_max': 53852,
  'sample_mean': 985.0175037615741,
  'sample_median': 971,
  'sample_stdev': 1910.589206726705,
  'sample_rms': 2149.5605596440537,
  'sample_lower_quartile': -196,
  'sample_upper_quartile': 2145},
 {'version': '1.0.0',
  'producer': {'name': 'ORFEUS ODC/KNMI',
   'agent': 'ObsPy mSEED-QC',
   'created': '2016-06-26T07:11:55.421Z'},
  'station': 'HGN',
  'network': 'NL',
  'location': '02',
  'channel': 'BHZ',
  'num_gaps': 1,
  'num_overlaps': 1,
  'sum_gaps': 3223.675,
  'sum_overlaps': 18.375,
  'max_gap': 3223.675,
  'max_overlap': 18.375,
  'record_length': [4096],
  'sample_rate': [40],
  'percent_availability': 96.26889467592592,
  'encoding': ['STEIM2'],
  'num_records': 983,
  'start_time': '2010-11-04T00:00:00.000Z',
  'end_time': '2010-11-05T00:00:00.000Z',
  'format': 'miniSEED',
  'quality': 'D',
  'sample_min': -5167,
  'sample_max': 7798,
  'sample_mean': 1000.2683034496188,
  'sample_median': 981,
  'sample_stdev': 1390.8633798481553,
  'sample_rms': 1713.1951495053365,
  'sample_lower_quartile': 45,
  'sample_upper_quartile': 1931},
 {'version': '1.0.0',
  'producer': {'name': 'ORFEUS ODC/KNMI',
   'agent': 'ObsPy mSEED-QC',
   'created': '2016-06-26T07:57:48.085Z'},
  'station': 'HGN',
  'network': 'NL',
  'location': '02',
  'channel': 'BHZ',
  'num_gaps': 1,
  'num_overlaps': 0,
  'sum_gaps': 7542.6055,
  'sum_overlaps': 0,
  'max_gap': 7542.6055,
  'max_overlap': None,
  'record_length': [4096],
  'sample_rate': [40],
  'percent_availability': 91.27013252314813,
  'encoding': ['STEIM2'],
  'num_records': 926,
  'start_time': '2010-11-05T00:00:00.000Z',
  'end_time': '2010-11-06T00:00:00.000Z',
  'format': 'miniSEED',
  'quality': 'D',
  'sample_min': -4461,
  'sample_max': 7998,
  'sample_mean': 934.5766825867587,
  'sample_median': 903,
  'sample_stdev': 1301.6943627340424,
  'sample_rms': 1602.448685483705,
  'sample_lower_quartile': 27,
  'sample_upper_quartile': 1804}]

1.6 EIDA Mediator

The EIDA mediator (beta) can automatically route and retrieve requests federated between EIDA nodes. This prevents using from having to query the routing service before making data requests. There is a single entry poiny to the entire archive available within EIDA as demonstrated below. Currently there is supported for federated mode between station and dataselect. Federation of WFCatalog requests will be supported in the future.

In [7]:
# The URL that points to the routing service (the EIDA mediator is hosted by ETHZ)
SERVICE_DOMAIN = "http://mediator-devel.ethz.ch"
LABEL = "fdsnws/station/1/query"

# Network codes must be comma delimited
# Networks are federated across 4 different EIDA nodes
network = ",".join(["HL", "GE", "NL", "KO"])

# Creathe queyr string and append all networks
# We ask for level=network to limit the amount of data returned for clarity
queryString = "&".join([
    "network=%s" % network,
    "level=network"
])

# Try this in your browser:
# http://mediator-devel.ethz.ch/fdsnws/station/1/query?network=HL,GE,NL&level=network
##### This currently does not seem to work.
# r = requests.get("%s/%s?%s" %(SERVICE_DOMAIN, LABEL, queryString))

# StationXML for all four networks
# print(r.text)

Graphical user interfaces

The following tools are available on orfeus-eu.org and are built on top of the discussed webservices. Please note that these interfaces currently only work for data archived at ORFEUS Data Center.

http://www.orfeus-eu.org/data/odc/quality

2 Advanced Example - Webservices pipeline

2.1 Introduction

This example demonstrates the use of FDSN webservices in a processing pipeline. The goal of this exercise is to download raw waveform data from stations surrounding an earthquake. This pipeline is based on functionality provided with ObsPy.

In [8]:
# Define the module imports
import requests
import math

from obspy.taup import TauPyModel
from obspy.geodetics import locations2degrees
from obspy import read, UTCDateTime

import datetime
import dateutil.parser

2.2 FDSNWS-Event

We define a function that collects event information from fdsnws-event. We pass an event identifier to the webservice, parse the response and return an Event class that has location, origin time, and depth attributes. The event data is requested from the seismicportal webservice provided by the EMSC.

In [9]:
def getEvent(identifier):

    # Try in your browser:
    # http://www.seismicportal.eu/fdsnws/event/1/query?eventid=20170720_0000091&format=text
    # Service address
    FDSN_EVENT = "http://www.seismicportal.eu/fdsnws/event/1/query"

    # Define class for Events
    class Event():
        def __init__(self, line):
            self.id, self.time, self.latitude, self.longitude, self.depth = line.split("|")[:5]
            self.latitude = float(self.latitude)
            self.longitude = float(self.longitude)
            self.depth = float(self.depth)
            
    # We query for a single event identifier and request a text format return
    queryString = "&".join([
      "eventid=%s" % identifier,
      "format=text"
    ])

    # Create the query for an event identifier
    r = requests.get("%s?%s" % (FDSN_EVENT, queryString))

    # Split by lines and remove head & tail
    lines = r.text.split("\n")[1:-1]

    # Return Event classes for each entry
    return list(map(Event, lines))[0]
In [10]:
# Should print a single Event instance
print(getEvent("20170720_0000091"))
<__main__.getEvent.<locals>.Event object at 0x10d817cf8>

2.3 FDSNWS-Station

Define a function that can find the stations around an event. We pass the Event instance to the function and call the station webservice to return stations within 20 degrees arc-distance of this event location. We parse the response and return a map of station instances with attributes network, station, and location.

In [11]:
def getStations(event):

    # Try it in your browser:
    # http://orfeus-eu.org/fdsnws/station/1/query?latitude=30&longitude=30&maxradius=20&format=text
    # Service address
    FDSN_STATION = "http://orfeus-eu.org/fdsnws/station/1/query"
    MAX_RADIUS = 20

    # Define a Station class
    class Station():
        def __init__(self, line):
            self.network, self.station, self.latitude, self.longitude = line.split("|")[:4]
            self.latitude = float(self.latitude)
            self.longitude = float(self.longitude)

    # We query with the event location and a maximum radius around the event
    queryString = "&".join([
      "latitude=%s" % event.latitude,
      "longitude=%s" % event.longitude,
      "maxradius=%s" % MAX_RADIUS,
      "format=text"
    ])

    # Request from webservice
    r = requests.get("%s?%s" % (FDSN_STATION, queryString))

    # Split by lines and remove head & tail
    lines = r.text.split("\n")[1:-1]

    # Return Event classes for each entry
    return map(Station, lines)
In [12]:
# Should print a map (array) of Station instances
print(getStations(getEvent("20170720_0000091")))
<map object at 0x120a271d0>

2.4 Theoretical Arrival Times

Define a function that calculates the theoretical P arrival time at a station location using the TauP module in ObsPy. The function takes an Event and Station instance. The arc-distance in degrees between the source and receiver is calculated using the haversine function (see below).

In [13]:
# We use the iasp91 reference model
TAUP_MODEL = TauPyModel(model="iasp91")

def getPArrival(event, station):

    # Determine the arc distance using the haversine formula
    arcDistanceDegrees = locations2degrees(
      event.latitude,
      station.latitude,
      event.longitude,
      station.longitude
    )

    # Calculate the theoretical P-arrival time
    arrivals = TAUP_MODEL.get_travel_times(
      source_depth_in_km=1E-3 * event.depth,
      distance_in_degree=arcDistanceDegrees,
      phase_list=["P"]
    )

    # Add the theorical P-arrival delta to the event time
    return UTCDateTime(event.time) + arrivals[0].time

Definition of the havesine function, we pass two latitudes and longitudes and return the arc-distance in degrees. This is a supplementary function.

2.5 FDSNWS-Dataselect

The main body of the script that collects an event with event identifier 20170720_0000091. We loop over all the stations returned by the getStations function within 20 degrees arc-distance of the event. In each iteration, we make a call to fdsnws-dataselect to collect the waveform data for all stations between 300 seconds before, and 1200 seconds after the theoretical P-arrival time.

This data (channel BH?) is loaded in to ObsPy using the read function, filtered and plotted. After the first iteration the loop is broken. Alternatively, all data can be saved to disk.

In [14]:
FDSN_DATASELECT = "http://orfeus-eu.org/fdsnws/dataselect/1/query"
EVENT_IDENTIFIER = "20170720_0000091"

# Get the event
event = getEvent(EVENT_IDENTIFIER)

# Go over all stations returned in the radius
for station in getStations(event):

    # Get the theoretical (TauP) pArrval from event to station
    stationArrivalTime = getPArrival(event, station)

    # Create the query for fdsn-dataselect
    # between 300 seconds before & 1200 seconds after the theoretical P-arrival
    queryString = "&".join([
        "network=%s" % station.network,
        "station=%s" % station.station,
        "starttime=%s" % (stationArrivalTime - 300).isoformat(),
        "endtime=%s" % (stationArrivalTime + 1200).isoformat(),
        "channel=BH?"
    ])

    # Get the waveform data and read to ObsPy Stream
    # Empty responses are skipped 
    try:
        st = read("%s?%s" % (FDSN_DATASELECT, queryString))
    except Exception:
        continue

    # Use with ObsPy and apply a filter, then plot
    # Alternatively, we would save the data to a file
    st.filter("lowpass", freq=0.5)
    st.plot()

    # Break after the first result
    break
/Users/lion/miniconda3/envs/seismo_live/lib/python3.7/site-packages/obspy/taup/tau_branch.py:496: UserWarning: Resizing a TauP array inplace failed due to the existence of other references to the array, creating a new array. See Obspy #2280.
  warnings.warn(msg)

Acknowledgements

Thanks to Lion Krischer and Seismo-Live for hosting this notebook.