This is the JavaScript source code of the Coriolis, Centrifugal and Gravitational Forces on the WGS84 Globe Model Calculator.
#INCLUDE ControlPanel.inc #INCLUDE JsgVectMat3.inc #INCLUDE NewtonSolver.inc #INCLUDE WGS84.inc <jscript> var V3 = JsgVect3; var WGS84MotionModel = { // input Latitude: 45, Longitude: 0, Azimuth: 90, Elevation: 0, Speed: 250, Altitude: 0, // calculated values // Note: don't assign vector arrays to coordinate values, // use V3.Set() or V3.CopyTo() to change the array elements, // because the array elements are directly referenced by ControlPanels PosEcef: [ 0, 0, 0 ], PosLen: 0, GeocentricRadius: 0, MeridialRadius: 0, PrimeVerticalRadius: 0, DirectionalRadius: 0, GeocentricRadiusAlt: 0, MeridialRadiusAlt: 0, PrimeVerticalRadiusAlt: 0, DirectionalRadiusAlt: 0, VelocityEcef: [ 0, 0, 0 ], VelocityEnu: [ 0, 0, 0 ], CoriolisAccelEcef: [ 0, 0, 0 ], // Ecef = earth centered earth fixed coordinate system CoriolisAccelLocal: [ 0, 0, 0 ], // Local = vehicle coordinate system (forwd,right,up) CoriolisAccelEnu: [ 0, 0, 0 ], // Enu = east/north/vertical coordinate system CoriolisAccelAbs: 0, CentrifugalAccelEcef: [ 0, 0, 0 ], CentrifugalAccelLocal: [ 0, 0, 0 ], CentrifugalAccelEnu: [ 0, 0, 0 ], CentrifugalAccelAbs: 0, CoriolisPlusCentrifugalAccelEcef: [ 0, 0, 0 ], CoriolisPlusCentrifugalAccelLocal: [ 0, 0, 0 ], CoriolisPlusCentrifugalAccelEnu: [ 0, 0, 0 ], CoriolisPlusCentrifugalAccelAbs: 0, GravityAccelMassEcef: [ 0, 0, 0 ], GravityAccelMassLocal: [ 0, 0, 0 ], GravityAccelMassEnu: [ 0, 0, 0 ], GravityAccelMassAbs: 0, GravityAccelEcef: [ 0, 0, 0 ], GravityAccelLocal: [ 0, 0, 0 ], GravityAccelEnu: [ 0, 0, 0 ], GravityAccelAbs: 0, SumAccelEcef: [ 0, 0, 0 ], SumAccelLocal: [ 0, 0, 0 ], SumAccelEnu: [ 0, 0, 0 ], SumAccelAbs: 0, Update: function() { // position in ECEF coordinates var posEcef = WGS84.GeoToEcef( this.Latitude, this.Longitude, this.Altitude ); V3.Set( this.PosEcef, posEcef ); this.PosLen = V3.Length( posEcef ); // radii this.GeocentricRadius = WGS84.GeocentricRadius( this.Latitude ); this.MeridialRadius = WGS84.MeridialRadius( this.Latitude ); this.PrimeVerticalRadius = WGS84.PrimeVerticalRadius( this.Latitude ); this.DirectionalRadius = WGS84.DirectionalRadius( this.Azimuth, this.Latitude ); this.GeocentricRadiusAlt = this.GeocentricRadius + this.Altitude; this.MeridialRadiusAlt = this.MeridialRadius + this.Altitude; this.PrimeVerticalRadiusAlt = this.PrimeVerticalRadius + this.Altitude; this.DirectionalRadiusAlt = this.DirectionalRadius + this.Altitude; // local coordinate system vectors in ECEF coordinates; enu = [ east[], north[], up[] ] var enu = WGS84.EnuCoordinateSystem( this.PosEcef, this.Longitude ); var forwd = WGS84.DirectionFromAzimuthElevation( enu, this.Azimuth, this.Elevation ); var right = WGS84.DirectionFromAzimuthElevation( enu, this.Azimuth+90, 0 ); var up = V3.Mult( right, forwd ); var local = [ forwd, right, up ]; // velocity var velocityEcef = V3.Scale( forwd, this.Speed ); V3.Set( this.VelocityEcef, velocityEcef ); V3.Set( this.VelocityEnu, WGS84.TransformToCS( enu, velocityEcef ) ); // coriolis accelerations var coriolisEcef = WGS84.Coriolis( velocityEcef ); V3.Set( this.CoriolisAccelEcef, coriolisEcef ); this.CoriolisAccelAbs = V3.Length( coriolisEcef ); V3.Set( this.CoriolisAccelLocal, WGS84.TransformToCS( local, coriolisEcef ) ); V3.Set( this.CoriolisAccelEnu, WGS84.TransformToCS( enu, coriolisEcef ) ); // centrifugal accelerations var centrifugalEcef = WGS84.Centrifugal( this.PosEcef ).accel; V3.Set( this.CentrifugalAccelEcef, centrifugalEcef ); this.CentrifugalAccelAbs = V3.Length( centrifugalEcef ); V3.Set( this.CentrifugalAccelLocal, WGS84.TransformToCS( local, centrifugalEcef ) ); V3.Set( this.CentrifugalAccelEnu, WGS84.TransformToCS( enu, centrifugalEcef ) ); // coriolis plus centrifugal accelerations var sumAccelEcef = V3.Add( this.CoriolisAccelEcef, this.CentrifugalAccelEcef ); V3.Set( this.CoriolisPlusCentrifugalAccelEcef, sumAccelEcef ); this.CoriolisPlusCentrifugalAccelAbs = V3.Length( sumAccelEcef ); V3.Set( this.CoriolisPlusCentrifugalAccelLocal, WGS84.TransformToCS( local, sumAccelEcef ) ); V3.Set( this.CoriolisPlusCentrifugalAccelEnu, WGS84.TransformToCS( enu, sumAccelEcef ) ); // gravitational acceleration due to mass of earth var gravityEcef = WGS84.GravityMass( posEcef ).accel; V3.Set( this.GravityAccelMassEcef, gravityEcef ); this.GravityAccelMassAbs = V3.Length( gravityEcef ); V3.Set( this.GravityAccelMassLocal, WGS84.TransformToCS( local, gravityEcef ) ); V3.Set( this.GravityAccelMassEnu, WGS84.TransformToCS( enu, gravityEcef ) ); // effective gravitational acceleration = mass gravity + centrifugal acceleration var gravityEcef = WGS84.Gravity( posEcef ).accel; V3.Set( this.GravityAccelEcef, gravityEcef ); this.GravityAccelAbs = V3.Length( gravityEcef ); V3.Set( this.GravityAccelLocal, WGS84.TransformToCS( local, gravityEcef ) ); V3.Set( this.GravityAccelEnu, WGS84.TransformToCS( enu, gravityEcef ) ); // sum of all accelerations var sumAccelEcef = V3.Add( this.GravityAccelEcef, this.CoriolisAccelEcef ); V3.Set( this.SumAccelEcef, sumAccelEcef ); this.SumAccelAbs = V3.Length( sumAccelEcef ); V3.Set( this.SumAccelLocal, WGS84.TransformToCS( local, sumAccelEcef ) ); V3.Set( this.SumAccelEnu, WGS84.TransformToCS( enu, sumAccelEcef ) ); // Update control panel ControlPanels.Update(); }, }; //---------------------------------------- ControlPanels.NewPanel( { Name: 'InputPanel', ModelRef: 'WGS84MotionModel', OnModelChange: function(field){ WGS84MotionModel.Update(field); }, PanelFormat: 'InputSmallerWidth', NCols: 2, Format: 'std', Digits: 8 } ).AddHeader( { Text: 'Input', ColSpan: 4 } ).AddTextField( { Name: 'Latitude', InputFormat: 'dms', Format: 'dmsS', Digits: 6, LowerLimit: -90, UpperLimit: 90, Inc: 5, } ).AddTextField( { Name: 'Longitude', InputFormat: 'dms', Format: 'dmsW', Digits: 6, LowerLimit: -180, UpperLimit: 180, Inc: 5, } ).AddTextField( { Name: 'Azimuth', Units: '°', LowerLimit: 0, UpperLimit: 360, Inc: 5, } ).AddTextField( { Name: 'Elevation', Units: '°', LowerLimit: -90, UpperLimit: 90, Inc: 5, } ).AddTextField( { Name: 'Altitude', Units: 'm', LowerLimit: -12000, UpperLimit: 100000, Inc: 100, } ).AddTextField( { Name: 'Speed', Units: 'm/s', LowerLimit: 0, Inc: 10, } ).Render(); //----------------------------------------- ControlPanels.NewPanel( { Name: 'CoriolisAccelPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 8 } ).AddHeader( { Text: 'Coriolis Accelerations', ColSpan: 6 } ).AddTextField( { Name: 'CoriolisAccelForwd', ValueRef: 'CoriolisAccelLocal[0]', Label: 'Forwd', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelRight', ValueRef: 'CoriolisAccelLocal[1]', Label: 'Right', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelUp', ValueRef: 'CoriolisAccelLocal[2]', Label: 'Up', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelX', ValueRef: 'CoriolisAccelEcef[0]', Label: 'ECEF X', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelY', ValueRef: 'CoriolisAccelEcef[1]', Label: 'Y', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelZ', ValueRef: 'CoriolisAccelEcef[2]', Label: 'Z', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelEast', Label: 'East', ValueRef: 'CoriolisAccelEnu[0]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelNorth', Label: 'North', ValueRef: 'CoriolisAccelEnu[1]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelVert', Label: 'Vertical', ValueRef: 'CoriolisAccelEnu[2]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisAccelAbs', Label: 'Magnitude', Units: 'm/s<sup>2</sup>', } ).Render(); //----------------------------------------- ControlPanels.NewPanel( { Name: 'CentrifugalAccelPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 8 } ).AddHeader( { Text: 'Centrifugal Accelerations', ColSpan: 6 } ).AddTextField( { Name: 'CentrifugalAccelForwd', ValueRef: 'CentrifugalAccelLocal[0]', Label: 'Forwd', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelRight', ValueRef: 'CentrifugalAccelLocal[1]', Label: 'Right', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelUp', ValueRef: 'CentrifugalAccelLocal[2]', Label: 'Up', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelX', ValueRef: 'CentrifugalAccelEcef[0]', Label: 'ECEF X', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelY', ValueRef: 'CentrifugalAccelEcef[1]', Label: 'Y', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelZ', ValueRef: 'CentrifugalAccelEcef[2]', Label: 'Z', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelEast', Label: 'East', ValueRef: 'CentrifugalAccelEnu[0]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelNorth', Label: 'North', ValueRef: 'CentrifugalAccelEnu[1]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelVert', Label: 'Vertical', ValueRef: 'CentrifugalAccelEnu[2]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CentrifugalAccelAbs', Label: 'Magnitude', Units: 'm/s<sup>2</sup>', } ).Render(); //----------------------------------------- ControlPanels.NewPanel( { Name: 'CoriolisPlusCentrifugalAccelPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 8 } ).AddHeader( { Text: 'Coriolis+Centrifugal Accelerations', ColSpan: 6 } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelForwd', ValueRef: 'CoriolisPlusCentrifugalAccelLocal[0]', Label: 'Forwd', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelRight', ValueRef: 'CoriolisPlusCentrifugalAccelLocal[1]', Label: 'Right', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelUp', ValueRef: 'CoriolisPlusCentrifugalAccelLocal[2]', Label: 'Up', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelX', ValueRef: 'CoriolisPlusCentrifugalAccelEcef[0]', Label: 'ECEF X', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelY', ValueRef: 'CoriolisPlusCentrifugalAccelEcef[1]', Label: 'Y', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelZ', ValueRef: 'CoriolisPlusCentrifugalAccelEcef[2]', Label: 'Z', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelEast', Label: 'East', ValueRef: 'CoriolisPlusCentrifugalAccelEnu[0]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelNorth', Label: 'North', ValueRef: 'CoriolisPlusCentrifugalAccelEnu[1]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelVert', Label: 'Vertical', ValueRef: 'CoriolisPlusCentrifugalAccelEnu[2]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'CoriolisPlusCentrifugalAccelAbs', Label: 'Magnitude', Units: 'm/s<sup>2</sup>', } ).Render(); //----------------------------------------- ControlPanels.NewPanel( { Name: 'GravityAccelMassPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 8 } ).AddHeader( { Text: 'Gravitational Accelerations due to Mass', ColSpan: 6 } ).AddTextField( { Name: 'GravityAccelMassForwd', ValueRef: 'GravityAccelMassLocal[0]', Label: 'Forwd', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassRight', ValueRef: 'GravityAccelMassLocal[1]', Label: 'Right', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassUp', ValueRef: 'GravityAccelMassLocal[2]', Label: 'Up', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassX', ValueRef: 'GravityAccelMassEcef[0]', Label: 'ECEF X', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassY', ValueRef: 'GravityAccelMassEcef[1]', Label: 'Y', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassZ', ValueRef: 'GravityAccelMassEcef[2]', Label: 'Z', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassEast', Label: 'East', ValueRef: 'GravityAccelMassEnu[0]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassNorth', Label: 'North', ValueRef: 'GravityAccelMassEnu[1]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassVert', Label: 'Vertical', ValueRef: 'GravityAccelMassEnu[2]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelMassAbs', Label: 'Magnitude', Units: 'm/s<sup>2</sup>', } ).Render(); //----------------------------------------- ControlPanels.NewPanel( { Name: 'GravityAccelPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 8 } ).AddHeader( { Text: 'Effective Gravitational Accelerations (Mass+Centrifugal)', ColSpan: 6 } ).AddTextField( { Name: 'GravityAccelForwd', ValueRef: 'GravityAccelLocal[0]', Label: 'Forwd', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelRight', ValueRef: 'GravityAccelLocal[1]', Label: 'Right', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelUp', ValueRef: 'GravityAccelLocal[2]', Label: 'Up', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelX', ValueRef: 'GravityAccelEcef[0]', Label: 'ECEF X', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelY', ValueRef: 'GravityAccelEcef[1]', Label: 'Y', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelZ', ValueRef: 'GravityAccelEcef[2]', Label: 'Z', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelEast', Label: 'East', ValueRef: 'GravityAccelEnu[0]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelNorth', Label: 'North', ValueRef: 'GravityAccelEnu[1]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelVert', Label: 'Vertical', ValueRef: 'GravityAccelEnu[2]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'GravityAccelAbs', Label: 'Magnitude', Units: 'm/s<sup>2</sup>', } ).Render(); //----------------------------------------- ControlPanels.NewPanel( { Name: 'SumAccelPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 8 } ).AddHeader( { Text: 'Sum of all Accelerations', ColSpan: 6 } ).AddTextField( { Name: 'SumAccelForwd', ValueRef: 'SumAccelLocal[0]', Label: 'Forwd', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelRight', ValueRef: 'SumAccelLocal[1]', Label: 'Right', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelUp', ValueRef: 'SumAccelLocal[2]', Label: 'Up', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelX', ValueRef: 'SumAccelEcef[0]', Label: 'ECEF X', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelY', ValueRef: 'SumAccelEcef[1]', Label: 'Y', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelZ', ValueRef: 'SumAccelEcef[2]', Label: 'Z', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelEast', Label: 'East', ValueRef: 'SumAccelEnu[0]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelNorth', Label: 'North', ValueRef: 'SumAccelEnu[1]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelVert', Label: 'Vertical', ValueRef: 'SumAccelEnu[2]', Units: 'm/s<sup>2</sup>', } ).AddTextField( { Name: 'SumAccelAbs', Label: 'Magnitude', Units: 'm/s<sup>2</sup>', } ).Render(); //------------------------------------------------- ControlPanels.NewPanel( { Name: 'PositionVelocityPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 3, Format: 'fix', Digits: 3 } ).AddHeader( { Text: 'Position and Velocity', ColSpan: 6 } ).AddTextField( { Name: 'PosX', ValueRef: 'PosEcef[0]', Label: 'Pos X', Units: 'm', } ).AddTextField( { Name: 'PosY', ValueRef: 'PosEcef[1]', Label: 'Pos Y', Units: 'm', } ).AddTextField( { Name: 'PosZ', ValueRef: 'PosEcef[2]', Label: 'Pos Z', Units: 'm', } ).AddTextField( { Name: 'VelocityX', ValueRef: 'VelocityEcef[0]', Label: 'Velocity X', Units: 'm/s', } ).AddTextField( { Name: 'VelocityY', ValueRef: 'VelocityEcef[1]', Label: 'Velocity Y', Units: 'm/s', } ).AddTextField( { Name: 'VelocityZ', ValueRef: 'VelocityEcef[2]', Label: 'Velocity Z', Units: 'm/s', } ).AddTextField( { Name: 'VelocityEast', ValueRef: 'VelocityEnu[0]', Label: 'Velocity East', Units: 'm/s', } ).AddTextField( { Name: 'VelocityNorth', ValueRef: 'VelocityEnu[1]', Label: 'North', Units: 'm/s', } ).AddTextField( { Name: 'VelocityVert', ValueRef: 'VelocityEnu[2]', Label: 'Vertical', Units: 'm/s', } ).AddTextField( { Name: 'PosLen', Label: 'Pos Length', Units: 'm', } ).AddTextField( { Name: 'Speed', Units: 'm/s', } ).Render(); //------------------------------------------------- ControlPanels.NewPanel( { Name: 'RadiiPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 2, Format: 'fix', Digits: 3 } ).AddHeader( { Text: 'Radii', ColSpan: 4 } ).AddTextField( { Name: 'GeocentricRadius', Label: 'Geocentric', Units: 'm', } ).AddTextField( { Name: 'MeridialRadius', Label: 'Meridial', Units: 'm', } ).AddTextField( { Name: 'DirectionalRadius', Label: 'Directional', Units: 'm', } ).AddTextField( { Name: 'PrimeVerticalRadius', Label: 'Prime Vertical', Units: 'm', } ).Render(); //------------------------------------------------- ControlPanels.NewPanel( { Name: 'RadiiAltPanel', ModelRef: 'WGS84MotionModel', ReadOnly: true, PanelFormat: 'InputSmallerWidth', NCols: 2, Format: 'fix', Digits: 3 } ).AddHeader( { Text: 'Radii + Altitude', ColSpan: 4 } ).AddTextField( { Name: 'GeocentricRadiusAlt', Label: 'Geocentric+Alt', Units: 'm', } ).AddTextField( { Name: 'MeridialRadiusAlt', Label: 'Meridial+Alt', Units: 'm', } ).AddTextField( { Name: 'DirectionalRadiusAlt', Label: 'Directional+Alt', Units: 'm', } ).AddTextField( { Name: 'PrimeVerticalRadiusAlt', Label: 'Prime Vertical+Alt', Units: 'm', } ).Render(); //------------------------------------------------- xOnLoad( function(){ WGS84MotionModel.Update(); } ); </jscript>