WPF - XDL Tutorial

XDL MilmapView È°¿ë µÎ¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

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

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

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

 

 

2019. 04.

 

 

¸ñÂ÷

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 2015À» ±âÁØÀ¸·Î ÇÏ°Ú´Ù.

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

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

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

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

ÇÁ·ÎÁ§Æ® À̸§Àº ¡°XDL_MilmapView2¡±·Î ÇÑ´Ù.

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

 

 

2.2.1     (1) ¿¡ ¸Þ´º¸¦ »ý¼ºÇÑ´Ù. MainWindow.xaml â¿¡¼­ ±âº»À¸·Î »ý¼ºµÈ Grid ·¹À̾ƿô¿¡ Grid.RowDefinitionÀ» ÀÌ¿ëÇÏ¿© µÎ °³ÀÇ RowÀ» »ý¼ºÇÑ´Ù. ù ¹ø° Row¿¡´Â ¸Þ´º¸¦ »ý¼ºÇÏ´Â ÀÛ¾÷À» ÇÒ °ÍÀÌ´Ù. µÎ ¹ø° Row¿¡´Â NXMilmapView ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÒ °ÍÀÌ´Ù.

¸Þ´º¸¦ »ý¼ºÇϱâ À§Çؼ­ ÀÌ¿¡ ´ëÇÑ Nameµµ ¼³Á¤ÇÑ´Ù. ¿¹Á¦ÀÇ ¸Þ´º ±¸¼ºÀº ¾Æ·¡¿Í °°´Ù.

 

 

Control Type

Header

Name

MenuItem

Measurement

 

MenuItem

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

MeasureLineMenuItem

MenuItem

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

MeasurePolyLineMenuItem

MenuItem

¸éÀû ÃøÁ¤

MeasureAreaMenuItem

MenuItem

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

MeasureAngleMenuItem

MenuItem

¿øÇü ÃøÁ¤

MeasureCircleMenuItem

 

 

Control Type

Header

Name

MenuItem

»ç¿ëÀÚ Á¤ÀÇ

 

MenuItem

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

UserDefinedMeasureMenuItem

 

2.2.2     (2)¿¡´Â NXMilmapView ÄÁÆ®·Ñ¸¦ Ãß°¡ÇÏ°í À̸§Àº nxMilmapView1À¸·Î ÇÑ´Ù.

2.2.3     À̾ NXMilmapViewÀ§¿¡ NXMilmapLayer¸¦ Ãß°¡ÇÏ°í À̸§Àº nxMilmapLayer1 À̶ó°í ¸í¸íÇÑ´Ù.

NXMilmapLayer´Â MilmapView¿¡ Ãß°¡µÇ¾î XDL ¿£Áø¿¡¼­ ¹ß»ýÇÏ´Â À̺¥Æ®¸¦ ¿ÜºÎ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ó¸®ÇÒ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

 

<Grid Grid.Row="1">
       <WindowsFormsHost>
             <nxMilmap:NXMilmapView x:Name="nxMilmapView1">
                   <nxMilmap:NXMilmapView.Controls>
                     <nxMilmap:NXMilmapLayer x:Name="nxMilmapLayer1">
                   </nxMilmap:NXMilmapView.Controls>
             </nxMilmap:NXMilmapView>
        </WindowsFormsHost>
</Grid>

 

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

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

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

 

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

namespace XDL_MilmapView2
{
     public partial class MainWindow : Window  
     {
        public MainWindow()
        {
            InitializeComponent();
        }

         private void Window_Loaded(object sender, RoutedEventArgs 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 °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.

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

 

2.3.2     [Measurement/»ç¿ëÀÚ Á¤ÀÇ]-[°Å¸® ¹× °¢µµ ÃøÁ¤] ¸Þ´º¸¦ ¼±ÅÃÇÑ ÈÄ ´õºí Ŭ¸¯ÇÑ´Ù.

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

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

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

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

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

 

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

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

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

private void MeasureAngleMenuItem_Click(object sender, RoutedEventArgs e)
{
   nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.AngleMeasurer;
}
    
private void MeasureCircleMenuItem_Click(object sender, RoutedEventArgs e)
{
   nxMilmapView1.ToolboxMode = NXMilmapView.eToolboxMode.CircleMeasurer;
}

 

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

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

 

public partial class MainWindow : Window
{
    bool userMeasure = false;
    int countPos = 0;
    XVertex2d posAngle0, posAngle1, posAngle2;    // index 0 : start, index 1 : center, index 2 : end

public MainWindow()
    {
        InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs 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 UserDefinedMeasureMenuItem_Click(object sender, RoutedEventArgs 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 2015 Ãâ·Ââ¿¡ Ãâ·ÂÇϵµ·Ï ÇÑ´Ù. ¶ÇÇÑ 2Á¡ ÀÌ»óÀÎ °æ¿ì È­¸é¿¡ ºÓÀº ¼±À¸·Î µµ½ÃÇÑ´Ù. ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.


private bool nxMilmapLayer1_OnWndProc(object sender, NXMilmapDrawArgs e, ref System.Windows.Forms.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 2015ÀÇ Ãâ·Ââ¿¡ ÃøÁ¤°á°ú°¡ ³ªÅ¸³­´Ù.

 

 

 

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