[seiscomp, scanloc] Install, add .gitignore

This commit is contained in:
2025-10-09 15:07:02 +02:00
commit 20f5301bb1
2848 changed files with 1315858 additions and 0 deletions

View File

@ -0,0 +1,131 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP - Data Availability</title>
<link rel="stylesheet" type="text/css" href="../../css/fdsnws.css">
<link rel="stylesheet" type="text/css" href="../../js/tcal/tcal.css">
<script type="text/javascript" src="../../js/tcal/tcal.js"></script>
<script type="text/javascript" src="../../js/fdsnws-query.js"></script>
<script type="text/javascript">
A_TCALCONF['format'] = 'Y-m-dT00:00:00';
window.onload = function() { fdsnwsInitQueryFormLocation('extent'); };
</script>
</head>
<body>
<p><a href="./">Parent Directory</a></p>
<h1>SeisComP Data Availability /extent - URL Builder</h1>
<form id="query-form" action="query" method="GET">
<fieldset>
<legend>Time constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Start time</td>
<td><input type="text" size="10" maxlength="26" name="starttime" value="" class="tcal"/></td>
</tr>
<tr>
<td>End time</td>
<td><input type="text" size="10" maxlength="26" name="endtime" value="" class="tcal"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Channel constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Network</td>
<td><input type="text" size="10" name="network" value="" placeholder="AB,C?" /></td>
</tr>
<tr>
<td>Station</td>
<td><input type="text" size="10" name="station" value="" placeholder="ABC,D*" /></td>
</tr>
<tr>
<td>Location</td>
<td><input type="text" size="10" name="location" value="" placeholder="00" /></td>
</tr>
<tr>
<td>Channel</td>
<td><input type="text" size="10" name="channel" value="" placeholder="BH?" /></td>
</tr>
<tr>
<td>Quality</td>
<td><input type="text" size="10" name="quality" value="" placeholder="*" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Service specific constrains</legend>
<table class="builder">
<tbody>
<tr>
<td>Merge properties</td>
<td>
<select name="merge" multiple>
<option value="samplerate">Sample rate</option>
<option value="quality">Quality</option>
</select>
</td>
</tr>
<tr>
<td>Authentication</td>
<td><input type="checkbox" name="queryauth" value="extentauth"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Output control</legend>
<table class="builder">
<tbody>
<tr>
<td>Order by</td>
<td>
<select name="orderby">
<option value="">Stream ID (default)</option>
<option value="timespancount">Number of timespans (ascending)</option>
<option value="timespancount_desc">Number of timespans (descending)</option>
<option value="latestupdate">Update date (ascending)</option>
<option value="latestupdate_desc">Update date (descending)</option>
</select>
</td>
</tr>
<tr>
<td>Limit</td>
<td><input type="number" name="limit" min="0" step="10" value="" placeholder="100" /></td>
</tr>
<tr>
<td>Include restricted</td>
<td><input type="checkbox" name="includerestricted" value="true" /></td>
</tr>
<tr>
<td>Format</td>
<td>
<select name="format">
<option value="">Text (default)</option>
<option value="geocsv">GEO CSV</option>
<option value="json">JSON</option>
<option value="request">Request</option>
</select>
</td>
</tr>
<tr>
<td>No data 404</td>
<td><input type="checkbox" name="nodata" value="404" checked="checked" /></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<fieldset>
<legend>URL</legend>
<p><a id="query-url" href=""></a></p>
</fieldset>
</body>
</html>

View File

@ -0,0 +1,148 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP - Data Availability</title>
<link rel="stylesheet" type="text/css" href="../../css/fdsnws.css">
<link rel="stylesheet" type="text/css" href="../../js/tcal/tcal.css">
<script type="text/javascript" src="../../js/tcal/tcal.js"></script>
<script type="text/javascript" src="../../js/fdsnws-query.js"></script>
<script type="text/javascript">
A_TCALCONF['format'] = 'Y-m-dT00:00:00';
window.onload = fdsnwsInitQueryForm;
</script>
</head>
<body>
<p><a href="./">Parent Directory</a></p>
<h1>SeisComP Data Availability /query - URL Builder</h1>
<form id="query-form" action="query" method="GET">
<fieldset>
<legend>Time constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Start time</td>
<td><input type="text" size="10" maxlength="26" name="starttime" value="" class="tcal"/></td>
</tr>
<tr>
<td>End time</td>
<td><input type="text" size="10" maxlength="26" name="endtime" value="" class="tcal"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Channel constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Network</td>
<td><input type="text" size="10" name="network" value="" placeholder="AB,C?" /></td>
</tr>
<tr>
<td>Station</td>
<td><input type="text" size="10" name="station" value="" placeholder="ABC,D*" /></td>
</tr>
<tr>
<td>Location</td>
<td><input type="text" size="10" name="location" value="" placeholder="00" /></td>
</tr>
<tr>
<td>Channel</td>
<td><input type="text" size="10" name="channel" value="" placeholder="BH?" /></td>
</tr>
<tr>
<td>Quality</td>
<td><input type="text" size="10" name="quality" value="" placeholder="*" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Service specific constrains</legend>
<table class="builder">
<tbody>
<tr>
<td>Merge properties</td>
<td>
<select name="merge" multiple>
<option value="samplerate">Sample rate</option>
<option value="quality">Quality</option>
<option value="overlap">Overlap</option>
</select>
</td>
</tr>
<tr>
<td>Gap merge tolerance</td>
<td><input type="number" name="mergegaps" min="0" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Authentication</td>
<td><input type="checkbox" name="queryauth" value="queryauth"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Output control</legend>
<table class="builder">
<tbody>
<tr>
<td>Order by</td>
<td>
<select name="orderby" disabled="disabled">
<option value="">Stream ID (default)</option>
<option value="timespancount">Number of timespans (ascending)</option>
<option value="timespancount_desc">Number of timespans (descending)</option>
<option value="latestupdate">Update date (ascending)</option>
<option value="latestupdate_desc">Update date (descending)</option>
</select>
</td>
</tr>
<tr>
<td>Limit</td>
<td><input type="number" name="limit" min="0" step="10" value="" placeholder="100" /></td>
</tr>
<tr>
<td>Include restricted</td>
<td><input type="checkbox" name="includerestricted" value="true" /></td>
</tr>
<tr>
<td>Format</td>
<td>
<select name="format">
<option value="">Text (default)</option>
<option value="geocsv">GEO CSV</option>
<option value="json">JSON</option>
<option value="request">Request</option>
</select>
</td>
</tr>
<tr>
<td>No data 404</td>
<td><input type="checkbox" name="nodata" value="404" checked="checked" /></td>
</tr>
<tr>
<td>Show</td>
<td>
<select name="show" multiple>
<option value="latestupdate">Latest update</option>
</select>
</td>
</tr>
<tr>
<td>Exclude too large</td>
<td><input type="checkbox" name="excludetoolarge" value="true" /></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<fieldset>
<legend>URL</legend>
<p><a id="query-url" href=""></a></p>
</fieldset>
</body>
</html>

View File

