XDL Manual

XDL MilmapView È°¿ë µÎ¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

 NXMilmapView¸¦ ÀÌ¿ëÇÏ¿© ±º Áöµµ µµ½Ã ȯ°æ¿¡¼­

 ´Ù¾çÇÑ ÃøÁ¤¹æ¹ýÀ» ±¸ÇöÇØ º¸°í, »ç¿ëÀÚ Á¤ÀÇ ¼³Á¤ÇÑ Á¤Á¡¿¡ ´ëÇÑ

  °Å¸® ¹× °¢µµ ÃøÁ¤µµ ±¸ÇöÇØ º¾´Ï´Ù.

 

 

2017. 01

¼öÁ¤ 2019. 02.

 

 

¸ñÂ÷

XDL MilmapView È°¿ë µÎ¹ø°... 1

1    »ç¿ëÇϱâ... 1

1.1    XDL ¿£Áø... 1

2    NXMilmapView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â... 1

2.1    ±âº» ÇÁ·Î±×·¥ ÀÛ¼º... 1

2.2    ÇÁ·Î±×·¥ µðÀÚÀÎ... 1

2.3    ±â´É ¹× À̺¥Æ® Ãß°¡... 1

 

 

 

 

1     »ç¿ëÇϱâ

 

1.1    XDL ¿£Áø

¼³Ä¡ ÇÁ·Î±×·¥À¸·Î ¹èÆ÷µÇ´Â XDL ¿£ÁøÀº Visual Studio 2010 x86 Release ¹öÀüÀ¸·Î, Visual Studio 2010 ÀÌ»óÀÇ ¹öÀü¿¡¼­ »ç¿ë °¡´ÉÇÏ´Ù.

¾Æ·¡ÀÇ ¼³¸íÀº Visual Studio 2010À» ±âÁØÀ¸·Î ÇÏ°Ú´Ù.

2     NXMilmapView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â

l  º» ¿¹Á¦ ÇÁ·Î±×·¥Àº NXMilmapViewÀÇ ±âº» ÃøÁ¤ ¸ðµå¸¦ ¼³Á¤ÇÏ¿© ±æÀÌ, ¸éÀû µîÀ» ÃøÁ¤ÇØ º¸°í, ¼¼ Á¡À» ÀÌ¿ëÇÑ °Å¸® ¹× °¢µµ¸¦ »ç¿ëÀÚ Äڵ带 ÀÌ¿ëÇÏ¿© µµ½ÃÇÏ°í ÃøÁ¤ÇØ º¸µµ·Ï ÇÑ´Ù.

2.1    ±âº» ÇÁ·Î±×·¥ ÀÛ¼º

2.1.1     Visual Studio 2010À» ÀÌ¿ëÇÏ¿© ¿¹Á¦ ¡°XDL_MilmapView1¡±ÀÇ ¡°Config ÆÄÀÏ ¼³Á¤Çϱ⡱¿Í ¡°±âº» ÇÁ·Î±×·¥ ÀÛ¼º¡± ¹æ¹ýÀ» Âü°í·Î ±âº» ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÑ´Ù.

 

2.2    ÇÁ·Î±×·¥ µðÀÚÀÎ

 

¹øÈ£

Name

Control type

¨ç

menuStrip1

MenuStrip

¨è

nxMilmapView1

NXMilmapView

¨é

nxMilmapLayer1

NXMilmapLayer

2.2.1     [µµ±¸ »óÀÚ]ÀÇ ¡°MenuStrip¡±¸¦ ¼±ÅÃÇÏ°í Form1¿¡ ²ø¾î´Ù°¡ ³õ´Â´Ù.

 

 

Form1¿¡ menuStrip1ÀÌ Ãß°¡µÈ´Ù. FormÀÇ »ó´ÜÀ» Ŭ¸¯ÇÏ¸é ¾Æ·¡¿Í °°ÀÌ ¸Þ´º¸¦ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ¹Ù²ï´Ù.

 

 

±â´ÉÀ» À§ÇÑ ¸Þ´º¸¦ ÀÔ·ÂÇÏ°í ÀÌ¿¡ ´ëÇÑ Nameµµ ¼³Á¤ÇÑ´Ù. ¿¹Á¦ÀÇ ¸Þ´º ±¸¼ºÀº ¾Æ·¡¿Í °°´Ù.

 

