You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by sk...@apache.org on 2022/05/24 21:17:35 UTC
[incubator-sdap-nexus] 01/04: NetCDF matchup output
This is an automated email from the ASF dual-hosted git repository.
skperez pushed a commit to branch SDAP-387
in repository https://gitbox.apache.org/repos/asf/incubator-sdap-nexus.git
commit 86d8e84fc548138d2eb490a3182a69301be27c6d
Author: skorper <st...@gmail.com>
AuthorDate: Fri Apr 29 09:00:42 2022 -0700
NetCDF matchup output
---
.../tests/algorithms/test_base_doms_handler.py | 2359 +++++++++++++++++++-
.../webservice/algorithms/doms/BaseDomsHandler.py | 222 +-
.../request/renderers/NexusNETCDFRenderer.py | 2 +-
3 files changed, 2421 insertions(+), 162 deletions(-)
diff --git a/analysis/tests/algorithms/test_base_doms_handler.py b/analysis/tests/algorithms/test_base_doms_handler.py
index dbb579f..87e6847 100644
--- a/analysis/tests/algorithms/test_base_doms_handler.py
+++ b/analysis/tests/algorithms/test_base_doms_handler.py
@@ -1,15 +1,14 @@
import datetime
import uuid
import csv
-from webservice.algorithms.doms.BaseDomsHandler import DomsCSVFormatter
+import pytest
+from netCDF4 import Dataset
+import io
+from webservice.algorithms.doms.BaseDomsHandler import DomsCSVFormatter, DomsNetCDFFormatter
-def test_csv():
- """
- Test that CSV is constructed properly given result, params, and
- details.
- """
- test_execution_id = str(uuid.uuid4())
+@pytest.fixture()
+def test_input():
results = [
{
"id": "9c08c026-eff7-30a7-ab1e-413a64f507ff[[0 0 3]]",
@@ -81,6 +80,18 @@ def test_csv():
'timeToComplete': 26
}
+ yield results, params, details
+
+
+def test_csv(test_input):
+ """
+ Test that CSV is constructed properly given result, params, and
+ details.
+ """
+ test_execution_id = str(uuid.uuid4())
+
+ results, params, details = test_input
+
csv_formatter = DomsCSVFormatter()
csv_result = csv_formatter.create(
executionId=test_execution_id,
@@ -111,3 +122,2337 @@ def test_csv():
if 'id' == row[0]:
header = row
+
+
+def test_netcdf(test_input):
+ """
+ Test that the /domsresults endpoint results in a properly
+ structured NetCDF file.
+ """
+ test_execution_id = str(uuid.uuid4())
+
+ results, params, details = test_input
+
+ nc_formatter = DomsNetCDFFormatter()
+ nc_result = nc_formatter.create(
+ executionId=test_execution_id,
+ results=results,
+ params=params,
+ details=details
+ )
+
+ ds = Dataset('test', memory=nc_result)
+
+ # with open('small_matchup.nc', 'wb') as f:
+ # f.write(nc_result)
+
+ assert 'PrimaryData' in ds.groups
+ assert 'SecondaryData' in ds.groups
+
+ assert 'sst_anomaly' in ds.groups['PrimaryData'].variables
+ assert 'analysis_error' in ds.groups['PrimaryData'].variables
+ assert 'analysed_sst' in ds.groups['PrimaryData'].variables
+
+ assert 'sea_water_temperature' in ds.groups['SecondaryData'].variables
+
+def test_netcdf_big(test_input): # TODO remove this. jUst for testing.
+ test_execution_id = str(uuid.uuid4())
+
+ results, params, details = test_input
+
+ results = big_results
+
+ nc_formatter = DomsNetCDFFormatter()
+ nc_result = nc_formatter.create(
+ executionId=test_execution_id,
+ results=results,
+ params=params,
+ details=details
+ )
+
+ ds = Dataset('test', memory=nc_result)
+
+
+
+big_results = [
+ {
+ 'id': '163a81c4-bbf1-3ba4-85c9-e1ce645dcb9a[[0, 2, 17]]',
+ 'lon': -123.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 27.90301513671875,
+ 'matches': [{
+ 'id': 'Buoys_20171003(7172)',
+ 'lon': -123.119,
+ 'lat': 15.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 10, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'd75bd15c-967e-33a4-8485-d3b466f1709d[[0, 23, 13]]',
+ 'lon': -139.125,
+ 'lat': 20.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 25.00201416015625,
+ 'matches': [{
+ 'id': 'argo_spurs_20171006(1250)',
+ 'lon': -139.129,
+ 'lat': 20.867,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting subsurface profiling float',
+ 'time': datetime.datetime(2017, 10, 5, 23, 19, 47),
+ 'sea_water_salinity': 34.97,
+ 'sea_water_salinity_depth': 4.47223342927,
+ 'sea_water_temperature': 24.78,
+ 'sea_water_temperature_depth': 4.47223342927
+ }]
+ }, {
+ 'id': '7deab803-ca0e-3887-a4f7-09081c35d9fa[[0, 23, 4]]',
+ 'lon': -148.875,
+ 'lat': 13.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.147003173828125,
+ 'matches': [{
+ 'id': 'Buoys_20170918(1164)',
+ 'lon': -148.875,
+ 'lat': 13.376,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 18, 7, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'e5f90fe2-0de1-323e-9bed-a26011d52cbf[[0, 4, 14]]',
+ 'lon': -146.375,
+ 'lat': 23.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 25.4849853515625,
+ 'matches': [{
+ 'id': 'Buoys_20170903(742)',
+ 'lon': -146.378,
+ 'lat': 23.617,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 3, 6, 0),
+ 'sea_water_temperature': 25.6
+ }]
+ }, {
+ 'id': 'ba867010-507b-3c62-8893-140ae07da30b[[0, 18, 24]]',
+ 'lon': -143.875,
+ 'lat': 12.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.625,
+ 'matches': [{
+ 'id': 'Buoys_20170829(1970)',
+ 'lon': -143.879,
+ 'lat': 12.126,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 8, 29, 6, 0),
+ 'sea_water_temperature': 28.8
+ }]
+ }, {
+ 'id': 'eccb9006-463b-3554-aa25-0de14224e0c4[[0, 23, 4]]',
+ 'lon': -148.875,
+ 'lat': 13.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.1669921875,
+ 'matches': [{
+ 'id': 'Buoys_20170918(1164)',
+ 'lon': -148.875,
+ 'lat': 13.376,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 18, 7, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': '7deab803-ca0e-3887-a4f7-09081c35d9fa[[0, 13, 12]]',
+ 'lon': -146.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.441009521484375,
+ 'matches': [{
+ 'id': 'Buoys_20171003(1210)',
+ 'lon': -146.874,
+ 'lat': 10.871,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 7, 0),
+ 'sea_water_temperature': 28.6
+ }]
+ }, {
+ 'id': 'f790a842-600a-3225-810d-1ac2c47d2945[[0, 8, 25]]',
+ 'lon': -151.125,
+ 'lat': 17.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 27.3330078125,
+ 'matches': [{
+ 'id': 'Buoys_20171022(485)',
+ 'lon': -151.13,
+ 'lat': 17.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 22, 6, 50),
+ 'sea_water_temperature': 26.4
+ }]
+ }, {
+ 'id': 'c9cb10ab-ebae-3c8b-a498-d7aef5cf53ed[[0, 2, 23]]',
+ 'lon': -144.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.798004150390625,
+ 'matches': [{
+ 'id': 'Buoys_20171005(7542)',
+ 'lon': -144.13,
+ 'lat': 15.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 5, 16, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '1bfa3b4a-a310-3661-b1d9-2648c0d61a9a[[0, 5, 8]]',
+ 'lon': -147.875,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 27.47100830078125,
+ 'matches': [{
+ 'id': 'Buoys_20171025(7730)',
+ 'lon': -147.881,
+ 'lat': 16.375,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 25, 17, 0),
+ 'sea_water_temperature': 27.1
+ }]
+ }, {
+ 'id': '47693152-084f-3a92-b74c-3cef41a2cc36[[0, 14, 7]]',
+ 'lon': -140.625,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.592987060546875,
+ 'matches': [{
+ 'id': 'Buoys_20171015(1659)',
+ 'lon': -140.626,
+ 'lat': 11.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 15, 3, 0),
+ 'sea_water_temperature': 28.3
+ }]
+ }, {
+ 'id': 'c63f3a16-42ac-3185-b8d2-25e26bf9401c[[0, 23, 13]]',
+ 'lon': -139.125,
+ 'lat': 20.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 25.2760009765625,
+ 'matches': [{
+ 'id': 'argo_spurs_20171006(1250)',
+ 'lon': -139.129,
+ 'lat': 20.867,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting subsurface profiling float',
+ 'time': datetime.datetime(2017, 10, 5, 23, 19, 47),
+ 'sea_water_salinity': 34.97,
+ 'sea_water_salinity_depth': 4.47223342927,
+ 'sea_water_temperature': 24.78,
+ 'sea_water_temperature_depth': 4.47223342927
+ }]
+ }, {
+ 'id': '1bfa3b4a-a310-3661-b1d9-2648c0d61a9a[[0, 20, 7]]',
+ 'lon': -148.125,
+ 'lat': 20.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 26.246002197265625,
+ 'matches': [{
+ 'id': 'Buoys_20170920(7966)',
+ 'lon': -148.131,
+ 'lat': 20.124,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 20, 12, 0),
+ 'sea_water_temperature': 26.3
+ }]
+ }, {
+ 'id': 'db173d93-895d-357d-8d30-fee57540a2ef[[0, 14, 14]]',
+ 'lon': -138.875,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 27.91400146484375,
+ 'matches': [{
+ 'id': 'Buoys_20171008(1812)',
+ 'lon': -138.874,
+ 'lat': 11.117,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 4, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '1bfa3b4a-a310-3661-b1d9-2648c0d61a9a[[0, 5, 10]]',
+ 'lon': -147.375,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 27.490997314453125,
+ 'matches': [{
+ 'id': 'Buoys_20171024(7720)',
+ 'lon': -147.376,
+ 'lat': 16.383,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 24, 6, 0),
+ 'sea_water_temperature': 27.2
+ }]
+ }, {
+ 'id': 'ba867010-507b-3c62-8893-140ae07da30b[[0, 13, 12]]',
+ 'lon': -146.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.4639892578125,
+ 'matches': [{
+ 'id': 'Buoys_20171003(1210)',
+ 'lon': -146.874,
+ 'lat': 10.871,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 7, 0),
+ 'sea_water_temperature': 28.6
+ }]
+ }, {
+ 'id': 'db173d93-895d-357d-8d30-fee57540a2ef[[0, 14, 7]]',
+ 'lon': -140.625,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.670989990234375,
+ 'matches': [{
+ 'id': 'Buoys_20171015(1659)',
+ 'lon': -140.626,
+ 'lat': 11.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 15, 3, 0),
+ 'sea_water_temperature': 28.3
+ }]
+ }, {
+ 'id': '2d66d136-c883-366a-9559-fd1336a3551d[[0, 8, 25]]',
+ 'lon': -151.125,
+ 'lat': 17.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.352996826171875,
+ 'matches': [{
+ 'id': 'Buoys_20171022(485)',
+ 'lon': -151.13,
+ 'lat': 17.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 22, 6, 50),
+ 'sea_water_temperature': 26.4
+ }]
+ }, {
+ 'id': '38e08fcc-e6ed-3fc7-aac7-efd3ca86dbb6[[0, 5, 10]]',
+ 'lon': -147.375,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 27.433990478515625,
+ 'matches': [{
+ 'id': 'Buoys_20171024(7720)',
+ 'lon': -147.376,
+ 'lat': 16.383,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 24, 6, 0),
+ 'sea_water_temperature': 27.2
+ }]
+ }, {
+ 'id': '3a59959f-953c-31ea-a677-d9c8da5807fe[[0, 8, 25]]',
+ 'lon': -151.125,
+ 'lat': 17.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 27.37200927734375,
+ 'matches': [{
+ 'id': 'Buoys_20171022(485)',
+ 'lon': -151.13,
+ 'lat': 17.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 22, 6, 50),
+ 'sea_water_temperature': 26.4
+ }]
+ }, {
+ 'id': 'c1a4e4aa-ecf3-33ff-b1f3-a1329d8626d9[[0, 8, 25]]',
+ 'lon': -151.125,
+ 'lat': 17.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 27.352996826171875,
+ 'matches': [{
+ 'id': 'Buoys_20171022(485)',
+ 'lon': -151.13,
+ 'lat': 17.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 22, 6, 50),
+ 'sea_water_temperature': 26.4
+ }]
+ }, {
+ 'id': '00a42504-45ef-3e6a-b863-7c6c1cb746d7[[0, 2, 11]]',
+ 'lon': -139.625,
+ 'lat': 23.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 24.571014404296875,
+ 'matches': [{
+ 'id': 'Buoys_20171010(8065)',
+ 'lon': -139.634,
+ 'lat': 23.125,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': 'be519f66-de2e-3ffe-a929-be8033717020[[0, 13, 12]]',
+ 'lon': -146.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.28399658203125,
+ 'matches': [{
+ 'id': 'Buoys_20171003(1210)',
+ 'lon': -146.874,
+ 'lat': 10.871,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 7, 0),
+ 'sea_water_temperature': 28.6
+ }]
+ }, {
+ 'id': '7deab803-ca0e-3887-a4f7-09081c35d9fa[[0, 16, 19]]',
+ 'lon': -145.125,
+ 'lat': 11.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.730987548828125,
+ 'matches': [{
+ 'id': 'Buoys_20171009(942)',
+ 'lon': -145.129,
+ 'lat': 11.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 9, 6, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'ac22e67b-95f5-3c51-ae05-1396b838276c[[0, 13, 16]]',
+ 'lon': -138.375,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.295013427734375,
+ 'matches': [{
+ 'id': 'Buoys_20170930(1889)',
+ 'lon': -138.367,
+ 'lat': 10.872,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 30, 15, 0),
+ 'sea_water_temperature': 28.1
+ }]
+ }, {
+ 'id': '3c1e5e37-8bf2-3928-bd60-0384cbcfe405[[0, 14, 14]]',
+ 'lon': -138.875,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.87799072265625,
+ 'matches': [{
+ 'id': 'Buoys_20171008(1812)',
+ 'lon': -138.874,
+ 'lat': 11.117,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 4, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'ba867010-507b-3c62-8893-140ae07da30b[[0, 16, 19]]',
+ 'lon': -145.125,
+ 'lat': 11.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.597015380859375,
+ 'matches': [{
+ 'id': 'Buoys_20171009(942)',
+ 'lon': -145.129,
+ 'lat': 11.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 9, 6, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '47693152-084f-3a92-b74c-3cef41a2cc36[[0, 13, 16]]',
+ 'lon': -138.375,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.22601318359375,
+ 'matches': [{
+ 'id': 'Buoys_20170930(1889)',
+ 'lon': -138.367,
+ 'lat': 10.872,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 30, 15, 0),
+ 'sea_water_temperature': 28.1
+ }]
+ }, {
+ 'id': 'eccb9006-463b-3554-aa25-0de14224e0c4[[0, 15, 16]]',
+ 'lon': -145.875,
+ 'lat': 11.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.60198974609375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(715)',
+ 'lon': -145.868,
+ 'lat': 11.378,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 28.2
+ }]
+ }, {
+ 'id': '4c3b1af8-7818-3f6c-9f51-8abecee7ecb6[[0, 2, 11]]',
+ 'lon': -139.625,
+ 'lat': 23.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 24.433990478515625,
+ 'matches': [{
+ 'id': 'Buoys_20171010(8065)',
+ 'lon': -139.634,
+ 'lat': 23.125,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': '7f58e6e6-aae9-32af-8bcd-586875f55ef8[[0, 14, 14]]',
+ 'lon': -138.875,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.1719970703125,
+ 'matches': [{
+ 'id': 'Buoys_20171008(1812)',
+ 'lon': -138.874,
+ 'lat': 11.117,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 4, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'eccb9006-463b-3554-aa25-0de14224e0c4[[0, 13, 12]]',
+ 'lon': -146.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.454010009765625,
+ 'matches': [{
+ 'id': 'Buoys_20171003(1210)',
+ 'lon': -146.874,
+ 'lat': 10.871,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 7, 0),
+ 'sea_water_temperature': 28.6
+ }]
+ }, {
+ 'id': '715cd33c-0c17-398f-8d90-9c545d038e76[[0, 4, 14]]',
+ 'lon': -146.375,
+ 'lat': 23.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 25.529998779296875,
+ 'matches': [{
+ 'id': 'Buoys_20170903(742)',
+ 'lon': -146.378,
+ 'lat': 23.617,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 3, 6, 0),
+ 'sea_water_temperature': 25.6
+ }]
+ }, {
+ 'id': '1bfa3b4a-a310-3661-b1d9-2648c0d61a9a[[0, 2, 22]]',
+ 'lon': -144.375,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 27.81201171875,
+ 'matches': [{
+ 'id': 'Buoys_20171008(7269)',
+ 'lon': -144.371,
+ 'lat': 15.624,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 3, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': 'fc6f3c08-cefc-36a8-8b2e-9212fe2b4afe[[0, 13, 12]]',
+ 'lon': -146.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.399993896484375,
+ 'matches': [{
+ 'id': 'Buoys_20171003(1210)',
+ 'lon': -146.874,
+ 'lat': 10.871,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 7, 0),
+ 'sea_water_temperature': 28.6
+ }]
+ }, {
+ 'id': '96b91d8e-74d9-3856-9e55-c8d4e36dda4a[[0, 2, 17]]',
+ 'lon': -123.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 27.885009765625,
+ 'matches': [{
+ 'id': 'Buoys_20171003(7172)',
+ 'lon': -123.119,
+ 'lat': 15.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 10, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'ba867010-507b-3c62-8893-140ae07da30b[[0, 15, 16]]',
+ 'lon': -145.875,
+ 'lat': 11.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.649993896484375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(715)',
+ 'lon': -145.868,
+ 'lat': 11.378,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 28.2
+ }]
+ }, {
+ 'id': 'c9cb10ab-ebae-3c8b-a498-d7aef5cf53ed[[0, 2, 22]]',
+ 'lon': -144.375,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.602996826171875,
+ 'matches': [{
+ 'id': 'Buoys_20171008(7269)',
+ 'lon': -144.371,
+ 'lat': 15.624,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 3, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': 'e812f91f-4796-3109-90a7-e20834b2a4e9[[0, 2, 23]]',
+ 'lon': -144.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 27.843994140625,
+ 'matches': [{
+ 'id': 'Buoys_20171005(7542)',
+ 'lon': -144.13,
+ 'lat': 15.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 5, 16, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': 'c9cb10ab-ebae-3c8b-a498-d7aef5cf53ed[[0, 20, 7]]',
+ 'lon': -148.125,
+ 'lat': 20.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 26.3070068359375,
+ 'matches': [{
+ 'id': 'Buoys_20170920(7966)',
+ 'lon': -148.131,
+ 'lat': 20.124,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 20, 12, 0),
+ 'sea_water_temperature': 26.3
+ }]
+ }, {
+ 'id': 'be519f66-de2e-3ffe-a929-be8033717020[[0, 13, 8]]',
+ 'lon': -147.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.430999755859375,
+ 'matches': [{
+ 'id': 'Buoys_20171013(1175)',
+ 'lon': -147.87,
+ 'lat': 10.879,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 13, 5, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '8532e3e5-3fdd-304f-a9d7-1382d9658b36[[0, 13, 12]]',
+ 'lon': -146.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.764007568359375,
+ 'matches': [{
+ 'id': 'Buoys_20171003(1210)',
+ 'lon': -146.874,
+ 'lat': 10.871,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 7, 0),
+ 'sea_water_temperature': 28.6
+ }]
+ }, {
+ 'id': 'fc6f3c08-cefc-36a8-8b2e-9212fe2b4afe[[0, 23, 4]]',
+ 'lon': -148.875,
+ 'lat': 13.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.0989990234375,
+ 'matches': [{
+ 'id': 'Buoys_20170918(1164)',
+ 'lon': -148.875,
+ 'lat': 13.376,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 18, 7, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'e812f91f-4796-3109-90a7-e20834b2a4e9[[0, 2, 22]]',
+ 'lon': -144.375,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 27.881011962890625,
+ 'matches': [{
+ 'id': 'Buoys_20171008(7269)',
+ 'lon': -144.371,
+ 'lat': 15.624,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 3, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '35263cc2-f801-3954-b769-38f150ae09bf[[0, 23, 13]]',
+ 'lon': -139.125,
+ 'lat': 20.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 24.983001708984375,
+ 'matches': [{
+ 'id': 'argo_spurs_20171006(1250)',
+ 'lon': -139.129,
+ 'lat': 20.867,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting subsurface profiling float',
+ 'time': datetime.datetime(2017, 10, 5, 23, 19, 47),
+ 'sea_water_salinity': 34.97,
+ 'sea_water_salinity_depth': 4.47223342927,
+ 'sea_water_temperature': 24.78,
+ 'sea_water_temperature_depth': 4.47223342927
+ }]
+ }, {
+ 'id': '365730d1-98f0-36cb-b78b-44ca18fc9e0d[[0, 2, 11]]',
+ 'lon': -139.625,
+ 'lat': 23.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 24.493988037109375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(8065)',
+ 'lon': -139.634,
+ 'lat': 23.125,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': '575795cc-14e5-3ee3-a53d-89edf8f5d018[[0, 14, 14]]',
+ 'lon': -138.875,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.27301025390625,
+ 'matches': [{
+ 'id': 'Buoys_20171008(1812)',
+ 'lon': -138.874,
+ 'lat': 11.117,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 4, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'a499e09d-dad6-338a-83ca-499268d58661[[0, 23, 13]]',
+ 'lon': -139.125,
+ 'lat': 20.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 25.274993896484375,
+ 'matches': [{
+ 'id': 'argo_spurs_20171006(1250)',
+ 'lon': -139.129,
+ 'lat': 20.867,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting subsurface profiling float',
+ 'time': datetime.datetime(2017, 10, 5, 23, 19, 47),
+ 'sea_water_salinity': 34.97,
+ 'sea_water_salinity_depth': 4.47223342927,
+ 'sea_water_temperature': 24.78,
+ 'sea_water_temperature_depth': 4.47223342927
+ }]
+ }, {
+ 'id': 'b6553b38-05fa-3e15-a1ff-f655f2edd0de[[0, 20, 7]]',
+ 'lon': -148.125,
+ 'lat': 20.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 26.24798583984375,
+ 'matches': [{
+ 'id': 'Buoys_20170920(7966)',
+ 'lon': -148.131,
+ 'lat': 20.124,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 20, 12, 0),
+ 'sea_water_temperature': 26.3
+ }]
+ }, {
+ 'id': '38e08fcc-e6ed-3fc7-aac7-efd3ca86dbb6[[0, 5, 8]]',
+ 'lon': -147.875,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 27.34600830078125,
+ 'matches': [{
+ 'id': 'Buoys_20171025(7730)',
+ 'lon': -147.881,
+ 'lat': 16.375,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 25, 17, 0),
+ 'sea_water_temperature': 27.1
+ }]
+ }, {
+ 'id': 'be519f66-de2e-3ffe-a929-be8033717020[[0, 18, 24]]',
+ 'lon': -143.875,
+ 'lat': 12.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.803009033203125,
+ 'matches': [{
+ 'id': 'Buoys_20170829(1970)',
+ 'lon': -143.879,
+ 'lat': 12.126,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 8, 29, 6, 0),
+ 'sea_water_temperature': 28.8
+ }]
+ }, {
+ 'id': '38e08fcc-e6ed-3fc7-aac7-efd3ca86dbb6[[0, 2, 23]]',
+ 'lon': -144.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 27.855987548828125,
+ 'matches': [{
+ 'id': 'Buoys_20171005(7542)',
+ 'lon': -144.13,
+ 'lat': 15.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 5, 16, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '7415e02d-3eb3-3ab3-b462-22d510016cce[[0, 2, 11]]',
+ 'lon': -139.625,
+ 'lat': 23.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 24.3900146484375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(8065)',
+ 'lon': -139.634,
+ 'lat': 23.125,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': '14950099-66a6-31c7-912d-ab4369a7c28e[[0, 2, 17]]',
+ 'lon': -123.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 27.79901123046875,
+ 'matches': [{
+ 'id': 'Buoys_20171003(7172)',
+ 'lon': -123.119,
+ 'lat': 15.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 10, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'cfa7f14e-8676-3421-94f4-5c9bf14dd8dc[[0, 4, 14]]',
+ 'lon': -146.375,
+ 'lat': 23.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 25.3489990234375,
+ 'matches': [{
+ 'id': 'Buoys_20170903(742)',
+ 'lon': -146.378,
+ 'lat': 23.617,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 3, 6, 0),
+ 'sea_water_temperature': 25.6
+ }]
+ }, {
+ 'id': 'b6553b38-05fa-3e15-a1ff-f655f2edd0de[[0, 2, 22]]',
+ 'lon': -144.375,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 27.779998779296875,
+ 'matches': [{
+ 'id': 'Buoys_20171008(7269)',
+ 'lon': -144.371,
+ 'lat': 15.624,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 3, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '1bfa3b4a-a310-3661-b1d9-2648c0d61a9a[[0, 2, 23]]',
+ 'lon': -144.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 27.847015380859375,
+ 'matches': [{
+ 'id': 'Buoys_20171005(7542)',
+ 'lon': -144.13,
+ 'lat': 15.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 5, 16, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': 'eccb9006-463b-3554-aa25-0de14224e0c4[[0, 18, 24]]',
+ 'lon': -143.875,
+ 'lat': 12.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.81201171875,
+ 'matches': [{
+ 'id': 'Buoys_20170829(1970)',
+ 'lon': -143.879,
+ 'lat': 12.126,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 8, 29, 6, 0),
+ 'sea_water_temperature': 28.8
+ }]
+ }, {
+ 'id': 'b2143b7a-715f-3f77-97e5-27d714762d03[[0, 23, 13]]',
+ 'lon': -139.125,
+ 'lat': 20.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 25.108001708984375,
+ 'matches': [{
+ 'id': 'argo_spurs_20171006(1250)',
+ 'lon': -139.129,
+ 'lat': 20.867,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting subsurface profiling float',
+ 'time': datetime.datetime(2017, 10, 5, 23, 19, 47),
+ 'sea_water_salinity': 34.97,
+ 'sea_water_salinity_depth': 4.47223342927,
+ 'sea_water_temperature': 24.78,
+ 'sea_water_temperature_depth': 4.47223342927
+ }]
+ }, {
+ 'id': '7deab803-ca0e-3887-a4f7-09081c35d9fa[[0, 18, 24]]',
+ 'lon': -143.875,
+ 'lat': 12.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.76800537109375,
+ 'matches': [{
+ 'id': 'Buoys_20170829(1970)',
+ 'lon': -143.879,
+ 'lat': 12.126,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 8, 29, 6, 0),
+ 'sea_water_temperature': 28.8
+ }]
+ }, {
+ 'id': 'a499e09d-dad6-338a-83ca-499268d58661[[0, 22, 21]]',
+ 'lon': -137.125,
+ 'lat': 20.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 24.839996337890625,
+ 'matches': [{
+ 'id': 'Buoys_20170908(558)',
+ 'lon': -137.13,
+ 'lat': 20.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 8, 10, 50),
+ 'sea_water_temperature': 25.0
+ }]
+ }, {
+ 'id': '8532e3e5-3fdd-304f-a9d7-1382d9658b36[[0, 10, 4]]',
+ 'lon': -148.875,
+ 'lat': 10.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 28.62701416015625,
+ 'matches': [{
+ 'id': 'Buoys_20171028(1182)',
+ 'lon': -148.874,
+ 'lat': 10.13,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 28, 4, 0),
+ 'sea_water_temperature': 28.5
+ }]
+ }, {
+ 'id': 'fc6f3c08-cefc-36a8-8b2e-9212fe2b4afe[[0, 13, 8]]',
+ 'lon': -147.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.62200927734375,
+ 'matches': [{
+ 'id': 'Buoys_20171013(1175)',
+ 'lon': -147.87,
+ 'lat': 10.879,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 13, 5, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '38e08fcc-e6ed-3fc7-aac7-efd3ca86dbb6[[0, 20, 7]]',
+ 'lon': -148.125,
+ 'lat': 20.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 26.279998779296875,
+ 'matches': [{
+ 'id': 'Buoys_20170920(7966)',
+ 'lon': -148.131,
+ 'lat': 20.124,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 20, 12, 0),
+ 'sea_water_temperature': 26.3
+ }]
+ }, {
+ 'id': 'be519f66-de2e-3ffe-a929-be8033717020[[0, 16, 19]]',
+ 'lon': -145.125,
+ 'lat': 11.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.87701416015625,
+ 'matches': [{
+ 'id': 'Buoys_20171009(942)',
+ 'lon': -145.129,
+ 'lat': 11.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 9, 6, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '47693152-084f-3a92-b74c-3cef41a2cc36[[0, 14, 14]]',
+ 'lon': -138.875,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.3179931640625,
+ 'matches': [{
+ 'id': 'Buoys_20171008(1812)',
+ 'lon': -138.874,
+ 'lat': 11.117,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 4, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'fc6f3c08-cefc-36a8-8b2e-9212fe2b4afe[[0, 15, 16]]',
+ 'lon': -145.875,
+ 'lat': 11.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.615997314453125,
+ 'matches': [{
+ 'id': 'Buoys_20171010(715)',
+ 'lon': -145.868,
+ 'lat': 11.378,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 28.2
+ }]
+ }, {
+ 'id': '9a82c664-0022-3605-a335-22dce8b59608[[0, 5, 10]]',
+ 'lon': -147.375,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 27.467987060546875,
+ 'matches': [{
+ 'id': 'Buoys_20171024(7720)',
+ 'lon': -147.376,
+ 'lat': 16.383,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 24, 6, 0),
+ 'sea_water_temperature': 27.2
+ }]
+ }, {
+ 'id': '3c1e5e37-8bf2-3928-bd60-0384cbcfe405[[0, 14, 7]]',
+ 'lon': -140.625,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 28.657989501953125,
+ 'matches': [{
+ 'id': 'Buoys_20171015(1659)',
+ 'lon': -140.626,
+ 'lat': 11.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 15, 3, 0),
+ 'sea_water_temperature': 28.3
+ }]
+ }, {
+ 'id': '32cadb31-89e1-3290-b1b6-2c214e9c4af9[[0, 4, 14]]',
+ 'lon': -146.375,
+ 'lat': 23.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 25.584014892578125,
+ 'matches': [{
+ 'id': 'Buoys_20170903(742)',
+ 'lon': -146.378,
+ 'lat': 23.617,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 3, 6, 0),
+ 'sea_water_temperature': 25.6
+ }]
+ }, {
+ 'id': 'd75bd15c-967e-33a4-8485-d3b466f1709d[[0, 22, 21]]',
+ 'lon': -137.125,
+ 'lat': 20.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 24.800994873046875,
+ 'matches': [{
+ 'id': 'Buoys_20170908(558)',
+ 'lon': -137.13,
+ 'lat': 20.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 8, 10, 50),
+ 'sea_water_temperature': 25.0
+ }]
+ }, {
+ 'id': '7f58e6e6-aae9-32af-8bcd-586875f55ef8[[0, 14, 7]]',
+ 'lon': -140.625,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.677001953125,
+ 'matches': [{
+ 'id': 'Buoys_20171015(1659)',
+ 'lon': -140.626,
+ 'lat': 11.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 15, 3, 0),
+ 'sea_water_temperature': 28.3
+ }]
+ }, {
+ 'id': '7deab803-ca0e-3887-a4f7-09081c35d9fa[[0, 15, 16]]',
+ 'lon': -145.875,
+ 'lat': 11.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.641998291015625,
+ 'matches': [{
+ 'id': 'Buoys_20171010(715)',
+ 'lon': -145.868,
+ 'lat': 11.378,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 28.2
+ }]
+ }, {
+ 'id': 'fc6f3c08-cefc-36a8-8b2e-9212fe2b4afe[[0, 16, 19]]',
+ 'lon': -145.125,
+ 'lat': 11.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.78399658203125,
+ 'matches': [{
+ 'id': 'Buoys_20171009(942)',
+ 'lon': -145.129,
+ 'lat': 11.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 9, 6, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '1c0fc0f8-5007-3806-9f71-068ee7073974[[0, 8, 25]]',
+ 'lon': -151.125,
+ 'lat': 17.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 27.3389892578125,
+ 'matches': [{
+ 'id': 'Buoys_20171022(485)',
+ 'lon': -151.13,
+ 'lat': 17.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 22, 6, 50),
+ 'sea_water_temperature': 26.4
+ }]
+ }, {
+ 'id': 'be519f66-de2e-3ffe-a929-be8033717020[[0, 15, 16]]',
+ 'lon': -145.875,
+ 'lat': 11.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.57598876953125,
+ 'matches': [{
+ 'id': 'Buoys_20171010(715)',
+ 'lon': -145.868,
+ 'lat': 11.378,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 28.2
+ }]
+ }, {
+ 'id': 'ecfdf049-4d0d-3e0f-a435-a106dcee89b1[[0, 2, 17]]',
+ 'lon': -123.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 27.87298583984375,
+ 'matches': [{
+ 'id': 'Buoys_20171003(7172)',
+ 'lon': -123.119,
+ 'lat': 15.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 10, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': '202574c8-0266-3947-8f35-12c7ed733cd7[[0, 2, 11]]',
+ 'lon': -139.625,
+ 'lat': 23.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 24.58099365234375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(8065)',
+ 'lon': -139.634,
+ 'lat': 23.125,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': 'b6553b38-05fa-3e15-a1ff-f655f2edd0de[[0, 5, 10]]',
+ 'lon': -147.375,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 27.4630126953125,
+ 'matches': [{
+ 'id': 'Buoys_20171024(7720)',
+ 'lon': -147.376,
+ 'lat': 16.383,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 24, 6, 0),
+ 'sea_water_temperature': 27.2
+ }]
+ }, {
+ 'id': 'ba867010-507b-3c62-8893-140ae07da30b[[0, 23, 4]]',
+ 'lon': -148.875,
+ 'lat': 13.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.131988525390625,
+ 'matches': [{
+ 'id': 'Buoys_20170918(1164)',
+ 'lon': -148.875,
+ 'lat': 13.376,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 18, 7, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': '9a82c664-0022-3605-a335-22dce8b59608[[0, 2, 22]]',
+ 'lon': -144.375,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 27.88299560546875,
+ 'matches': [{
+ 'id': 'Buoys_20171008(7269)',
+ 'lon': -144.371,
+ 'lat': 15.624,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 3, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '7f58e6e6-aae9-32af-8bcd-586875f55ef8[[0, 13, 16]]',
+ 'lon': -138.375,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.191986083984375,
+ 'matches': [{
+ 'id': 'Buoys_20170930(1889)',
+ 'lon': -138.367,
+ 'lat': 10.872,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 30, 15, 0),
+ 'sea_water_temperature': 28.1
+ }]
+ }, {
+ 'id': 'b6553b38-05fa-3e15-a1ff-f655f2edd0de[[0, 2, 23]]',
+ 'lon': -144.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 27.845001220703125,
+ 'matches': [{
+ 'id': 'Buoys_20171005(7542)',
+ 'lon': -144.13,
+ 'lat': 15.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 5, 16, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '575795cc-14e5-3ee3-a53d-89edf8f5d018[[0, 14, 7]]',
+ 'lon': -140.625,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.635009765625,
+ 'matches': [{
+ 'id': 'Buoys_20171015(1659)',
+ 'lon': -140.626,
+ 'lat': 11.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 15, 3, 0),
+ 'sea_water_temperature': 28.3
+ }]
+ }, {
+ 'id': 'db173d93-895d-357d-8d30-fee57540a2ef[[0, 13, 16]]',
+ 'lon': -138.375,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.139007568359375,
+ 'matches': [{
+ 'id': 'Buoys_20170930(1889)',
+ 'lon': -138.367,
+ 'lat': 10.872,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 30, 15, 0),
+ 'sea_water_temperature': 28.1
+ }]
+ }, {
+ 'id': '38e08fcc-e6ed-3fc7-aac7-efd3ca86dbb6[[0, 2, 22]]',
+ 'lon': -144.375,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 27.68499755859375,
+ 'matches': [{
+ 'id': 'Buoys_20171008(7269)',
+ 'lon': -144.371,
+ 'lat': 15.624,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 3, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '976b8267-6c3e-3154-8354-a7bd47d98bfe[[0, 22, 21]]',
+ 'lon': -137.125,
+ 'lat': 20.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 25.180999755859375,
+ 'matches': [{
+ 'id': 'Buoys_20170908(558)',
+ 'lon': -137.13,
+ 'lat': 20.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 8, 10, 50),
+ 'sea_water_temperature': 25.0
+ }]
+ }, {
+ 'id': '3c1e5e37-8bf2-3928-bd60-0384cbcfe405[[0, 13, 16]]',
+ 'lon': -138.375,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.985992431640625,
+ 'matches': [{
+ 'id': 'Buoys_20170930(1889)',
+ 'lon': -138.367,
+ 'lat': 10.872,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 30, 15, 0),
+ 'sea_water_temperature': 28.1
+ }]
+ }, {
+ 'id': 'ba867010-507b-3c62-8893-140ae07da30b[[0, 13, 8]]',
+ 'lon': -147.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.553985595703125,
+ 'matches': [{
+ 'id': 'Buoys_20171013(1175)',
+ 'lon': -147.87,
+ 'lat': 10.879,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 13, 5, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '8532e3e5-3fdd-304f-a9d7-1382d9658b36[[0, 13, 8]]',
+ 'lon': -147.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 28.847991943359375,
+ 'matches': [{
+ 'id': 'Buoys_20171013(1175)',
+ 'lon': -147.87,
+ 'lat': 10.879,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 13, 5, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '7deab803-ca0e-3887-a4f7-09081c35d9fa[[0, 13, 8]]',
+ 'lon': -147.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 28.480010986328125,
+ 'matches': [{
+ 'id': 'Buoys_20171013(1175)',
+ 'lon': -147.87,
+ 'lat': 10.879,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 13, 5, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'ac22e67b-95f5-3c51-ae05-1396b838276c[[0, 14, 14]]',
+ 'lon': -138.875,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.13800048828125,
+ 'matches': [{
+ 'id': 'Buoys_20171008(1812)',
+ 'lon': -138.874,
+ 'lat': 11.117,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 8, 4, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'b6553b38-05fa-3e15-a1ff-f655f2edd0de[[0, 5, 8]]',
+ 'lon': -147.875,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 27.39801025390625,
+ 'matches': [{
+ 'id': 'Buoys_20171025(7730)',
+ 'lon': -147.881,
+ 'lat': 16.375,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 25, 17, 0),
+ 'sea_water_temperature': 27.1
+ }]
+ }, {
+ 'id': 'c9cb10ab-ebae-3c8b-a498-d7aef5cf53ed[[0, 5, 10]]',
+ 'lon': -147.375,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.39898681640625,
+ 'matches': [{
+ 'id': 'Buoys_20171024(7720)',
+ 'lon': -147.376,
+ 'lat': 16.383,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 24, 6, 0),
+ 'sea_water_temperature': 27.2
+ }]
+ }, {
+ 'id': '1b345618-e825-3add-8c32-4cd537603c62[[0, 2, 11]]',
+ 'lon': -139.625,
+ 'lat': 23.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 24.555999755859375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(8065)',
+ 'lon': -139.634,
+ 'lat': 23.125,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': 'e812f91f-4796-3109-90a7-e20834b2a4e9[[0, 5, 10]]',
+ 'lon': -147.375,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 27.47100830078125,
+ 'matches': [{
+ 'id': 'Buoys_20171024(7720)',
+ 'lon': -147.376,
+ 'lat': 16.383,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 24, 6, 0),
+ 'sea_water_temperature': 27.2
+ }]
+ }, {
+ 'id': 'b2143b7a-715f-3f77-97e5-27d714762d03[[0, 22, 21]]',
+ 'lon': -137.125,
+ 'lat': 20.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 25.0260009765625,
+ 'matches': [{
+ 'id': 'Buoys_20170908(558)',
+ 'lon': -137.13,
+ 'lat': 20.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 8, 10, 50),
+ 'sea_water_temperature': 25.0
+ }]
+ }, {
+ 'id': '9a82c664-0022-3605-a335-22dce8b59608[[0, 2, 23]]',
+ 'lon': -144.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 27.967987060546875,
+ 'matches': [{
+ 'id': 'Buoys_20171005(7542)',
+ 'lon': -144.13,
+ 'lat': 15.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 5, 16, 0),
+ 'sea_water_temperature': 27.7
+ }]
+ }, {
+ 'id': '976b8267-6c3e-3154-8354-a7bd47d98bfe[[0, 23, 13]]',
+ 'lon': -139.125,
+ 'lat': 20.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 25.36700439453125,
+ 'matches': [{
+ 'id': 'argo_spurs_20171006(1250)',
+ 'lon': -139.129,
+ 'lat': 20.867,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting subsurface profiling float',
+ 'time': datetime.datetime(2017, 10, 5, 23, 19, 47),
+ 'sea_water_salinity': 34.97,
+ 'sea_water_salinity_depth': 4.47223342927,
+ 'sea_water_temperature': 24.78,
+ 'sea_water_temperature_depth': 4.47223342927
+ }]
+ }, {
+ 'id': '2bb065b9-a57f-3c02-bd07-88a5859a08c8[[0, 2, 17]]',
+ 'lon': -123.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.902008056640625,
+ 'matches': [{
+ 'id': 'Buoys_20171003(7172)',
+ 'lon': -123.119,
+ 'lat': 15.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 10, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': '8532e3e5-3fdd-304f-a9d7-1382d9658b36[[0, 16, 19]]',
+ 'lon': -145.125,
+ 'lat': 11.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 28.813995361328125,
+ 'matches': [{
+ 'id': 'Buoys_20171009(942)',
+ 'lon': -145.129,
+ 'lat': 11.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 9, 6, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '9a82c664-0022-3605-a335-22dce8b59608[[0, 20, 7]]',
+ 'lon': -148.125,
+ 'lat': 20.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 26.532989501953125,
+ 'matches': [{
+ 'id': 'Buoys_20170920(7966)',
+ 'lon': -148.131,
+ 'lat': 20.124,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 20, 12, 0),
+ 'sea_water_temperature': 26.3
+ }]
+ }, {
+ 'id': 'eccb9006-463b-3554-aa25-0de14224e0c4[[0, 16, 19]]',
+ 'lon': -145.125,
+ 'lat': 11.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.891998291015625,
+ 'matches': [{
+ 'id': 'Buoys_20171009(942)',
+ 'lon': -145.129,
+ 'lat': 11.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 9, 6, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': 'c63f3a16-42ac-3185-b8d2-25e26bf9401c[[0, 22, 21]]',
+ 'lon': -137.125,
+ 'lat': 20.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 25.13299560546875,
+ 'matches': [{
+ 'id': 'Buoys_20170908(558)',
+ 'lon': -137.13,
+ 'lat': 20.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 8, 10, 50),
+ 'sea_water_temperature': 25.0
+ }]
+ }, {
+ 'id': '575795cc-14e5-3ee3-a53d-89edf8f5d018[[0, 13, 16]]',
+ 'lon': -138.375,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 28.272003173828125,
+ 'matches': [{
+ 'id': 'Buoys_20170930(1889)',
+ 'lon': -138.367,
+ 'lat': 10.872,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 30, 15, 0),
+ 'sea_water_temperature': 28.1
+ }]
+ }, {
+ 'id': 'eccb9006-463b-3554-aa25-0de14224e0c4[[0, 13, 8]]',
+ 'lon': -147.875,
+ 'lat': 10.875,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 28.447998046875,
+ 'matches': [{
+ 'id': 'Buoys_20171013(1175)',
+ 'lon': -147.87,
+ 'lat': 10.879,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 13, 5, 0),
+ 'sea_water_temperature': 28.4
+ }]
+ }, {
+ 'id': '8532e3e5-3fdd-304f-a9d7-1382d9658b36[[0, 15, 16]]',
+ 'lon': -145.875,
+ 'lat': 11.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 28.597015380859375,
+ 'matches': [{
+ 'id': 'Buoys_20171010(715)',
+ 'lon': -145.868,
+ 'lat': 11.378,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 10, 16, 0),
+ 'sea_water_temperature': 28.2
+ }]
+ }, {
+ 'id': '35263cc2-f801-3954-b769-38f150ae09bf[[0, 22, 21]]',
+ 'lon': -137.125,
+ 'lat': 20.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 24.865997314453125,
+ 'matches': [{
+ 'id': 'Buoys_20170908(558)',
+ 'lon': -137.13,
+ 'lat': 20.632,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 8, 10, 50),
+ 'sea_water_temperature': 25.0
+ }]
+ }, {
+ 'id': 'd14b58a0-ed21-3ed9-a95e-2915ffc93676[[0, 8, 25]]',
+ 'lon': -151.125,
+ 'lat': 17.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 27.37298583984375,
+ 'matches': [{
+ 'id': 'Buoys_20171022(485)',
+ 'lon': -151.13,
+ 'lat': 17.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 22, 6, 50),
+ 'sea_water_temperature': 26.4
+ }]
+ }, {
+ 'id': 'c9cb10ab-ebae-3c8b-a498-d7aef5cf53ed[[0, 5, 8]]',
+ 'lon': -147.875,
+ 'lat': 16.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 27.2869873046875,
+ 'matches': [{
+ 'id': 'Buoys_20171025(7730)',
+ 'lon': -147.881,
+ 'lat': 16.375,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 25, 17, 0),
+ 'sea_water_temperature': 27.1
+ }]
+ }, {
+ 'id': '8532e3e5-3fdd-304f-a9d7-1382d9658b36[[0, 23, 4]]',
+ 'lon': -148.875,
+ 'lat': 13.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 28.196990966796875,
+ 'matches': [{
+ 'id': 'Buoys_20170918(1164)',
+ 'lon': -148.875,
+ 'lat': 13.376,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 18, 7, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': '17905d2a-ccdd-3d7b-91a7-388c0cc6ef58[[0, 2, 17]]',
+ 'lon': -123.125,
+ 'lat': 15.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 27.8389892578125,
+ 'matches': [{
+ 'id': 'Buoys_20171003(7172)',
+ 'lon': -123.119,
+ 'lat': 15.629,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 3, 10, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'be519f66-de2e-3ffe-a929-be8033717020[[0, 23, 4]]',
+ 'lon': -148.875,
+ 'lat': 13.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 24, 9, 0),
+ 'sea_surface_foundation_temperature': 28.1669921875,
+ 'matches': [{
+ 'id': 'Buoys_20170918(1164)',
+ 'lon': -148.875,
+ 'lat': 13.376,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 18, 7, 0),
+ 'sea_water_temperature': 27.9
+ }]
+ }, {
+ 'id': 'dfee49fc-11d5-3bf3-b515-50e698a80f55[[0, 4, 14]]',
+ 'lon': -146.375,
+ 'lat': 23.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 27, 9, 0),
+ 'sea_surface_foundation_temperature': 25.6090087890625,
+ 'matches': [{
+ 'id': 'Buoys_20170903(742)',
+ 'lon': -146.378,
+ 'lat': 23.617,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 3, 6, 0),
+ 'sea_water_temperature': 25.6
+ }]
+ }, {
+ 'id': 'e812f91f-4796-3109-90a7-e20834b2a4e9[[0, 20, 7]]',
+ 'lon': -148.125,
+ 'lat': 20.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 25, 9, 0),
+ 'sea_surface_foundation_temperature': 26.364013671875,
+ 'matches': [{
+ 'id': 'Buoys_20170920(7966)',
+ 'lon': -148.131,
+ 'lat': 20.124,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 20, 12, 0),
+ 'sea_water_temperature': 26.3
+ }]
+ }, {
+ 'id': 'e5f90fe2-0de1-323e-9bed-a26011d52cbf[[0, 3, 25]]',
+ 'lon': -143.625,
+ 'lat': 23.375,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 29, 9, 0),
+ 'sea_surface_foundation_temperature': 25.22198486328125,
+ 'matches': [{
+ 'id': 'Buoys_20171029(225)',
+ 'lon': -143.62,
+ 'lat': 23.372,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 29, 3, 0),
+ 'sea_water_temperature': 24.0
+ }]
+ }, {
+ 'id': 'fc6f3c08-cefc-36a8-8b2e-9212fe2b4afe[[0, 10, 4]]',
+ 'lon': -148.875,
+ 'lat': 10.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.670013427734375,
+ 'matches': [{
+ 'id': 'Buoys_20171028(1182)',
+ 'lon': -148.874,
+ 'lat': 10.13,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 28, 4, 0),
+ 'sea_water_temperature': 28.5
+ }]
+ }, {
+ 'id': 'ac22e67b-95f5-3c51-ae05-1396b838276c[[0, 14, 7]]',
+ 'lon': -140.625,
+ 'lat': 11.125,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 28, 9, 0),
+ 'sea_surface_foundation_temperature': 28.699005126953125,
+ 'matches': [{
+ 'id': 'Buoys_20171015(1659)',
+ 'lon': -140.626,
+ 'lat': 11.127,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 10, 15, 3, 0),
+ 'sea_water_temperature': 28.3
+ }]
+ }, {
+ 'id': '83c72b56-824b-3dcd-be76-9bb25927c6ce[[0, 4, 14]]',
+ 'lon': -146.375,
+ 'lat': 23.625,
+ 'source': 'MUR25-JPL-L4-GLOB-v04.2',
+ 'device': 'radiometers',
+ 'platform': 'orbiting satellite',
+ 'time': datetime.datetime(2017, 9, 26, 9, 0),
+ 'sea_surface_foundation_temperature': 25.64300537109375,
+ 'matches': [{
+ 'id': 'Buoys_20170903(742)',
+ 'lon': -146.378,
+ 'lat': 23.617,
+ 'source': 'spurs2',
+ 'device': 'CTD',
+ 'platform': 'drifting surface float',
+ 'time': datetime.datetime(2017, 9, 3, 6, 0),
+ 'sea_water_temperature': 25.6
+ }]
+ }
+]
diff --git a/analysis/webservice/algorithms/doms/BaseDomsHandler.py b/analysis/webservice/algorithms/doms/BaseDomsHandler.py
index b5834f9..8e6fba4 100644
--- a/analysis/webservice/algorithms/doms/BaseDomsHandler.py
+++ b/analysis/webservice/algorithms/doms/BaseDomsHandler.py
@@ -21,6 +21,7 @@ from datetime import datetime
import time
import itertools
import importlib_metadata
+from collections import defaultdict
from decimal import Decimal
import numpy as np
@@ -310,8 +311,8 @@ class DomsNetCDFFormatter:
platforms.add(match['platform'])
dataset.platform = ', '.join(platforms)
- satellite_group_name = "SatelliteData"
- insitu_group_name = "InsituData"
+ satellite_group_name = 'PrimaryData'
+ insitu_group_name = "SecondaryData"
#Create Satellite group, variables, and attributes
satelliteGroup = dataset.createGroup(satellite_group_name)
@@ -389,54 +390,58 @@ class DomsNetCDFFormatter:
class DomsNetCDFValueWriter:
- def __init__(self, group, matchup_parameter):
+ def __init__(self, group, matchup_parameter): # TODO how do we want this matchup param to be used?
group.createDimension("dim", size=None)
self.group = group
self.lat = []
self.lon = []
self.time = []
- self.sea_water_salinity = []
- self.wind_speed = []
- self.wind_u = []
- self.wind_v = []
- self.wind_direction = []
- self.sea_water_temperature = []
self.depth = []
- self.satellite_group_name = "SatelliteData"
- self.insitu_group_name = "InsituData"
-
- #
- # Only include the depth variable related to the match-up parameter. If the match-up parameter is
- # not sss or sst then do not include any depth data, just fill values.
- #
- if matchup_parameter == "sss":
- self.matchup_depth = "sea_water_salinity_depth"
- elif matchup_parameter == "sst":
- self.matchup_depth = "sea_water_temperature_depth"
- else:
- self.matchup_depth = "NO_DEPTH"
-
- def addData(self, value):
- self.lat.append(value.get("y", None))
- self.lon.append(value.get("x", None))
- self.time.append(time.mktime(value.get("time").timetuple()))
- self.sea_water_salinity.append(value.get("sea_water_salinity", None))
- self.wind_speed.append(value.get("wind_speed", None))
- self.wind_u.append(value.get("wind_u", None))
- self.wind_v.append(value.get("wind_v", None))
- self.wind_direction.append(value.get("wind_direction", None))
- self.sea_water_temperature.append(value.get("sea_water_temperature", None))
- self.depth.append(value.get(self.matchup_depth, None))
+ self.primary_group_name = "PrimaryData"
+ self.secondary_group_name = "SecondaryData"
+ self.data_map = defaultdict(list)
+
+ def addData(self, result_item):
+ """
+ Populate DomsNetCDFValueWriter fields from matchup results dict
+ """
+ non_data_fields = [
+ 'id', 'x', 'y',
+ 'source', 'device',
+ 'platform', 'time', 'matches'
+ ]
+ self.lat.append(result_item.get('y', None))
+ self.lon.append(result_item.get('x', None))
+ self.time.append(time.mktime(result_item.get('time').timetuple()))
+
+ # All other variables are assumed to be science variables.
+ # Add DataPoints accordingly.
+ for key, value in result_item.items():
+ if 'depth' in key:
+ self.depth.append(result_item.get(key))
+ continue
+ if key not in non_data_fields:
+ if len(self.data_map[key]) != len(self.lat) - 1:
+ # If the counts mismatch, fill this variable with
+ # None so the data matches the size
+ size_diff = len(self.lat) - len(self.data_map[key]) - 1
+ self.data_map[key].extend([None] * size_diff)
+ self.data_map[key].append(value)
+
+ # Check if there are any variables that were not appended to.
+ # Append None, meaning that value is empty.
+ for var_name in set(self.data_map.keys()) - set(result_item.keys()):
+ self.data_map[var_name].append(None)
def writeGroup(self):
#
# Create variables, enrich with attributes, and add data
#
- lonVar = self.group.createVariable("lon", "f4", ("dim",), fill_value=-32767.0)
- latVar = self.group.createVariable("lat", "f4", ("dim",), fill_value=-32767.0)
- timeVar = self.group.createVariable("time", "f4", ("dim",), fill_value=-32767.0)
+ lonVar = self.group.createVariable('lon', 'f4', ('dim',), fill_value=-32767.0)
+ latVar = self.group.createVariable('lat', 'f4', ('dim',), fill_value=-32767.0)
+ timeVar = self.group.createVariable('time', 'f4', ('dim',), fill_value=-32767.0)
self.__enrichLon(lonVar, min(self.lon), max(self.lon))
self.__enrichLat(latVar, min(self.lat), max(self.lat))
@@ -446,54 +451,19 @@ class DomsNetCDFValueWriter:
lonVar[:] = self.lon
timeVar[:] = self.time
- if self.sea_water_salinity.count(None) != len(self.sea_water_salinity):
- if self.group.name == self.satellite_group_name:
- sssVar = self.group.createVariable("SeaSurfaceSalinity", "f4", ("dim",), fill_value=-32767.0)
- self.__enrichSSSMeasurements(sssVar, min(self.sea_water_salinity), max(self.sea_water_salinity))
- else: # group.name == self.insitu_group_name
- sssVar = self.group.createVariable("SeaWaterSalinity", "f4", ("dim",), fill_value=-32767.0)
- self.__enrichSWSMeasurements(sssVar, min(self.sea_water_salinity), max(self.sea_water_salinity))
- sssVar[:] = self.sea_water_salinity
-
- if self.wind_speed.count(None) != len(self.wind_speed):
- windSpeedVar = self.group.createVariable("WindSpeed", "f4", ("dim",), fill_value=-32767.0)
- self.__enrichWindSpeed(windSpeedVar, self.__calcMin(self.wind_speed), max(self.wind_speed))
- windSpeedVar[:] = self.wind_speed
-
- if self.wind_u.count(None) != len(self.wind_u):
- windUVar = self.group.createVariable("WindU", "f4", ("dim",), fill_value=-32767.0)
- windUVar[:] = self.wind_u
- self.__enrichWindU(windUVar, self.__calcMin(self.wind_u), max(self.wind_u))
-
- if self.wind_v.count(None) != len(self.wind_v):
- windVVar = self.group.createVariable("WindV", "f4", ("dim",), fill_value=-32767.0)
- windVVar[:] = self.wind_v
- self.__enrichWindV(windVVar, self.__calcMin(self.wind_v), max(self.wind_v))
-
- if self.wind_direction.count(None) != len(self.wind_direction):
- windDirVar = self.group.createVariable("WindDirection", "f4", ("dim",), fill_value=-32767.0)
- windDirVar[:] = self.wind_direction
- self.__enrichWindDir(windDirVar)
-
- if self.sea_water_temperature.count(None) != len(self.sea_water_temperature):
- if self.group.name == self.satellite_group_name:
- tempVar = self.group.createVariable("SeaSurfaceTemp", "f4", ("dim",), fill_value=-32767.0)
- self.__enrichSurfaceTemp(tempVar, self.__calcMin(self.sea_water_temperature), max(self.sea_water_temperature))
- else:
- tempVar = self.group.createVariable("SeaWaterTemp", "f4", ("dim",), fill_value=-32767.0)
- self.__enrichWaterTemp(tempVar, self.__calcMin(self.sea_water_temperature), max(self.sea_water_temperature))
- tempVar[:] = self.sea_water_temperature
-
- if self.group.name == self.insitu_group_name:
- depthVar = self.group.createVariable("Depth", "f4", ("dim",), fill_value=-32767.0)
-
- if self.depth.count(None) != len(self.depth):
- self.__enrichDepth(depthVar, self.__calcMin(self.depth), max(self.depth))
- depthVar[:] = self.depth
- else:
- # If depth has no data, set all values to 0
- tempDepth = [0 for x in range(len(self.depth))]
- depthVar[:] = tempDepth
+ # Add depth variable, if present
+ if self.depth:
+ depthVar = self.group.createVariable('depth', 'f4', ('dim',), fill_value=-32767.0)
+ self.__enrichDepth(depthVar, self.__calcMin(self.depth), max(self.depth))
+ depthVar[:] = self.depth
+
+ print(self.data_map)
+
+ for variable_name, data in self.data_map.items():
+ # Create a variable for each data point
+ data_variable = self.group.createVariable(variable_name, 'f4', ('dim',), fill_value=-32767.0)
+ self.__enrichVariable(data_variable, min(data), max(data), has_depth=self.depth)
+ data_variable[:] = data
#
# Lists may include 'None" values, to calc min these must be filtered out
@@ -502,6 +472,19 @@ class DomsNetCDFValueWriter:
def __calcMin(var):
return min(x for x in var if x is not None)
+ @staticmethod
+ def __enrichVariable(var, var_min, var_max, has_depth):
+ coordinates = ['lat', 'lon', 'depth', 'time']
+
+ if not has_depth:
+ coordinates = ['lat', 'lon', 'time']
+
+ var.long_name = var
+ var.standard_name = var
+ var.units = 'UNKNOWN' # TODO populate this field once this metadata is in place
+ var.valid_min = var_min
+ var.valid_max = var_max
+ var.coordinates = ' '.join(coordinates)
#
# Add attributes to each variable
@@ -531,24 +514,6 @@ class DomsNetCDFValueWriter:
var.axis = "T"
var.units = "seconds since 1970-01-01 00:00:00 0:00"
- @staticmethod
- def __enrichSSSMeasurements(var, var_min, var_max):
- var.long_name = "Sea surface salinity"
- var.standard_name = "sea_surface_salinity"
- var.units = "1e-3"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat time"
-
- @staticmethod
- def __enrichSWSMeasurements(var, var_min, var_max):
- var.long_name = "Sea water salinity"
- var.standard_name = "sea_water_salinity"
- var.units = "1e-3"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat depth time"
-
@staticmethod
def __enrichDepth(var, var_min, var_max):
var.valid_min = var_min
@@ -559,54 +524,3 @@ class DomsNetCDFValueWriter:
var.axis = "Z"
var.positive = "Down"
- @staticmethod
- def __enrichWindSpeed(var, var_min, var_max):
- var.long_name = "Wind speed"
- var.standard_name = "wind_speed"
- var.units = "m s-1"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat depth time"
-
- @staticmethod
- def __enrichWindU(var, var_min, var_max):
- var.long_name = "Eastward wind"
- var.standard_name = "eastward_wind"
- var.units = "m s-1"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat depth time"
-
- @staticmethod
- def __enrichWindV(var, var_min, var_max):
- var.long_name = "Northward wind"
- var.standard_name = "northward_wind"
- var.units = "m s-1"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat depth time"
-
- @staticmethod
- def __enrichWaterTemp(var, var_min, var_max):
- var.long_name = "Sea water temperature"
- var.standard_name = "sea_water_temperature"
- var.units = "degree_C"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat depth time"
-
- @staticmethod
- def __enrichSurfaceTemp(var, var_min, var_max):
- var.long_name = "Sea surface temperature"
- var.standard_name = "sea_surface_temperature"
- var.units = "degree_C"
- var.valid_min = var_min
- var.valid_max = var_max
- var.coordinates = "lon lat time"
-
- @staticmethod
- def __enrichWindDir(var):
- var.long_name = "Wind from direction"
- var.standard_name = "wind_from_direction"
- var.units = "degree"
- var.coordinates = "lon lat depth time"
diff --git a/analysis/webservice/nexus_tornado/request/renderers/NexusNETCDFRenderer.py b/analysis/webservice/nexus_tornado/request/renderers/NexusNETCDFRenderer.py
index 9d6ca92..b2236f6 100644
--- a/analysis/webservice/nexus_tornado/request/renderers/NexusNETCDFRenderer.py
+++ b/analysis/webservice/nexus_tornado/request/renderers/NexusNETCDFRenderer.py
@@ -11,7 +11,7 @@ class NexusNETCDFRenderer(object):
tornado_handler.set_header("Content-Type", "application/x-netcdf")
tornado_handler.set_header("Content-Disposition", "filename=\"%s\"" % self._request.get_argument('filename', "download.nc"))
try:
- self.write(result.toNetCDF())
+ tornado_handler.write(result.toNetCDF())
except:
traceback.print_exc(file=sys.stdout)
raise NexusProcessingException(reason="Unable to convert results to NetCDF.")
\ No newline at end of file