In [1]:
from owslib.sos import SensorObservationService
from owslib.etree import etree
import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
In [2]:
# usgs woods hole
# regular time series data
url='http://geoport-dev.whoi.edu/thredds/sos/usgs/data2/emontgomery/stellwagen/CF-1.6/BUZZ_BAY/2651-A.cdf'
usgs = SensorObservationService(url)
contents = usgs.contents
In [3]:
usgs.contents
Out[3]:
In [4]:
off = usgs.offerings[1]
off.name
Out[4]:
In [5]:
off.response_formats
Out[5]:
In [6]:
off.observed_properties
Out[6]:
In [7]:
#pdb.set_trace()
response = usgs.get_observation(offerings=['2651-A'],
responseFormat='text/xml;subtype="om/1.0.0"',
observedProperties=['http://mmisw.org/ont/cf/parameter/air_temperature'])
In [8]:
print response[0:2000]
In [9]:
def parse_om_xml(response):
# extract data and time from OM-XML response
root = etree.fromstring(response)
# root.findall(".//{%(om)s}Observation" % root.nsmap )
values = root.find(".//{%(swe)s}values" % root.nsmap )
date_value = np.array( [ (dt.datetime.strptime(d,"%Y-%m-%dT%H:%M:%SZ"),float(v))
for d,v in [l.split(',') for l in values.text.split()]] )
time = date_value[:,0]
data = date_value[:,1]
return data,time
In [10]:
data, time = parse_om_xml(response)
In [11]:
ts = pd.Series(data,index=time)
In [12]:
ts.plot(figsize=(12,4));
In [13]:
start = '1982-10-01T00:00:00Z'
stop = '1982-10-04T00:00:00Z'
response = usgs.get_observation(offerings=['2651-A'],
responseFormat='text/xml;subtype="om/1.0.0"',
observedProperties=['http://mmisw.org/ont/cf/parameter/air_temperature'],
eventTime='%s/%s' % (start,stop))
In [14]:
data, time = parse_om_xml(response)
ts = pd.Series(data,index=time)
ts.plot(figsize=(12,4));