Update pynws to v0.10.1 (#30662)

* update to pynws 0.10.1

* remove unneeded raw json files

* move test helper module to const
This commit is contained in:
MatthewFlamm 2020-01-15 15:01:47 -05:00 committed by Paulus Schoutsen
parent 3899c6ae27
commit b8feaba5cb
12 changed files with 262 additions and 1679 deletions

View file

@ -4,5 +4,5 @@
"documentation": "https://www.home-assistant.io/integrations/nws",
"dependencies": [],
"codeowners": ["@MatthewFlamm"],
"requirements": ["pynws==0.8.1"]
"requirements": ["pynws==0.10.1"]
}

View file

@ -177,7 +177,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
websession = async_get_clientsession(hass)
# ID request as being from HA, pynws prepends the api_key in addition
api_key_ha = f"{api_key} homeassistant"
nws = SimpleNWS(latitude, longitude, api_key_ha, mode, websession)
nws = SimpleNWS(latitude, longitude, api_key_ha, websession)
_LOGGER.debug("Setting up station: %s", station)
try:
@ -226,15 +226,24 @@ class NWSWeather(WeatherEntity):
)
else:
self.observation = self.nws.observation
_LOGGER.debug("Observation: %s", self.observation)
_LOGGER.debug("Updating forecast")
try:
await self.nws.update_forecast()
if self.mode == "daynight":
await self.nws.update_forecast()
else:
await self.nws.update_forecast_hourly()
except ERRORS as status:
_LOGGER.error(
"Error updating forecast from station %s: %s", self.nws.station, status
)
return
self._forecast = self.nws.forecast
if self.mode == "daynight":
self._forecast = self.nws.forecast
else:
self._forecast = self.nws.forecast_hourly
_LOGGER.debug("Forecast: %s", self._forecast)
_LOGGER.debug("Finished updating")
@property
def attribution(self):

View file

@ -1399,7 +1399,7 @@ pynuki==1.3.3
pynut2==2.1.2
# homeassistant.components.nws
pynws==0.8.1
pynws==0.10.1
# homeassistant.components.nx584
pynx584==0.4

View file

@ -481,7 +481,7 @@ pymodbus==1.5.2
pymonoprice==0.3
# homeassistant.components.nws
pynws==0.8.1
pynws==0.10.1
# homeassistant.components.nx584
pynx584==0.4

View file

@ -0,0 +1 @@
"""Tests for NWS."""

View file

@ -0,0 +1,114 @@
"""Helpers for interacting with pynws."""
from homeassistant.components.nws.weather import ATTR_FORECAST_PRECIP_PROB
from homeassistant.components.weather import (
ATTR_FORECAST_CONDITION,
ATTR_FORECAST_TEMP,
ATTR_FORECAST_TIME,
ATTR_FORECAST_WIND_BEARING,
ATTR_FORECAST_WIND_SPEED,
ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_TEMPERATURE,
ATTR_WEATHER_VISIBILITY,
ATTR_WEATHER_WIND_BEARING,
ATTR_WEATHER_WIND_SPEED,
)
from homeassistant.const import (
LENGTH_KILOMETERS,
LENGTH_METERS,
LENGTH_MILES,
PRESSURE_HPA,
PRESSURE_INHG,
PRESSURE_PA,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
)
from homeassistant.util.distance import convert as convert_distance
from homeassistant.util.pressure import convert as convert_pressure
from homeassistant.util.temperature import convert as convert_temperature
DEFAULT_STATIONS = ["ABC", "XYZ"]
DEFAULT_OBSERVATION = {
"temperature": 10,
"seaLevelPressure": 100000,
"relativeHumidity": 10,
"windSpeed": 10,
"windDirection": 180,
"visibility": 10000,
"textDescription": "A long description",
"station": "ABC",
"timestamp": "2019-08-12T23:53:00+00:00",
"iconTime": "day",
"iconWeather": (("Fair/clear", None),),
}
EXPECTED_OBSERVATION_IMPERIAL = {
ATTR_WEATHER_TEMPERATURE: round(
convert_temperature(10, TEMP_CELSIUS, TEMP_FAHRENHEIT)
),
ATTR_WEATHER_WIND_BEARING: 180,
ATTR_WEATHER_WIND_SPEED: round(
convert_distance(10, LENGTH_METERS, LENGTH_MILES) * 3600
),
ATTR_WEATHER_PRESSURE: round(
convert_pressure(100000, PRESSURE_PA, PRESSURE_INHG), 2
),
ATTR_WEATHER_VISIBILITY: round(
convert_distance(10000, LENGTH_METERS, LENGTH_MILES)
),
ATTR_WEATHER_HUMIDITY: 10,
}
EXPECTED_OBSERVATION_METRIC = {
ATTR_WEATHER_TEMPERATURE: 10,
ATTR_WEATHER_WIND_BEARING: 180,
ATTR_WEATHER_WIND_SPEED: round(
convert_distance(10, LENGTH_METERS, LENGTH_KILOMETERS) * 3600
),
ATTR_WEATHER_PRESSURE: round(convert_pressure(100000, PRESSURE_PA, PRESSURE_HPA)),
ATTR_WEATHER_VISIBILITY: round(
convert_distance(10000, LENGTH_METERS, LENGTH_KILOMETERS)
),
ATTR_WEATHER_HUMIDITY: 10,
}
NONE_OBSERVATION = {key: None for key in DEFAULT_OBSERVATION}
DEFAULT_FORECAST = [
{
"number": 1,
"name": "Tonight",
"startTime": "2019-08-12T20:00:00-04:00",
"isDaytime": False,
"temperature": 10,
"windSpeedAvg": 10,
"windBearing": 180,
"detailedForecast": "A detailed forecast.",
"timestamp": "2019-08-12T23:53:00+00:00",
"iconTime": "night",
"iconWeather": (("lightning-rainy", 40), ("lightning-rainy", 90)),
},
]
EXPECTED_FORECAST_IMPERIAL = {
ATTR_FORECAST_CONDITION: "lightning-rainy",
ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00",
ATTR_FORECAST_TEMP: 10,
ATTR_FORECAST_WIND_SPEED: 10,
ATTR_FORECAST_WIND_BEARING: 180,
ATTR_FORECAST_PRECIP_PROB: 90,
}
EXPECTED_FORECAST_METRIC = {
ATTR_FORECAST_CONDITION: "lightning-rainy",
ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00",
ATTR_FORECAST_TEMP: round(convert_temperature(10, TEMP_FAHRENHEIT, TEMP_CELSIUS)),
ATTR_FORECAST_WIND_SPEED: round(
convert_distance(10, LENGTH_MILES, LENGTH_KILOMETERS)
),
ATTR_FORECAST_WIND_BEARING: 180,
ATTR_FORECAST_PRECIP_PROB: 90,
}
NONE_FORECAST = [{key: None for key in DEFAULT_FORECAST[0]}]

