in analysis/webservice/algorithms/DataInBoundsSearch.py [0:0]
def calc(self, computeOptions, **args):
ds, parameter, start_time, end_time, bounding_polygon, metadata_filter = self.parse_arguments(computeOptions)
includemeta = computeOptions.get_include_meta()
min_lat = max_lat = min_lon = max_lon = None
if bounding_polygon:
min_lat = bounding_polygon.bounds[1]
max_lat = bounding_polygon.bounds[3]
min_lon = bounding_polygon.bounds[0]
max_lon = bounding_polygon.bounds[2]
tiles = self._get_tile_service().get_tiles_bounded_by_box(min_lat, max_lat, min_lon, max_lon, ds, start_time,
end_time)
else:
tiles = self._get_tile_service().get_tiles_by_metadata(metadata_filter, ds, start_time, end_time)
data = []
for tile in tiles:
for nexus_point in tile.nexus_point_generator():
point = dict()
point['id'] = tile.tile_id
if parameter == 'sst':
point['sst'] = nexus_point.data_vals
elif parameter == 'sss':
point['sss'] = nexus_point.data_vals
elif parameter == 'wind':
point['wind_u'] = nexus_point.data_vals
try:
point['wind_v'] = tile.meta_data['wind_v'][tuple(nexus_point.index)]
except (KeyError, IndexError):
pass
try:
point['wind_direction'] = tile.meta_data['wind_dir'][tuple(nexus_point.index)]
except (KeyError, IndexError):
pass
try:
point['wind_speed'] = tile.meta_data['wind_speed'][tuple(nexus_point.index)]
except (KeyError, IndexError):
pass
else:
point['variable'] = nexus_point.data_vals
data.append({
'latitude': nexus_point.latitude,
'longitude': nexus_point.longitude,
'time': nexus_point.time,
'data': [
point
]
})
if includemeta and len(tiles) > 0:
meta = [tile.get_summary() for tile in tiles]
else:
meta = None
result = DataInBoundsResult(
results=data,
stats={},
meta=meta)
result.extendMeta(min_lat, max_lat, min_lon, max_lon, "", start_time, end_time)
return result