in analysis/webservice/algorithms_spark/Matchup.py [0:0]
def from_edge_point(edge_point):
point = DomsPoint()
x, y = edge_point['longitude'], edge_point['latitude']
point.longitude = x
point.latitude = y
point.time = edge_point['time']
point.source = edge_point.get('source')
point.platform = edge_point.get('platform')
point.device = edge_point.get('device')
point.file_url = edge_point.get('fileurl')
point.depth = edge_point.get('depth')
def is_defined(key, d):
return key in d and d[key] is not None and d[key] != ''
if is_defined('id', point.platform):
point.platform = edge_point.get('platform')['id']
elif is_defined('code', point.platform):
point.platform = edge_point.get('platform')['code']
elif is_defined('type', point.platform):
point.platform = edge_point.get('platform')['type']
data_fields = [
'air_pressure',
'air_pressure_quality',
'air_temperature',
'air_temperature_quality',
'dew_point_temperature',
'dew_point_temperature_quality',
'downwelling_longwave_flux_in_air',
'downwelling_longwave_flux_in_air_quality',
'downwelling_longwave_radiance_in_air',
'downwelling_longwave_radiance_in_air_quality',
'downwelling_shortwave_flux_in_air',
'downwelling_shortwave_flux_in_air_quality',
'mass_concentration_of_chlorophyll_in_sea_water',
'mass_concentration_of_chlorophyll_in_sea_water_quality',
'rainfall_rate',
'rainfall_rate_quality',
'relative_humidity',
'relative_humidity_quality',
'sea_surface_salinity',
'sea_surface_salinity_quality',
'sea_surface_skin_temperature',
'sea_surface_skin_temperature_quality',
'sea_surface_subskin_temperature',
'sea_surface_subskin_temperature_quality',
'sea_surface_temperature',
'sea_surface_temperature_quality',
'sea_water_density',
'sea_water_density_quality',
'sea_water_electrical_conductivity',
'sea_water_electrical_conductivity_quality',
'sea_water_practical_salinity',
'sea_water_practical_salinity_quality',
'sea_water_salinity',
'sea_water_salinity_quality',
'sea_water_temperature',
'sea_water_temperature_quality',
'surface_downwelling_photosynthetic_photon_flux_in_air',
'surface_downwelling_photosynthetic_photon_flux_in_air_quality',
'wet_bulb_temperature',
'wet_bulb_temperature_quality',
'wind_speed',
'wind_speed_quality',
'wind_from_direction',
'wind_from_direction_quality',
'wind_to_direction',
'wind_to_direction_quality',
'eastward_wind',
'northward_wind',
'wind_component_quality'
]
data = []
# This is for in-situ secondary points
for name in data_fields:
val = edge_point.get(name)
if not val:
continue
unit = get_insitu_unit(name, insitu_schema.get())
data.append(DataPoint(
variable_name=name,
cf_variable_name=name,
variable_value=val,
variable_unit=unit
))
# This is for satellite secondary points
if 'variables' in edge_point:
data.extend([DataPoint(
variable_name=variable.variable_name,
variable_value=var_value,
cf_variable_name=variable.standard_name,
variable_unit=None
) for var_value, variable in zip(
edge_point['var_values'],
edge_point['variables']
) if var_value])
point.data = data
meta = edge_point.get('meta', None)
# Appending depth to data_id. Currently, our insitu data has the same id value for measurements taken at
# different depths. This causes secondary insitu matches to be incorrectly filtered out from NetCDF files.
if meta:
point.data_id = f'{meta}@{point.depth}'
else:
point.data_id = f'{point.time}:{point.longitude}:{point.latitude}@{point.depth}'
return point