View file

@ -1,87 +1,25 @@
"""Tests for the NWS weather component."""
from homeassistant.components.nws.weather import ATTR_FORECAST_PRECIP_PROB
from homeassistant.components.weather import (
ATTR_FORECAST,
ATTR_FORECAST_CONDITION,
ATTR_FORECAST_TEMP,
ATTR_FORECAST_TIME,
ATTR_FORECAST_WIND_BEARING,
ATTR_FORECAST_WIND_SPEED,
ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_TEMPERATURE,
ATTR_WEATHER_VISIBILITY,
ATTR_WEATHER_WIND_BEARING,
ATTR_WEATHER_WIND_SPEED,
)
from homeassistant.const import (
LENGTH_KILOMETERS,
LENGTH_METERS,
LENGTH_MILES,
PRESSURE_HPA,
PRESSURE_INHG,
PRESSURE_PA,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
)
from unittest.mock import patch
import aiohttp
import pytest
from homeassistant.components.weather import ATTR_FORECAST
from homeassistant.setup import async_setup_component
from homeassistant.util.distance import convert as convert_distance
from homeassistant.util.pressure import convert as convert_pressure
from homeassistant.util.temperature import convert as convert_temperature
from homeassistant.util.unit_system import IMPERIAL_SYSTEM, METRIC_SYSTEM
from tests.common import assert_setup_component, load_fixture
EXP_OBS_IMP = {
ATTR_WEATHER_TEMPERATURE: round(
convert_temperature(26.7, TEMP_CELSIUS, TEMP_FAHRENHEIT)
),
ATTR_WEATHER_WIND_BEARING: 190,
ATTR_WEATHER_WIND_SPEED: round(
convert_distance(2.6, LENGTH_METERS, LENGTH_MILES) * 3600
),
ATTR_WEATHER_PRESSURE: round(
convert_pressure(101040, PRESSURE_PA, PRESSURE_INHG), 2
),
ATTR_WEATHER_VISIBILITY: round(
convert_distance(16090, LENGTH_METERS, LENGTH_MILES)
),
ATTR_WEATHER_HUMIDITY: 64,
}
EXP_OBS_METR = {
ATTR_WEATHER_TEMPERATURE: round(26.7),
ATTR_WEATHER_WIND_BEARING: 190,
ATTR_WEATHER_WIND_SPEED: round(
convert_distance(2.6, LENGTH_METERS, LENGTH_KILOMETERS) * 3600
),
ATTR_WEATHER_PRESSURE: round(convert_pressure(101040, PRESSURE_PA, PRESSURE_HPA)),
ATTR_WEATHER_VISIBILITY: round(
convert_distance(16090, LENGTH_METERS, LENGTH_KILOMETERS)
),
ATTR_WEATHER_HUMIDITY: 64,
}
EXP_FORE_IMP = {
ATTR_FORECAST_CONDITION: "lightning-rainy",
ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00",
ATTR_FORECAST_TEMP: 70,
ATTR_FORECAST_WIND_SPEED: 10,
ATTR_FORECAST_WIND_BEARING: 180,
ATTR_FORECAST_PRECIP_PROB: 90,
}
EXP_FORE_METR = {
ATTR_FORECAST_CONDITION: "lightning-rainy",
ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00",
ATTR_FORECAST_TEMP: round(convert_temperature(70, TEMP_FAHRENHEIT, TEMP_CELSIUS)),
ATTR_FORECAST_WIND_SPEED: round(
convert_distance(10, LENGTH_MILES, LENGTH_KILOMETERS)
),
ATTR_FORECAST_WIND_BEARING: 180,
ATTR_FORECAST_PRECIP_PROB: 90,
}
from .const import (
DEFAULT_FORECAST,
DEFAULT_OBSERVATION,
EXPECTED_FORECAST_IMPERIAL,
EXPECTED_FORECAST_METRIC,
EXPECTED_OBSERVATION_IMPERIAL,
EXPECTED_OBSERVATION_METRIC,
NONE_FORECAST,
NONE_OBSERVATION,
)
from tests.common import mock_coro
MINIMAL_CONFIG = {
"weather": {
@ -92,169 +30,168 @@ MINIMAL_CONFIG = {
}
}
INVALID_CONFIG = {
"weather": {"platform": "nws", "api_key": "x@example.com", "latitude": 40.0}
HOURLY_CONFIG = {
"weather": {
"platform": "nws",
"api_key": "x@example.com",
"latitude": 40.0,
"longitude": -85.0,
"mode": "hourly",
}
}
STAURL = "https://api.weather.gov/points/{},{}/stations"
OBSURL = "https://api.weather.gov/stations/{}/observations/"
FORCURL = "https://api.weather.gov/points/{},{}/forecast"
@pytest.mark.parametrize(
"units,result_observation,result_forecast",
[
(IMPERIAL_SYSTEM, EXPECTED_OBSERVATION_IMPERIAL, EXPECTED_FORECAST_IMPERIAL),
(METRIC_SYSTEM, EXPECTED_OBSERVATION_METRIC, EXPECTED_FORECAST_METRIC),
],
)
async def test_imperial_metric(hass, units, result_observation, result_forecast):
"""Test with imperial and metric units."""
hass.config.units = units
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.return_value = mock_coro()
instance.update_observation.return_value = mock_coro()
instance.update_forecast.return_value = mock_coro()
instance.observation = DEFAULT_OBSERVATION
instance.forecast = DEFAULT_FORECAST
async def test_imperial(hass, aioclient_mock):
"""Test with imperial units."""
aioclient_mock.get(
STAURL.format(40.0, -85.0), text=load_fixture("nws-weather-sta-valid.json")
)
aioclient_mock.get(
OBSURL.format("KMIE"), text=load_fixture("nws-weather-obs-valid.json")
)
aioclient_mock.get(
FORCURL.format(40.0, -85.0), text=load_fixture("nws-weather-fore-valid.json")
)
hass.config.units = IMPERIAL_SYSTEM
with assert_setup_component(1, "weather"):
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
state = hass.states.get("weather.kmie")
state = hass.states.get("weather.abc")
assert state
assert state.state == "sunny"
data = state.attributes
for key, value in EXP_OBS_IMP.items():
for key, value in result_observation.items():
assert data.get(key) == value
assert state.attributes.get("friendly_name") == "KMIE"
forecast = data.get(ATTR_FORECAST)
for key, value in EXP_FORE_IMP.items():
for key, value in result_forecast.items():
assert forecast[0].get(key) == value
async def test_metric(hass, aioclient_mock):
"""Test with metric units."""
aioclient_mock.get(
STAURL.format(40.0, -85.0), text=load_fixture("nws-weather-sta-valid.json")
)
aioclient_mock.get(
OBSURL.format("KMIE"), text=load_fixture("nws-weather-obs-valid.json")
)
aioclient_mock.get(
FORCURL.format(40.0, -85.0), text=load_fixture("nws-weather-fore-valid.json")
)
async def test_hourly(hass):
"""Test with hourly option."""
hass.config.units = IMPERIAL_SYSTEM
hass.config.units = METRIC_SYSTEM
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.return_value = mock_coro()
instance.update_observation.return_value = mock_coro()
instance.update_forecast_hourly.return_value = mock_coro()
instance.observation = DEFAULT_OBSERVATION
instance.forecast_hourly = DEFAULT_FORECAST
with assert_setup_component(1, "weather"):
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
await async_setup_component(hass, "weather", HOURLY_CONFIG)
state = hass.states.get("weather.kmie")
state = hass.states.get("weather.abc")
assert state
assert state.state == "sunny"
data = state.attributes
for key, value in EXP_OBS_METR.items():
for key, value in EXPECTED_OBSERVATION_IMPERIAL.items():
assert data.get(key) == value
assert state.attributes.get("friendly_name") == "KMIE"
forecast = data.get(ATTR_FORECAST)
for key, value in EXP_FORE_METR.items():
for key, value in EXPECTED_FORECAST_IMPERIAL.items():
assert forecast[0].get(key) == value
async def test_none(hass, aioclient_mock):
"""Test with imperial units."""
aioclient_mock.get(
STAURL.format(40.0, -85.0), text=load_fixture("nws-weather-sta-valid.json")
)
aioclient_mock.get(
OBSURL.format("KMIE"), text=load_fixture("nws-weather-obs-null.json")
)
aioclient_mock.get(
FORCURL.format(40.0, -85.0), text=load_fixture("nws-weather-fore-null.json")
)
hass.config.units = IMPERIAL_SYSTEM
with assert_setup_component(1, "weather"):
async def test_none_values(hass):
"""Test with none values in observation and forecast dicts."""
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.return_value = mock_coro()
instance.update_observation.return_value = mock_coro()
instance.update_forecast.return_value = mock_coro()
instance.observation = NONE_OBSERVATION
instance.forecast = NONE_FORECAST
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
state = hass.states.get("weather.kmie")
state = hass.states.get("weather.abc")
assert state
assert state.state == "unknown"
data = state.attributes
for key in EXP_OBS_IMP:
for key in EXPECTED_OBSERVATION_IMPERIAL:
assert data.get(key) is None
assert state.attributes.get("friendly_name") == "KMIE"
forecast = data.get(ATTR_FORECAST)
for key in EXP_FORE_IMP:
for key in EXPECTED_FORECAST_IMPERIAL:
assert forecast[0].get(key) is None
async def test_fail_obs(hass, aioclient_mock):
"""Test failing observation/forecast update."""
aioclient_mock.get(
STAURL.format(40.0, -85.0), text=load_fixture("nws-weather-sta-valid.json")
)
aioclient_mock.get(
OBSURL.format("KMIE"),
text=load_fixture("nws-weather-obs-valid.json"),
status=400,
)
aioclient_mock.get(
FORCURL.format(40.0, -85.0),
text=load_fixture("nws-weather-fore-valid.json"),
status=400,
)
hass.config.units = IMPERIAL_SYSTEM
with assert_setup_component(1, "weather"):
async def test_none(hass):
"""Test with None as observation and forecast."""
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.return_value = mock_coro()
instance.update_observation.return_value = mock_coro()
instance.update_forecast.return_value = mock_coro()
instance.observation = None
instance.forecast = None
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
state = hass.states.get("weather.kmie")
state = hass.states.get("weather.abc")
assert state
assert state.state == "unknown"
data = state.attributes
for key in EXPECTED_OBSERVATION_IMPERIAL:
assert data.get(key) is None
forecast = data.get(ATTR_FORECAST)
assert forecast is None
async def test_fail_stn(hass, aioclient_mock):
"""Test failing station update."""
aioclient_mock.get(
STAURL.format(40.0, -85.0),
text=load_fixture("nws-weather-sta-valid.json"),
status=400,
)
aioclient_mock.get(
OBSURL.format("KMIE"), text=load_fixture("nws-weather-obs-valid.json")
)
aioclient_mock.get(
FORCURL.format(40.0, -85.0), text=load_fixture("nws-weather-fore-valid.json")
)
hass.config.units = IMPERIAL_SYSTEM
with assert_setup_component(1, "weather"):
async def test_error_station(hass):
"""Test error in setting station."""
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.side_effect = aiohttp.ClientError
instance.update_observation.return_value = mock_coro()
instance.update_forecast.return_value = mock_coro()
instance.observation = None
instance.forecast = None
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
state = hass.states.get("weather.kmie")
assert state is None
state = hass.states.get("weather.abc")
assert state is None
async def test_invalid_config(hass, aioclient_mock):
"""Test invalid config.."""
aioclient_mock.get(
STAURL.format(40.0, -85.0), text=load_fixture("nws-weather-sta-valid.json")
)
aioclient_mock.get(
OBSURL.format("KMIE"), text=load_fixture("nws-weather-obs-valid.json")
)
aioclient_mock.get(
FORCURL.format(40.0, -85.0), text=load_fixture("nws-weather-fore-valid.json")
)
async def test_error_observation(hass, caplog):
"""Test error during update observation."""
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.return_value = mock_coro()
instance.update_observation.side_effect = aiohttp.ClientError
instance.update_forecast.return_value = mock_coro()
instance.observation = None
instance.forecast = None
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
hass.config.units = IMPERIAL_SYSTEM
assert "Error updating observation from station ABC" in caplog.text
with assert_setup_component(0, "weather"):
await async_setup_component(hass, "weather", INVALID_CONFIG)
state = hass.states.get("weather.kmie")
assert state is None
async def test_error_forecast(hass, caplog):
"""Test error during update forecast."""
with patch("homeassistant.components.nws.weather.SimpleNWS") as mock_nws:
instance = mock_nws.return_value
instance.station = "ABC"
instance.set_station.return_value = mock_coro()
instance.update_observation.return_value = mock_coro()
instance.update_forecast.side_effect = aiohttp.ClientError
instance.observation = None
instance.forecast = None
await async_setup_component(hass, "weather", MINIMAL_CONFIG)
assert "Error updating forecast from station ABC" in caplog.text

View file

@ -1,80 +0,0 @@
{
"@context": [
"https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
{
"wx": "https://api.weather.gov/ontology#",
"geo": "http://www.opengis.net/ont/geosparql#",
"unit": "http://codes.wmo.int/common/unit/",
"@vocab": "https://api.weather.gov/ontology#"
}
],
"type": "Feature",
"geometry": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [
-85.014692800000006,
39.993574700000003
]
},
{
"type": "Polygon",
"coordinates": [
[
[
-85.027968599999994,
40.005368300000001
],
[
-85.0300814,
39.983399599999998
],
[
-85.001420100000004,
39.981779299999999
],
[
-84.999301200000005,
40.0037479
],
[
-85.027968599999994,
40.005368300000001
]
]
]
}
]
},
"properties": {
"updated": "2019-08-12T23:17:40+00:00",
"units": "us",
"forecastGenerator": "BaselineForecastGenerator",
"generatedAt": "2019-08-13T00:33:19+00:00",
"updateTime": "2019-08-12T23:17:40+00:00",
"validTimes": "2019-08-12T17:00:00+00:00/P8DT6H",
"elevation": {
"value": 366.06479999999999,
"unitCode": "unit:m"
},
"periods": [
{
"number": null,
"name": null,
"startTime": null,
"endTime": null,
"isDaytime": null,
"temperature": null,
"temperatureUnit": null,
"temperatureTrend": null,
"windSpeed": null,
"windDirection": null,
"icon": null,
"shortForecast": null,
"detailedForecast": null
}
]
}
}