@ -0,0 +1,59 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP - Data Availability</title>
</head>
<body>
<p><a href="../">Parent Directory</a></p>
<h1>SeisComP Data Availability Web Service</h1>
<p>The data availability web service returns detailed time span information of
what timeseries data is available at the DMC archive. The request type is
<em>HTTP-GET</em> and <em>HTTP-POST</em>. Please refer to <a
href="http://www.fdsn.org/webservices">http://www.fdsn.org/webservice</a> for
a complete service description.</p>
<h2>Available URLs</h2>
<ul>
<li>
<a href="query">query</a> - Produces list of continuous time spans for
selected channels (network, station, location, channel and quality) and
time ranges.
</li>
<li>
<a href="extent">extent</a> - Produces list of available time extents
(earliest to latest) for selected channels (network, station, location and
quality) and time ranges.
</li>
<li><a href="version">version</a></li>
<li><a href="application.wadl">application.wadl</a></li>
<li>builder - URL builder helping you to form your query
<ul>
<li><a href="builder-query">query</a> - continuous time spans</li>
<li><a href="builder-extent">extent</a> - data extents</li>
</ul>
</li>
</ul>
<h2>Feature Notes</h2>
<ul>
<li>back-end software: <a href="http://www.seiscomp.de">SeisComP</a></li>
<li>The IRISWS availability implementation truncates the timespans of the
returned data extents and segments to the requested start and end times (if
any). This implementation truncates the start and end time only for the
<em>request</em> format. The <em>text</em>, <em>geocsv</em> and
<em>json</em> format will return the exact time windows extracted from the
waveform archive.
</li>
<li><em>orderby</em> parameter not implemented for query request (to save
memory the data is streamed from the database, to support the merge operation,
the data needs to be ordered by time)</li>
<li>additional request parameters:
<ul>
<li><em>excludetoolarge</em> (query): boolean, default: <em>true</em></li>
</ul>
</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,150 @@
<?xml version="1.0"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3.org/Submission/wadl/wadl.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://wadl.dev.java.net/2009/02">
<resources base="/fdsnws/availability/1">
<resource path="query">
<method href="#queryGET"/>
<method href="#queryPOST"/>
</resource>
<resource path="queryauth">
<method href="#queryGET"/>
<method href="#queryPOST"/>
</resource>
<resource path="extent">
<method href="#extentGET"/>
<method href="#extentPOST"/>
</resource>
<resource path="extentauth">
<method href="#extentGET"/>
<method href="#extentPOST"/>
</resource>
<resource path="version">
<method name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
<resource path="application.wadl">
<method name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
</resources>
<method name="GET" id="queryGET">
<request>
<param name="starttime" style="query" type="xsd:dateTime"/>
<param name="endtime" style="query" type="xsd:dateTime"/>
<param name="network" style="query" type="xsd:string"/>
<param name="station" style="query" type="xsd:string"/>
<param name="location" style="query" type="xsd:string"/>
<param name="channel" style="query" type="xsd:string"/>
<param name="quality" style="query" type="xsd:string"/>
<param name="merge" style="query" type="xsd:string" repeating="true">
<option value="samplerate"/>
<option value="quality"/>
<option value="overlap"/>
</param>
<!-- not supported
<param name="orderby" style="query" type="xsd:string" default="nslc_time_quality_samplerate">
<option value="nslc_time_quality_samplerate"/>
<option value="latestupdate"/>
<option value="latestupdate_desc"/>
<option value="timespancount"/>
<option value="timespancount_desc"/>
</param-->
<param name="limit" style="query" type="xsd:int"/>
<param name="includerestricted" style="query" type="xsd:boolean" default="false"/>
<param name="format" style="query" type="xsd:string" default="text">
<option value="text" mediaType="text/plain"/>
<option value="geocsv" mediaType="text/csv"/>
<option value="json" mediaType="application/json"/>
<option value="request" mediaType="text/plain"/>
</param>
<param name="nodata" style="query" type="xsd:int" default="204">
<option value="204"/>
<option value="404"/>
</param>
<param name="show" style="query" type="xsd:string">
<option value="latestupdate"/>
</param>
<param name="mergegaps" style="query" type="xsd:float" default="0.0"/>
<!-- additional non standard parameter -->
<param name="excludetoolarge" style="query" type="xsd:boolean" default="true"/>
</request>
<response status="200">
<representation mediaType="text/plain"/>
<representation mediaType="text/csv"/>
<representation mediaType="application/json"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
<method name="POST" id="queryPOST">
<response status="200">
<representation mediaType="text/plain"/>
<representation mediaType="text/csv"/>
<representation mediaType="application/json"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
<method name="GET" id="extentGET">
<request>
<param name="starttime" style="query" type="xsd:dateTime"/>
<param name="endtime" style="query" type="xsd:dateTime"/>
<param name="network" style="query" type="xsd:string"/>
<param name="station" style="query" type="xsd:string"/>
<param name="location" style="query" type="xsd:string"/>
<param name="channel" style="query" type="xsd:string"/>
<param name="quality" style="query" type="xsd:string"/>
<param name="merge" style="query" type="xsd:string" repeating="true">
<option value="samplerate"/>
<option value="quality"/>
</param>
<param name="orderby" style="query" type="xsd:string" default="nslc_time_quality_samplerate">
<option value="nslc_time_quality_samplerate"/>
<option value="latestupdate"/>
<option value="latestupdate_desc"/>
<option value="timespancount"/>
<option value="timespancount_desc"/>
</param>
<param name="limit" style="query" type="xsd:int"/>
<param name="includerestricted" style="query" type="xsd:boolean" default="false"/>
<param name="format" style="query" type="xsd:string" default="text">
<option value="text" mediaType="text/plain"/>
<option value="geocsv" mediaType="text/csv"/>
<option value="json" mediaType="application/json"/>
<option value="request" mediaType="text/plain"/>
</param>
<param name="nodata" style="query" type="xsd:int" default="204">
<option value="204"/>
<option value="404"/>
</param>
</request>
<response status="200">
<representation mediaType="text/plain"/>
<representation mediaType="text/csv"/>
<representation mediaType="application/json"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
<method name="POST" id="extentPOST">
<response status="200">
<representation mediaType="text/plain"/>
<representation mediaType="text/csv"/>
<representation mediaType="application/json"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
</application>

View File

@ -0,0 +1,2 @@
<Catalogs>
</Catalogs>

View File

@ -0,0 +1,2 @@
<Contributors>
</Contributors>

View File

@ -0,0 +1,14 @@
#query-form fieldset {
width: 400px;
display: table-cell;
vertical-align: top;
}
fieldset > legend {
font-weight: bold;
}
input {
text-align: left;
}

View File

@ -0,0 +1,103 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP FDSNWS - DataSelect</title>
<link rel="stylesheet" type="text/css" href="../../css/fdsnws.css">
<link rel="stylesheet" type="text/css" href="../../js/tcal/tcal.css">
<script type="text/javascript" src="../../js/tcal/tcal.js"></script>
<script type="text/javascript" src="../../js/fdsnws-query.js"></script>
<script type="text/javascript">
A_TCALCONF['format'] = 'Y-m-dT00:00:00';
window.onload = fdsnwsInitQueryForm;
</script>
</head>
<body>
<p><a href="./">Parent Directory</a></p>
<h1>SeisComP FDSNWS DataSelect - URL Builder</h1>
<form id="query-form" action="query" method="GET">
<fieldset>
<legend>Time constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Start Time</td>
<td><input type="text" size="10" maxlength="26" name="starttime" value="" class="tcal"/></td>
</tr>
<tr>
<td>End Time</td>
<td><input type="text" size="10" maxlength="26" name="endtime" value="" class="tcal"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Channel constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Network</td>
<td><input type="text" size="10" name="network" value="" placeholder="AB,C?" /></td>
</tr>
<tr>
<td>Station</td>
<td><input type="text" size="10" name="station" value="" placeholder="ABC,D*" /></td>
</tr>
<tr>
<td>Location</td>
<td><input type="text" size="10" name="location" value="" placeholder="00" /></td>
</tr>
<tr>
<td>Channel</td>
<td><input type="text" size="10" name="channel" value="" placeholder="BH?" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Service specific constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Quality</td>
<td><select name="quality" disabled="disabled"><option value="B">B</option></select></td>
</tr>
<tr>
<td>Minimum Length (s)</td>
<td><input type="text" size="10" name="minimumlength" value="0.0" disabled="disabled"/></td>
</tr>
<tr>
<td>Longest Only</td>
<td><input type="checkbox" name="longestonly" value="false" disabled="disabled"/></td>
</tr>
<tr>
<td>Authentication</td>
<td><input type="checkbox" name="queryauth" value="queryauth"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Output control</legend>
<table class="builder">
<tbody>
<tr>
<td>Format</td>
<td><select name="format" disabled="disabled"><option value="miniseed">miniseed</option></select></td>
</tr>
<tr>
<td>No Data 404</td>
<td><input type="checkbox" name="nodata" value="404" checked="checked"/></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<fieldset>
<legend>URL</legend>
<p><a id="query-url" href=""></a></p>
</fieldset>
</body>
</html>