Text

Name

°Å¸®(´Ü¼±) ÃøÁ¤

MeasureLineToolStripMenuItem

°Å¸®(Æú¸®¶óÀÎ) ÃøÁ¤

MeasurePolyLineToolStripMenuItem

¸éÀû ÃøÁ¤

MeasureAreaToolStripMenuItem

°¢µµ ÃøÁ¤(ÁøºÏ¹æÇâ)

MeasureAngleToolStripMenuItem

¿øÇü ÃøÁ¤

MeasureCircleToolStripMenuItem

 

 

Text

Name

°Å¸® ¹× °¢µµ ÃøÁ¤

UserDefinedMeasureToolStripMenuItem

2.2.2     NXMilmapView ÄÁÆ®·ÑÀº ¡°XDL_MilmapView1¡±À» Âü°íÇÏ¿© Ãß°¡ÇÑ´Ù.

2.2.3     [µµ±¸ »óÁö]¿¡¼­ NXMilmapLayer¸¦ ¼±ÅÃÇÑ µÚ µå·¡±×ÇÏ¿© nxMilmapView1 À§¿¡ ³õ´Â´Ù.

NXMilmapLayer´Â MilmapView¿¡ Ãß°¡µÇ¾î XDL ¿£Áø¿¡¼­ ¹ß»ýÇÏ´Â À̺¥Æ®¸¦ ¿ÜºÎ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ó¸®ÇÒ ¼ö ÀÖ´Ù. Form1.Designer.cs¿¡¼­ º¸¸é ´ÙÀ½°ú °°ÀÌ ÄÁÆ®·Ñ nxMilmapLayer1 ¸â¹öº¯¼ö°¡ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

Windows Form µðÀÚÀ̳ʿ¡¼­ »ý¼ºÇÑ ÄÚµå

private Pixoneer.NXDL.NXMilmap.NXMilmapView nxMilmapView1;
private Pixoneer.NXDL.NXMilmap.NXMilmapLayer nxMilmapLayer1;

 

2.3    ±â´É ¹× À̺¥Æ® Ãß°¡

2.3.1     Form1À» ¼±ÅÃÇÏ°í [¼Ó¼º] â - [À̺¥Æ® ] ¸Þ´º¸¦ ¼±ÅÃÇÑ µÚ ¡°Load¡± À̺¥Æ®¸¦ ´õºí Ŭ¸¯ÇÑ´Ù.

Form1_Load ÇÔ¼ö¿Í ÇÔ²² ¾Æ·¡¿Í °°ÀÌ Äڵ带 Ãß°¡ÇÑ´Ù.

using Pixoneer.NXDL;            // ±âº» ±â´É
using Pixoneer.NXDL.NGR;        // ±×·¡ÇÈ °ü·Ã ±â´É
using Pixoneer.NXDL.NXMilmap;   // ±º»ç Áöµµ µµ½Ã °ü·Ã ±â´É
using Pixoneer.NXDL.NCC;        // ÁÂÇ¥ °ü·Ã ±â´É

namespace XDL_MilmapView2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // XMilmapConfig.xmlÀ» ÀÌ¿ëÇÏ¿© ±º»çÁöµµ¸¦ À§ÇÑ 
// NXMilmapView ¹× NXMilmapEngineÀ» ÃʱâÈ­ÇÑ´Ù.
            if (!NXMilmapView.m_MapEngine.InitFromXML("c:\\Pixoneer\\Xdl1.2\\Config\\XMilmapConfig.xml"))
            {
                return;
            }

            nxMilmapView1.AddRenderLayer(ref nxMilmapLayer1);

            // ¸¶¿ì½º ÈÙÀ» ²ø°í ´ç±â´Â °ÍÀ» È®´ë/Ãà¼Ò ¿äÀÎÀ¸·Î °è»êÇÏ¿© È­¸éÀ»
// È®´ë/Ãà¼ÒÇÑ´Ù.
            // ÀÌ ¶§, °è»êµÈ °ø°£ ÇØ»óµµ¿Í °¡±î¿î Ãàô(scale)ÀÌ ÀÖ´Â °æ¿ì 
