From c5408d46c2a79339ef65d80be2b546c8f662a100 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 6 Apr 2020 12:53:21 -0600
Subject: [PATCH] add observatories endpoint

---
 geomagio/api/ws/Observatories.py |  34 +++
 geomagio/api/ws/app.py           |   3 +-
 geomagio/api/ws/observatory.py   | 437 +++++++++++++++++++++++++++++++
 3 files changed, 473 insertions(+), 1 deletion(-)
 create mode 100644 geomagio/api/ws/Observatories.py
 create mode 100644 geomagio/api/ws/observatory.py

diff --git a/geomagio/api/ws/Observatories.py b/geomagio/api/ws/Observatories.py
new file mode 100644
index 000000000..0eb73ebe9
--- /dev/null
+++ b/geomagio/api/ws/Observatories.py
@@ -0,0 +1,34 @@
+from typing import Dict
+
+from fastapi import APIRouter
+
+from .Observatory import OBSERVATORIES
+
+
+router = APIRouter()
+
+
+@router.get("/observatory/")
+def get_observatories() -> Dict:
+    return {
+        "type": "FeatureCollection",
+        "features": [
+            {
+                "type": "Feature",
+                "id": o.id,
+                "properties": {
+                    "name": o.name,
+                    "agency": o.agency,
+                    "agency_name": o.agency_name,
+                    "sensor_orientation": o.sensor_orientation,
+                    "sensor_sampling_rate": 0.01,
+                    "declination_base": o.declination_base,
+                },
+                "geometry": {
+                    "type": "Point",
+                    "coordinates": [o.longitude, o.latitude, o.elevation],
+                },
+            }
+            for o in OBSERVATORIES
+        ],
+    }
diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py
index 2ab28a600..279e21229 100644
--- a/geomagio/api/ws/app.py
+++ b/geomagio/api/ws/app.py
@@ -5,7 +5,7 @@ from fastapi.exceptions import RequestValidationError
 from fastapi.responses import JSONResponse, PlainTextResponse, RedirectResponse
 from obspy import UTCDateTime
 
