Skip to content
Snippets Groups Projects
Commit dc0b28dd authored by Tucker Gary Siegel's avatar Tucker Gary Siegel
Browse files

Merge branch 'accumulated-gdd' into 'master'

Accumulated gdd

See merge request !6
parents e01b843f 4584f633
No related branches found
No related tags found
1 merge request!6Accumulated gdd
gdd = require('./models/gdd.js'); gdd = require('../models/gdd.js');
gdd_current = require('./models/gdd_current.js'); gdd_current = require('../models/gdd_current.js');
normals = require('./models/normals.js'); gdd_normal = require('../models/normals.js');
utils = require('../lib/utils');
function send_response(message, gdds, data, res) {
res.json({
message: message,
date: data["last_date"],
data: gdds,
closest_lon: data["location"]["coordinates"][0],
closest_lat: data["location"]["coordinates"][1]
})
}
function find(collection, query, projection, temps, res) {
collection.findOne(query, projection).then(function(data) {
var min_temps = data["min_temps"]
var max_temps = data["max_temps"]
var gdds = [];
function isNumeric(value) { var { t_base, t_max, t_min } = temps;
return /^-?\d+$/.test(value);
var min_temp = 0
var max_temp = 0
var gdd_sum = 0;
for (var i = 0; i < min_temps.length; i++) {
min_temp = min_temps[i] >= t_min ? min_temps[i] : t_min;
max_temp = max_temps[i] <= t_max ? max_temps[i] : t_max;
gdd_sum += ((max_temp + min_temp) / 2) - t_base
gdds.push(gdd_sum)
}
send_response("Accumulated GDDs", gdds, data, res);
}, function(err) {
res.status(500).send({"internal error": err})
})
} }
exports.year_gdd = function (req, res) {
if (!isNumeric(req.params.year)) { exports.accumulated_gdd = function (req, res) {
res.status(400).send({"parameter error": "\"year\" parameter is not an integer"})
}
var year = parseInt(req.params.year); var year = parseInt(req.params.year);
var product = req.params.product; var product = req.params.product;
if (typeof req.body.latitude === "undefined" || typeof req.body.longitude === "undefined") {
res.status(400).send({"parameter error": "missing latitude or longitude"})
}
var latitude = parseFloat(req.body.latitude) var latitude = parseFloat(req.body.latitude)
var longitude = parseFloat(req.body.longitude) var longitude = parseFloat(req.body.longitude)
...@@ -32,12 +59,6 @@ exports.year_gdd = function (req, res) { ...@@ -32,12 +59,6 @@ exports.year_gdd = function (req, res) {
year: year, year: year,
} }
var projection = {
min_temps: 1,
max_temps: 1,
location: 1,
}
var t_base = 50 var t_base = 50
var t_max = 86 var t_max = 86
var t_min = 50 var t_min = 50
...@@ -64,40 +85,12 @@ exports.year_gdd = function (req, res) { ...@@ -64,40 +85,12 @@ exports.year_gdd = function (req, res) {
t_min = t_base; t_min = t_base;
} }
} else { } else {
switch (product) { out = utils.product_base_switch(product, errors);
case "soybean": t_base = out.t_base;
case "corn": t_min = out.t_min;
case "sunflower": errors = out.errors;
case "tomato":
case "sugar_beat":
t_base = 50;
break;
case "potato":
t_base = 44.6;
t_min = 44.6; // NEED TO ASK ABOUT MIN AND MAX TEMPS IN DAY. SHOULD T_MIN BE SET EQUAL TO T_BASE IF IT IS LESS THAN T_BASE?
break;
case "wheat":
t_base = 41.9;
t_min = 41.9;
break;
case "peas":
t_base = 41;
t_min = 41;
break;
case "brussels_sprout":
case "parsley":
case "cabbage":
t_base = 32;
t_min = 32;
break;
default:
errors.push({
parameter_error: "product",
message: product + " is not available for GDD calculations"
});
break;
}
} }
if (longitude < -125 || longitude > -66.5) { if (longitude < -125 || longitude > -66.5) {
errors.push({ errors.push({
...@@ -111,73 +104,35 @@ exports.year_gdd = function (req, res) { ...@@ -111,73 +104,35 @@ exports.year_gdd = function (req, res) {
errors: errors errors: errors
}) })
} }
var projection = {
min_temps: 1,
max_temps: 1,
location: 1,
}
temps = {
t_base: t_base,
t_max: t_max,
t_min: t_min,
}
if (year != new Date().getFullYear()) { if (year != new Date().getFullYear()) {
gdd.findOne(query, projection).then(function(data) { find(gdd, query, projection, temps, res);
var min_temps = data["min_temps"]
var max_temps = data["max_temps"]
var gdds = [];
var min_temp = 0
var max_temp = 0
for (var i = 0; i < min_temps.length; i++) {
min_temp = min_temps[i] >= t_min ? min_temps[i] : t_min;
max_temp = max_temps[i] <= t_max ? max_temps[i] : t_max;
gdds.push(((max_temp + min_temp) / 2) - t_base)
}
res.json({
message: "GDDs",
date: data["last_date"],
data: gdds,
closest_lon: data["location"]["coordinates"][0],
closest_lat: data["location"]["coordinates"][1]
})
}, function(err) {
console.log(err);
})
} else { } else {
gdd_current.findOne(query, projection).then(function(data) { find(gdd_current, query, projection, temps, res);
var min_temps = data["min_temps"]
var max_temps = data["max_temps"]
var gdds = [];
var min_temp = 0
var max_temp = 0
for (var i = 0; i < min_temps.length; i++) {
min_temp = min_temps[i] >= t_min ? min_temps[i] : t_min;
max_temp = max_temps[i] <= t_max ? max_temps[i] : t_max;
gdds.push(((max_temp + min_temp) / 2) - t_base)
}
res.json({
message: "GDDs",
date: data["last_date"],
data: gdds,
closest_lon: data["location"]["coordinates"][0],
closest_lat: data["location"]["coordinates"][1]
})
}, function(err) {
console.log(err);
})
} }
}; };
exports.normal = function (req, res) {
var product = req.params.product; exports.accumulated_normal_gdd = function (req, res) {
if (typeof req.body.latitude === "undefined" || typeof req.body.longitude === "undefined") { var product = req.params.product;
res.status(400).send({"parameter error": "missing latitude or longitude"})
}
var latitude = parseFloat(req.body.latitude) var latitude = parseFloat(req.body.latitude)
var longitude = parseFloat(req.body.longitude) var longitude = parseFloat(req.body.longitude)
var query = { var query = {
location: { location: {
"$near": { "$near": {
...@@ -189,12 +144,6 @@ exports.normal = function (req, res) { ...@@ -189,12 +144,6 @@ exports.normal = function (req, res) {
}, },
} }
var projection = {
min_temps: 1,
max_temps: 1,
location: 1,
}
var t_base = 50 var t_base = 50
var t_max = 86 var t_max = 86
var t_min = 50 var t_min = 50
...@@ -214,40 +163,12 @@ exports.normal = function (req, res) { ...@@ -214,40 +163,12 @@ exports.normal = function (req, res) {
t_min = t_base; t_min = t_base;
} }
} else { } else {
switch (product) { out = utils.product_base_switch(product, errors);
case "soybean": t_base = out.t_base;
case "corn": t_min = out.t_min;
case "sunflower": errors = out.errors;
case "tomato":
case "sugar_beat":
t_base = 50;
break;
case "potato":
t_base = 44.6;
t_min = 44.6; // NEED TO ASK ABOUT MIN AND MAX TEMPS IN DAY. SHOULD T_MIN BE SET EQUAL TO T_BASE IF IT IS LESS THAN T_BASE?
break;
case "wheat":
t_base = 41.9;
t_min = 41.9;
break;
case "peas":
t_base = 41;
t_min = 41;
break;
case "brussels_sprout":
case "parsley":
case "cabbage":
t_base = 32;
t_min = 32;
break;
default:
errors.push({
parameter_error: "product",
message: product + " is not available for GDD calculations"
});
break;
}
} }
if (longitude < -125 || longitude > -66.5) { if (longitude < -125 || longitude > -66.5) {
errors.push({ errors.push({
...@@ -262,29 +183,17 @@ exports.normal = function (req, res) { ...@@ -262,29 +183,17 @@ exports.normal = function (req, res) {
}) })
} }
normals.findOne(query, projection).then(function(data) { var projection = {
var min_temps = data["min_temps"] min_temps: 1,
var max_temps = data["max_temps"] max_temps: 1,
var gdds = []; location: 1,
}
var min_temp = 0
var max_temp = 0
for (var i = 0; i < min_temps.length; i++) {
min_temp = min_temps[i] >= t_min ? min_temps[i] : t_min;
max_temp = max_temps[i] <= t_max ? max_temps[i] : t_max;
gdds.push(((max_temp + min_temp) / 2) - t_base)
}
res.json({ temps = {
message: "30-year Normal GDDs", t_base: t_base,
data: gdds, t_max: t_max,
closest_lon: data["location"]["coordinates"][0], t_min: t_min,
closest_lat: data["location"]["coordinates"][1] }
})
}, function(err) { find(gdd_normal, query, projection, temps, res);
console.log(err); };
}) \ No newline at end of file
};
gdd = require('../models/gdd.js');
gdd_current = require('../models/gdd_current.js');
utils = require('../lib/utils');
function send_response(message, gdds, data, res) {
res.json({
message: message,
date: data["last_date"],
data: gdds,
closest_lon: data["location"]["coordinates"][0],
closest_lat: data["location"]["coordinates"][1]
})
}
function find(collection, query, projection, temps, res) {
collection.findOne(query, projection).then(function(data) {
var min_temps = data["min_temps"]
var max_temps = data["max_temps"]
var gdds = [];
var { t_base, t_max, t_min } = temps;
var min_temp = 0
var max_temp = 0
for (var i = 0; i < min_temps.length; i++) {
min_temp = min_temps[i] >= t_min ? min_temps[i] : t_min;
max_temp = max_temps[i] <= t_max ? max_temps[i] : t_max;
gdds.push(((max_temp + min_temp) / 2) - t_base)
}
send_response("GDDs", gdds, data, res);
}, function(err) {
res.status(500).send({"internal error": err})
})
}
exports.year_gdd = function (req, res) {
var year = parseInt(req.params.year);
var product = req.params.product;
var latitude = parseFloat(req.body.latitude)
var longitude = parseFloat(req.body.longitude)
var query = {
location: {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [longitude, latitude]
},
},
},
year: year,
}
var t_base = 50
var t_max = 86
var t_min = 50
errors = []
if (year < 1981 || year > new Date().getFullYear()) {
errors.push({
parameter_error: "year",
message: year.toString() + " is out of bounds for GDD calculations. Must be between 1981 - Current Year"
});
}
if (latitude < 24.083334 || latitude > 49.916668) {
errors.push({
parameter_error: "latitude",
message: latitude.toString() + " is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668"
});
}
if (req.body.hasOwnProperty("t_base")) {
t_base = parseFloat(req.body.t_base);
if (t_base < t_min) {
t_min = t_base;
}
} else {
out = utils.product_base_switch(product, errors);
t_base = out.t_base;
t_min = out.t_min;
errors = out.errors;
}
if (longitude < -125 || longitude > -66.5) {
errors.push({
parameter_error: "longitude",
message: longitude.toString() + " is out of bounds for GDD calculations. Must be between -125.0 - -66.5"
});
}
if (errors.length > 0) {
res.status(400).send({
errors: errors
})
}
var projection = {
min_temps: 1,
max_temps: 1,
location: 1,
}
temps = {
t_base: t_base,
t_max: t_max,
t_min: t_min,
}
if (year != new Date().getFullYear()) {
find(gdd, query, projection, temps, res);
} else {
find(gdd_current, query, projection, temps, res);
}
};
\ No newline at end of file
normals = require('../models/normals.js');
utils = require('../lib/utils');
function find(collection, query, projection, temps, res) {
collection.findOne(query, projection).then(function(data) {
var min_temps = data["min_temps"]
var max_temps = data["max_temps"]
var gdds = [];
var { t_base, t_max, t_min } = temps;
var min_temp = 0
var max_temp = 0
for (var i = 0; i < min_temps.length; i++) {
min_temp = min_temps[i] >= t_min ? min_temps[i] : t_min;
max_temp = max_temps[i] <= t_max ? max_temps[i] : t_max;
gdds.push(((max_temp + min_temp) / 2) - t_base)
}
res.json({
message: "30-year Normal GDDs",
data: gdds,
closest_lon: data["location"]["coordinates"][0],
closest_lat: data["location"]["coordinates"][1]
})
}, function(err) {
res.status(500).send({"internal error": err})
})
}
exports.normal = function (req, res) {
var product = req.params.product;
var latitude = parseFloat(req.body.latitude)
var longitude = parseFloat(req.body.longitude)
var query = {
location: {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [longitude, latitude]
},
},
},
}
var projection = {
min_temps: 1,
max_temps: 1,
location: 1,
}
var t_base = 50
var t_max = 86
var t_min = 50
errors = []
if (latitude < 24.083334 || latitude > 49.916668) {
errors.push({
parameter_error: "latitude",
message: latitude.toString() + " is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668"
});
}
if (req.body.hasOwnProperty("t_base")) {
t_base = parseFloat(req.body.t_base);
if (t_base < t_min) {
t_min = t_base;
}
} else {
out = utils.product_base_switch(product, errors);
t_base = out.t_base;
t_min = out.t_min;
errors = out.errors;
}
if (longitude < -125 || longitude > -66.5) {
errors.push({
parameter_error: "longitude",
message: longitude.toString() + " is out of bounds for GDD calculations. Must be between -125.0 - -66.5"
});
}
if (errors.length > 0) {
res.status(400).send({
errors: errors
})
}
temps = {
t_base: t_base,
t_max: t_max,
t_min: t_min,
}
find(normals, query, projection, temps, res);
};
\ No newline at end of file
function product_base_switch(product, errors) {
switch (product) {
case "soybean":
case "corn":
case "sunflower":
case "tomato":
case "sugar_beat":
t_base = 50;
t_min = 50;
break;
case "potato":
t_base = 44.6;
t_min = 44.6; // NEED TO ASK ABOUT MIN AND MAX TEMPS IN DAY. SHOULD T_MIN BE SET EQUAL TO T_BASE IF IT IS LESS THAN T_BASE?
break;
case "wheat":
t_base = 41.9;
t_min = 41.9;
break;
case "peas":
t_base = 41;
t_min = 41;
break;
case "brussels_sprout":
case "parsley":
case "cabbage":
t_base = 32;
t_min = 32;
break;
default:
errors.push({
parameter_error: "product",
message: product + " is not available for GDD calculations"
});
break;
}
return {
t_base: t_base,
t_min: t_min,
errors: errors
}
}
module.exports.product_base_switch = product_base_switch;
\ No newline at end of file
let router = require('express').Router();
var gddController = require('./gddController');
/**
* @swagger
* /api/{product}/daily/{year}:
* post:
* summary: Returns GDD data
* description: Returns GDD data for a specific product, year, lat, and lon
* produces:
* - application/json
* consumes:
* - application/json
* parameters:
* - in: path
* name: product
* required: true
* description: Agricultural product to calculate gdd for
* schema:
* type: string
* enum: [corn, soybean, sugar_beet, sunflower, tomato, potato, wheat, peas, parsley, brussels_sprouts, cabbage]
* - in: path
* name: year
* required: true
* description: Year to calculate gdd on
* schema:
* type: integer
* minimum: 1981
* requestBody:
* content:
* application/json:
* schema:
* type: object
* required:
* - longitude
* - latitude
* properties:
* latitude:
* description: latitude to calculate gdd on
* type: number
* minimum: 24.083334
* maximum: 49.916668
* example: 38.99
* longitude:
* description: longitude to calculate gdd on
* type: number
* minimum: -125.0
* maximum: -66.5
* example: -76.94
* t_base:
* description: Base temperature to calculate gdd on, in fahrenheit. NOT REQUIRED
* type: number
* example: 50
*
* responses:
* 200:
* description: Success
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* example: GDDs
* date:
* type: string
* format: date
* data:
* type: array
* items:
* type: number
* minItems: 1
* maxItems: 365
* closest_lat:
* type: number
* minimum: 24.083334
* maximum: 49.916668
* example: 38.99
* closest_lon:
* type: number
* minimum: -125.0
* maximum: -66.5
* example: -76.94
* 400:
* description: Bad Request
* content:
* application/json:
* schema:
* type: object
* properties:
* errors:
* type: array
* items:
* type: object
* properties:
* parameter_error:
* type: string
* example: latitude
* message:
* type: string
* example: 22.5 is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668
*
/api/{product}/normal:
* post:
* summary: Returns GDD data on a 30 year normal
* description: Returns GDD normals for a specific lat, and lon
* parameters:
* - in: path
* name: product
* required: true
* description: Agricultural product to calculate gdd for
* schema:
* type: string
* enum: [corn, soybean, sugar_beet, sunflower, tomato, potato, wheat, peas, parsley, brussels_sprouts, cabbage]
* requestBody:
* content:
* application/json:
* schema:
* type: object
* required:
* - longitude
* - latitude
* properties:
* latitude:
* description: latitude to calculate gdd on
* type: number
* minimum: 24.083334
* maximum: 49.916668
* example: 38.99
* longitude:
* description: longitude to calculate gdd on
* type: number
* minimum: -125.0
* maximum: -66.5
* example: -76.94
* t_base:
* description: Base temperature to calculate gdd on, in fahrenheit. NOT REQUIRED
* type: number
* example: 50
*
* responses:
* 200:
* description: Success
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* example: 30-year normal GDDs
* data:
* type: array
* items:
* type: number
* closest_lat:
* type: number
* minimum: 24.083334
* maximum: 49.916668
* example: 38.99
* closest_lon:
* type: number
* minimum: -125.0
* maximum: -66.5
* example: -78.5
* 400:
* description: Bad Request
* content:
* application/json:
* schema:
* type: object
* properties:
* errors:
* type: array
* items:
* type: object
* properties:
* parameter_error:
* type: string
* example: latitude
* message:
* type: string
* example: 22.5 is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668
*
*
*
*
*
*
*
*/
router.route('/:product/daily/:year')
.post(gddController.year_gdd)
router.route('/:product/normal')
.post(gddController.normal)
module.exports = router;
const router = require('express').Router();
const accController = require("../../../../controllers/gddAccumulatedController")
const controller = require("../../../../controllers/gddController")
router.route("/:year/accumulated").post(accController.accumulated_gdd)
router.route("/:year").post(controller.year_gdd)
module.exports = router;
const router = require('express').Router();
const controller = require("../../../../controllers/gddNormalController");
const accController = require("../../../../controllers/gddAccumulatedController");
router.route("/").post(controller.normal)
router.route("/accumulated/").post(accController.accumulated_normal_gdd)
module.exports = router;
const router = require('express').Router();
router.use('/normal', require('./normal/normal_routes'));
router.use('/daily', require('./daily/daily_routes'));
module.exports = router;
const router = require('express').Router();
router.use('/:product', require('./api/product/product_index'));
module.exports = router;
...@@ -13,7 +13,7 @@ const port = 4000; ...@@ -13,7 +13,7 @@ const port = 4000;
const app = express(); const app = express();
let apiRoutes = require("./routes") let apiRoutes = require("./routes/index")
app.use(express.json()); app.use(express.json());
app.use(express.urlencoded({extended: true})); app.use(express.urlencoded({extended: true}));
...@@ -35,7 +35,7 @@ const swaggerDefinition = { ...@@ -35,7 +35,7 @@ const swaggerDefinition = {
const swagger_options = { const swagger_options = {
swaggerDefinition, swaggerDefinition,
apis: ['./routes.js'], apis: ['./swagger_definition.yaml'],
}; };
const swaggerSpec = swaggerJSDoc(swagger_options); const swaggerSpec = swaggerJSDoc(swagger_options);
......
paths:
/api/{product}/daily/{year}:
post:
summary: Returns GDD data
description: Returns GDD data for a specific product, year, lat, and lon
produces:
- application/json
consumes:
- application/json
parameters:
- in: path
name: product
required: true
description: Agricultural product to calculate gdd for
schema:
type: string
enum: [corn, soybean, sugar_beet, sunflower, tomato, potato, wheat, peas, parsley, brussels_sprouts, cabbage]
- in: path
name: year
required: true
description: Year to calculate gdd on
schema:
type: integer
minimum: 1981
requestBody:
content:
application/json:
schema:
type: object
required:
- longitude
- latitude
properties:
latitude:
description: latitude to calculate gdd on
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
longitude:
description: longitude to calculate gdd on
type: number
minimum: -125.0
maximum: -66.5
example: -76.94
t_base:
description: Base temperature to calculate gdd on, in fahrenheit. NOT REQUIRED
type: number
example: 50
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: GDDs
date:
type: string
format: date
data:
type: array
items:
type: number
minItems: 1
maxItems: 365
closest_lat:
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
closest_lon:
type: number
minimum: -125.0
maximum: -66.5
example: -76.94
400:
description: Bad Request
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
parameter_error:
type: string
example: latitude
message:
type: string
example: 22.5 is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668
/api/{product}/normal:
post:
summary: Returns GDD data on a 30 year normal
description: Returns GDD normals for a specific lat, and lon
parameters:
- in: path
name: product
required: true
description: Agricultural product to calculate gdd for
schema:
type: string
enum: [corn, soybean, sugar_beet, sunflower, tomato, potato, wheat, peas, parsley, brussels_sprouts, cabbage]
requestBody:
content:
application/json:
schema:
type: object
required:
- longitude
- latitude
properties:
latitude:
description: latitude to calculate gdd on
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
longitude:
description: longitude to calculate gdd on
type: number
minimum: -125.0
maximum: -66.5
example: -76.94
t_base:
description: Base temperature to calculate gdd on, in fahrenheit. NOT REQUIRED
type: number
example: 50
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: 30-year normal GDDs
data:
type: array
items:
type: number
closest_lat:
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
closest_lon:
type: number
minimum: -125.0
maximum: -66.5
example: -78.5
400:
description: Bad Request
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
parameter_error:
type: string
example: latitude
message:
type: string
example: 22.5 is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668
/api/{product}/normal/accumulated:
post:
summary: Returns accumulated GDD data on a 30 year normal
description: Returns accumulated GDD normals for a specific lat, and lon
parameters:
- in: path
name: product
required: true
description: Agricultural product to calculate gdd for
schema:
type: string
enum: [corn, soybean, sugar_beet, sunflower, tomato, potato, wheat, peas, parsley, brussels_sprouts, cabbage]
requestBody:
content:
application/json:
schema:
type: object
required:
- longitude
- latitude
properties:
latitude:
description: latitude to calculate gdd on
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
longitude:
description: longitude to calculate gdd on
type: number
minimum: -125.0
maximum: -66.5
example: -76.94
t_base:
description: Base temperature to calculate gdd on, in fahrenheit. NOT REQUIRED
type: number
example: 50
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: 30-year normal GDDs
data:
type: array
items:
type: number
closest_lat:
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
closest_lon:
type: number
minimum: -125.0
maximum: -66.5
example: -78.5
400:
description: Bad Request
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
parameter_error:
type: string
example: latitude
message:
type: string
example: 22.5 is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668
/api/{product}/daily/{year}/accumulated:
post:
summary: Returns accumulated GDD data
description: Returns accumulated GDD data for a specific product, year, lat, and lon
produces:
- application/json
consumes:
- application/json
parameters:
- in: path
name: product
required: true
description: Agricultural product to calculate gdd for
schema:
type: string
enum: [corn, soybean, sugar_beet, sunflower, tomato, potato, wheat, peas, parsley, brussels_sprouts, cabbage]
- in: path
name: year
required: true
description: Year to calculate gdd on
schema:
type: integer
minimum: 1981
requestBody:
content:
application/json:
schema:
type: object
required:
- longitude
- latitude
properties:
latitude:
description: latitude to calculate gdd on
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
longitude:
description: longitude to calculate gdd on
type: number
minimum: -125.0
maximum: -66.5
example: -76.94
t_base:
description: Base temperature to calculate gdd on, in fahrenheit. NOT REQUIRED
type: number
example: 50
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: GDDs
date:
type: string
format: date
data:
type: array
items:
type: number
minItems: 1
maxItems: 365
closest_lat:
type: number
minimum: 24.083334
maximum: 49.916668
example: 38.99
closest_lon:
type: number
minimum: -125.0
maximum: -66.5
example: -76.94
400:
description: Bad Request
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
parameter_error:
type: string
example: latitude
message:
type: string
example: 22.5 is out of bounds for GDD calculations. Must be between 24.083334 - 49.916668
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment