WPF - XDL Tutorial

XDL MapView È°¿ë ù¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

 

NXMapView¸¦ È°¿ëÇÏ¿© À§¼º¿µ»ó »ùÇÃÀÇ Æ¯Á¤ ¹êµå¸¦ ¼±ÅÃÇØ

RGB³ª Gray·Î µµ½ÃÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¼³¸íÇÕ´Ï´Ù.

 

 

2019. 04.

  

 

 

¸ñÂ÷

 

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

1.1    XDL ¿£Áø... 4

1.2    NXMapView»ç¿ëÀ» À§ÇÑ °³¹ß ȯ°æ ¼³Á¤... 4

1.3    ¸Þ´º »ý¼ºÇϱâ... 9

1.4    NXMapViewÄÁÆ®·Ñ ¿Ã¸®±â... 9

1.5    NXMapViewÀ̹ÌÁö ÆÄÀÏ µµ½ÃÇϱâ... 13

 

 

 


 1      »ç¿ë Çϱâ

1.1    XDL ¿£Áø

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

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

 

1.2    NXMapView»ç¿ëÀ» À§ÇÑ °³¹ß ȯ°æ ¼³Á¤

1.2.1           Visual Studio 2015À» ½ÇÇàÇÑ´Ù.

1.2.2           ¸Þ´º [ÆÄÀÏ]-[»õ·Î ¸¸µé±â]-[ÇÁ·ÎÁ§Æ®]¸¦ ¼±ÅÃÇÑ´Ù.

 

 

1.2.3            [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚ¿¡¼­ ¿ÞÂÊÀÇ ÅÛÇø´ â¿¡¼­ ¡°Visual C#¡±À» ¼±ÅÃÇÏ°í, ´ëÈ­»óÀÚ Áß°£ÀÇ ¸ñ·Ï¿¡¼­ ¡°WPF ÀÀ¿ë ÇÁ·Î±×·¥¡±À» ¼±ÅÃÇÑ´Ù.

»ç¿ëÀÚ°¡ ¿øÇÏ´Â °æ·Î¸¦ ¼±ÅÃÇÑ ´ÙÀ½ ÇÁ·ÎÁ§Æ® À̸§À» ¡°XDL_MapView1¡± À¸·Î ÀÔ·ÂÇÏ°í [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù. ÀÌ ¹®¼­¿¡¼­´Â ´ëÈ­»óÀÚ ¿À¸¥ÂÊ ¾Æ·¡¿¡ ÀÖ´Â ¡°¼Ö·ç¼Ç¿ë µð·ºÅ͸® ¸¸µé±â¡±´Â ¼±ÅÃÇÏÁö ¾Ê°Ú´Ù. ¡°È®ÀΡ± ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ±âº»ÀûÀ¸·Î »ý¼ºµÇ°í È­¸é¿¡ WindowÀ» µðÀÚÀÎÇÒ ¼ö ÀÖ´Â È­¸éÀÌ ¶á´Ù. ¸¸¾à ¾Æ·¡¿Í °°Àº Window âÀÌ »ý¼ºµÇÁö ¾ÊÀ¸¸é, [¼Ö·ç¼Ç Ž»ö±â] â¿¡¼­ MainWindow.xaml¡±¸¦ ¸¶¿ì½º ´õºíŬ¸¯À» ÇÏ¿© âÀ» ¿¬´Ù.

 

 

1.2.4           ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]ÀÇ ¿À¸¥ÂÊ ¸¶¿ì½º Ŭ¸¯À» ÅëÇØ [ÂüÁ¶Ãß°¡]¸¦ ¼±ÅÃÇÑ´Ù.

 

 

1.2.5           [ã¾Æº¸±â]ÅÇÀ¸·Î À̵¿ÇÑ ÈÄ ¡°C:\Pixoneer\XDL1.2\bin\¡±°æ·Î·Î À̵¿ÇÑ´Ù. CtrlÅ°¸¦ ´©¸¥ ä ¿¬¼ÓÀ¸·Î ¡°NXDL.dll¡±, ¡°NXDLcc.dll¡±, ¡°NXDLgr.dll¡±, ¡°NXDLio.dll¡±, ¡°NXDLrs.dll¡±, ¡°NXMap.dll¡±À» ¼±ÅÃÇÑ ÈÄ ¡°È®ÀΡ±¹öÆ°À» ¼±ÅÃÇÑ´Ù.

 

1.2.6            ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]Ç׿¡ NXDL, NXDLcc, NXDLgr, NXDLio, NXDLrs, NXMapÀÌ Ãß°¡µÇ¾úÀ½À» È®ÀÎÇÑ´Ù.

 

 1.2.7           MapView ¸¦ È°¿ëÇϱâ À§ÇØ MainWindow.xaml â¿¡¼­ namespace¸¦ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù.

 