View File

@ -0,0 +1,50 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP FDSNWS - DataSelect</title>
</head>
<body>
<p><a href="../">Parent Directory</a></p>
<h1>SeisComP FDSNWS DataSelect Web Service</h1>
<p>The dataselect Web service provides access to time series data in <a
href="http://www.iris.edu/data/miniseed.htm">miniSEED</a> format. The data may
be filtered e.g. by time, station and network parameters. The request type is
<em>HTTP-GET</em> and <em>HTTP-POST</em>. Please refer to
<a href="http://www.fdsn.org/webservices">http://www.fdsn.org/webservice</a>
for a complete service description.</p>
<h2>Available URLs</h2>
<ul>
<li><a href="query">query</a></li>
<li><a href="queryauth">queryauth</a></li>
<li><a href="version">version</a></li>
<li><a href="application.wadl">application.wadl</a></li>
<li><a href="builder">builder</a></li>
<li><a href="auth">auth</a></li>
</ul>
<h2>Feature Notes</h2>
<ul>
<li>back-end software: <a href="http://www.seiscomp.de">SeisComP</a></li>
<li><em>quality</em> request parameter not implemented (information not
available in SeisComP)</li>
<li><em>minimumlength</em> request parameter not implemented</li>
<li><em>longestonly</em> request parameter not implemented</li>
<li>access to restricted networks and stations is only granted through the
<em>queryauth</em> method</li>
<li>
<b>No</b> trimming of miniSEED records to requested time window &mdash;
This FDSNWS implementation returns the records as available in its data
source, e.g., SDS archive. It is guaranteed that the requested time range
is within the returned data (if available in the archive) but not that it
is exactly the requested time range. FDSNWS does not trim and therefore
re-encode miniSEED records. The rationale for that is that miniSEED
records are probably further distributed and stored in other archives and
we do not see the point in modifying them. Furthermore we do not want to
increase the load on the web server with that extra processing step.
</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,65 @@
<?xml version="1.0"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3.org/Submission/wadl/wadl.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://wadl.dev.java.net/2009/02">
<resources base="/fdsnws/dataselect/1">
<resource path="query">
<method href="#queryGET"/>
<method href="#queryPOST"/>
</resource>
<resource path="queryauth">
<method href="#queryGET"/>
<method href="#queryPOST"/>
</resource>
<resource path="version">
<method name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
<resource path="application.wadl">
<method name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
</resources>
<method name="GET" id="queryGET">
<request>
<param name="starttime" style="query" type="xsd:dateTime"/>
<param name="endtime" style="query" type="xsd:dateTime"/>
<param name="network" style="query" type="xsd:string"/>
<param name="station" style="query" type="xsd:string"/>
<param name="location" style="query" type="xsd:string"/>
<param name="channel" style="query" type="xsd:string"/>
<param name="quality" style="query" default="B">
<option value="B"/>
<option value="M"/>
</param>
<param name="format" style="query" type="xsd:string" default="miniseed">
<option value="miniseed"/>
</param>
<param name="nodata" style="query" type="xsd:int" default="204">
<option value="204"/>
<option value="404"/>
</param>
</request>
<response status="200">
<representation mediaType="application/vnd.fdsn.mseed"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
<method name="POST" id="queryPOST">
<response status="200">
<representation mediaType="application/vnd.fdsn.mseed"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
</application>

View File

@ -0,0 +1,213 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP FDSNWS - Event</title>
<link rel="stylesheet" type="text/css" href="../../css/fdsnws.css">
<link rel="stylesheet" type="text/css" href="../../js/tcal/tcal.css">
<script type="text/javascript" src="../../js/tcal/tcal.js"></script>
<script type="text/javascript" src="../../js/fdsnws-query.js"></script>
<script type="text/javascript">
A_TCALCONF['format'] = 'Y-m-dT00:00:00';
window.onload = fdsnwsInitQueryForm;
</script>
</head>
<body>
<p><a href="./">Parent Directory</a></p>
<h1>SeisComP FDSNWS Event - URL Builder</h1>
<form id="query-form" action="query" method="GET">
<fieldset>
<legend>Time constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Start Time</td>
<td><input type="text" size="10" maxlength="26" name="starttime" value="" class="tcal"/></td>
</tr>
<tr>
<td>End Time</td>
<td><input type="text" size="10" maxlength="26" name="endtime" value="" class="tcal"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Geographic constraints</legend>
<input type="radio" id="loc-none" name="location" value=""><label for="loc-none">None</label><br>
<input type="radio" id="loc-bbox" name="location" value=""><label for="loc-bbox">Bounding Box</label><br>
<input type="radio" id="loc-circle" name="location" value=""><label for="loc-circle">Circle</label><br>
<table class="builder" id="loc-bbox-input">
<tbody>
<tr>
<td>Minimum Latitude</td>
<td><input type="number" name="minlatitude" min="-90" max="90" step="1" value="" placeholder="-90.0" /></td>
</tr>
<tr>
<td>Maximum Latitude</td>
<td><input type="number" name="maxlatitude" min="-90" max="90" step="1" value="" placeholder="90.0" /></td>
</tr>
<tr>
<td>Minimum Longitude</td>
<td><input type="number" name="minlongitude" min="-180" max="180" step="1" value="" placeholder="-180.0" /></td>
</tr>
<tr>
<td>Maximum Longitude</td>
<td><input type="number" name="maxlongitude" min="-180" max="180" step="1" value="" placeholder="180.0" /></td>
</tr>
</tbody>
</table>
<table class="builder" id="loc-circle-input">
<tbody>
<tr>
<td>Latitude</td>
<td><input type="number" name="latitude" min="-90" max="90" step="1" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Longitude</td>
<td><input type="number" name="longitude" min="-180" max="180" step="1" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Minimum Radius</td>
<td><input type="number" name="minradius" min="0" max="180" step="1" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Maximum Radius</td>
<td><input type="number" name="maxradius" min="0" max="180" step="1" value="" placeholder="180" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Service specific constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Minimum Depth (km)</td>
<td><input type="number" name="mindepth" min="-10" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Maximum Depth (km)</td>
<td><input type="number" name="maxdepth" min="-10" value="" placeholder="300.0" /></td>
</tr>
<tr>
<td>Minimum Magnitude</td>
<td><input type="number" name="minmagnitude" min="-1" max="12" step="0.1" value="" placeholder="2.0" /></td>
</tr>
<tr>
<td>Maximum Magnitude</td>
<td><input type="number" name="maxmagnitude" min="-1" max="12" step="0.1" value="" placeholder="5.0" /></td>
</tr>
<tr>
<td>Magnitude Type</td>
<td><input type="text" size="10" maxlength="10" name="magnitudetype" value="" placeholder="M" /></td>
</tr>
<tr>
<td>Event Type</td>
<td><input type="text" size="16" name="eventtype" value="" placeholder="earthquake,unknown" /></td>
</tr>
<tr>
<td>All Origins</td>
<td><input type="checkbox" name="includeallorigins" value="true" /></td>
</tr>
<tr>
<td>All Magnitudes</td>
<td><input type="checkbox" name="includeallmagnitudes" value="true" /></td>
</tr>
<tr>
<td>Arrivals</td>
<td><input type="checkbox" name="includearrivals" value="true" /></td>
</tr>
<tr title="Note: Picks are available only in combination with includearrivals=true">
<td>Exclude Picks</td>
<td><input type="checkbox" name="includepicks" value="false" /></td>
</tr>
<tr title="Include Preferred Focal Mechanism and Momenttensor Solution">
<td>Focal Mechanism</td>
<td><input type="checkbox" name="includefocalmechanism" value="true" /></td>
</tr>
<tr title="Include All Focal Mechanism and Momenttensor Solutions">
<td>All Focal Mechanisms</td>
<td><input type="checkbox" name="includeallfocalmechanisms" value="true" /></td>
</tr>
<tr title="Include Moment Tensor Station Contributions">
<td>MT Station Contributions</td>
<td><input type="checkbox" name="includestationmts" value="true" /></td>
</tr>
<tr>
<td>Include Comments</td>
<td><input type="checkbox" name="includecomments" value="true" /></td>
</tr>
<tr>
<td>Event ID</td>
<td><input type="text" size="10" name="eventid" value="" /></td>
</tr>
<tr>
<td>Limit</td>
<td><input type="number" name="limit" min="1" step="1" value="" placeholder="20" /></td>
</tr>
<tr>
<td>Offset</td>
<td><input type="number" name="offset" min="1" step="1" value="" placeholder="1" /></td>
</tr>
<tr>
<td>Order By</td>
<td>
<select name="orderby">
<option value="">Time descending (default)</option>
<option value="time-asc">Time ascending</option>
<option value="magnitude">Magnitude descending</option>
<option value="magnitude-asc">Magnitude ascending</option>
</select>
</td>
</tr>
<tr>
<td>Catalog</td>
<td><input type="text" size="10" name="catalog" value="" disabled="disabled" /></td>
</tr>
<tr>
<td>Contributor</td>
<td><input type="text" size="10" name="contributor" value="" placeholder="agency" /></td>
</tr>
<tr>
<td>Update After</td>
<td><input type="text" size="10" maxlength="26" name="updateafter" value="" class="tcal" disabled="disabled"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Output control</legend>
<table class="builder">
<tbody>
<tr>
<td>Format</td>
<td>
<select name="format">
<option value="">QuakeML (default)</option>
<option value="qml-rt">QuakeML-RT</option>
<option value="sc3ml">SeisComP XML</option>
<option value="text">Text (| delimited)</option>
<option value="csv">CSV (, delimited)</option>
</select>
</td>
</tr>
<tr>
<td>Formatted</td>
<td><input type="checkbox" name="formatted" value="true" /></td>
</tr>
<tr>
<td>No Data 404</td>
<td><input type="checkbox" name="nodata" value="404" checked="checked" /></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<fieldset>
<legend>URL</legend>
<p><a id="query-url" href=""></a></p>
</fieldset>
</body>
</html>

