metar-plot
Version:
METAR parsing and ploting library
144 lines (143 loc) • 6.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.genWind = exports.windImgSrc = exports.Variation = exports.Wind = void 0;
var Wind = /** @class */ (function () {
function Wind() {
}
return Wind;
}());
exports.Wind = Wind;
var Variation = /** @class */ (function () {
function Variation() {
}
return Variation;
}());
exports.Variation = Variation;
var GUST_WIDTH = 2;
var WS_WIDTH = 4;
/**
* Creates a windbarb for the metar
* @param metar
* @returns Img src base64 string
*/
function windImgSrc(metar) {
var data = btoa(unescape(encodeURIComponent("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 500 500\">\n " + genWind(metar) + "\n </svg>")));
return "data:image/svg+xml;base64," + data;
}
exports.windImgSrc = windImgSrc;
/**
* Creates a windbarb for the metar
* @param metar
* @returns SVG string
*/
function genWind(metar) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
var WDD = metar.wind_direction ? metar.wind_direction : 0;
var WSP = metar.wind_speed ? metar.wind_speed : 0;
var wind = "";
var gust = "";
if (WSP === 0) {
wind =
"<g id=\"calm\">\n <ellipse id=\"calm-marker\" stroke=\"#000\" fill=\"#00000000\" cx=\"250\" cy=\"250\" rx=\"35\" ry=\"35\"/>\n </g>";
}
else {
gust = metar.gust_speed == null ? "" :
"<g id=\"gustBarb\" transform=\"rotate(" + WDD + ", 250, 250)\">\n " + genBarb1((_a = metar.gust_speed) !== null && _a !== void 0 ? _a : 0, true) + "\n " + genBarb2((_b = metar.gust_speed) !== null && _b !== void 0 ? _b : 0, true) + "\n " + genBarb3((_c = metar.gust_speed) !== null && _c !== void 0 ? _c : 0, true) + "\n " + genBarb4((_d = metar.gust_speed) !== null && _d !== void 0 ? _d : 0, true) + "\n " + genBarb5((_e = metar.gust_speed) !== null && _e !== void 0 ? _e : 0, true) + "\n </g>";
wind =
"<g id=\"windBard\" transform=\"rotate(" + WDD + ", 250, 250)\">\n <line stroke-width=\"3\" y1=\"225\" x1=\"250\" y2=\"50\" x2=\"250\" stroke=\"#000\" fill=\"none\" />\n " + genBarb1((_f = metar.wind_speed) !== null && _f !== void 0 ? _f : 0, false) + "\n " + genBarb2((_g = metar.wind_speed) !== null && _g !== void 0 ? _g : 0, false) + "\n " + genBarb3((_h = metar.wind_speed) !== null && _h !== void 0 ? _h : 0, false) + "\n " + genBarb4((_j = metar.wind_speed) !== null && _j !== void 0 ? _j : 0, false) + "\n " + genBarb5((_k = metar.wind_speed) !== null && _k !== void 0 ? _k : 0, false) + "\n </g>";
}
return gust + wind;
}
exports.genWind = genWind;
/**
* Generate first barb
* @param speed wind or gust speed
* @param gust set to true for gust
* @returns
*/
function genBarb1(speed, gust) {
var fill = gust ? 'red' : '#000';
var tag = gust ? 'gs' : 'ws';
var width = gust ? GUST_WIDTH : WS_WIDTH;
var barb = "";
if (speed >= 10 && speed < 50) {
barb = "<line id=\"" + tag + "-bard-1-long\" stroke-width=\"" + width + "\" y1=\"50\" x1=\"250\" y2=\"50\" x2=\"300\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 50)\"/>";
}
else if (speed >= 50) {
barb = "<polygon id=\"" + tag + "-bard-1-flag\" points=\"248,60 290,30 248,30\" fill=\"" + fill + "\" />";
}
return barb;
}
/**
* Generate second barb
* @param speed wind or gust speed
* @param gust set to true for gust
* @returns
*/
function genBarb2(speed, gust) {
var fill = gust ? 'red' : '#000';
var tag = gust ? 'gs' : 'ws';
var width = gust ? GUST_WIDTH : WS_WIDTH;
var barb = "";
if ((speed < 10) || (15 <= speed && speed < 20) || (55 <= speed && speed < 60)) {
barb = "<line id=\"" + tag + "-bard-2-short\" stroke-width=\"" + width + "\" y1=\"70\" x1=\"250\" y2=\"70\" x2=\"275\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 70)\"/>";
}
else if ((15 < speed && speed < 50) || (speed >= 60)) {
barb = "<line id=\"" + tag + "-bard-2-long\" stroke-width=\"" + width + "\" y1=\"70\" x1=\"250\" y2=\"70\" x2=\"300\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 70)\"/>";
}
return barb;
}
/**
* Generate third barb
* @param speed wind or gust speed
* @param gust set to true for gust
* @returns
*/
function genBarb3(speed, gust) {
var fill = gust ? 'red' : '#000';
var tag = gust ? 'gs' : 'ws';
var width = gust ? GUST_WIDTH : WS_WIDTH;
var barb = "";
if ((25 <= speed && speed < 30) || (65 <= speed && speed < 70)) {
barb = "<line id=\"" + tag + "-bard-3-short\" stroke-width=\"" + width + "\" y1=\"90\" x1=\"250\" y2=\"90\" x2=\"275\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 90)\"/>";
}
else if ((25 < speed && speed < 50) || speed >= 70) {
barb = "<line id=\"" + tag + "-bard-3-long\" stroke-width=\"" + width + "\" y1=\"90\" x1=\"250\" y2=\"90\" x2=\"300\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 90)\"/>";
}
return barb;
}
/**
* Generate forth barb
* @param speed wind or gust speed
* @param gust set to true for gust
* @returns
*/
function genBarb4(speed, gust) {
var fill = gust ? 'red' : '#000';
var tag = gust ? 'gs' : 'ws';
var width = gust ? GUST_WIDTH : WS_WIDTH;
var barb = "";
if ((35 <= speed && speed < 40) || (75 <= speed && speed < 80)) {
barb = "<line id=\"" + tag + "-bard-4-short\" stroke-width=\"" + width + "\" y1=\"110\" x1=\"250\" y2=\"110\" x2=\"275\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 110)\"/>";
}
else if ((35 < speed && speed < 50) || speed >= 80) {
barb = "<line id=\"" + tag + "-bard-4-long\" stroke-width=\"" + width + "\" y1=\"110\" x1=\"250\" y2=\"110\" x2=\"300\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 110)\"/>";
}
return barb;
}
/**
* Generate fifth barb
* @param speed wind or gust speed
* @param gust set to true for gust
* @returns
*/
function genBarb5(speed, gust) {
var fill = gust ? 'red' : '#000';
var tag = gust ? 'gs' : 'ws';
var width = gust ? GUST_WIDTH : WS_WIDTH;
var brab = "";
if ((45 <= speed && speed < 50) || (85 <= speed && speed < 90)) {
brab = "<line id=\"" + tag + "-bard-5-short\" stroke-width=\"" + width + "\" y1=\"130\" x1=\"250\" y2=\"130\" x2=\"275\" stroke=\"" + fill + "\" transform=\"rotate(-35, 250, 130)\"/>";
}
return brab;
}