def parse_station(self, metadata, data): """ Creates a Station object from metadata and data for the station - metadata: NerrStation object - data: list of NerrData objects returns a Station object """ if not isinstance(metadata, NerrStation) or not isinstance(data, list) or len(data) < 1: return None retval = Station() retval.uid = metadata.code retval.name = metadata.name retval.description = str('%s-%s' % (metadata.id,metadata.code)) point_dict = dict() for d in data: for value_date in d.value_and_utc(): if value_date[0] is not None: param = d.get_top_param() if value_date[1] not in point_dict: point_dict[value_date[1]] = Point() point_dict[value_date[1]].time = value_date[1] if param.upper() == 'DEPTH': point_dict[value_date[1]].location = Location(metadata.location.longitude, metadata.location.latitude, float(value_date[0])) else: point_dict[value_date[1]].add_member(dict(name=param,value=value_date[0],unit=unit(param))) for point in point_dict.values(): retval.add_element(point) retval.set_location(Location(metadata.location.longitude, metadata.location.latitude)) return retval
def __init__(self, response_list, nerrs_stations=None): assert isinstance(response_list, dict) if nerrs_stations is None: from pyoos.collectors.nerrs.nerrs_soap import NerrsSoap nerrs_stations = NerrsSoap().stations def get_station(feature): for s in nerrs_stations: if s['Station_Code'].lower() == feature.lower(): return s skip_tags = ["DateTimeStamp", "utcStamp", "data", "MaxWSpdT"] stations = [] for feature, response in response_list.iteritems(): if not isinstance(response, etree._Element): response = etree.fromstring(response) feature = get_station(feature) s = Station() s.uid = feature['Station_Code'] s.name = feature['Station_Name'] s.location = sPoint(float(feature['Longitude']), float(feature['Latitude']), 0) s.set_property("state", feature['State']) s.set_property("siteid", feature['NERR_Site_ID']) s.set_property("horizontal_crs", "EPSG:4326") s.set_property("vertical_units", "m") s.set_property("vertical_crs", "EPSG:4297") s.set_property("location_description", feature['Reserve_Name']) for data in response.findall(".//data"): p = Point() t = AsaTime.parse(testXMLValue(data.find("utcStamp"))) t = t.replace(tzinfo=pytz.utc) p.time = t p.location = s.location for child in data: if child.tag not in skip_tags: try: val = float(child.text) p.add_member( Member(value=val, unit=units(child.tag), name=child.tag, description=child.tag, standard=standard(child.tag))) except TypeError: # Value was None pass s.add_element(p) stations.append(s) self.feature = StationCollection(elements=stations)
def __init__(self, response_list, nerrs_stations=None): assert isinstance(response_list, dict) if nerrs_stations is None: from pyoos.collectors.nerrs.nerrs_soap import NerrsSoap nerrs_stations = NerrsSoap().stations def get_station(feature): for s in nerrs_stations: if s['Station_Code'].lower() == feature.lower(): return s skip_tags = ["DateTimeStamp", "utcStamp", "data", "MaxWSpdT"] stations = [] for feature, response in response_list.items(): if not isinstance(response, etree._Element): response = etree.fromstring(response) feature = get_station(feature) s = Station() s.uid = feature['Station_Code'] s.name = feature['Station_Name'] s.location = sPoint(feature['Longitude'], feature['Latitude'], 0) s.set_property("state", feature['State']) s.set_property("siteid", feature['NERR_Site_ID']) s.set_property("horizontal_crs", "EPSG:4326") s.set_property("vertical_units", "m") s.set_property("vertical_crs", "EPSG:4297") s.set_property("location_description", feature['Reserve_Name']) for data in response.findall(".//data"): p = Point() t = AsaTime.parse(testXMLValue(data.find("utcStamp"))) t = t.replace(tzinfo=pytz.utc) p.time = t p.location = s.location for child in data: if child.tag not in skip_tags: try: val = float(child.text) p.add_member(Member(value=val, name=child.tag, description=child.tag, unit=units(child.tag), standard=standard(child.tag))) except TypeError: # Value was None pass s.add_element(p) stations.append(s) self.feature = StationCollection(elements=stations)
def __init__(self, wqx_metadata, wqx_data): if not isinstance(wqx_metadata, WqxOutbound): wqx_metadata = WqxOutbound(wqx_metadata) if not isinstance(wqx_data, WqxOutbound): wqx_data = WqxOutbound(wqx_data) if wqx_data.failed or wqx_metadata.failed: self.feature = None else: s = Station() s.uid = wqx_metadata.location.id s.name = wqx_metadata.location.name s.set_property("station_type", wqx_metadata.location.type) s.set_property("location_description", wqx_metadata.location.description) s.set_property("huc", wqx_metadata.location.huc) s.set_property("county", wqx_metadata.location.county) s.set_property("state", wqx_metadata.location.state) s.set_property("country", wqx_metadata.location.country) s.set_property("organization_id", wqx_metadata.organization.id) s.set_property("organization_name", wqx_metadata.organization.name) s.set_property("vertical_units", wqx_metadata.location.vertical_measure_units) s.set_property("horizontal_crs", wqx_metadata.location.horizontal_crs_name) s.set_property("vertical_crs", wqx_metadata.location.vertical_crs_name) for a in wqx_data.activities: p = Point() p.time = a.start_time for r in a.results: p.add_member(Member(value=r.value, unit=r.units, name=r.name, description=r.short_name, standard=None, quality=r.quality, method_id=a.method_id, method_name=a.method_name)) s.add_element(p) # Now set the station's location vertical = 0 try: vertical = float(wqx_metadata.location.vertical_measure_value) except: pass # convert the vertical to meters if it is ft (which it always is) if wqx_metadata.location.vertical_measure_units == "ft": vertical /= 3.28084 s.set_property("vertical_units", "m") s.location = sPoint(float(wqx_metadata.location.longitude), float(wqx_metadata.location.latitude), vertical) self.feature = s
def parse_station(self, metadata, data): """ Creates a Station object from metadata and data for the station - metadata: NerrStation object - data: list of NerrData objects returns a Station object """ if not isinstance(metadata, NerrStation) or not isinstance( data, list) or len(data) < 1: return None retval = Station() retval.uid = metadata.code retval.name = metadata.name retval.description = str('%s-%s' % (metadata.id, metadata.code)) point_dict = dict() for d in data: for value_date in d.value_and_utc(): if value_date[0] is not None: param = d.get_top_param() if value_date[1] not in point_dict: point_dict[value_date[1]] = Point() point_dict[value_date[1]].time = value_date[1] if param.upper() == 'DEPTH': point_dict[value_date[1]].location = Location( metadata.location.longitude, metadata.location.latitude, float(value_date[0])) else: point_dict[value_date[1]].add_member( dict(name=param, value=value_date[0], unit=unit(param))) for point in point_dict.values(): retval.add_element(point) retval.set_location( Location(metadata.location.longitude, metadata.location.latitude)) return retval
def _build_station_collection(self, parsed_metadata, parsed_data): stations = [] for station_code, station_metadata in parsed_metadata.items(): s = Station() s.uid = station_code s.name = station_metadata['nwsli'] s.location = sPoint(station_metadata['longitude'], station_metadata['latitude'], 0) # hads always vertically zero s.set_property("location_description", station_metadata['location_text']) s.set_property("state", station_metadata['state']) s.set_property("country", "USA") # @TODO s.set_property("vertical_units", "ft") s.set_property("horizontal_crs", "EPSG:4326") s.set_property("vertical_crs", None) s.set_property("hsa", station_metadata['hsa']) s.set_property("init_transmit", station_metadata['init_transmit']) s.set_property("manufacturer", station_metadata['manufacturer']) s.set_property("owner", station_metadata['owner']) s.set_property("channel", station_metadata['channel']) stations.append(s) # data # possibility no data for this station, or vars filtered all out if station_code not in parsed_data: continue # need to group into distinct time/z value pairs # create a keyfunc (creates string of <z>-<timestamp>) zandtime = lambda x: str(x[3]) + "-" + str( time.mktime(x[1].timetuple())) # annotate data with z values, sort, group by keyfunc (z/time) grouped_data = groupby( sorted([(x[0], x[1], x[2], parsed_metadata[station_code] ['variables'][x[0]]['base_elevation']) for x in parsed_data[station_code]], key=zandtime), zandtime) for _, group in grouped_data: # group is an iterator, turn it into a list (it will have at least one item) groupvals = list(group) p = Point() p.time = groupvals[0][1] p.location = sPoint(station_metadata['longitude'], station_metadata['latitude'], groupvals[0][3]) for val in groupvals: std_var = self.get_variable_info(val[0]) if std_var is None: print("Unknown PE Code, ignoring: {} (station: {}).". format(val[0], station_code)) continue p.add_member( Member(value=val[2], standard=std_var[0], unit=std_var[1], name=std_var[2], description=std_var[3])) s.add_element(p) return StationCollection(elements=stations)
def _build_station_collection(self, parsed_metadata, parsed_data): stations = [] for station_code, station_metadata in parsed_metadata.iteritems(): s = Station() s.uid = station_code s.name = station_metadata['nwsli'] s.location = sPoint(station_metadata['longitude'], station_metadata['latitude'], 0) # hads always vertically zero s.set_property("location_description" , station_metadata['location_text']) s.set_property("state" , station_metadata['state']) s.set_property("country" , "USA") # @TODO s.set_property("vertical_units" , "ft") s.set_property("horizontal_crs" , "EPSG:4326") s.set_property("vertical_crs" , None) s.set_property("hsa" , station_metadata['hsa']) s.set_property("init_transmit" , station_metadata['init_transmit']) s.set_property("manufacturer" , station_metadata['manufacturer']) s.set_property("owner" , station_metadata['owner']) s.set_property("channel" , station_metadata['channel']) stations.append(s) # data # possibility no data for this station, or vars filtered all out if station_code not in parsed_data: continue # need to group into distinct time/z value pairs # create a keyfunc (creates string of <z>-<timestamp>) zandtime = lambda x: str(x[3]) + "-" + str(time.mktime(x[1].timetuple())) # annotate data with z values, sort, group by keyfunc (z/time) grouped_data = groupby(sorted(map(lambda x: (x[0], x[1], x[2], parsed_metadata[station_code]['variables'][x[0]]['base_elevation']), parsed_data[station_code]), key=zandtime), zandtime) for _, group in grouped_data: # group is an iterator, turn it into a list (it will have at least one item) groupvals = list(group) p = Point() p.time = groupvals[0][1] p.location = sPoint(station_metadata['longitude'], station_metadata['latitude'], groupvals[0][3]) for val in groupvals: std_var = self.get_variable_info(val[0]) if std_var is None: print "Unknown PE Code, ignoring:", val[0], "(station:", station_code, ")" continue p.add_member(Member(value=val[2], standard=std_var[0], unit=std_var[1], name=std_var[2], description=std_var[3])) s.add_element(p) return StationCollection(elements=stations)
def __init__(self, wqx_metadata, wqx_data): if not isinstance(wqx_metadata, WqxOutbound): wqx_metadata = WqxOutbound(wqx_metadata) if not isinstance(wqx_data, WqxOutbound): wqx_data = WqxOutbound(wqx_data) if wqx_data.failed or wqx_metadata.failed: self.feature = None else: s = Station() s.uid = wqx_metadata.location.id s.name = wqx_metadata.location.name s.set_property("station_type", wqx_metadata.location.type) s.set_property("location_description", wqx_metadata.location.description) s.set_property("huc", wqx_metadata.location.huc) s.set_property("county", wqx_metadata.location.county) s.set_property("state", wqx_metadata.location.state) s.set_property("country", wqx_metadata.location.country) s.set_property("organization_id", wqx_metadata.organization.id) s.set_property("organization_name", wqx_metadata.organization.name) s.set_property("vertical_units", wqx_metadata.location.vertical_measure_units) s.set_property("horizontal_crs", wqx_metadata.location.horizontal_crs_name) s.set_property("vertical_crs", wqx_metadata.location.vertical_crs_name) for a in wqx_data.activities: p = Point() p.time = a.start_time for r in a.results: p.add_member( Member(value=r.value, unit=r.units, name=r.name, description=r.short_name, standard=None, quality=r.quality, method_id=a.method_id, method_name=a.method_name)) s.add_element(p) # Now set the station's location vertical = 0 try: vertical = float(wqx_metadata.location.vertical_measure_value) except: pass # convert the vertical to meters if it is ft (which it always is) if wqx_metadata.location.vertical_measure_units == "ft": vertical /= 3.28084 s.set_property("vertical_units", "m") s.location = sPoint(float(wqx_metadata.location.longitude), float(wqx_metadata.location.latitude), vertical) self.feature = s