diff --git a/public_html/markers.js b/public_html/markers.js index df12fbb..e3e5d9e 100755 --- a/public_html/markers.js +++ b/public_html/markers.js @@ -121,6 +121,21 @@ var _balloon = { markerRadius: 32 }; +var _helicopter = { + key : "helicopter", + scale : 0.50, + size : [64, 64], + anchor : [22, 32], + path : _rotorcraft_svg +}; + +var _single_prop = { + key : "single_prop", + scale : 0.30, + size : [64, 64], + anchor : [32, 25], + path : _beechcraft_svg +}; // by Oliver Jowett // licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) @@ -140,7 +155,7 @@ var _b738 = { path: "m 32,61 -1,-1 -9,2 -2,1 0,-2 9,-6 1,-1 -1,-9 0,-11 -7,0 -1,1 0,-1 -3,1 -1,1 0,-1 -3,1 -9,3 -1,1 0,-2 1,-2 17,-9 1,-1 -1,-2 0,-3 1,-1 2,0 1,1 0,3 3,-2 0,-13 1,-5 1,-3 1,-1 1,1 1,3 1,5 0,13 3,2 0,-3 1,-1 2,0 1,1 0,3 -1,2 1,1 17,9 1,2 0,2 -1,-1 -9,-3 -3,-1 0,1 -1,-1 -3,-1 0,1 -1,-1 -7,0 0,11 -1,9 1,1 9,6 0,2 -2,-1 -9,-2 -1,1 z" }; -var TypeIcons = { +var TypeDesignatorIcons = { 'A318': _a320, // shortened a320 'A319': _a320, // shortened a320 'A320': _a320, @@ -182,14 +197,30 @@ var TypeIcons = { 'C30J': _c130 }; +// Maps ICAO aircraft type description codes (e.g. "L2J") to aircraft icons. This is used if the ICAO type designator (e.g. "B731") +// cannot be found in the TypeDesignatorIcons mappings. The key can be one of the following: +// - Single character: The basic aircraft type letter code (e.g. "H" for helicopter). +// - Three characters: The ICAO type description code (e.g. "L2J" for landplanes with 2 jet engines). +// - Five characters: The ICAO type description code concatenated with the wake turbulence category code, separated by +// a dash (e.g. "L2J-M"). + +var TypeDescriptionIcons = { + 'H': _helicopter, + + 'L1J': _g650, + 'L1P': _single_prop, + 'L1T': _single_prop, + + 'L2P': _b200, + 'L2T': _b200, + + 'L2J-L': _g650, + 'L2J-M': _a320, + 'L2J-H': _b777, +}; + var CategoryIcons = { - "A1" : { - key : "A1", - scale : 0.30, - size : [64, 64], - anchor : [32, 25], - path : _beechcraft_svg - }, + "A1" : _single_prop, "A2" : { key : "A2", @@ -215,13 +246,7 @@ var CategoryIcons = { path : _heavy_svg }, - "A7" : { - key : "A7", - scale : 0.50, - size : [64, 64], - anchor : [22, 32], - path : _rotorcraft_svg - }, + "A7" : _helicopter, "B2" : _balloon }; @@ -234,9 +259,27 @@ var DefaultIcon = { path : _generic_plane_svg }; -function getBaseMarker(category, type) { - if (type in TypeIcons) { - return TypeIcons[type]; +function getBaseMarker(category, typeDesignator, typeDescription, wtc) { + if (typeDesignator in TypeDesignatorIcons) { + return TypeDesignatorIcons[typeDesignator]; + } + + if (typeDescription !== undefined && typeDescription !== null && typeDescription.length === 3) { + if (wtc !== undefined && wtc !== null && wtc.length === 1) { + var typeDescriptionWithWtc = typeDescription + "-" + wtc; + if (typeDescriptionWithWtc in TypeDescriptionIcons) { + return TypeDescriptionIcons[typeDescriptionWithWtc]; + } + } + + if (typeDescription in TypeDescriptionIcons) { + return TypeDescriptionIcons[typeDescription]; + } + + var basicType = typeDescription.charAt(0); + if (basicType in TypeDescriptionIcons) { + return TypeDescriptionIcons[basicType]; + } } if (category in CategoryIcons) { diff --git a/public_html/planeObject.js b/public_html/planeObject.js index c49950c..a970cea 100644 --- a/public_html/planeObject.js +++ b/public_html/planeObject.js @@ -48,9 +48,7 @@ function PlaneObject(icao) { // request metadata this.registration = null; this.icaotype = null; - this.aircraftTypeCode = null; - this.engineCount = null; - this.engineType = null; + this.typeDescription = null; this.wtc = null; getAircraftData(this.icao).done(function(data) { if ("r" in data) { @@ -62,13 +60,11 @@ function PlaneObject(icao) { } if ("desc" in data) { - this.aircraftTypeCode = data.desc.charAt(0); - this.engineCount = parseInt(data.desc.charAt(1)); - this.engineTypeCode = data.desc.charAt(2); + this.typeDescription = data.desc; } if ("wtc" in data) { - this.wtc = data.wtc; + this.wtc = data.wtc; } if (this.selected) { @@ -303,7 +299,7 @@ PlaneObject.prototype.updateIcon = function() { var col = this.getMarkerColor(); var opacity = (this.position_from_mlat ? 0.75 : 1.0); var outline = (this.position_from_mlat ? OutlineMlatColor : OutlineADSBColor); - var baseMarker = getBaseMarker(this.category, this.icaotype); + var baseMarker = getBaseMarker(this.category, this.icaotype, this.typeDescription, this.wtc); var weight = ((this.selected ? 2 : 1) / baseMarker.scale).toFixed(1); var rotation = (this.track === null ? 0 : this.track);