// ÀÚµ¿ÀûÀ¸·Î ÇØ´ç ÃàôÀ¸·Î ¹Ù²î¸é¼­ µµ½ÃµÈ´Ù.
            // ¸¶¿ì½º ÈÙÀ» ²ø°í ´ç±â´Â °ÍÀ¸·Î È­¸éÀÇ ÃàôÀ» º¯°æÇÏ·Á¸é,
// NXMilmapView.eWheelZoomAction.ByScaleIndexÀ¸·Î ¼³Á¤
            nxMilmapView1.WheelZoomAction = 
NXMilmapView.eWheelZoomAction.ByZoomFactor;
            nxMilmapView1.SetGeoToCenter(0, new XVertex2d(127.0, 36.0));

            // MilmapViewÀÇ ÃøÁ¤ ´ÜÀ§ ¼³Á¤
            // °Å¸® ÃøÁ¤ ´ÜÀ§
            nxMilmapView1.ToolboxDistUnit = 
NXMilmapView.eToolboxDistUnit.KiloMeter;
            // ¸éÀû ÃøÁ¤ ´ÜÀ§
            nxMilmapView1.ToolboxAreaUnit = 
NXMilmapView.eToolboxAreaUnit.SquareKiloMeter;
        }
    }
}

ÃøÁ¤ °á°ú¸¦ Ç¥½ÃÇÏ´Â µ¥¿¡ ÃøÁ¤ ´ÜÀ§¸¦ ¼³Á¤ÇÏ·Á¸é, ¸éÀû¿¡ ´ëÇؼ­´Â NXMilmapViewÀÇ ToolboxAreaUnit ¼Ó¼ºÀ» NXMilmapView.eToolboxAreaUnit °ªÀ¸·Î ¼³Á¤ÇÏ¸é µÇ°í, °Å¸®¿¡ ´ëÇؼ­´Â NXMilmapViewÀÇ ToolboxDistUnit ¼Ó¼ºÀ» NXMilmapView.eToolboxDistUnit °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.

Form1_Load ÇÔ¼ö¿¡¼­´Â ¸éÀû ÃøÁ¤ ´ÜÀ§´Â §´·Î, ±æÀÌ ÃøÁ¤ ´ÜÀ§´Â §°·Î ÇÑ´Ù.

 

2.3.2     ¡°Measurement/»ç¿ëÀÚ Á¤ÀÇ¡±ÀÇ ÇÏÀ§ ¸Þ´º¸¦ ¼±ÅÃÇÑ ÈÄ ´õºí Ŭ¸¯ÇÑ´Ù.

¸Þ´º¿¡¼­ ¸¶¿ì½º·Î ´õºí Ŭ¸¯ÇÏ¸é ¡°Click¡±¿¡ ´ëÇÑ À̺¥Æ® ÇÔ¼ö°¡ ÀÚµ¿ Ãß°¡µÈ´Ù.

 

2.3.3     °¢ ¸Þ´º¿¡ µû¸¥ MilmapViewÀÇ ToolboxMode¸¦ ¼³Á¤ÇÑ´Ù.

NXMilmapViewÀÇ ÃøÁ¤¸ðµå·Î´Â 2Á¡À» ÀÌ¿ëÇÑ °Å¸® ÃøÁ¤(NXMilmapView.eToolboxMode. DistanceMeasurer), ´ÙÁß Á¡À» ÀÌ¿ëÇÑ °Å¸® ÃøÁ¤(eToolboxMode.PathMeasurer), ´ÙÁß Á¡À» ÀÌ¿ëÇÑ ¸éÀû ÃøÁ¤(eToolboxMode.AreaMeasurer), µÎ Á¡ÀÇ °Å¸®¸¦ ¹ÝÁö¸§À¸·Î ÇÑ ¿øÇü ÃøÁ¤(eToolboxMode.CircleMeasurer), µÎ Á¡À¸·Î ÀÌ·ç¾îÁø º¤ÅÍ¿Í ÁøºÏ¹æÇâ°úÀÇ °¢µµ ÃøÁ¤(eToolboxMode.AngleMeasurer)ÀÌ ÀÖ´Ù.

ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

private void MeasureLineToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.DistanceMeasurer;
}