1.3    ¸Þ´º »ý¼ºÇϱâ

1.3.1           MainWindow.xamlâ¿¡¼­ ±âº»À¸·Î »ý¼ºµÈ Grid ·¹À̾ƿô¿¡ Grid.RowDefinitionÀ» ÀÌ¿ëÇÏ¿© µÎ °³ÀÇ RowÀ» »ý¼ºÇÑ´Ù.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
</Grid>

 

1.3.2           µµ±¸»óÀÚ¿¡¼­ Menu ÄÁÆ®·ÑÀ» ²ø¾î´Ù°¡ ù ¹ø° Cell¿¡ ¹èÄ¡ÇÏ°í ¿À¸¥ÂÊ ¹öÆ°À» Ŭ¸¯ÇÏ¿© MenuItem Ç׸ñÀ» Ãß°¡ÇÑ´Ù. [¼Ó¼º]â¿¡¼­ Header¿¡ ¡°_File¡±À» ÀÔ·ÂÇÏ¿© ¸Þ´º¸¦ »ý¼ºÇÑ´Ù.

 

À§ÀÇ ±×¸²°ú °°ÀÌ µµ±¸ »óÀÚ¿¡¼­ Menu ÄÁÆ®·ÑÀ» Windowâ¿¡ ¹èÄ¡ÇÑ´Ù.

 

Menu°¡ Window¿¡ ¹èÄ¡µÈ °ÍÀ» È®ÀÎÇÏ°í Menu¸¦ ¿À¸¥ÂÊ ¹öÆ°À» ´­·¯ MenuItemÀ» Ãß°¡ÇÑ´Ù.

 

 

»ó´Ü ¸Þ´º¿¡¼­ [º¸±â] –[¼Ó¼º â]À» ´­·¯ ¡°¼Ó¼º ⡱À¸·Î À̵¿ÇÑ ´ÙÀ½ Header¿¡ ¡°_File¡±À» ÀÔ·ÂÇÑ´Ù.

¾Æ·¡¿Í °°Àº ¸Þ´º°¡ »ý¼ºµÆÀ½À» È®ÀÎÇÑ´Ù.

 

 

´ÙÀ½À¸·Î [File]À» ¿À¸¥ÂÊ ¹öÆ°À» Ŭ¸¯ÇÏ°í MenuItemÀ» Ãß°¡ÇÑ´Ù. [File] ÇϺο¡ MenuItemÀÌ »ý¼ºµÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. »ý¼ºµÈMenuItemÀÇ [¼Ó¼º]â¿¡ HeaderÀ» ¡°_Open¡±À¸·Î ÀÔ·ÂÇÏ°í À̸§Àº ¡°openFileMenuItem¡±À¸·Î Á¤ÀÇÇÑ´Ù. ´ÙÀ½°ú °°Àº WindowâÀÌ »ý¼ºµÈ´Ù.

 

 

 

XAML ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ »ý¼ºµÊÀ» ¾Ë ¼ö ÀÖ´Ù.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

      <Menu Grid.Row="0">
         <MenuItem Header="_File" Margin="5,5,0,0">
         <MenuItem x:Name="openFileMenuItem" Header="_Open"/>
         </MenuItem>
      </Menu>
</Grid>

 

1.4    NXMapViewÄÁÆ®·Ñ Ãß°¡Çϱâ

1.4.1           µÎ ¹ø° Cell¿¡ Grid¸¦ ¹èÄ¡ÇÑ´Ù. WindowsFormsHost ÄÁÆ®·ÑÀ» µµ±¸»óÀڷκÎÅÍ ²ø¾î¼­ »ý¼ºÇϰųª XAML â¿¡ ÀÔ·ÂÇÏ¿© »ý¼ºÇÑ´Ù. ÀÌ´Â Window forms¸¦ Hosting ÇØÁÖ´Â °³Ã¼À̸ç Window Forms ControlÀ» »ç¿ëÇÒ ¶§ ÀÌ¿ëµÈ´Ù. (WindowFormIntegration¿Í System.Window.FormsÀ» ¾î¼Àºí¸®¿¡ ´ëÇÑ ÂüÁ¶ Ãß°¡¸¦ ÇÑ´Ù.)

 