64
share/fdsnws/event.html Normal file
View File

@ -0,0 +1,64 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP FDSNWS - Event</title>
</head>
<body>
<p><a href="../">Parent Directory</a></p>
<h1>SeisComP FDSNWS Event Web Service</h1>
<p>The event Web service provides access to contributed origin and magnitude
estimates in <a href="https://quake.ethz.ch/quakeml">QuakeML</a> format.
Events may be filtered e.g. by hypocenter, time and magnitude parameters. The
request type is <em>HTTP-GET</em> and <em>HTTP-POST</em>. Please refer to <a
href="http://www.fdsn.org/webservices">http://www.fdsn.org/webservice</a> for
a complete service description.</p>
<h2>Available URLs</h2>
<ul>
<li><a href="query">query</a></li>
<li><a href="catalogs">catalogs</a></li>
<li><a href="contributors">contributors</a></li>
<li><a href="version">version</a></li>
<li><a href="application.wadl">application.wadl</a></li>
<li><a href="builder">builder</a></li>
</ul>
<h2>Feature Notes</h2>
<ul>
<li>back-end software: <a href="http://www.seiscomp.de">SeisComP</a></li>
<li><em>catalog</em> request parameter not implemented (information not
available in SeisComP)</li>
<li><em>contributor</em> request parameter is mapped to the
<em>agencyID</em></li>
<li><em>updatedafter</em> request parameter not implemented: The last
modification time in SeisComP is tracked on the object level. If a child
of an object is updated the update time is not propagated to all parents.
In order to check if a station was updated all children must be evaluated
recursively. This operation would be much to expensive.</li>
<li>additional request parameters, effective only for xml output:
<ul>
<li><em>includecomments[,comments]</em>: boolean, default: <em>false</em></li>
<li><em>includepicks[,picks]</em>: boolean, default: <em>true</em>,
available only in combination with <b><em>includearrivals=true</em></b></li>
<li><em>formatted</em>: boolean, default: <em>false</em></li>
<li><em>includefocalmechanism[,focalmechanism,fm]</em>: boolean, default: <em>false</em></li>
<li><em>includeallfocalmechanisms[,allfocalmechanisms,allfms]</em>: boolean, default: <em>false</em></li>
<li><em>includestationmts[,stationmts,stamts]</em>: boolean, default: <em>false</em></li>
</ul>
</li>
<li>additional values of request parameters:
<ul>
<li><em>show</em>
<ul>
<li>standard: [xml, text]</li>
<li>additional: [qml (=xml), qml-rt, sc3ml, csv]</li>
<li>default: xml</li>
</ul>
</li>
</ul>
</li>
</ul>
</body>
</html>

139
share/fdsnws/event.wadl Normal file
View File

@ -0,0 +1,139 @@
<?xml version="1.0"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3.org/Submission/wadl/wadl.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://wadl.dev.java.net/2009/02">
<resources base="/fdsnws/event/1">
<resource path="query">
<method name="GET">
<request>
<param name="starttime" style="query" type="xsd:dateTime"/>
<param name="endtime" style="query" type="xsd:dateTime"/>
<param name="minlatitude" style="query" type="xsd:float"/>
<param name="maxlatitude" style="query" type="xsd:float"/>
<param name="minlongitude" style="query" type="xsd:float"/>
<param name="maxlongitude" style="query" type="xsd:float"/>
<param name="latitude" style="query" type="xsd:float"/>
<param name="longitude" style="query" type="xsd:float"/>
<param name="minradius" style="query" type="xsd:float"/>
<param name="maxradius" style="query" type="xsd:float"/>
<param name="mindepth" style="query" type="xsd:float"/>
<param name="maxdepth" style="query" type="xsd:float"/>
<param name="minmagnitude" style="query" type="xsd:float"/>
<param name="maxmagnitude" style="query" type="xsd:float"/>
<param name="magnitudetype" style="query" type="xsd:string"/>
<param name="eventtype" style="query" type="xsd:string"/>
<param name="includeallorigins" style="query" type="xsd:boolean" default="false"/>
<param name="includeallmagnitudes" style="query" type="xsd:boolean" default="false"/>
<param name="includearrivals" style="query" type="xsd:boolean" default="false"/>
<param name="eventid" style="query" repeating="true"/>
<param name="limit" style="query" type="xsd:int"/>
<param name="offset" style="query" type="xsd:int" default="1">
<doc title="definition">
The FDSNWS specification uses a weird definition of
an offset where the first element is not addressed
by 'offset=0' but 'offset=1'. So the implementation
will decrement the offset value by one when
generating the SQL database query.
</doc>
</param>
<param name="orderby" style="query" type="xsd:string" default="time">
<option value="time"/>
<option value="time-asc"/>
<option value="magnitude"/>
<option value="magnitude-asc"/>
</param>
<param name="contributor" style="query" type="xsd:string"/>
<param name="catalog" style="query" type="xsd:string"/>
<!-- not implemented -->
<!--param name="updateafter" style="query" type="xsd:dateTime"/-->
<param name="format" style="query" type="xsd:string" default="xml">
<option value="xml" mediaType="application/xml"/>
<option value="text" mediaType="text/plain"/>
<!-- additional, non standard options -->
<option value="qml" mediaType="application/xml"/>
<option value="qml-rt" mediaType="application/xml"/>
<option value="sc3ml" mediaType="application/xml"/>
<option value="csv" mediaType="text/plain"/>
</param>
<param name="nodata" style="query" type="xsd:int" default="204">
<option value="204"/>
<option value="404"/>
</param>
<!-- additional, non standard parameters, effective only in XML output -->
<param name="includepicks" style="query" type="xsd:boolean" default="true">
<doc title="definition">
Adds pick information to arrivals. Note: Picks will
only be available if arrivals are requested.
</doc>
</param>
<param name="includefocalmechanism" style="query" type="xsd:boolean" default="false">
<doc title="definition">
Adds peferred focal mechanism information including momentensor solution if available.
</doc>
</param>
<param name="includeallfocalmechanisms" style="query" type="xsd:boolean" default="false">
<doc title="definition">
Adds all focal mechanism information including momentensor solution if available.
</doc>
</param>
<param name="includestationmts" style="query" type="xsd:boolean" default="false">
<doc title="definition">
Adds all momentensor station contributions.
</doc>
</param>
<!-- includecomments parameter, requires hideComments configuration parameter to be disabled -->
<param name="includecomments" style="query" type="xsd:boolean" default="false">
<doc title="definition">
SeisComP supports comments for most datamodel
objects. This parameter controls whether or not
comments are included in the output document.
</doc>
</param>
<param name="formatted" style="query" type="xsd:boolean" default="false">
<doc>
Controls formatted (pretty print) output.
</doc>
</param>
</request>
<response status="200">
<representation mediaType="application/xml"/>
<representation mediaType="text/plain"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
<resource path="catalogs">
<method name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
<resource path="contributors">
<method name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
<resource path="version">
<method name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
<resource path="application.wadl">
<method name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
</resources>
</application>

BIN
share/fdsnws/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,160 @@
function serialize(form, loc='query') {
if ( !form || form.nodeName !== "FORM" ) {
return;
}
var query = loc;
var element, option, i, j, q = [];
for ( i = 0; element = form.elements[i]; i++ ) {
if ( element.name === "" || element.disabled || element.offsetParent === null ) {
continue;
}
// the queryauth input is treated separately
if ( element.name === 'queryauth' ) {
if ( element.checked ) {
query = element.value;
}
continue;
}
switch ( element.nodeName ) {
case 'INPUT':
if ( element.value == "" ) {
break;
}
switch ( element.type ) {
case 'text':
case 'number':
case 'hidden':
case 'password':
case 'button':
case 'reset':
case 'submit':
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
case 'checkbox':
case 'radio':
if ( element.checked ) {
q.push(element.name + "=" + encodeURIComponent(element.value));
}
break;
case 'file':
break;
}
break;
case 'TEXTAREA':
if ( element.value == "" ) {
break;
}
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
case 'SELECT':
switch ( element.type ) {
case 'select-one':
if ( element.value == "" ) {
break;
}
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
case 'select-multiple':
values = null
for ( j = 0; option = element.options[j]; j++ ) {
if ( option.selected ) {
v = encodeURIComponent(option.value)
if ( values === null ) {
values = v;
}
else {
values += "," + v;
}
}
}
if ( values !== null ) {
q.push(element.name + "=" + values);
}
break;
}
break;
case 'BUTTON':
if ( element.value == "" ) {
break;
}
switch ( element.type ) {
case 'reset':
case 'submit':
case 'button':
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
}
break;
}
}
var params = q.join("&");
return params.length === 0 ? query : query + '?' + params;
}
function fdsnwsInitQueryForm() {
return fdsnwsInitQueryFormLocation('query')
}
function fdsnwsInitQueryFormLocation(loc) {
var queryForm = document.getElementById('query-form');
var queryURL = document.getElementById('query-url');
function updateQueryURL() {
var path = window.location.pathname.split('/');
path.pop();
var url = window.location.origin + path.join('/') + '/' +
serialize(queryForm, loc)
queryURL.setAttribute('href', url);
queryURL.innerHTML = url;
}
function toggleLocation() {
for ( i = 0; radio = locRadios[i]; i++ ) {
var input = document.getElementById(radio.id + '-input');
if ( input ) {
//alert('input: ' + input.id);
input.style.display = radio.checked ? 'block' : 'none';
}
}
updateQueryURL();
}
var element, i;
var elements = queryForm.getElementsByTagName('input');
var locRadios = []
for ( i = 0; element = elements[i]; i++ ) {
if ( element.type === 'radio' && element.name === 'location' ) {
locRadios.push(element);
element.onclick = toggleLocation;
}
else {
element.oninput = updateQueryURL
element.onchange = updateQueryURL
}
}
var elements = queryForm.getElementsByTagName('select');
for ( i = 0; element = elements[i]; i++ ) {
element.onchange = updateQueryURL
}
toggleLocation();
updateQueryURL();
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

View File

@ -0,0 +1,100 @@
/*
Stylesheet for Tigra Calendar v5.0
Product is Public Domain (Free for any kind of applicaiton, customization and derivative works are allowed)
URL: http://www.softcomplex.com/products/tigra_calendar/
- all image paths are relative to path of stylesheet
- the styles below can be moved into the document or in existing stylesheet
*/
/* input box in default state */
.tcalInput {
background: url('img/cal.gif') 100% 50% no-repeat;
padding-right: 20px;
cursor: pointer;
}
/* additional properties for input boxe in activated state, above still applies unless in conflict */
.tcalActive {
background-image: url('img/no_cal.gif');
}
/* container of calendar's pop-up */
#tcal {
position: absolute;
visibility: hidden;
z-index: 100;
width: 170px;
background-color: white;
margin-top: 2px;
padding: 0 2px 2px 2px;
border: 1px solid silver;
-moz-box-shadow: 3px 3px 4px silver;
-webkit-box-shadow: 3px 3px 4px silver;
box-shadow: 3px 3px 4px silver;
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='silver')";
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='silver');
}
/* table containing navigation and current month */
#tcalControls {
border-collapse: collapse;
border: 0;
width: 100%;
}
#tcalControls td {
border-collapse: collapse;
border: 0;
padding: 0;
width: 16px;
background-position: 50% 50%;
background-repeat: no-repeat;
cursor: pointer;
}
#tcalControls th {
border-collapse: collapse;
border: 0;
padding: 0;
line-height: 25px;
font-size: 10px;
text-align: center;
font-family: Tahoma, Geneva, sans-serif;
font-weight: bold;
white-space: nowrap;
}
#tcalPrevYear { background-image: url('img/prev_year.gif'); }
#tcalPrevMonth { background-image: url('img/prev_mon.gif'); }
#tcalNextMonth { background-image: url('img/next_mon.gif'); }
#tcalNextYear { background-image: url('img/next_year.gif'); }
/* table containing week days header and calendar grid */
#tcalGrid {
border-collapse: collapse;
border: 1px solid silver;
width: 100%;
}
#tcalGrid th {
border: 1px solid silver;
border-collapse: collapse;
padding: 3px 0;
text-align: center;
font-family: Tahoma, Geneva, sans-serif;
font-size: 10px;
background-color: gray;
color: white;
}
#tcalGrid td {
border: 0;
border-collapse: collapse;
padding: 2px 0;
text-align: center;
font-family: Tahoma, Geneva, sans-serif;
width: 14%;
font-size: 11px;
cursor: pointer;
}
#tcalGrid td.tcalOtherMonth { color: silver; }
#tcalGrid td.tcalWeekend { background-color: #ACD6F5; }
#tcalGrid td.tcalToday { border: 1px solid red; }
#tcalGrid td.tcalSelected { background-color: #FFB3BE; }

View File

