awips2/edexOsgi/com.raytheon.edex.uengine/scripts/makeWindSpeedImage.js

262 lines
7.7 KiB
JavaScript
Raw Normal View History

/* define a class to find winds and generate wind speed grid */
function GribWinds(plugin,speed) {
this.plugin = plugin;
this.speed = speed;
this.params = new Object();
this.count = 1;
this.sortby = "basetime";
this.query = new TermQuery(this.plugin);
this.geom = null;
this.crs = null;
this.dataURI = null;
}
function _executeGWS() {
var response;
/* get the U wind grib */
var query = new TermQuery(this.plugin);
for (name in this.params) {
query.addParameter(name,this.params[name]);
}
query.addParameter("paramid","U%wind","like");
query.setCount(this.count);
query.setSortBy(this.sortby);
var uResult = query.execute();
if (uResult.size() == 0) {
return this.makeError("Query for Wind-U returned 0 results.",this.query);
}
/* get the V wind grib */
var query = new TermQuery(this.plugin);
for (name in this.params) {
query.addParameter(name,this.params[name]);
}
query.addParameter("paramid","V%wind","like");
query.setCount(this.count);
query.setSortBy(this.sortby);
var vResult = query.execute();
if (vResult.size() == 0) {
return this.makeError("Query for Wind-V returned 0 results.",this.query);
}
/* read the data from the data store */
this.geom = uResult.get(0).getGrid().getGridGeom();
this.crs = uResult.get(0).getGrid().getCrs();
this.dataURI = uResult.get(0).getDataURI();
var uFile = new FileIn(this.plugin,uResult.get(0));
var vFile = new FileIn(this.plugin,vResult.get(0));
var uData = uFile.execute();
var vData = vFile.execute();
/* combine the data into wind speed data */
var windSpeed = new ConvertWindsData(uData,vData,this.speed);
return windSpeed.execute();
}
/* GWS accessors */
function _setGWSSortValue(sortValue) {
this.sortby = sortValue;
}
function _setGWSCount(count) {
this.count = count;
}
function _addGWSParameter(name,value) {
this.params[name] = value;
}
function _getGWSGeom() {
return this.geom;
}
function _getGWSCRS () {
return this.crs;
}
function _getGWSDataURI() {
return this.dataURI;
}
/* mapping functions to the GWS object */
GribWinds.prototype.execute = _executeGWS;
GribWinds.prototype.addParameter = _addGWSParameter;
GribWinds.prototype.getGeom = _getGWSGeom;
GribWinds.prototype.getCRS = _getGWSCRS;
GribWinds.prototype.getDataURI = _getGWSDataURI;
GribWinds.prototype.setCount = _setGWSCount;
GribWinds.prototype.setSortby = _setGWSSortValue;
GribWinds.prototype.makeError = _makeError;
/* define a class to generate a image from a GRIB */
function GribImage(plugin) {
/* names of things */
this.plugin = plugin;
/* grid attributes */
this.grid = null;
this.geom = null;
this.crs = null;
/* image attributes */
this.colormap = "GribRGB";
this.format = "png";
this.scaleFactor = 3;
this.reproject = false;
}
function _executeGI() {
var gribMap = new GribMap(this.grib, this.colormap, this.grid, this.geom);
gribMap.setScaleFactor(this.scaleFactor);
var imageData = gribMap.execute();
this.geom = gribMap.getGridGeometry();
var colorMap = new ColorMapImage(this.colormap, imageData, this.geom);
var imageOut = null;
if(this.reproject){
var reproject = new ReprojectImage(colorMap.execute(), this.geom, this.crs);
var reprojectedImage = reproject.execute();
imageOut = new ImageOut(reprojectedImage, this.format, reproject.getGridGeometry());
}
else
{
imageOut = new ImageOut(colorMap.execute(), this.format,this.geom);
}
return imageOut.execute();
}
/* setters */
function _setGIGrid(grid) {
this.grid = grid;
}
function _setGIGeom(geom) {
this.geom = geom;
}
function _setGICrs(crs) {
this.crs = crs;
}
function _setGIColormap(colormap) {
this.colormap = colormap;
}
function _setGIFormat(format) {
this.format = format;
}
function _setGIScaleFactor(scale) {
this.scaleFactor = scale;
}
function _setGIReproject(reproject) {
this.reproject = reproject;
}
/* getters */
function _getGIGeom() {
return this.geom;
}
function _getGIFormat() {
return this.format;
}
/* map the functions to the class prototype */
GribImage.prototype.execute = _executeGI;
GribImage.prototype.setGrid = _setGIGrid;
GribImage.prototype.setGeom = _setGIGeom;
GribImage.prototype.getGeom = _getGIGeom;
GribImage.prototype.setCrs = _setGICrs;
GribImage.prototype.setColormap = _setGIColormap;
GribImage.prototype.setFormat = _setGIFormat;
GribImage.prototype.getFormat = _getGIFormat;
GribImage.prototype.setScaleFactor = _setGIScaleFactor;
GribImage.prototype.setReproject = _setGIReproject;
/* Define the class to perform the analysis */
function WindSpeedImage() {
/* names of things */
this.grib = "grib";
this.obs = "obs";
/* query objects */
this.gQuery = new GribWinds(this.grib,true);
/* the image creator */
this.iMaker = new GribImage(this.grib);
/* the logger */
this.logger = new SystemLog();
}
function _execute() {
var response;
/* get the wind speed as a grib */
var wResult = this.gQuery.execute();
if (wResult.getClass().getSimpleName() != "FloatDataRecord") {
this.logger.log("warn","GRIB Winds creation failed.");
return wResult;
}
this.logger.log("info","GRIB Winds creation successful.");
var geom = this.gQuery.getGeom();
var crs = this.gQuery.getCRS();
/* create the derived image */
this.iMaker.setGrid(wResult);
this.iMaker.setCrs(crs);
this.iMaker.setGeom(geom);
var imageOut = this.iMaker.execute();
geom = this.iMaker.getGeom();
var format = this.iMaker.getFormat();
/* write the image to the file and return the response */
var fileOut = new FileOut(imageOut, format);
var writeFile = fileOut.execute();
var makeResponse = new MakeResponseUri(writeFile,
null,
this.gQuery.getDataURI(),
this.format);
return makeResponse.execute();
}
/* helper methods */
function _makeError(message,query) {
var response = new MakeResponseNull(message,query);
return response.execute();
}
/* setters for query objects */
function _addParameter(name,value) {
this.gQuery.addParameter(name,value);
}
function _addList(name,value) {
this.gQuery.addParameter(name,value,"in");
}
function _setSortValue(sortValue) {
this.gQuery.setSortby(sortValue);
}
function _setCount(count) {
this.gQuery.setCount(count);
}
/* setters for image creation parameters */
function _setScaleFactor(scale) {
this.iMaker.setScaleFactor(scale);
}
function _reprojectImage(reproject) {
this.iMaker.setReproject(reproject);
}
function _setColorMap(colormap){
this.iMaker.setColormap(colormap);
}
function _setFormat(format){
this.iMaker.setFormat(format);
}
/* mapping functions to the object */
WindSpeedImage.prototype.execute = _execute;
WindSpeedImage.prototype.addParameter = _addParameter;
WindSpeedImage.prototype.addList = _addList;
WindSpeedImage.prototype.setSortValue = _setSortValue;
WindSpeedImage.prototype.setCount = _setCount;
WindSpeedImage.prototype.setScaleFactor = _setScaleFactor;
WindSpeedImage.prototype.reprojectImage = _reprojectImage;
WindSpeedImage.prototype.setColorMap = _setColorMap;
WindSpeedImage.prototype.setFormat = _setFormat;
WindSpeedImage.prototype.makeError = _makeError;
var runner = new WindSpeedImage();
/* setup the basic grib queries */
runner.addParameter("levelinfo","10.0_m");
runner.addParameter("forecasttime","0");
runner.addParameter("gridid",212);
runner.setSortValue("basetime");
runner.setCount(1);
/* set image properties */
runner.setColorMap("GribRGB");
runner.setFormat("png");
runner.setScaleFactor(3.0);
/* execute the script */
runner.execute();