»¡°£»ö ¿øÀ» Ŭ¸¯ÇÑ »óÅ·ΠWindowFormsHostâÀÇ Å©±â¸¦ º¯È­½ÃÄÑ µÎ ¹ø° Row Gridâ¿¡ ¸Â°Ô Á¶Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº Window âÀ» ¾òÀ» ¼ö ÀÖ´Ù.

 

 

1.4.2           ¾Õ¼­ Ãß°¡ÇÑ namespaceÀÎ nxMap¸¦ ÀÌ¿ëÇÏ¿© NXMapViewÄÁÆ®·ÑÀ» ºÒ·¯¿Â´Ù. ÀÌ NXMapViewÀÇ À̸§(Name)Àº nxMapView1À¸·Î ÇÑ´Ù.

NXMapView´Â ´Ù¾çÇÑ NXMapLayerXXXXXµéÀ» ´ãÀ»¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù. Áï, NXMapView´Â ´Ù¾çÇÑ °èÃþÀÇ ·¹À̾î·Î ±¸¼ºÇÏ¿© ¿µ»óµµ½Ã¿¡ ´ëÇÑ ´Ù¾çÇÑ ±â´ÉÀ» ±¸ÇöÀÌ °¡´ÉÇÏ´Ù.

<Grid Grid.Row="1">
       <WindowsFormsHost  Margin="3,0,0,3">
           <nxMap:NXMapView x:Name="nxMapView1">
                  
</nxMap:NXMapView>
       </WindowsFormsHost>
</Grid>

 

1.4.3           ´ÙÀ½À¸·Î NXMapViewÄÁÆ®·Ñ À§¿¡ NXMapLayerComposite ÄÁÆ®·ÑÀ» ÀÔ·ÂÇÑ´Ù. ÀÌ NXMapLayerCompositeÀÇ À̸§(Name)Àº nxMapLayerComposites1À̶ó°í ÇÑ´Ù.

NXMapLayerCompositesÀº ¿µ»óÀÇ ¹êµåµéÀ» ÇÕ¼º½ÃÄѼ­ È­¸é¿¡ µµ½ÃÇÏ´Â ±â´ÉÀ» ¼öÇàÇÏ´Â ÄÁÆ®·ÑÀÌ´Ù.

 

 

<Grid Grid.Row="1">
        <WindowsFormsHost  Margin="3,0,0,3">
            <nxMap:NXMapView x:Name="nxMapView1">
             <nxMap:NXMapView.Controls>
        <nxMap:NXMapLayerComposites x:Name="nxMapLayerComposites1"/>
             </nxMap:NXMapView.Controls>
            </nxMap:NXMapView>
        </WindowsFormsHost>
</Grid>

 

1.4.4            [F5]Å°º¸µå¸¦ ´­·¯ ½ÇÇàÇØ º»´Ù. ´ÙÀ½°ú °°ÀÌ °ËÁ¤»ö È­¸éÀÌ ³ª¿Â´Ù.

 

 

1.5    NXMapViewÀ̹ÌÁö ÆÄÀÏ µµ½ÃÇϱâ

1.5.1           [Open]ÀÇ MenuItemÀÇ ¼Ó¼º¿¡¼­ Click À̺¥Æ® Ä­À» ´õºí Ŭ¸¯ÇÏ¿© Click¿¡ ´ëÇÑ ÀÚµ¿ÇÔ¼ö¸¦ »ý¼ºÇÑ´Ù.

 

1.5.2           MainWindow.xaml.cs¿¡¼­ »ç¿ëÇÒ ³×ÀÓ½ºÆäÀ̽º¸¦ Ãß°¡ÇÑ´Ù.

using Pixoneer.NXDL;       // ±âÁ¸ ÇÔ¼ö °ü·Ã ±â´É
using Pixoneer.NXDL.NCC;   // ÁÂÇ¥ ½Ã½ºÅÛ °ü·Ã±â´É
using Pixoneer.NXDL.NIO;   // ÆÄÀÏ ÀÔÃâ·Â °ü·Ã±â´É
using Pixoneer.NXDL.NRS;   // Remote Secsing °ü·Ã±â´É
using Pixoneer.NXDL.NGR;   // Graphic °ü·Ã ±â´É
using Pixoneer.NXDL.NXMap; // MapView °ü·Ã ±â´É

 

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

¾Æ·¡¿Í °°ÀÌ NXMapView°ü·Ã ±â´ÉÇØÁ¦¸¦ À§Çؼ­ Äڵ带 Ãß°¡ÇÑ´Ù.

private void Window_Closed(object sender, EventArgs e)
{
        Xfn.Close();
}

 