@ -0,0 +1,355 @@
// Tigra Calendar v5.2 (11/20/2011)
// http://www.softcomplex.com/products/tigra_calendar/
// License: Public Domain... You're welcome.
// default settins - this structure can be moved in separate file in multilangual applications
var A_TCALCONF = {
'cssprefix' : 'tcal',
'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
'longwdays' : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
'yearscroll' : true, // show year scroller
'weekstart' : 0, // first day of week: 0-Su or 1-Mo
'prevyear' : 'Previous Year',
'nextyear' : 'Next Year',
'prevmonth' : 'Previous Month',
'nextmonth' : 'Next Month',
'format' : 'm/d/Y' // 'd-m-Y', Y-m-d', 'l, F jS Y'
};
var A_TCALTOKENS = [
// A full numeric representation of a year, 4 digits
{'t': 'Y', 'r': '19\\d{2}|20\\d{2}', 'p': function (d_date, n_value) { d_date.setFullYear(Number(n_value)); return d_date; }, 'g': function (d_date) { var n_year = d_date.getFullYear(); return n_year; }},
// Numeric representation of a month, with leading zeros
{'t': 'm', 'r': '0?[1-9]|1[0-2]', 'p': function (d_date, n_value) { d_date.setMonth(Number(n_value) - 1); return d_date; }, 'g': function (d_date) { var n_month = d_date.getMonth() + 1; return (n_month < 10 ? '0' : '') + n_month }},
// A full textual representation of a month, such as January or March
{'t': 'F', 'r': A_TCALCONF.months.join('|'), 'p': function (d_date, s_value) { for (var m = 0; m < 12; m++) if (A_TCALCONF.months[m] == s_value) { d_date.setMonth(m); return d_date; }}, 'g': function (d_date) { return A_TCALCONF.months[d_date.getMonth()]; }},
// Day of the month, 2 digits with leading zeros
{'t': 'd', 'r': '0?[1-9]|[12][0-9]|3[01]', 'p': function (d_date, n_value) { d_date.setDate(Number(n_value)); if (d_date.getDate() != n_value) d_date.setDate(0); return d_date }, 'g': function (d_date) { var n_date = d_date.getDate(); return (n_date < 10 ? '0' : '') + n_date; }},
// Day of the month without leading zeros
{'t': 'j', 'r': '0?[1-9]|[12][0-9]|3[01]', 'p': function (d_date, n_value) { d_date.setDate(Number(n_value)); if (d_date.getDate() != n_value) d_date.setDate(0); return d_date }, 'g': function (d_date) { var n_date = d_date.getDate(); return n_date; }},
// A full textual representation of the day of the week
{'t': 'l', 'r': A_TCALCONF.longwdays.join('|'), 'p': function (d_date, s_value) { return d_date }, 'g': function (d_date) { return A_TCALCONF.longwdays[d_date.getDay()]; }},
// English ordinal suffix for the day of the month, 2 characters
{'t': 'S', 'r': 'st|nd|rd|th', 'p': function (d_date, s_value) { return d_date }, 'g': function (d_date) { n_date = d_date.getDate(); if (n_date % 10 == 1 && n_date != 11) return 'st'; if (n_date % 10 == 2 && n_date != 12) return 'nd'; if (n_date % 10 == 3 && n_date != 13) return 'rd'; return 'th'; }}
];
function f_tcalGetHTML (d_date) {
var e_input = f_tcalGetInputs(true);
if (!e_input) return;
var s_pfx = A_TCALCONF.cssprefix,
s_format = A_TCALCONF.format;
// today from config or client date
var d_today = f_tcalParseDate(A_TCALCONF.today, A_TCALCONF.format);
if (!d_today)
d_today = f_tcalResetTime(new Date());
// selected date from input or config or today
var d_selected = f_tcalParseDate(e_input.value, s_format);
if (!d_selected)
d_selected = f_tcalParseDate(A_TCALCONF.selected, A_TCALCONF.format);
if (!d_selected)
d_selected = new Date(d_today);
// show calendar for passed or selected date
d_date = d_date ? f_tcalResetTime(d_date) : new Date(d_selected);
var d_firstDay = new Date(d_date);
d_firstDay.setDate(1);
d_firstDay.setDate(1 - (7 + d_firstDay.getDay() - A_TCALCONF.weekstart) % 7);
var a_class, s_html = '<table id="' + s_pfx + 'Controls"><tbody><tr>'
+ (A_TCALCONF.yearscroll ? '<td id="' + s_pfx + 'PrevYear" ' + f_tcalRelDate(d_date, -1, 'y') + ' title="' + A_TCALCONF.prevyear + '"></td>' : '')
+ '<td id="' + s_pfx + 'PrevMonth"' + f_tcalRelDate(d_date, -1) + ' title="' + A_TCALCONF.prevmonth + '"></td><th>'
+ A_TCALCONF.months[d_date.getMonth()] + ' ' + d_date.getFullYear()
+ '</th><td id="' + s_pfx + 'NextMonth"' + f_tcalRelDate(d_date, 1) + ' title="' + A_TCALCONF.nextmonth + '"></td>'
+ (A_TCALCONF.yearscroll ? '<td id="' + s_pfx + 'NextYear"' + f_tcalRelDate(d_date, 1, 'y') + ' title="' + A_TCALCONF.nextyear + '"></td>' : '')
+ '</tr></tbody></table><table id="' + s_pfx + 'Grid"><tbody><tr>';
// print weekdays titles
for (var i = 0; i < 7; i++)
s_html += '<th>' + A_TCALCONF.weekdays[(A_TCALCONF.weekstart + i) % 7] + '</th>';
s_html += '</tr>' ;
// print calendar table
var n_date, n_month, d_current = new Date(d_firstDay);
while (d_current.getMonth() == d_date.getMonth() ||
d_current.getMonth() == d_firstDay.getMonth()) {
s_html +='<tr>';
for (var n_wday = 0; n_wday < 7; n_wday++) {
a_class = [];
n_date = d_current.getDate();
n_month = d_current.getMonth();
if (d_current.getMonth() != d_date.getMonth())
a_class[a_class.length] = s_pfx + 'OtherMonth';
if (d_current.getDay() == 0 || d_current.getDay() == 6)
a_class[a_class.length] = s_pfx + 'Weekend';
if (d_current.valueOf() == d_today.valueOf())
a_class[a_class.length] = s_pfx + 'Today';
if (d_current.valueOf() == d_selected.valueOf())
a_class[a_class.length] = s_pfx + 'Selected';
s_html += '<td' + f_tcalRelDate(d_current) + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>';
d_current.setDate(++n_date);
}
s_html +='</tr>';
}
s_html +='</tbody></table>';
return s_html;
}
function f_tcalRelDate (d_date, d_diff, s_units) {
var s_units = (s_units == 'y' ? 'FullYear' : 'Month');
var d_result = new Date(d_date);
if (d_diff) {
d_result['set' + s_units](d_date['get' + s_units]() + d_diff);
if (d_result.getDate() != d_date.getDate())
d_result.setDate(0);
}
return ' onclick="f_tcalUpdate(' + d_result.valueOf() + (d_diff ? ',1' : '') + ')"';
}
function f_tcalResetTime (d_date) {
d_date.setMilliseconds(0);
d_date.setSeconds(0);
d_date.setMinutes(0);
d_date.setHours(12);
return d_date;
}
// closes calendar and returns all inputs to default state
function f_tcalCancel () {
var s_pfx = A_TCALCONF.cssprefix;
var e_cal = document.getElementById(s_pfx);
if (e_cal)
e_cal.style.visibility = '';
var a_inputs = f_tcalGetInputs();
for (var n = 0; n < a_inputs.length; n++) {
f_tcalRemoveClass(a_inputs[n], s_pfx + 'Active');
// gempa fix: fire onchange event
if (a_inputs[n].onchange) {
a_inputs[n].onchange();
}
}
}
function f_tcalUpdate (n_date, b_keepOpen) {
var e_input = f_tcalGetInputs(true);
if (!e_input) return;
d_date = new Date(n_date);
var s_pfx = A_TCALCONF.cssprefix;
if (b_keepOpen) {
var e_cal = document.getElementById(s_pfx);
if (!e_cal || e_cal.style.visibility != 'visible') return;
e_cal.innerHTML = f_tcalGetHTML(d_date, e_input);
}
else {
e_input.value = f_tcalGenerateDate(d_date, A_TCALCONF.format);
f_tcalCancel();
}
}
function f_tcalOnClick () {
// see if already opened
var s_pfx = A_TCALCONF.cssprefix;
var s_activeClass = s_pfx + 'Active';
var b_close = f_tcalHasClass(this, s_activeClass);
// close all clalendars
f_tcalCancel();
if (b_close) return;
// get position of input
f_tcalAddClass(this, s_activeClass);
var n_left = f_getPosition (this, 'Left'),
n_top = f_getPosition (this, 'Top') + this.offsetHeight;
var e_cal = document.getElementById(s_pfx);
if (!e_cal) {
e_cal = document.createElement('div');
e_cal.onselectstart = function () { return false };
e_cal.id = s_pfx;
document.getElementsByTagName("body").item(0).appendChild(e_cal);
}
e_cal.innerHTML = f_tcalGetHTML(null);
e_cal.style.top = n_top + 'px';
e_cal.style.left = (n_left + this.offsetWidth - e_cal.offsetWidth) + 'px';
e_cal.style.visibility = 'visible';
}
function f_tcalParseDate (s_date, s_format) {
if (!s_date) return;
var s_char, s_regexp = '^', a_tokens = {}, a_options, n_token = 0;
for (var n = 0; n < s_format.length; n++) {
s_char = s_format.charAt(n);
if (A_TCALTOKENS_IDX[s_char]) {
a_tokens[s_char] = ++n_token;
s_regexp += '(' + A_TCALTOKENS_IDX[s_char]['r'] + ')';
}
else if (s_char == ' ')
s_regexp += '\\s';
else
s_regexp += (s_char.match(/[\w\d]/) ? '' : '\\') + s_char;
}
var r_date = new RegExp(s_regexp + '$');
if (!s_date.match(r_date)) return;
var s_val, d_date = f_tcalResetTime(new Date());
d_date.setDate(1);
for (n = 0; n < A_TCALTOKENS.length; n++) {
s_char = A_TCALTOKENS[n]['t'];
if (!a_tokens[s_char])
continue;
s_val = RegExp['$' + a_tokens[s_char]];
d_date = A_TCALTOKENS[n]['p'](d_date, s_val);
}
return d_date;
}
function f_tcalGenerateDate (d_date, s_format) {
var s_char, s_date = '';
for (var n = 0; n < s_format.length; n++) {
s_char = s_format.charAt(n);
s_date += A_TCALTOKENS_IDX[s_char] ? A_TCALTOKENS_IDX[s_char]['g'](d_date) : s_char;
}
return s_date;
}
function f_tcalGetInputs (b_active) {
var a_inputs = document.getElementsByTagName('input'),
e_input, s_rel, a_result = [];
for (n = 0; n < a_inputs.length; n++) {
e_input = a_inputs[n];
if (!e_input.type || e_input.type != 'text')
continue;
if (!f_tcalHasClass(e_input, 'tcal'))
continue;
if (b_active && f_tcalHasClass(e_input, A_TCALCONF.cssprefix + 'Active'))
return e_input;
a_result[a_result.length] = e_input;
}
return b_active ? null : a_result;
}
function f_tcalHasClass (e_elem, s_class) {
var s_classes = e_elem.className;
if (!s_classes)
return false;
var a_classes = s_classes.split(' ');
for (var n = 0; n < a_classes.length; n++)
if (a_classes[n] == s_class)
return true;
return false;
}
function f_tcalAddClass (e_elem, s_class) {
if (f_tcalHasClass (e_elem, s_class))
return;
var s_classes = e_elem.className;
e_elem.className = (s_classes ? s_classes + ' ' : '') + s_class;
}
function f_tcalRemoveClass (e_elem, s_class) {
var s_classes = e_elem.className;
if (!s_classes || s_classes.indexOf(s_class) == -1)
return false;
var a_classes = s_classes.split(' '),
a_newClasses = [];
for (var n = 0; n < a_classes.length; n++) {
if (a_classes[n] == s_class)
continue;
a_newClasses[a_newClasses.length] = a_classes[n];
}
e_elem.className = a_newClasses.join(' ');
return true;
}
function f_getPosition (e_elemRef, s_coord) {
var n_pos = 0, n_offset,
e_elem = e_elemRef;
while (e_elem) {
n_offset = e_elem["offset" + s_coord];
n_pos += n_offset;
e_elem = e_elem.offsetParent;
}
e_elem = e_elemRef;
while (e_elem != document.body) {
n_offset = e_elem["scroll" + s_coord];
if (n_offset && e_elem.style.overflow == 'scroll')
n_pos -= n_offset;
e_elem = e_elem.parentNode;
}
return n_pos;
}
function f_tcalInit () {
if (!document.getElementsByTagName)
return;
var e_input, a_inputs = f_tcalGetInputs();
for (var n = 0; n < a_inputs.length; n++) {
e_input = a_inputs[n];
e_input.onclick = f_tcalOnClick;
f_tcalAddClass(e_input, A_TCALCONF.cssprefix + 'Input');
}
window.A_TCALTOKENS_IDX = {};
for (n = 0; n < A_TCALTOKENS.length; n++)
A_TCALTOKENS_IDX[A_TCALTOKENS[n]['t']] = A_TCALTOKENS[n];
}
function f_tcalAddOnload (f_func) {
if (document.addEventListener) {
window.addEventListener('load', f_func, false);
}
else if (window.attachEvent) {
window.attachEvent('onload', f_func);
}
else {
var f_onLoad = window.onload;
if (typeof window.onload != 'function') {
window.onload = f_func;
}
else {
window.onload = function() {
f_onLoad();
f_func();
}
}
}
}
f_tcalAddOnload (f_tcalInit);

View File

@ -0,0 +1,187 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP FDSNWS - Station</title>
<link rel="stylesheet" type="text/css" href="../../css/fdsnws.css">
<link rel="stylesheet" type="text/css" href="../../js/tcal/tcal.css">
<script type="text/javascript" src="../../js/tcal/tcal.js"></script>
<script type="text/javascript" src="../../js/fdsnws-query.js"></script>
<script type="text/javascript">
A_TCALCONF['format'] = 'Y-m-dT00:00:00';
window.onload = fdsnwsInitQueryForm;
</script>
</head>
<body>
<p><a href="./">Parent Directory</a></p>
<h1>SeisComP FDSNWS Station - URL Builder</h1>
<form id="query-form" action="query" method="GET">
<fieldset>
<legend>Time constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Start Time</td>
<td><input type="text" size="10" maxlength="26" name="starttime" value="" class="tcal"/></td>
</tr>
<tr>
<td>End Time</td>
<td><input type="text" size="10" maxlength="26" name="endtime" value="" class="tcal"/></td>
</tr>
<tr>
<td>Start Before</td>
<td><input type="text" size="10" maxlength="26" name="startbefore" value="" class="tcal"/></td>
</tr>
<tr>
<td>Start After</td>
<td><input type="text" size="10" maxlength="26" name="startafter" value="" class="tcal"/></td>
</tr>
<tr>
<td>End Before</td>
<td><input type="text" size="10" maxlength="26" name="endbefore" value="" class="tcal"/></td>
</tr>
<tr>
<td>End After</td>
<td><input type="text" size="10" maxlength="26" name="endafter" value="" class="tcal"/></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Channel constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Network</td>
<td><input type="text" size="10" name="network" value="" placeholder="AB,C?" /></td>
</tr>
<tr>
<td>Station</td>
<td><input type="text" size="10" name="station" value="" placeholder="ABC,D*" /></td>
</tr>
<tr>
<td>Location</td>
<td><input type="text" size="10" name="location" value="" placeholder="00" /></td>
</tr>
<tr>
<td>Channel</td>
<td><input type="text" size="10" name="channel" value="" placeholder="BH?" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Geographic constraints</legend>
<input type="radio" id="loc-none" name="location" value=""><label for="loc-none">None</label><br>
<input type="radio" id="loc-bbox" name="location" value=""><label for="loc-bbox">Bounding Box</label><br>
<input type="radio" id="loc-circle" name="location" value=""><label for="loc-circle">Circle</label><br>
<table class="builder" id="loc-bbox-input">
<tbody>
<tr>
<td>Minimum Latitude</td>
<td><input type="number" name="minlatitude" min="-90" max="90" step="1" value="" placeholder="-90.0" /></td>
</tr>
<tr>
<td>Maximum Latitude</td>
<td><input type="number" name="maxlatitude" min="-90" max="90" step="1" value="" placeholder="90.0" /></td>
</tr>
<tr>
<td>Minimum Longitude</td>
<td><input type="number" name="minlongitude" min="-180" max="180" step="1" value="" placeholder="-180.0" /></td>
</tr>
<tr>
<td>Maximum Longitude</td>
<td><input type="number" name="maxlongitude" min="-180" max="180" step="1" value="" placeholder="180.0" /></td>
</tr>
</tbody>
</table>
<table class="builder" id="loc-circle-input">
<tbody>
<tr>
<td>Latitude</td>
<td><input type="number" name="latitude" min="-90" max="90" step="1" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Longitude</td>
<td><input type="number" name="longitude" min="-180" max="180" step="1" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Minimum Radius</td>
<td><input type="number" name="minradius" min="0" max="180" step="1" value="" placeholder="0.0" /></td>
</tr>
<tr>
<td>Maximum Radius</td>
<td><input type="number" name="maxradius" min="0" max="180" step="1" value="" placeholder="180" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Service specific constraints</legend>
<table class="builder">
<tbody>
<tr>
<td>Level</td>
<td>
<select name="level">
<option value="network">Network</option>
<option value="" selected="selected">Station (default)</option>
<option value="channel">Channel</option>
<option value="response">Response</option>
</select>
</td>
</tr>
<tr>
<td>Exclude Restricted Channels</td>
<td><input type="checkbox" name="includerestricted" value="false" /></td>
</tr>
<tr>
<td>Include Data Availability</td>
<td><input type="checkbox" name="includeavailability" value="true" /></td>
</tr>
<tr>
<td>Update After</td>
<td><input type="text" size="10" maxlength="26" name="updateafter" value="" class="tcal" disabled="disabled" /></td>
</tr>
<tr>
<td>Match Time Series</td>
<td><input type="checkbox" name="matchtimeseries" value="true" /></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>Output control</legend>
<table class="builder">
<tbody>
<tr>
<td>Format</td>
<td>
<select name="format">
<option value="">FDSN Station XML (default)</option>
<option value="text">Text (| delimited)</option>
<option value="sc3ml">SeisComP XML</option>
<option value="stationxml">Station XML (deprecated)</option>
</select>
</td>
</tr>
<tr>
<td>Formatted</td>
<td><input type="checkbox" name="formatted" value="true" /></td>
</tr>
<tr>
<td>No Data 404</td>
<td><input type="checkbox" name="nodata" value="404" checked="checked" /></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<fieldset>
<legend>URL</legend>
<p><a id="query-url" href=""></a></p>
</fieldset>
</body>
</html>

