NETGeographicLib::MagneticModel Class Reference

.NET wrapper for GeographicLib::MagneticModel. More...

#include <NETGeographicLib/MagneticModel.h>

List of all members.

Public Member Functions

 ~MagneticModel ()
Setting up the magnetic model



 MagneticModel (System::String^ name, System::String^ path, Geocentric^ earth)
 MagneticModel (System::String^ name, System::String^ path)

Static Public Member Functions

static System::String^ DefaultMagneticPath ()
static System::String^ DefaultMagneticName ()

Properties

Inspector functions



System::String^  Description [get]
System::String^  DateTime [get]
System::String^  MagneticFile [get]
System::String^  MagneticModelName [get]
System::String^  MagneticModelDirectory [get]
double MinHeight [get]
double MaxHeight [get]
double MinTime [get]
double MaxTime [get]
double MajorRadius [get]
double Flattening [get]

Compute the magnetic field



void Field (double t, double lat, double lon, double h,[System::Runtime::InteropServices::Out] double% Bx,[System::Runtime::InteropServices::Out] double% By,[System::Runtime::InteropServices::Out] double% Bz)
void Field (double t, double lat, double lon, double h,[System::Runtime::InteropServices::Out] double% Bx,[System::Runtime::InteropServices::Out] double% By,[System::Runtime::InteropServices::Out] double% Bz,[System::Runtime::InteropServices::Out] double% Bxt,[System::Runtime::InteropServices::Out] double% Byt,[System::Runtime::InteropServices::Out] double% Bzt)
MagneticCircleCircle (double t, double lat, double h)
static void FieldComponents (double Bx, double By, double Bz,[System::Runtime::InteropServices::Out] double% H,[System::Runtime::InteropServices::Out] double% F,[System::Runtime::InteropServices::Out] double% D,[System::Runtime::InteropServices::Out] double% I)
static void FieldComponents (double Bx, double By, double Bz, double Bxt, double Byt, double Bzt,[System::Runtime::InteropServices::Out] double% H,[System::Runtime::InteropServices::Out] double% F,[System::Runtime::InteropServices::Out] double% D,[System::Runtime::InteropServices::Out] double% I,[System::Runtime::InteropServices::Out] double% Ht,[System::Runtime::InteropServices::Out] double% Ft,[System::Runtime::InteropServices::Out] double% Dt,[System::Runtime::InteropServices::Out] double% It)

Detailed Description

.NET wrapper for GeographicLib::MagneticModel.

This class allows .NET applications to access GeographicLib::MagneticModel.

Evaluate the earth's magnetic field according to a model. At present only internal magnetic fields are handled. These are due to the earth's code and crust; these vary slowly (over many years). Excluded are the effects of currents in the ionosphere and magnetosphere which have daily and annual variations.

See Magnetic models for details of how to install the magnetic model and the data format.

See

C# Example:

using System;
using NETGeographicLib;

namespace example_MagneticModel
{
    class Program
    {
        static void Main(string[] args)
        {
            try {
                MagneticModel mag = new MagneticModel("wmm2010","");
                double lat = 27.99, lon = 86.93, h = 8820, t = 2012; // Mt Everest
                double Bx, By, Bz;
                mag.Field(t, lat,lon, h, out Bx, out By, out Bz);
                double H, F, D, I;
                MagneticModel.FieldComponents(Bx, By, Bz, out H, out F, out D, out I);
                Console.WriteLine(String.Format("{0} {1} {2} {3}", H, F, D, I));
            }
            catch (GeographicErr e) {
                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
            }
        }
    }
}

Managed C++ Example:

using namespace System;
using namespace NETGeographicLib;

int main(array<System::String ^> ^/*args*/)
{
    try {
        MagneticModel^ mag = gcnew MagneticModel("wmm2010","");
        double lat = 27.99, lon = 86.93, h = 8820, t = 2012; // Mt Everest
        double Bx, By, Bz;
        mag->Field(t, lat,lon, h, Bx, By, Bz);
        double H, F, D, I;
        MagneticModel::FieldComponents(Bx, By, Bz, H, F, D, I);
        Console::WriteLine(String::Format("{0} {1} {2} {3}", H, F, D, I));
    }
    catch (GeographicErr^ e) {
        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
        return -1;
    }
    return 0;
}