1.5.4           ¿µ»ó ÀÔÃâ·ÂÀ» ´ã´çÇÒ XRasterIO°´Ã¼¸¦ ¼±¾ðÇÏ°í Window»ý¼ºÀÚ¿¡¼­ °´Ã¼¸¦ »ý¼ºÇÏ°í ÃʱâÈ­¸¦ ¼öÇàÇÑ´Ù.

public partial class MainWindow : Window
{
    public XRasterIO m_RasterIO; // ¿µ»óÀÇ ÀÔÃâ·ÂÀ» ´ã´çÇÒ °´Ã¼ ¼±¾ð
        
    public MainWindow()
    {
       InitializeComponent();

       String StrError;
       m_RasterIO = new XRasterIO();  // °´Ã¼ »ý¼º
       if(m_RasterIO.Initialize(out StrError) == false) // ¿µ»ó ÀÔÃâ·Â °´Ã¼ ÃʱâÈ­
       {
           MessageBox.Show(StrError);
       }

       nxMapLayerComposites1.LayerVisible = true;//¿µ»ó ·¹À̾ º¸À̵µ·Ï ¼Ó¼ºÀ» º¯°æ
   }
}

 

1.5.5           ÇÔ¼ö ¾È¿¡ ÆÄÀÏÀ» ¿­¾î µµ½ÃÇÒ Äڵ带 ÀÔ·ÂÇÑ´Ù

