UNPKG

@io.github.missioncommand/mil-sym-js

Version:

JavaScript port of the java-based mil-std rendering libraries used in US Army Mission Command software

220 lines (195 loc) 9.27 kB
/* expected input format var e.data = {}; e.data.id = "ID"; e.data.name = "Name"; e.data.description = "description"; e.data.symbolID = "SFGPU----------";//A 15 character symbolID corresponding to one of the graphics in the MIL-STD-2525C e.data.points = controlPoints4;//like "66.26700036208742,30.62755038706961 66.27555681517738,30.64727776502703 66.25654247497746,30.64632704801704","x1,y1[,z1] [xn,yn[,zn]]...". e.data.altMode = "absolute";//for 3D e.data.scale = scale4;//for 3D like 50000.0; a number corresponding to how many meters one meter of our map represents. A value "50000" would mean 1:50K which means for every meter of our map it represents 50000 meters of real world distance. e.data.bbox = bbox4;//like "66.25,30.60,66.28,30.65";"lowerLeftX,lowerLeftY,upperRightX,upperRightY." e.data.modifiers = modifiers; e.data.format = format;//0 for KML, 2 for GeoJSON, 6 for GeoSVG e.data.pHeight = pixelHeight;//for 2D e.data.pWidth = pixelWidth;//for 2D e.data.converter = {} optional converter object for custom geoToPixel Conversion e.data.fontInfo = {} required for SVG format only. Get from RendererSettings.getMPFontInfo(); */ /* return object for KML or GeoJSON { id:e.data.id,//same as what was passed in result:strOutput,//resultant kml,json or error message format:e.data.format//format number or "ERROR" if there was a problem like missing required parameters } */ /* return object for SVG { id:e.data.id,//same as what was passed in result:{svg:dataURI,geoTL:{x,y}, geoBR:{x,y}, wasClipped:true/false, bounds:{x,y,width,height}} format:e.data.format//format number or "ERROR" if there was a problem like missing required parameters } */ /* expected input format for batch var e.data = {}; e.data.altMode = "absolute";//for 3D e.data.scale = scale4;//for 3D like 50000.0; a number corresponding to how many meters one meter of our map represents. A value "50000" would mean 1:50K which means for every meter of our map it represents 50000 meters of real world distance. e.data.bbox = bbox4;//like "66.25,30.60,66.28,30.65";"lowerLeftX,lowerLeftY,upperRightX,upperRightY." e.data.format = format;//0 for KML, 2 for GeoJSON, 6 for GeoSVG e.data.pHeight = pixelHeight;//for 2D e.data.pWidth = pixelWidth;//for 2D e.data.converter = {} optional converter object for custom geoToPixel Conversion e.data.fontInfo = {} required for SVG format only. Get from RendererSettings.getMPFontInfo(); e.data.batch = [{id:"ID",name:"name",description:"description",symbolID:"GFTPL-----****X",points:controlPoints,symStd:symStd,modifiers:{ModifiersTG.T_UNIQUE_DESIGNATION_1:"T",MilStdAttributes.LineColor:"#00FF00"}}]; */ /* return objects for batch { //KML [{id:batch.id,symbolID:symbolID,kml:"kml string"}] //GeoJSON [{id:batch.id,symbolID:symbolID,geojson:"geojson string"] //SVG [{id:batch.id,symbolID:symbolID,svg:dataURI,geoTL:geoCoordTL, geoBR:geoCoordBR, wasClipped:wasClipped}] } */ //GeoCanvas doesn't work in a web worker due to its need for the DOM. importScripts('m-c.js');//for strictly KML, GeoJSON and SVG(with hatch line and metoc fills, but no symbol fills) //importScripts('svm-bc.js');//for strictly KML, GeoJSON and SVG(with hatch line and metoc fills, and symbol fills) var rendererMP = sec.web.renderer.SECWebRenderer; armyc2.c2sd.renderer.utilities.ErrorLogger = {}; armyc2.c2sd.renderer.utilities.ErrorLogger.LogMessage = function(sourceClass, sourceMethod, message){throw {message:(sourceClass + "-" + sourceMethod + ": " + message)}}; armyc2.c2sd.renderer.utilities.ErrorLogger.LogWarning = function(sourceClass, sourceMethod, message, level){throw {message:(sourceClass + "-" + sourceMethod + ": " + message)}}; armyc2.c2sd.renderer.utilities.ErrorLogger.LogException = function(sourceClass, sourceMethod, err, level) { var strMessage = (sourceClass + "." + sourceMethod + "(): " + err.message); var myStack = ""; if(err.stack !== undefined) { myStack = err.stack; } if(!(myStack)) { if(err.filename && err.lineno) { myStack = err.filename + " @ line# " + err.lineno; } } strMessage += "\n" + myStack; err.message += "\n" + myStack; throw strMessage; //throw {message:strMessage,error:err, stack:myStack}; }; var window = {}; var console = {}; console.log = console.log || function(){}; console.info = console.info || function(){}; console.warn = console.warn || function(){}; console.error = console.error || function(){}; window.console = console; var document = {}; onmessage = function(e) { var output = null; var converter = null; var fontInfo = null; var oldFont = null; var format = ["kml","json","geojson","","","","svg","svg"]; if(e.data.fontInfo) { fontInfo = e.data.fontInfo; oldFont = {}; oldFont.name = armyc2.c2sd.renderer.utilities.RendererSettings.getMPModifierFontName(); oldFont.size = armyc2.c2sd.renderer.utilities.RendererSettings.getMPModifierFontSize(); oldFont.style = armyc2.c2sd.renderer.utilities.RendererSettings.getMPModifierFontStyle(); //oldFont.kmlScale = armyc2.c2sd.renderer.utilities.RendererSettings.getKMLLabelScale(); armyc2.c2sd.renderer.utilities.RendererSettings.setMPModifierFont(fontInfo.name, fontInfo.size, fontInfo.style, null, fontInfo);//name, size, style, scale } if(e.data && e.data.batch && e.data.batch.length > 0) { var result = null; var len = e.data.batch.length; var items = e.data.batch; var temp = null; //output = new Array(len); output = []; try { for(var i = 0; i < len; i++) { item = items[i]; if(e.data.altMode) { if(e.data.converter) converter = e.data.converter; //data for symbol on 3d map so call RenderSymbol result = rendererMP.RenderSymbol(item.id,item.name,item.description, item.symbolID, item.points, e.data.altMode,e.data.scale, e.data.bbox, item.modifiers,e.data.format, item.symstd, converter, fontInfo); } else { //data for symbol on 2D map so call RenderSymbol2D result = rendererMP.RenderSymbol2D(item.id,item.name,item.description, item.symbolID, item.points, e.data.pixelWidth,e.data.pixelHeight, e.data.bbox, item.modifiers,e.data.format, item.symstd, fontInfo); } if(result) { if(e.data.format === 6 || e.data.format === 7)//SVG { result.id = item.id; result.symbolID = item.symbolID; //output[i] = result; output.push(result); } else//KML or GeoJSON return string { temp = {id:item.id, symbolID:item.symbolID} temp[format[e.data.format]] = result; output.push(temp); } } } } catch(err) { throw(err); } //[{id:batch.id,symbolID:symbolID,svg:dataURI,geoTL:geoCoordTL, geoBR:geoCoordBR, wasClipped:wasClipped}] } else if(e.data) { if(e.data.altMode) { if(e.data.converter) converter = e.data.converter; //data for symbol on 3d map so call RenderSymbol output = rendererMP.RenderSymbol(e.data.id,e.data.name,e.data.description, e.data.symbolID, e.data.points, e.data.altMode,e.data.scale, e.data.bbox, e.data.modifiers,e.data.format, e.data.symstd, converter, fontInfo); } else { //data for symbol on 2D map so call RenderSymbol2D output = rendererMP.RenderSymbol2D(e.data.id,e.data.name,e.data.description, e.data.symbolID, e.data.points, e.data.pixelWidth,e.data.pixelHeight, e.data.bbox, e.data.modifiers,e.data.format, e.data.symstd, fontInfo); } } if(fontInfo) { armyc2.c2sd.renderer.utilities.RendererSettings.setMPModifierFont(oldFont.name, oldFont.size, oldFont.style);//name, size, style, scale } if(e.data.batch) { postMessage({result:output,format:e.data.format}); } else { if(output && output.substring)//kml or geojson { //return results var format = e.data.format; if(output.substring(0,15) === '{"type":"error"') { format = "ERROR"; } postMessage({id:e.data.id,result:output,format:format}); } else if(output)//SVG { postMessage({id:e.data.id,result:output,format:format}); } } }