View file

@ -1,80 +0,0 @@
{
"@context": [
"https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
{
"wx": "https://api.weather.gov/ontology#",
"geo": "http://www.opengis.net/ont/geosparql#",
"unit": "http://codes.wmo.int/common/unit/",
"@vocab": "https://api.weather.gov/ontology#"
}
],
"type": "Feature",
"geometry": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [
-85.014692800000006,
39.993574700000003
]
},
{
"type": "Polygon",
"coordinates": [
[
[
-85.027968599999994,
40.005368300000001
],
[
-85.0300814,
39.983399599999998
],
[
-85.001420100000004,
39.981779299999999
],
[
-84.999301200000005,
40.0037479
],
[
-85.027968599999994,
40.005368300000001
]
]
]
}
]
},
"properties": {
"updated": "2019-08-12T23:17:40+00:00",
"units": "us",
"forecastGenerator": "BaselineForecastGenerator",
"generatedAt": "2019-08-13T00:33:19+00:00",
"updateTime": "2019-08-12T23:17:40+00:00",
"validTimes": "2019-08-12T17:00:00+00:00/P8DT6H",
"elevation": {
"value": 366.06479999999999,
"unitCode": "unit:m"
},
"periods": [
{
"number": 1,
"name": "Tonight",
"startTime": "2019-08-12T20:00:00-04:00",
"endTime": "2019-08-13T06:00:00-04:00",
"isDaytime": false,
"temperature": 70,
"temperatureUnit": "F",
"temperatureTrend": null,
"windSpeed": "7 to 13 mph",
"windDirection": "S",
"icon": "https://api.weather.gov/icons/land/night/tsra,40/tsra,90?size=medium",
"shortForecast": "Showers And Thunderstorms",
"detailedForecast": "A detailed forecast."
}
]
}
}

View file

@ -1,161 +0,0 @@
{
"@context": [
"https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
{
"wx": "https://api.weather.gov/ontology#",
"s": "https://schema.org/",
"geo": "http://www.opengis.net/ont/geosparql#",
"unit": "http://codes.wmo.int/common/unit/",
"@vocab": "https://api.weather.gov/ontology#",
"geometry": {
"@id": "s:GeoCoordinates",
"@type": "geo:wktLiteral"
},
"city": "s:addressLocality",
"state": "s:addressRegion",
"distance": {
"@id": "s:Distance",
"@type": "s:QuantitativeValue"
},
"bearing": {
"@type": "s:QuantitativeValue"
},
"value": {
"@id": "s:value"
},
"unitCode": {
"@id": "s:unitCode",
"@type": "@id"
},
"forecastOffice": {
"@type": "@id"
},
"forecastGridData": {
"@type": "@id"
},
"publicZone": {
"@type": "@id"
},
"county": {
"@type": "@id"
}
}
],
"type": "FeatureCollection",
"features": [
{
"id": "https://api.weather.gov/stations/KMIE/observations/2019-08-12T23:53:00+00:00",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.400000000000006,
40.25
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMIE/observations/2019-08-12T23:53:00+00:00",
"@type": "wx:ObservationStation",
"elevation": {
"value": 286,
"unitCode": "unit:m"
},
"station": "https://api.weather.gov/stations/KMIE",
"timestamp": "2019-08-12T23:53:00+00:00",
"rawMessage": null,
"textDescription": "Clear",
"icon": null,
"presentWeather": [],
"temperature": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"dewpoint": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"windDirection": {
"value": null,
"unitCode": "unit:degree_(angle)",
"qualityControl": "qc:V"
},
"windSpeed": {
"value": null,
"unitCode": "unit:m_s-1",
"qualityControl": "qc:V"
},
"windGust": {
"value": null,
"unitCode": "unit:m_s-1",
"qualityControl": "qc:Z"
},
"barometricPressure": {
"value": null,
"unitCode": "unit:Pa",
"qualityControl": "qc:V"
},
"seaLevelPressure": {
"value": null,
"unitCode": "unit:Pa",
"qualityControl": "qc:V"
},
"visibility": {
"value": null,
"unitCode": "unit:m",
"qualityControl": "qc:C"
},
"maxTemperatureLast24Hours": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": null
},
"minTemperatureLast24Hours": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": null
},
"precipitationLastHour": {
"value": null,
"unitCode": "unit:m",
"qualityControl": "qc:Z"
},
"precipitationLast3Hours": {
"value": null,
"unitCode": "unit:m",
"qualityControl": "qc:Z"
},
"precipitationLast6Hours": {
"value": 0,
"unitCode": "unit:m",
"qualityControl": "qc:C"
},
"relativeHumidity": {
"value": null,
"unitCode": "unit:percent",
"qualityControl": "qc:C"
},
"windChill": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"heatIndex": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"cloudLayers": [
{
"base": {
"value": null,
"unitCode": "unit:m"
},
"amount": "CLR"
}
]
}
}
]
}