private void openFileMenuItem_Click(object sender, RoutedEventArgs e)
{
   // 1. ÆÄÀÏ OpenÀ» ¼öÁ¤ÇÑ´Ù.
   OpenFileDialog openFileDialog = new OpenFileDialog();
   openFileDialog.Filter = "XDM file(*.xdm)|*.XDM||";
   openFileDialog.RestoreDirectory = true;

   Nullable<bool> result = openFileDialog.ShowDialog();       
   if (result != true) return;
            
   string strFilePath = openFileDialog.FileName;

   // 2. FileDriverManger¸¦ ÅëÇØ XRSLoadFileÀ» »ý¼ºÇÑ´Ù.
   string strError;
   XRSLoadFile xrsFileInput = m_RasterIO.LoadFile(strFilePath, out strError,
false, eIOCreateXLDMode.All_NoMsg);
    
if (xrsFileInput == null) return;

   // 3. ±âÁ¸¿¡ »ý¼ºµÇ¾î ÀÖ´Â Composite°¡ ÀÖ´Ù¸é LockÀ» °É¾î µµ½Ã ¼öÇàÀ» Àá½Ã ¸ØÃá´Ù.
   nxMapLayerComposites1.Lock();

// 4. nxMapLayerComposites1°³Ã¼¿¡ Á¸ÀçÇÏ´Â XDMCompManager¸¦ ²¨³½´Ù.
// XDMCompManager°¡ ½ÇÁ¦·Î CompositeµéÀÇ °ü¸®¸¦ ¼öÇàÇÑ´Ù.
   XDMCompManager xdmCompManager = nxMapLayerComposites1.GetXDMCompManager();

   // 5. ±âÁ¸¿¡ Composite°¡ Á¸ÀçÇÑ´Ù¸é ¸ðµÎ »èÁ¦ÇÑ´Ù.
   for (int i = 0; i < xdmCompManager.NumComp; i++)
   {
      XDMComposite comp = xdmCompManager.GetXDMCompositeAt(i);
      comp.Dispose();
   }
   xdmCompManager.RemoveXDMCompositeAll();

   // 6. XDMComposite¸¦ »ý¼ºÇÑ´Ù.
     XDMComposite newComp = new XDMComposite();

   // 7. ·ÎµùµÈ ÆÄÀϷκÎÅÍ ¹êµåÀÇ °³¼ö¸¦ Ä®¶ó·Î ±×¸± °ÍÀÎÁö Èæ¹éÀ¸·Î 
// ±×¸± °ÍÀÎÁö¸¦ ÆÇ´ÜÇÑ´Ù.
   // ¸¸¾à 3°³ ¹Ì¸¸ÀÎ °æ¿ì´Â Gray¸ðµå·Î ±×¸®°í, 3°³ ÀÌ»óÀÎ °æ¿ì´Â Ä®¶ó·Î ±×¸°´Ù.
   int nNumBand = xrsFileInput.NumBand;
   if (nNumBand < 3)
   {
     // Default·Î 0¹ø° ¹êµå¸¦ Gray¸ðµå·Î ±×¸°´Ù. 
     XDMBand band = xrsFileInput.GetBandAt(0);

     // ¹êµå À̸§À» ±×´ë·Î CompositeÀ̸§À¸·Î ¼³Á¤
     newComp.Name = band.BandName;

     // Gray Mode·Î ±×¸®´Â °ÍÀ» ¼³Á¤
     newComp.Mode = eCompMode.Gray;

     // CompositeÀÇ 0¹ø¿¡ Band¼³Á¤, Gray¸ðµå¿¡¼­´Â 0¹ø ¹êµå¸¸À» ÀνÄÇÑ´Ù. 
     newComp.SetBand(ref band, 0);
     // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀÇ ¹üÀ§ ¼³Á¤(Á¤±ÔºÐÆ÷ 95% ¿µ¿ª)
     newComp.SetCutType(eCompCutType.Ct95, 0);
     // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀû¿ë½Ã Àüü ¿µ¿ª¿¡ ´ëÇÑ  
// Histogram(Band)¼³Á¤, VisibleÀº ÇöÀç ¿µ¿ª
     newComp.SetStretchCoverage(eCompStretchCoverage.Band, 0);
     // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀÇ StretchÇüÅ ¼³Á¤(GaussianÀ¸·Î ¼³Á¤)
     newComp.SetStretchType(eCompStretchType.Gaussian, 0);
      
}

   else // 3°³ ÀÌ»óÀÇ ¹êµå¸¦ °¡Áö°í ÀÖ´Â °æ¿ì
   {
      XDMBand band1 = xrsFileInput.GetBandAt(0);
      XDMBand band2 = xrsFileInput.GetBandAt(1);
      XDMBand band3 = xrsFileInput.GetBandAt(2);
      newComp.Name = xrsFileInput.FileName; //ÆÄÀÏ À̸§À» Composite À̸§À¸·Î ¼³Á¤

      newComp.Mode = eCompMode.RGB;  // RGB Mode·Î ±×¸®´Â °ÍÀ» ¼³Á¤
      newComp.SetBand(ref band3, 0); // CompositeÀÇ 0¹ø¿¡ Band¼³Á¤, Blue Channel ¼³Á¤
      newComp.SetBand(ref band2, 1);// CompositeÀÇ 1¹ø¿¡ Band¼³Á¤, Green Channel ¼³Á¤
      newComp.SetBand(ref band1, 2); // CompositeÀÇ 2¹ø¿¡ Band¼³Á¤, Red Channel ¼³Á¤

      for (int i = 0; i < 3; i++)
      {
         // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀÇ ¹üÀ§ ¼³Á¤(Á¤±ÔºÐÆ÷ 95% ¿µ¿ª)
         newComp.SetCutType(eCompCutType.Ct95, i);
         // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀû¿ë ½Ã Àüü ¿µ¿ª¿¡ ´ëÇÑ
// Histogram(Band)¼³Á¤, VisibleÀº ÇöÀç ¿µ¿ª
         newComp.SetStretchCoverage(eCompStretchCoverage.Band, i);
         // ¿µ»ó Enhancemnet¸¦ À§ÇØ HistogramÀÇ StretchÇüÅ ¼³Á¤(GaussianÀ¸·Î ¼³Á¤)
         newComp.SetStretchType(eCompStretchType.Gaussian, i);
      }
   }
   // 8. »ý¼ºµÈ Composite¸¦ XDMCompManager°´Ã¼¿¡ Ãß°¡ÇÑ´Ù.
   xdmCompManager.AddXDMComposite(ref newComp);

   // 9. Àüü È­¸é º¸±â¸¦ ¼³Á¤ÇÑ´Ù.
   nxMapLayerComposites1.ZoomFit();

   // 10. È­¸é ¾÷µ¥ÀÌÆ®¸¦ ¼öÇàÇÑ´Ù.
   nxMapLayerComposites1.Invalidate();

   // 11. ¼³Á¤µÈ Lock¸¦ ÇØÁ¦ÇÑ´Ù.
   nxMapLayerComposites1.UnLock();            
}

 

1.5.6           [F5]¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù.

 

 

1.5.7           [File]-[Open]À» ´­·¯ ¿µ»óÀ» ¼±ÅÃÇÑ´Ù. ȨÆäÀÌÁö¿¡¼­ »ùÇÿµ»óÀ» ´Ù¿î ¹Þ´Â´Ù. ´Ù¿î·Îµå ¹ÞÀº ¡°etm.xdm¡±À» ¼±ÅÃÇÑ´Ù.

 

 

1.5.8           [File]-[Open]À» ´­·¯ ¿µ»óÀ» ¼±ÅÃÇÑ´Ù. ´Ù¿î·Îµå ¹ÞÀº ¡°dem.xdm¡±À» ¼±ÅÃÇÑ´Ù.