Military Symbology Server

For
anyone looking for another MIL-STD-2525C (aka APP-6C) symbology server, the
project at milsym.codeplex.com now has a point symbology server compatible with
Cesium. The MilSymService is only available in source code form and is written
in C#. To build it:

  1.   First download the ZIP file of sources (click on the
    

Download option under Source Code).

  1.   Right-click on the ZIP file and bring up the Properties
    

dialog and click the Unblock button (there are some third party DLLs in the
project).

  1.   Now unzip the file contents into your favorite directory.
    
  2.   If you’re in a hurry, open a DOS command window as
    

administrator, vector to the unzip directory, and type “build.bat”, assuming you have Visual Studio installed.

a.
Build.bat will build the two solutions
Appendices.sln and MilSym.sln – otherwise build the solutions from Visual
Studio in the above order.

b.
Unfortunately, I don’t think the
free version of Visual Studio will work with this build because of nested
directories.

c.
Since the project also builds a
Silverlight-based solution, Silverlight must also be installed, or the Silverlight projects have to be unloaded.

  1.   Once everything is built, vector to the
    

MilSymService\bin\Debug directory and type “install.cmd”

a.
The MilSymService will be
installed as a Windows service – you can test it as described in the project’s
ReadMe.

Here’s
some sample TypeScript code that shows how to use the service. More work is
required to reposition the symbols or to wrap them in some type of balloon object.

var singlePointSymbolCodes: string = [

"SUPPS-----*****", "SFPPS-----*****", "SNPPS-----*****", "SHPPS-----*****", "SUAPMF----*****",

"SFAPMF----*****", "SNAPMF----*****", "SHAPMF----*****", "SUGPUCVC--*****", "SFGPUCVC--*****",

"EFOPAB----*****", "ENOPAB----*****", "EHOPAB----*****", "EUOPAC----H****", "EFOPAC----H****",

"ENOPAC----H****", "EHOPAC----H****", "SUXPEVCAM-*****", "SFXPEVCAM-*****", "SNXPEVCAM-*****",

"SHXPEVCAM-*****", "SUFPGPA---*****", "SFFPGPA---*****", "SNFPGPA---*****", "SHFPGPA---*****",

"EUFPMA----*****", "EFFPMA----*****", "ENFPMA----*****", "EHFPMA----*****", "OUVPA-----*****",

"OFVPA-----*****", "ONVPA-----*****", "OHVPA-----*****", "SUUPSB----*****", "SFUPSB----*****",

"SNUPSB----*****", "SHUPSB----*****", "SUXPEVUR--*****", "SFXPEVUR--*****", "SHXPEVUR--*****"];

var simages = ;

singlePointSymbolCodes.forEach((e)
=> {

simages.push(Cesium.loadImage('http://localhost:8765/milsym/' + e + '?scale=0.12&opacity=0.75'));

});

var billboards = new Cesium.BillboardCollection();

Cesium.when.all(simages,

images
=> {

var textureAtlas =

scene.getContext().createTextureAtlas({images: images});

billboards.setTextureAtlas(textureAtlas);

for (var j = 0; j < 10; j++) {

    jQuery.each(images, (index) => {

billboards.add({

position:
ellipsoid.cartographicToCartesian(

Cesium.Cartographic.fromDegrees(

-65.0 + 10 * Math.random(),

42.0

  • 10 * Math.random())),

imageIndex: index

});

});

}

scene.getPrimitives().add(billboards);

});

This is great info Mike. Thanks for sharing this with the community.

Patrick