Visual Basic Example:

Imports NETGeographicLib

Module example_MagneticModel
    Sub Main()
        Try
            Dim mag As MagneticModel = New MagneticModel("wmm2010", "")
            Dim lat As Double = 27.99, lon = 86.93, h = 8820, t = 2012 ' Mt Everest
            Dim Bx, By, Bz As Double
            mag.Field(t, lat, lon, H, Bx, By, Bz)
            Dim bigH, F, D, I As Double
            MagneticModel.FieldComponents(Bx, By, Bz, bigH, F, D, I)
            Console.WriteLine(String.Format("{0} {1} {2} {3}", bigH, F, D, I))
        Catch ex As GeographicErr
            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
        End Try
    End Sub
End Module

INTERFACE DIFFERENCES:
The () operator has been replaced with Field.

The following functions are implemented as properties: Description, DateTime, MagneticFile, MagneticModelName, MagneticModelDirectory, MinHeight, MaxHeight, MinTime, MaxTime, MajorRadius, and Flattening.

Definition at line 60 of file MagneticModel.h.


Constructor & Destructor Documentation

NETGeographicLib::MagneticModel::MagneticModel ( System::String^   name,
System::String^   path,
Geocentric^   earth 
)

Construct a magnetic model.

Parameters:
[in] name the name of the model.
[in] path (optional) directory for data file.
[in] earth (optional) Geocentric object for converting coordinates.
Exceptions:
GeographicErr if the data file cannot be found, is unreadable, or is corrupt.
std::bad_alloc if the memory necessary for storing the model can't be allocated.

A filename is formed by appending ".wmm" (World Magnetic Model) to the name. If path is specified (and is non-empty), then the file is loaded from directory, path. Otherwise the path is given by the DefaultMagneticPath().

This file contains the metadata which specifies the properties of the model. The coefficients for the spherical harmonic sums are obtained from a file obtained by appending ".cof" to metadata file (so the filename ends in ".wwm.cof").

The model is not tied to a particular ellipsoidal model of the earth. The final earth argument to the constructor specifies an ellipsoid to allow geodetic coordinates to the transformed into the spherical coordinates used in the spherical harmonic sum.

Referenced by ~MagneticModel().

NETGeographicLib::MagneticModel::MagneticModel ( System::String^   name,
System::String^   path 
)

Construct a magnetic model that assumes the WGS84 ellipsoid.

Parameters:
[in] name the name of the model.
[in] path (optional) directory for data file.
Exceptions:
GeographicErr if the data file cannot be found, is unreadable, or is corrupt.
GeographicErr if the memory necessary for storing the model can't be allocated.

A filename is formed by appending ".wmm" (World Magnetic Model) to the name. If path is specified (and is non-empty), then the file is loaded from directory, path. Otherwise the path is given by the DefaultMagneticPath().

This file contains the metadata which specifies the properties of the model. The coefficients for the spherical harmonic sums are obtained from a file obtained by appending ".cof" to metadata file (so the filename ends in ".wwm.cof").

The model is not tied to a particular ellipsoidal model of the earth. The final earth argument to the constructor specifies an ellipsoid to allow geodetic coordinates to the transformed into the spherical coordinates used in the spherical harmonic sum.

NETGeographicLib::MagneticModel::~MagneticModel (  )  [inline]

The destructor calls the finalizer.

Definition at line 135 of file MagneticModel.h.

References MagneticModel().


Member Function Documentation

void NETGeographicLib::MagneticModel::Field ( double  t,
double  lat,
double  lon,
double  h,
[System::Runtime::InteropServices::Out] double%   Bx,
[System::Runtime::InteropServices::Out] double%   By,
[System::Runtime::InteropServices::Out] double%   Bz 
)

Evaluate the components of the geomagnetic field.

Parameters:
[in] t the time (years).
[in] lat latitude of the point (degrees).
[in] lon longitude of the point (degrees).
[in] h the height of the point above the ellipsoid (meters).
[out] Bx the easterly component of the magnetic field (nanotesla).
[out] By the northerly component of the magnetic field (nanotesla).
[out] Bz the vertical (up) component of the magnetic field (nanotesla).
void NETGeographicLib::MagneticModel::Field ( double  t,
double  lat,
double  lon,
double  h,
[System::Runtime::InteropServices::Out] double%   Bx,
[System::Runtime::InteropServices::Out] double%   By,
[System::Runtime::InteropServices::Out] double%   Bz,
[System::Runtime::InteropServices::Out] double%   Bxt,
[System::Runtime::InteropServices::Out] double%   Byt,
[System::Runtime::InteropServices::Out] double%   Bzt 
)

Evaluate the components of the geomagnetic field and their time derivatives

Parameters:
[in] t the time (years).
[in] lat latitude of the point (degrees).
[in] lon longitude of the point (degrees).
[in] h the height of the point above the ellipsoid (meters).
[out] Bx the easterly component of the magnetic field (nanotesla).
[out] By the northerly component of the magnetic field (nanotesla).
[out] Bz the vertical (up) component of the magnetic field (nanotesla).
[out] Bxt the rate of change of Bx (nT/yr).
[out] Byt the rate of change of By (nT/yr).
[out] Bzt the rate of change of Bz (nT/yr).
MagneticCircle ^ NETGeographicLib::MagneticModel::Circle ( double  t,
double  lat,
double  h 
)

Create a MagneticCircle object to allow the geomagnetic field at many points with constant lat, h, and t and varying lon to be computed efficiently.

Parameters:
[in] t the time (years).
[in] lat latitude of the point (degrees).
[in] h the height of the point above the ellipsoid (meters).
Exceptions:
std::bad_alloc if the memory necessary for creating a MagneticCircle can't be allocated.
Returns:
a MagneticCircle object whose MagneticCircle::Field(double lon) member function computes the field at particular values of lon.

If the field at several points on a circle of latitude need to be calculated then creating a MagneticCircle and using its member functions will be substantially faster, especially for high-degree models.

static void NETGeographicLib::MagneticModel::FieldComponents ( double  Bx,
double  By,
double  Bz,
[System::Runtime::InteropServices::Out] double%   H,
[System::Runtime::InteropServices::Out] double%   F,
[System::Runtime::InteropServices::Out] double%   D,
[System::Runtime::InteropServices::Out] double%   I 
) [static]

Compute various quantities dependent on the magnetic field.

Parameters:
[in] Bx the x (easterly) component of the magnetic field (nT).
[in] By the y (northerly) component of the magnetic field (nT).
[in] Bz the z (vertical, up positive) component of the magnetic field (nT).
[out] H the horizontal magnetic field (nT).
[out] F the total magnetic field (nT).
[out] D the declination of the field (degrees east of north).
[out] I the inclination of the field (degrees down from horizontal).
static void NETGeographicLib::MagneticModel::FieldComponents ( double  Bx,
double  By,
double  Bz,
double  Bxt,
double  Byt,
double  Bzt,
[System::Runtime::InteropServices::Out] double%   H,
[System::Runtime::InteropServices::Out] double%   F,
[System::Runtime::InteropServices::Out] double%   D,
[System::Runtime::InteropServices::Out] double%   I,
[System::Runtime::InteropServices::Out] double%   Ht,
[System::Runtime::InteropServices::Out] double%   Ft,
[System::Runtime::InteropServices::Out] double%   Dt,
[System::Runtime::InteropServices::Out] double%   It 
) [static]

Compute various quantities dependent on the magnetic field and its rate of change.

Parameters:
[in] Bx the x (easterly) component of the magnetic field (nT).
[in] By the y (northerly) component of the magnetic field (nT).
[in] Bz the z (vertical, up positive) component of the magnetic field (nT).
[in] Bxt the rate of change of Bx (nT/yr).
[in] Byt the rate of change of By (nT/yr).
[in] Bzt the rate of change of Bz (nT/yr).
[out] H the horizontal magnetic field (nT).
[out] F the total magnetic field (nT).
[out] D the declination of the field (degrees east of north).
[out] I the inclination of the field (degrees down from horizontal).
[out] Ht the rate of change of H (nT/yr).
[out] Ft the rate of change of F (nT/yr).
[out] Dt the rate of change of D (degrees/yr).
[out] It the rate of change of I (degrees/yr).
static System::String ^ NETGeographicLib::MagneticModel::DefaultMagneticPath (  )  [static]
Returns:
the default path for magnetic model data files.

This is the value of the environment variable GEOGRAPHICLIB_MAGNETIC_PATH, if set; otherwise, it is $GEOGRAPHICLIB_DATA/magnetic if the environment variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default (/usr/local/share/GeographicLib/magnetic on non-Windows systems and C:/ProgramData/GeographicLib/magnetic on Windows systems).

static System::String ^ NETGeographicLib::MagneticModel::DefaultMagneticName (  )  [static]
Returns:
the default name for the magnetic model.

This is the value of the environment variable GEOGRAPHICLIB_MAGNETIC_NAME, if set, otherwise, it is "wmm2010". The MagneticModel class does not use this function; it is just provided as a convenience for a calling program when constructing a MagneticModel object.


Property Documentation

System:: String^ NETGeographicLib::MagneticModel::Description [get]
Returns:
the description of the magnetic model, if available, from the Description file in the data file; if absent, return "NONE".

Definition at line 261 of file MagneticModel.h.

System:: String^ NETGeographicLib::MagneticModel::DateTime [get]
Returns:
date of the model, if available, from the ReleaseDate field in the data file; if absent, return "UNKNOWN".

Definition at line 267 of file MagneticModel.h.

System:: String^ NETGeographicLib::MagneticModel::MagneticFile [get]
Returns:
full file name used to load the magnetic model.

Definition at line 272 of file MagneticModel.h.

System:: String^ NETGeographicLib::MagneticModel::MagneticModelName [get]
Returns:
"name" used to load the magnetic model (from the first argument of the constructor, but this may be overridden by the model file).

Definition at line 278 of file MagneticModel.h.

System:: String^ NETGeographicLib::MagneticModel::MagneticModelDirectory [get]
Returns:
directory used to load the magnetic model.

Definition at line 283 of file MagneticModel.h.

double NETGeographicLib::MagneticModel::MinHeight [get]
Returns:
the minimum height above the ellipsoid (in meters) for which this MagneticModel should be used.

Because the model will typically provide useful results slightly outside the range of allowed heights, no check of t argument is made by MagneticModel::Field() or MagneticModel::Circle.

Definition at line 294 of file MagneticModel.h.

double NETGeographicLib::MagneticModel::MaxHeight [get]
Returns:
the maximum height above the ellipsoid (in meters) for which this MagneticModel should be used.

Because the model will typically provide useful results slightly outside the range of allowed heights, no check of t argument is made by MagneticModel::Field() or MagneticModel::Circle.

Definition at line 305 of file MagneticModel.h.

double NETGeographicLib::MagneticModel::MinTime [get]
Returns:
the minimum time (in years) for which this MagneticModel should be used.

Because the model will typically provide useful results slightly outside the range of allowed times, no check of t argument is made by MagneticModel::Field() or MagneticModel::Circle.

Definition at line 316 of file MagneticModel.h.

double NETGeographicLib::MagneticModel::MaxTime [get]
Returns:
the maximum time (in years) for which this MagneticModel should be used.

Because the model will typically provide useful results slightly outside the range of allowed times, no check of t argument is made by MagneticModel::Field() or MagneticModel::Circle.

Definition at line 327 of file MagneticModel.h.

double NETGeographicLib::MagneticModel::MajorRadius [get]
Returns:
a the equatorial radius of the ellipsoid (meters). This is the value of a inherited from the Geocentric object used in the constructor.

Definition at line 334 of file MagneticModel.h.

double NETGeographicLib::MagneticModel::Flattening [get]
Returns:
f the flattening of the ellipsoid. This is the value inherited from the Geocentric object used in the constructor.

Definition at line 340 of file MagneticModel.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends

Generated on 6 Oct 2014 for NETGeographicLib by  doxygen 1.6.1