Click or drag to resize
XDL

XWMMManager Class

World Magnetic Model을 기반으로 지구 자기장 요소를 계산하는 클래스이다. 계수 파일(.COF)을 로드하고 특정 위치와 시점(Epoch)에서의 자기편각, 자기복각, 자기 강도 등의 자기장 요소를 계산하며, 자기장의 수평 강도에 따른 항법 신뢰성 구역(Blackout Zone) 판별 기능을 제공한다.
Inheritance Hierarchy
SystemObject
  Pixoneer.NXDL.NIOXGeoidManager
    Pixoneer.NXDL.NIOXWMMManager

Namespace: Pixoneer.NXDL.NIO
Assembly: NXDLio (in NXDLio.dll) Version: 3.0.0.3
Syntax
C#
public class XWMMManager : XGeoidManager

The XWMMManager type exposes the following members.

Constructors
 NameDescription
Public methodXWMMManager XWMMManager 클래스의 기본 생성자로서, 멤버변수들을 초기화한다.
Top
Properties
 NameDescription
Public propertyUseMSL true 로 설정할 경우 입력 고도를 지오이드고를 고려한 해발고도로 해석하고, false 로 설정할 경우 입력 고도를 WGS84 타원체고로 해석하도록 설정한다.
설정하지 않을 경우 기본값은 true(해발고도) 이다.
Calc 함수 호출 시 UseMSL 가 true 인 경우 지오이드 파일을 로드하지 않았다면 파일을 자동으로 로드한다.
UseMSL 가 true 인 경우 지오이드 파일을 읽을 수 없으면 NOTCOMPUTED 를 리턴한다.
지오이드고가 계산 결과에 미치는 영향은 매우 작으나(1 nT 미만) 정밀한 계산을 원하는 경우 사용한다.
Top
Methods
 NameDescription
Public methodCalc 입력 위치의 자기장 요소를 계산한다.
계수 파일을 로드하지 않고 호출하면 최신 WMM 모델의 계수 파일을 자동으로 로드한다.
UseMSL 속성이 true 일 때, 지오이드 파일을 로드하지 않고 호출하면 지오이드 파일을 자동으로 로드한다.
계산 시점을 설정하지 않고 호출하면 현재 날짜로 WMM 계산 시점을 설정한다.
Public methodGetDeclination 자기편각을 반환한다.
Public methodGetDeclinationSecVar 자기편각의 연간 장기 변화율(Annual Secular variation)을 반환한다.
Public methodGetEpoch 현재 사용자가 설정한 WMM 계산 시점을 확인한다.
Public methodGetGridVariation 지도 투영기준 편각을 반환한다.
Public methodGetHorizontalIntensity 자기장의 수평 방향 강도를 반환한다.
Public methodGetHorizontalIntensitySecVar 자기장 수평 방향 강도의 연간 장기 변화율(Annual Secular variation)을 반환한다.
Public methodGetInclination 자기복각을 반환한다.
Public methodGetInclinationSecVar 자기복각의 연간 장기 변화율(Annual Secular variation)을 반환한다.
Public methodGetModelName WMM 객체의 모델 이름을 가져온다.
Public methodGetTotalIntensity 자기장의 총 강도를 반환한다.
Public methodGetTotalIntensitySecVar 자기장 총 강도의 연간 장기 변화율(Annual Secular variation)을 반환한다.
Public methodGetValidEpoch 로드한 WMM 계수 파일의 유효한 계산 시점 범위를 확인한다. 유효한 범위는 파일의 계수 일로부터 종료 연도 사이의 날짜이다.
Public methodGetVector 자기장의 X, Y, Z, 벡터를 반환한다.
Public methodGetVectorSecVar 자기장 X, Y, Z, 벡터의 연간 장기 변화율(Annual Secular variation)을 반환한다.
Public methodLoadFileFromEGM2008 EGM2008 지오이드 파일을 로드한다.
(Overrides XGeoidManagerLoadFileFromEGM2008(String, String))
Public methodLoadFileFromWMM WMM 계수 파일을 로드한다.
Public methodSetCurrentEpoch 현재 날짜로 WMM 계산 시점을 설정한다.
계수파일을 로드하지 않고 호출하면 최신 WMM 모델의 계수 파일을 자동으로 로드한다.
Public methodSetEpoch WMM 계산 시점을 설정한다.
계수 파일을 로드하지 않고 호출하면 최신 WMM 모델의 계수 파일을 자동으로 로드한다.
Top
Example
세계 자기장 모델을 계산한다.
C#
using Pixoneer.NXDL.NIO;

// Create XWMMManager
XWMMManager wmm = new XWMMManager();

// Sets WMM Coefficients file path. This file could download from web site. https://www.ncei.noaa.gov/products/world-magnetic-model
string strWmmPath = Xfn.GetResourcePath() + "\\WMM2025.COF";

// Sets Geoid file path. This file could download from web site. http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html
string strGeoidPath = Xfn.GetResourcePath() + "\\Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree_SE";

// Load the Coefficient file 
String strError = "";
if (wmm.LoadFileFromWMM(strWmmPath, ref strError))
{
    double alt = 10000; //meter
    wmm.UseMSL = true;
    if (!wmm.LoadFileFromEGM2008(strGeoidPath, ref strError))
    {
        wmm.UseMSL = false;
    }

    XGeoPoint geoPt = XGeoPoint.FromDegree(127, 36, alt);
    XWMMManager.eBoZState eWmmState;
    double dec, gv, inc, tInt, hInt;

    // Set epoch within the valid range of the WMM coefficient file. 
    if (wmm.SetEpoch(2027, 5, 1, ref strError))
    {
        // Compute World Magnetic Model
        // WMM 계산에 필요한 입력값의 범위와 반환값에 대한 자세한 설명은 NOAA 보고서를 참고하세요. 
        // https://www.ncei.noaa.gov/products/world-magnetic-model 
        eWmmState = wmm.Calc(geoPt);

        if (XWMMManager.eBoZState.BLACKOUT == eWmmState)
        {
            MessageBox.Show("Location is in a Blackout Zone (nearly vertical magnetic field)."
                + "Navigation data may be unreliable.");
        }
        else
        {
            if (XWMMManager.eBoZState.CAUTION == eWmmState)
            {
                MessageBox.Show("Caution: Magnetic compasses may be less accurate in this area.");
            }
            dec = wmm.GetDeclination();
            gv = wmm.GetGridVariation();
            inc = wmm.GetInclination();
            tInt = wmm.GetTotalIntensity();
            hInt = wmm.GetHorizontalIntensity();
        }
    }
    else
    {
        MessageBox.Show(strError);
    }
}
See Also