View file

@ -1,161 +0,0 @@
{
"@context": [
"https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
{
"wx": "https://api.weather.gov/ontology#",
"s": "https://schema.org/",
"geo": "http://www.opengis.net/ont/geosparql#",
"unit": "http://codes.wmo.int/common/unit/",
"@vocab": "https://api.weather.gov/ontology#",
"geometry": {
"@id": "s:GeoCoordinates",
"@type": "geo:wktLiteral"
},
"city": "s:addressLocality",
"state": "s:addressRegion",
"distance": {
"@id": "s:Distance",
"@type": "s:QuantitativeValue"
},
"bearing": {
"@type": "s:QuantitativeValue"
},
"value": {
"@id": "s:value"
},
"unitCode": {
"@id": "s:unitCode",
"@type": "@id"
},
"forecastOffice": {
"@type": "@id"
},
"forecastGridData": {
"@type": "@id"
},
"publicZone": {
"@type": "@id"
},
"county": {
"@type": "@id"
}
}
],
"type": "FeatureCollection",
"features": [
{
"id": "https://api.weather.gov/stations/KMIE/observations/2019-08-12T23:53:00+00:00",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.400000000000006,
40.25
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMIE/observations/2019-08-12T23:53:00+00:00",
"@type": "wx:ObservationStation",
"elevation": {
"value": 286,
"unitCode": "unit:m"
},
"station": "https://api.weather.gov/stations/KMIE",
"timestamp": "2019-08-12T23:53:00+00:00",
"rawMessage": "KMIE 122353Z 19005KT 10SM CLR 27/19 A2987 RMK AO2 SLP104 60000 T02670194 10272 20250 58002",
"textDescription": "Clear",
"icon": "https://api.weather.gov/icons/land/day/skc?size=medium",
"presentWeather": [],
"temperature": {
"value": 26.700000000000045,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"dewpoint": {
"value": 19.400000000000034,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"windDirection": {
"value": 190,
"unitCode": "unit:degree_(angle)",
"qualityControl": "qc:V"
},
"windSpeed": {
"value": 2.6000000000000001,
"unitCode": "unit:m_s-1",
"qualityControl": "qc:V"
},
"windGust": {
"value": null,
"unitCode": "unit:m_s-1",
"qualityControl": "qc:Z"
},
"barometricPressure": {
"value": 101150,
"unitCode": "unit:Pa",
"qualityControl": "qc:V"
},
"seaLevelPressure": {
"value": 101040,
"unitCode": "unit:Pa",
"qualityControl": "qc:V"
},
"visibility": {
"value": 16090,
"unitCode": "unit:m",
"qualityControl": "qc:C"
},
"maxTemperatureLast24Hours": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": null
},
"minTemperatureLast24Hours": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": null
},
"precipitationLastHour": {
"value": null,
"unitCode": "unit:m",
"qualityControl": "qc:Z"
},
"precipitationLast3Hours": {
"value": null,
"unitCode": "unit:m",
"qualityControl": "qc:Z"
},
"precipitationLast6Hours": {
"value": 0,
"unitCode": "unit:m",
"qualityControl": "qc:C"
},
"relativeHumidity": {
"value": 64.292485914891955,
"unitCode": "unit:percent",
"qualityControl": "qc:C"
},
"windChill": {
"value": null,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"heatIndex": {
"value": 27.981288713580284,
"unitCode": "unit:degC",
"qualityControl": "qc:V"
},
"cloudLayers": [
{
"base": {
"value": null,
"unitCode": "unit:m"
},
"amount": "CLR"
}
]
}
}
]
}