55
share/fdsnws/station.html Normal file
View File

@ -0,0 +1,55 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="gempa GmbH">
<title>SeisComP FDSNWS - Station</title>
</head>
<body>
<p><a href="../">Parent Directory</a></p>
<h1>SeisComP FDSNWS Station Web Service</h1>
<p>The station Web service provides access to network, station, channel and
response metadata in <a href="http://www.fdsn.org/xml/station">FDSN Station
XML</a> format. The metadata may be filtered e.g. by geographic region and
time, also the information depth level is selectable. The
request type is <em>HTTP-GET</em>. Please refer to
<a href="http://www.fdsn.org/webservices">http://www.fdsn.org/webservice</a>
for a complete service description.</p>
<h2>Available URLs</h2>
<ul>
<li><a href="query">query</a></li>
<li><a href="version">version</a></li>
<li><a href="application.wadl">application.wadl</a></li>
<li><a href="builder">builder</a></li>
</ul>
<h2>Feature Notes</h2>
<ul>
<li>back-end software: <a href="http://www.seiscomp.de">SeisComP</a></li>
<li><em>matchtimeseries</em> request parameter only available if
dataavailability information is enabled via configuration</li>
<li><em>updatedafter</em> request parameter not implemented: The last
modification time in SeisComP is tracked on the object level. If a child
of an object is updated the update time is not propagated to all parents.
In order to check if a station was updated all children must be evaluated
recursively. This operation would be much to expensive.</li>
<li>additional request parameters, effective only for xml output:
<ul>
<li><em>formatted</em>: boolean, default: <em>false</em></li>
</ul>
</li>
<li>additional values of request parameters:
<ul>
<li><em>format</em>
<ul>
<li>standard: [xml, text]</li>
<li>additional: [fdsnxml (=xml), stationxml, sc3ml]</li>
<li>default: xml</li>
</ul>
</li>
</ul>
</li>
</ul>
</body>
</html>

95
share/fdsnws/station.wadl Normal file
View File

@ -0,0 +1,95 @@
<?xml version="1.0"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3.org/Submission/wadl/wadl.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://wadl.dev.java.net/2009/02">
<resources base="/fdsnws/station/1">
<resource path="query">
<method name="GET">
<request>
<param name="starttime" style="query" type="xsd:dateTime"/>
<param name="endtime" style="query" type="xsd:dateTime"/>
<param name="startbefore" style="query" type="xsd:dateTime"/>
<param name="startafter" style="query" type="xsd:dateTime"/>
<param name="endbefore" style="query" type="xsd:dateTime"/>
<param name="endafter" style="query" type="xsd:dateTime"/>
<param name="network" style="query" type="xsd:string"/>
<param name="station" style="query" type="xsd:string"/>
<param name="location" style="query" type="xsd:string"/>
<param name="channel" style="query" type="xsd:string"/>
<param name="minlatitude" style="query" type="xsd:float"/>
<param name="maxlatitude" style="query" type="xsd:float"/>
<param name="minlongitude" style="query" type="xsd:float"/>
<param name="maxlongitude" style="query" type="xsd:float"/>
<param name="latitude" style="query" type="xsd:float"/>
<param name="longitude" style="query" type="xsd:float"/>
<param name="minradius" style="query" type="xsd:float"/>
<param name="maxradius" style="query" type="xsd:float"/>
<param name="level" style="query" type="xsd:string" default="station">
<option value="network"/>
<option value="station"/>
<option value="channel"/>
<option value="response"/>
</param>
<param name="includerestricted" style="query" type="xsd:boolean" default="false"/>
<param name="includeavailability" style="query" type="xsd:boolean" default="false"/>
<!-- matchtimeseries parameter, requires data availability feature to be enabled -->
<param name="matchtimeseries" style="query" type="xsd:boolean" default="false"/>
<param name="nodata" style="query" type="xsd:int" default="204">
<option value="204"/>
<option value="404"/>
</param>
<param name="format" style="query" type="xsd:string" default="xml">
<option value="xml" mediaType="application/xml"/>
<option value="text" mediaType="text/plain"/>
<!-- additional, non standard options -->
<option value="fdsnxml" mediaType="application/xml"/>
<option value="stationxml" mediaType="application/xml"/>
<option value="sc3ml" mediaType="application/xml"/>
</param>
<!-- additional, non standard parameters -->
<param name="formatted" style="query" type="xsd:boolean" default="false">
<doc>
Controls formatted (pretty print) output.
</doc>
</param>
<!-- not implemented -->
<!--param name="updateafter" style="query" type="xsd:dateTime"/-->
</request>
<response status="200">
<representation mediaType="application/xml"/>
<representation mediaType="text/plain"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
<method name="POST">
<response status="200">
<representation mediaType="application/xml"/>
<representation mediaType="text/plain"/>
</response>
<response status="204 400 401 403 404 413 414 500 503">
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
<resource path="version">
<method name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
<resource path="application.wadl">
<method name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
</resources>
</application>