private void MeasurePolyLineToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.PathMeasurer;
}

private void MeasureAreaToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.AreaMeasurer;
}

private void MeasureAngleToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.AngleMeasurer;
}

private void MeasureCircleToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.CircleMeasurer;
}

 

2.3.4     »ç¿ëÀÚ Á¤ÀÇ ÃøÁ¤À» À§ÇÑ º¯¼ö¸¦ Ãß°¡ÇÏ°í UserDefinedMeasureToolStripMenuItem À̺¥Æ® ÇÔ¼ö¿¡¼­ ÃʱâÈ­ÇÑ´Ù.

»ç¿ëÀÚ Á¤ÀÇ ÃøÁ¤ ¿©ºÎ¸¦ ¼³Á¤ÇÏ´Â ¡°bool userMeasure¡±¿Í °¢µµ ÃøÁ¤À» À§ÇÑ ¼¼ º¯¼ö ¡°XVertex2d posMeasure0, posMeasure1, posMeasure2¡±¸¦ »ý¼ºÇÏ°í ÃʱâÈ­ÇÑ´Ù.

public partial class Form1 : Form
{
    bool userMeasure = false;
    int countPos = 0;
    XVertex2d posAngle0, posAngle1, posAngle2;    // index 0 : start, index 1 : center, index 2 : end
    public Form1()
    {
        InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
    {
        // XMilmapConfig.xmlÀ» ÀÌ¿ëÇÏ¿© ±º»çÁöµµ¸¦ À§ÇÑ 
// NXMilmapView ¹× NXMilmapEngineÀ» ÃʱâÈ­ÇÑ´Ù.
        if (!NXMilmapView.m_MapEngine.InitFromXML("c:\\Pixoneer\\Xdl1.2\\Config\\XMilmapConfig.xml"))
        {
            return;
        }

        nxMilmapView1.AddRenderLayer(ref nxMilmapLayer1);

        // ¸¶¿ì½º ÈÙÀ» ²ø°í ´ç±â´Â °ÍÀ» È®´ë/Ãà¼Ò ¿äÀÎÀ¸·Î °è»êÇÏ¿© 
// È­¸éÀ» È®´ë/Ãà¼ÒÇÑ´Ù.
        // ÀÌ ¶§, °è»êµÈ °ø°£ ÇØ»óµµ¿Í °¡±î¿î Ãàô(scale)ÀÌ ÀÖ´Â °æ¿ì 
// ÀÚµ¿ÀûÀ¸·Î ÇØ´ç ÃàôÀ¸·Î ¹Ù²î¸é¼­ µµ½ÃµÈ´Ù.
        // ¸¶¿ì½º ÈÙÀ» ²ø°í ´ç±â´Â °ÍÀ¸·Î È­¸éÀÇ ÃàôÀ» º¯°æÇÏ·Á¸é, 
// NXMilmapView.eWheelZoomAction.ByScaleIndexÀ¸·Î ¼³Á¤
        nxMilmapView1.WheelZoomAction = NXMilmapView.eWheelZoomAction.ByZoomFactor;
        nxMilmapView1.SetGeoToCenter(0, new XVertex2d(127.0, 36.0));

        // MilmapViewÀÇ ÃøÁ¤ ´ÜÀ§ ¼³Á¤
        // °Å¸® ÃøÁ¤ ´ÜÀ§
        nxMilmapView1.ToolboxDistUnit = NXMilmapView.eToolboxDistUnit.KiloMeter;
        // ¸éÀû ÃøÁ¤ ´ÜÀ§
        nxMilmapView1.ToolboxAreaUnit = NXMilmapView.eToolboxAreaUnit.SquareKiloMeter;

        // »ç¿ëÀÚ Á¤ÀÇ ÃøÁ¤À» À§ÇÑ º¯¼ö ÃʱâÈ­
        userMeasure = false;
        countPos = 0;
    }

private void UserDefinedMeasureToolStripMenuItem_Click(object sender, EventArgs e)
    {
        userMeasure = !userMeasure;
        countPos = 0;
    }

2.3.5     °¢µµ ¹× °Å¸®¸¦ ÃøÁ¤ÇÏ´Â ÇÔ¼ö¸¦ ÀÌ¿ëÇϱâ À§Çؼ­ ¡°NXDLcc.dll¡±À» ÂüÁ¶¿¡ Ãß°¡ÇÑ´Ù.

WGS84ü¸¦ ¹Ý¿µÇÑ °Å¸®¸¦ ÃøÁ¤ÇÏ´Â ÇÔ¼ö´Â Xcc.CalcGeodeticDistanceÀ̸ç, °¢µµ¸¦ ÃøÁ¤ÇÏ´Â ÇÔ¼ö´Â Xcc.CalcGeodeticAngleÀÌ´Ù. À̸¦ À§ÇØ NXDLcc.dllÀ» ÂüÁ¶¿¡ Ãß°¡ÇÏ°í, ¡°using Pixoneer.NXDL.NCC;¡± ±¸¹® ¶ÇÇÑ Ãß°¡ÇÑ´Ù.

2.3.6     nxMilmapLayer1À» ¼±ÅÃÇÏ¿© ¡°OnWndProc¡± À̺¥Æ®¿Í ¡°OnRender¡± À̺¥Æ® ÇÔ¼ö¸¦ Ãß°¡ÇÏ¿© Äڵ带 ÀÛ¼ºÇÑ´Ù.

OnWndProc À̺¥Æ®´Â NXMilmapLayer°¡ Ãß°¡µÇ¾î ÀÖ´Â ViewÀÇ À©µµ¿ì À̺¥Æ®¸¦ ¿ÜºÎ¿¡¼­ ¹Þ¾Æ¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. OnRender´Â NXMilmapLayer°¡ Ãß°¡µÇ¾î ÀÖ´Â ViewÀÇ RenderingÀÌ ¿Ï·áµÈ ÈÄ ¾îÇø®ÄÉÀ̼ǿ¡¼­ Ãß°¡ÀûÀÎ ÀÛ¾÷À» ±¸ÇöÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ »ç¿ëÇÏ¸é µÈ´Ù.

¿ÞÂÊ ¹öÆ°ÀÌ Å¬¸¯ÇÒ ¶§¸¶´Ù °¢µµ ÃøÁ¤À» À§ÇÑ Á¡À» Â÷·Ê´ë·Î ¼³Á¤ÇÏ°í 3Á¡ÀÌ ¸ðµÎ ¼³Á¤µÇ¸é °è»ê°á°ú¸¦ Visual Studio 2010 Ãâ·Ââ¿¡ Ãâ·ÂÇϵµ·Ï ÇÑ´Ù. ¶ÇÇÑ 2Á¡ ÀÌ»óÀÎ °æ¿ì È­¸é¿¡ ºÓÀº ¼±À¸·Î µµ½ÃÇÑ´Ù.

ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.
private bool nxMilmapLayer1_OnWndProc(object sender, Pixoneer.NXDL.NXMilmap.NXMilmapDrawArgs e, ref Message m)
{
    if (m.Msg == Pixoneer.NXDL.XWndMsg.XWM_LBUTTONDOWN)
    {
        if (userMeasure)
        {
            double x = Pixoneer.NXDL.XWndMsg.GetLowValue(m.LParam);
            double y = Pixoneer.NXDL.XWndMsg.GetHighValue(m.LParam);

            NXMilmapDrawArgs drawArgs = nxMilmapView1.GetDrawArgs();
            XVertex2d gpPos = drawArgs.ScreenToGeographic(new XVertex2d(x, y));
            if (countPos == 0)
            {
                posAngle0 = gpPos;
            }
            else if (countPos == 1)
            {
                posAngle1 = gpPos;
            }
            else if (countPos == 2)
            {
                posAngle2 = gpPos;

                // µÎ ¼±ºÐÀÇ ±æÀÌ¿Í 3 Á¡À¸·Î ÀÌ·ç¾îÁö´Â °¢µµ °è»ê
                double distance = 0.0;
                distance += Xcc.CalcGeodeticDistance(XAngle.FromDegree(posAngle0.x), XAngle.FromDegree(posAngle0.y),
                    XAngle.FromDegree(posAngle1.x), XAngle.FromDegree(posAngle1.y));
                distance += Xcc.CalcGeodeticDistance(XAngle.FromDegree(posAngle1.x), XAngle.FromDegree(posAngle1.y),
                    XAngle.FromDegree(posAngle2.x), XAngle.FromDegree(posAngle2.y));

                double angle = 0.0;
                angle = Xcc.CalcGeodeticAngle(XAngle.FromDegree(posAngle1.x), XAngle.FromDegree(posAngle1.y),
                    XAngle.FromDegree(posAngle0.x), XAngle.FromDegree(posAngle0.y),
                    XAngle.FromDegree(posAngle2.x), XAngle.FromDegree(posAngle2.y));

                System.Diagnostics.Debug.WriteLine("Distance : " + distance.ToString());
                System.Diagnostics.Debug.WriteLine("Angle    : " + angle.ToString());
            }

            countPos++;

            nxMilmapView1.RefreshScreen();
        }
    }

    return default(bool);
}

private bool nxMilmapLayer1_OnRender(object sender, NXMilmapDrawArgs e)
{
    if (!userMeasure) return false;

    if (countPos > 1)
    {
        e.Graphics.glDisable(XGraphics.GL_DEPTH_TEST);
        e.Graphics.glEnable(XGraphics.GL_BLEND);
        e.Graphics.glBlendFunc(XGraphics.GL_SRC_ALPHA, 
XGraphics.GL_ONE_MINUS_SRC_ALPHA);

        e.Graphics.glPushMatrix();

        e.Graphics.glColor3f(1.0f, 0.0f, 0.0f);
        e.Graphics.glLineWidth(3);
        e.Graphics.glBegin(XGraphics.GL_LINE_STRIP);

        NXMilmapDrawArgs drawArgs = nxMilmapView1.GetDrawArgs();
        XVertex3d posWorld = drawArgs.GeographicToWorld(posAngle0);
        e.Graphics.glVertex3d(posWorld);

        posWorld = drawArgs.GeographicToWorld(posAngle1);
        e.Graphics.glVertex3d(posWorld);

        if (countPos >= 3)
        {
            posWorld = drawArgs.GeographicToWorld(posAngle2);
            e.Graphics.glVertex3d(posWorld);
        }

        e.Graphics.glEnd();
        e.Graphics.glColor3f(1.0f, 1.0f, 1.0f);
        e.Graphics.glPopMatrix();
        e.Graphics.glEnable(XGraphics.GL_DEPTH_TEST);
    }

    return default(bool);
}

 

2.3.7     ¼Ö·ç¼ÇÀ» ºôµåÇÏ°í ½ÇÇàÇÑ´Ù.

MeasurementÀÇ ¡°°Å¸®(Æú¸®¶óÀÎ) ÃøÁ¤¡± ¸Þ´º¸¦ ¼±ÅÃÇÑ µÚ nxMilmapView1 À§¿¡¼­ ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» Ŭ¸¯Çϸ鼭 ÃøÁ¤ÇÏ°íÀÚ ÇÏ´Â Á¤Á¡À» ¼³Á¤ÇÑ´Ù. ¾Æ·¡ ±×¸²°ú °°ÀÌ ÃøÁ¤ °á°ú°¡ °¢ ¼±ºÐ ¿ä¼Ò¿¡ µµ½ÃµÈ´Ù.

 

 

»ç¿ëÀÚ Á¤ÀÇ ¸Þ´ºÀÇ ¡°°Å¸® ¹× °¢µµ ÃøÁ¤¡±À» ¼±ÅÃÇÑ µÚ nxMilmapView1 À§¿¡¼­ ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» Ŭ¸¯Çϸé 2Á¡ ÀÌ»óºÎÅÍ È­¸é¿¡ ºÓÀº ½Ç¼±ÀÌ µµ½ÃµÇ°í, 3Á¡ÀÌ ¼±ÅõǸé Visual Studio 2010ÀÇ Ãâ·Ââ¿¡ ÃøÁ¤°á°ú°¡ ³ªÅ¸³­´Ù.

 

 

 

Xcc.CalcGeodeticAngle ÃøÁ¤°á°úÀÇ ´ÜÀ§´Â °Å¸®ÀÇ °æ¿ì meter, °¢µµÀÇ °æ¿ì ¢ªÀÌ´Ù.