View file

@ -1,996 +0,0 @@
{
"@context": [
"https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
{
"wx": "https://api.weather.gov/ontology#",
"s": "https://schema.org/",
"geo": "http://www.opengis.net/ont/geosparql#",
"unit": "http://codes.wmo.int/common/unit/",
"@vocab": "https://api.weather.gov/ontology#",
"geometry": {
"@id": "s:GeoCoordinates",
"@type": "geo:wktLiteral"
},
"city": "s:addressLocality",
"state": "s:addressRegion",
"distance": {
"@id": "s:Distance",
"@type": "s:QuantitativeValue"
},
"bearing": {
"@type": "s:QuantitativeValue"
},
"value": {
"@id": "s:value"
},
"unitCode": {
"@id": "s:unitCode",
"@type": "@id"
},
"forecastOffice": {
"@type": "@id"
},
"forecastGridData": {
"@type": "@id"
},
"publicZone": {
"@type": "@id"
},
"county": {
"@type": "@id"
},
"observationStations": {
"@container": "@list",
"@type": "@id"
}
}
],
"type": "FeatureCollection",
"features": [
{
"id": "https://api.weather.gov/stations/KMIE",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.393609999999995,
40.234169999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMIE",
"@type": "wx:ObservationStation",
"elevation": {
"value": 284.988,
"unitCode": "unit:m"
},
"stationIdentifier": "KMIE",
"name": "Muncie, Delaware County-Johnson Field",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KVES",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.531899899999999,
40.2044
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KVES",
"@type": "wx:ObservationStation",
"elevation": {
"value": 306.93360000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KVES",
"name": "Versailles Darke County Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KAID",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.609769999999997,
40.106119999999997
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KAID",
"@type": "wx:ObservationStation",
"elevation": {
"value": 276.14879999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KAID",
"name": "Anderson Municipal Airport",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KDAY",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.218609999999998,
39.906109999999998
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KDAY",
"@type": "wx:ObservationStation",
"elevation": {
"value": 306.93360000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KDAY",
"name": "Dayton, Cox Dayton International Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KGEZ",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.799819999999997,
39.585459999999998
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KGEZ",
"@type": "wx:ObservationStation",
"elevation": {
"value": 244.1448,
"unitCode": "unit:m"
},
"stationIdentifier": "KGEZ",
"name": "Shelbyville Municipal Airport",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KMGY",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.224720000000005,
39.588889999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMGY",
"@type": "wx:ObservationStation",
"elevation": {
"value": 291.9984,
"unitCode": "unit:m"
},
"stationIdentifier": "KMGY",
"name": "Dayton, Dayton-Wright Brothers Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KHAO",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.520610000000005,
39.36121
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KHAO",
"@type": "wx:ObservationStation",
"elevation": {
"value": 185.0136,
"unitCode": "unit:m"
},
"stationIdentifier": "KHAO",
"name": "Butler County Regional Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KFFO",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.049999999999997,
39.833329900000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KFFO",
"@type": "wx:ObservationStation",
"elevation": {
"value": 250.85040000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KFFO",
"name": "Dayton / Wright-Patterson Air Force Base",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KCVG",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.672290000000004,
39.044559999999997
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KCVG",
"@type": "wx:ObservationStation",
"elevation": {
"value": 262.12799999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KCVG",
"name": "Cincinnati/Northern Kentucky International Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KEDJ",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.819199999999995,
40.372300000000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KEDJ",
"@type": "wx:ObservationStation",
"elevation": {
"value": 341.98560000000003,
"unitCode": "unit:m"
},
"stationIdentifier": "KEDJ",
"name": "Bellefontaine Regional Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KFWA",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.206370000000007,
40.97251
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KFWA",
"@type": "wx:ObservationStation",
"elevation": {
"value": 242.9256,
"unitCode": "unit:m"
},
"stationIdentifier": "KFWA",
"name": "Fort Wayne International Airport",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KBAK",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.900000000000006,
39.266669999999998
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KBAK",
"@type": "wx:ObservationStation",
"elevation": {
"value": 199.94880000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KBAK",
"name": "Columbus / Bakalar",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KEYE",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-86.295829999999995,
39.825000000000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KEYE",
"@type": "wx:ObservationStation",
"elevation": {
"value": 249.93600000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KEYE",
"name": "Indianapolis, Eagle Creek Airpark",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KLUK",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.41583,
39.105829999999997
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KLUK",
"@type": "wx:ObservationStation",
"elevation": {
"value": 146.9136,
"unitCode": "unit:m"
},
"stationIdentifier": "KLUK",
"name": "Cincinnati, Cincinnati Municipal Airport Lunken Field",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KIND",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-86.281599999999997,
39.725180000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KIND",
"@type": "wx:ObservationStation",
"elevation": {
"value": 240.792,
"unitCode": "unit:m"
},
"stationIdentifier": "KIND",
"name": "Indianapolis International Airport",
"timeZone": "America/Indiana/Indianapolis"
}
},
{
"id": "https://api.weather.gov/stations/KAOH",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.021389999999997,
40.708060000000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KAOH",
"@type": "wx:ObservationStation",
"elevation": {
"value": 296.87520000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KAOH",
"name": "Lima, Lima Allen County Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KI69",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.2102,
39.078400000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KI69",
"@type": "wx:ObservationStation",
"elevation": {
"value": 256.94640000000004,
"unitCode": "unit:m"
},
"stationIdentifier": "KI69",
"name": "Batavia Clermont County Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KILN",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.779169899999999,
39.428330000000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KILN",
"@type": "wx:ObservationStation",
"elevation": {
"value": 327.96480000000003,
"unitCode": "unit:m"
},
"stationIdentifier": "KILN",
"name": "Wilmington, Airborne Airpark Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KMRT",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.351600000000005,
40.224699999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMRT",
"@type": "wx:ObservationStation",
"elevation": {
"value": 311.20080000000002,
"unitCode": "unit:m"
},
"stationIdentifier": "KMRT",
"name": "Marysville Union County Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KTZR",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.137219999999999,
39.900829999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KTZR",
"@type": "wx:ObservationStation",
"elevation": {
"value": 276.14879999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KTZR",
"name": "Columbus, Bolton Field Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KFDY",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.668610000000001,
41.01361
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KFDY",
"@type": "wx:ObservationStation",
"elevation": {
"value": 248.10720000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KFDY",
"name": "Findlay, Findlay Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KDLZ",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.114800000000002,
40.279699999999998
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KDLZ",
"@type": "wx:ObservationStation",
"elevation": {
"value": 288.036,
"unitCode": "unit:m"
},
"stationIdentifier": "KDLZ",
"name": "Delaware Municipal Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KOSU",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.0780599,
40.078060000000001
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KOSU",
"@type": "wx:ObservationStation",
"elevation": {
"value": 274.92959999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KOSU",
"name": "Columbus, Ohio State University Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KLCK",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-82.933329999999998,
39.816670000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KLCK",
"@type": "wx:ObservationStation",
"elevation": {
"value": 227.07600000000002,
"unitCode": "unit:m"
},
"stationIdentifier": "KLCK",
"name": "Rickenbacker Air National Guard Base",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KMNN",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.068330000000003,
40.616669999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMNN",
"@type": "wx:ObservationStation",
"elevation": {
"value": 302.97120000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KMNN",
"name": "Marion, Marion Municipal Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KCMH",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-82.876390000000001,
39.994999999999997
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KCMH",
"@type": "wx:ObservationStation",
"elevation": {
"value": 248.10720000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KCMH",
"name": "Columbus - John Glenn Columbus International Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KFGX",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-83.743399999999994,
38.541800000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KFGX",
"@type": "wx:ObservationStation",
"elevation": {
"value": 277.9776,
"unitCode": "unit:m"
},
"stationIdentifier": "KFGX",
"name": "Flemingsburg Fleming-Mason Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KFFT",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.903329999999997,
38.184719999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KFFT",
"@type": "wx:ObservationStation",
"elevation": {
"value": 245.0592,
"unitCode": "unit:m"
},
"stationIdentifier": "KFFT",
"name": "Frankfort, Capital City Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KLHQ",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-82.663330000000002,
39.757219900000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KLHQ",
"@type": "wx:ObservationStation",
"elevation": {
"value": 263.95679999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KLHQ",
"name": "Lancaster, Fairfield County Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KLOU",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.663610000000006,
38.227780000000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KLOU",
"@type": "wx:ObservationStation",
"elevation": {
"value": 166.11600000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KLOU",
"name": "Louisville, Bowman Field Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KSDF",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.72972,
38.177219999999998
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KSDF",
"@type": "wx:ObservationStation",
"elevation": {
"value": 150.876,
"unitCode": "unit:m"
},
"stationIdentifier": "KSDF",
"name": "Louisville, Standiford Field",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KVTA",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-82.462500000000006,
40.022779999999997
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KVTA",
"@type": "wx:ObservationStation",
"elevation": {
"value": 269.13839999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KVTA",
"name": "Newark, Newark Heath Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KLEX",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-84.6114599,
38.033900000000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KLEX",
"@type": "wx:ObservationStation",
"elevation": {
"value": 291.084,
"unitCode": "unit:m"
},
"stationIdentifier": "KLEX",
"name": "Lexington Blue Grass Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KMFD",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-82.517780000000002,
40.820279900000003
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KMFD",
"@type": "wx:ObservationStation",
"elevation": {
"value": 395.02080000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KMFD",
"name": "Mansfield - Mansfield Lahm Regional Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KZZV",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.892219999999995,
39.94444
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KZZV",
"@type": "wx:ObservationStation",
"elevation": {
"value": 274.01519999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KZZV",
"name": "Zanesville, Zanesville Municipal Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KHTS",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-82.555000000000007,
38.365000000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KHTS",
"@type": "wx:ObservationStation",
"elevation": {
"value": 252.06960000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KHTS",
"name": "Huntington, Tri-State Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KBJJ",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.886669999999995,
40.873060000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KBJJ",
"@type": "wx:ObservationStation",
"elevation": {
"value": 345.94800000000004,
"unitCode": "unit:m"
},
"stationIdentifier": "KBJJ",
"name": "Wooster, Wayne County Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KPHD",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.423609999999996,
40.471939900000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KPHD",
"@type": "wx:ObservationStation",
"elevation": {
"value": 271.88159999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KPHD",
"name": "New Philadelphia, Harry Clever Field",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KPKB",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.439170000000004,
39.344999999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KPKB",
"@type": "wx:ObservationStation",
"elevation": {
"value": 262.12799999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KPKB",
"name": "Parkersburg, Mid-Ohio Valley Regional Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KCAK",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.443430000000006,
40.918109999999999
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KCAK",
"@type": "wx:ObservationStation",
"elevation": {
"value": 369.11279999999999,
"unitCode": "unit:m"
},
"stationIdentifier": "KCAK",
"name": "Akron Canton Regional Airport",
"timeZone": "America/New_York"
}
},
{
"id": "https://api.weather.gov/stations/KCRW",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.591390000000004,
38.379440000000002
]
},
"properties": {
"@id": "https://api.weather.gov/stations/KCRW",
"@type": "wx:ObservationStation",
"elevation": {
"value": 299.00880000000001,
"unitCode": "unit:m"
},
"stationIdentifier": "KCRW",
"name": "Charleston, Yeager Airport",
"timeZone": "America/New_York"
}
}
],
"observationStations": [
"https://api.weather.gov/stations/KMIE",
"https://api.weather.gov/stations/KVES",
"https://api.weather.gov/stations/KAID",
"https://api.weather.gov/stations/KDAY",
"https://api.weather.gov/stations/KGEZ",
"https://api.weather.gov/stations/KMGY",
"https://api.weather.gov/stations/KHAO",
"https://api.weather.gov/stations/KFFO",
"https://api.weather.gov/stations/KCVG",
"https://api.weather.gov/stations/KEDJ",
"https://api.weather.gov/stations/KFWA",
"https://api.weather.gov/stations/KBAK",
"https://api.weather.gov/stations/KEYE",
"https://api.weather.gov/stations/KLUK",
"https://api.weather.gov/stations/KIND",
"https://api.weather.gov/stations/KAOH",
"https://api.weather.gov/stations/KI69",
"https://api.weather.gov/stations/KILN",
"https://api.weather.gov/stations/KMRT",
"https://api.weather.gov/stations/KTZR",
"https://api.weather.gov/stations/KFDY",
"https://api.weather.gov/stations/KDLZ",
"https://api.weather.gov/stations/KOSU",
"https://api.weather.gov/stations/KLCK",
"https://api.weather.gov/stations/KMNN",
"https://api.weather.gov/stations/KCMH",
"https://api.weather.gov/stations/KFGX",
"https://api.weather.gov/stations/KFFT",
"https://api.weather.gov/stations/KLHQ",
"https://api.weather.gov/stations/KLOU",
"https://api.weather.gov/stations/KSDF",
"https://api.weather.gov/stations/KVTA",
"https://api.weather.gov/stations/KLEX",
"https://api.weather.gov/stations/KMFD",
"https://api.weather.gov/stations/KZZV",
"https://api.weather.gov/stations/KHTS",
"https://api.weather.gov/stations/KBJJ",
"https://api.weather.gov/stations/KPHD",
"https://api.weather.gov/stations/KPKB",
"https://api.weather.gov/stations/KCAK",
"https://api.weather.gov/stations/KCRW"
]
}