-from . import data, elements
+from . import data, elements, observatories
 
 
 ERROR_CODE_MESSAGES = {
@@ -24,6 +24,7 @@ VERSION = "version"
 app = FastAPI(docs_url="/docs", openapi_prefix="/ws")
 app.include_router(data.router)
 app.include_router(elements.router)
+app.include_router(observatories.router)
 
 
 @app.get("/", include_in_schema=False)
diff --git a/geomagio/api/ws/observatory.py b/geomagio/api/ws/observatory.py
new file mode 100644
index 000000000..dae8dd01e
--- /dev/null
+++ b/geomagio/api/ws/observatory.py
@@ -0,0 +1,437 @@
+from pydantic import BaseModel
+
+
+class Observatory(BaseModel):
+    id: str
+    elevation: int
+    latitude: float
+    longitude: float
+    name: str
+    agency: str
+    agency_name: str
+    declination_base: int
+    sensor_orientation: str
+
+
+OBSERVATORIES = [
+    Observatory(
+        id="BDT",
+        elevation=1682,
+        latitude=40.137,
+        longitude=254.763,
+        name="Boulder Test",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=5527,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="BOU",
+        elevation=1682,
+        latitude=40.137,
+        longitude=254.763,
+        name="Boulder",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=5527,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="TST",
+        elevation=1682,
+        latitude=40.137,
+        longitude=254.763,
+        name="Boulder Test (ObsRIO)",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=5527,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="BRW",
+        elevation=10,
+        latitude=203.378,
+        longitude=71.322,
+        name="Barrow",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=10589,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="BRT",
+        elevation=10,
+        latitude=203.378,
+        longitude=71.322,
+        name="Barrow Test (ObsRIO)",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=10589,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="BSL",
+        elevation=8,
+        latitude=30.35,
+        longitude=270.365,
+        name="Stennis Space Center",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=215772,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="CMO",
+        elevation=197,
+        latitude=64.874,
+        longitude=212.14,
+        name="College",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=12151,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="CMT",
+        elevation=197,
+        latitude=64.874,
+        longitude=212.14,
+        name="College (ObsRIO)",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=12151,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="DED",
+        elevation=10,
+        latitude=70.355,
+        longitude=211.207,
+        name="Deadhorse",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=10755,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="DHT",
+        elevation=10,
+        latitude=70.355,
+        longitude=211.207,
+        name="Deadhorse Test (ObsRIO)",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=10755,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="FRD",
+        elevation=69,
+        latitude=38.205,
+        longitude=282.627,
+        name="Fredericksburg",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=209690,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="FRT",
+        elevation=69,
+        latitude=38.205,
+        longitude=282.627,
+        name="Fredericksburg Test",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=209690,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="FRN",
+        elevation=331,
+        latitude=37.091,
+        longitude=240.282,
+        name="Fresno",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=8097,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="GUA",
+        elevation=140,
+        latitude=13.588,
+        longitude=144.867,
+        name="Guam",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=764,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="HON",
+        elevation=4,
+        latitude=21.316,
+        longitude=202.0,
+        name="Honolulu",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=5982,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="NEW",
+        elevation=770,
+        latitude=48.265,
+        longitude=242.878,
+        name="Newport",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=9547,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="SHU",
+        elevation=80,
+        latitude=55.348,
+        longitude=199.538,
+        name="Shumagin",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=7386,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="SIT",
+        elevation=24,
+        latitude=57.058,
+        longitude=224.675,
+        name="Sitka",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=12349,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="SJG",
+        elevation=424,
+        latitude=18.113,
+        longitude=293.849,
+        name="San Juan",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=208439,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="SJT",
+        elevation=424,
+        latitude=18.113,
+        longitude=293.849,
+        name="San Juan Test",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=208439,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="TUC",
+        elevation=946,
+        latitude=32.174,
+        longitude=249.267,
+        name="Tucson",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=5863,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="USGS",
+        elevation=1682,
+        latitude=40.137,
+        longitude=254.764,
+        name="USGS",
+        agency="USGS",
+        agency_name="United States Geological Survey (USGS)",
+        declination_base=0,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="BLC",
+        elevation=0,
+        latitude=64.3,
+        longitude=264.0,
+        name="Baker Lake",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="BRD",
+        elevation=0,
+        latitude=49.6,
+        longitude=262.9,
+        name="Brandon",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="CBB",
+        elevation=0,
+        latitude=69.2,
+        longitude=255.0,
+        name="Cambridge Bay",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="EUA",
+        elevation=0,
+        latitude=55.3,
+        longitude=282.3,
+        name="Eureka",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="FCC",
+        elevation=0,
+        latitude=58.8,
+        longitude=265.9,
+        name="Fort Churchill",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="IQA",
+        elevation=0,
+        latitude=63.8,
+        longitude=291.5,
+        name="Iqaluit",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="MEA",
+        elevation=0,
+        latitude=54.6,
+        longitude=246.7,
+        name="Meanook",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="OTT",
+        elevation=0,
+        latitude=45.4,
+        longitude=284.5,
+        name="Ottawa",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="RES",
+        elevation=0,
+        latitude=74.7,
+        longitude=265.1,
+        name="Resolute Bay",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="SNK",
+        elevation=0,
+        latitude=62.4,
+        longitude=245.5,
+        name="Sanikiluaq",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="STJ",
+        elevation=0,
+        latitude=47.6,
+        longitude=307.3,
+        name="St Johns",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="VIC",
+        elevation=0,
+        latitude=48.6,
+        longitude=236.6,
+        name="Victoria",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="YKC",
+        elevation=0,
+        latitude=62.4,
+        longitude=245.5,
+        name="Yellowknife",
+        agency="GSC",
+        agency_name="Geological Survey of Canada (GSC)",
+        declination_base=0,
+        sensor_orientation="XYZF",
+    ),
+    Observatory(
+        id="HAD",
+        elevation=0,
+        latitude=51.0,
+        longitude=355.5,
+        name="Hartland",
+        agency="BGS",
+        agency_name="British Geological Survey (BGS)",
+        declination_base=0,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="HER",
+        elevation=0,
+        latitude=-34.4,
+        longitude=19.2,
+        name="Hermanus",
+        agency="SANSA",
+        agency_name="South African National Space Agency (SANSA)",
+        declination_base=0,
+        sensor_orientation="HDZF",
+    ),
+    Observatory(
+        id="KAK",
+        elevation=36,
+        latitude=53.77,
+        longitude=140.18,
+        name="Kakioka",
+        agency="JMA",
+        agency_name="Japan Meteorological Agency (JMA)",
+        declination_base=0,
+        sensor_orientation="HDZF",
+    ),
+]
+
+OBSERVATORY_INDEX = {o.id: o for o in OBSERVATORIES}
-- 
GitLab