XDL Manual

Áö±¸ Ÿ¿øü »óÀÇ ÁÂÇ¥ ¹× °Å¸® °è»ê

(piXoneer XDL Tutorial)

 

 

 

 

 

.

 ±¸ Ÿ¿øü »ó¿¡¼­ ƯÁ¤ ÁöÁ¡°£ÀÇ °ü°è¸¦ ÀÌ¿ëÇÏ¿© °Å¸®³ª ¹æÇâÀ» ±¸ÇÏ°í

 ECEFÁÂÇ¥°è·ÎºÎÅÍ GeodeticÁÂÇ¥°è·ÎÀÇ º¯È¯ µî¿¡ ´ëÇؼ­ ¼³¸íÇÕ´Ï´Ù.

 

 

2017. 01.

¼öÁ¤ 2019. 02.

 

 

 

 

¸ñÂ÷

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

1.1    XDL ¿£Áø... 1

1.2    XDLÀÇ µ¥ÀÌÅͱ¸Á¶¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â... 1

1.3    Áö±¸»óÀÇ Æ¯Á¤ À§Ä¡(Reference Position)·ÎºÎÅÍ ¹æÀ§°¢(Azimuth Angle)°ú °Å¸®(Distance)¿¡ ÇØ´çÇÏ´Â À§Ä¡(Target Position) ±¸Çϱ⠿¹Á¦... 1

1.4    Áö±¸»óÀÇ Æ¯Á¡ ÇÑ À§Ä¡(Reference Position)¿Í ´Ù¸¥ Àå¼ÒÀÇ ÇÑ À§Ä¡(Target Position)·ÎºÎÅÍ ¹æÀ§°¢µµ¿Í °Å¸® ±¸ÇÏ´Â ¿¹Á¦... 1

1.5    Geographic ÁÂÇ¥°è·ÎºÎÅÍ ECEFÁÂÇ¥°è·ÎÀÇ º¯È¯ ¿¹Á¦... 1

1.6    ECEFÁÂÇ¥°è·ÎºÎÅÍ GeographicÁÂÇ¥°è·ÎÀÇ º¯È¯ ¿¹Á¦... 1

 

 


 

1      »ç¿ë Çϱâ

1.1    XDL ¿£Áø

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

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

 

1.2    XDLÀÇ µ¥ÀÌÅͱ¸Á¶¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â

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

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

 

 

1.2.3         [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚ¿¡¼­ ¿ÞÂÊÀÇ ÅÛÇø´ â¿¡¼­ ¡°Visual C#¡±À» ¼±ÅÃÇÏ°í, ´ëÈ­»óÀÚ Áß°£ÀÇ ¸ñ·Ï¿¡¼­ ¡°Windows Forms ÀÀ¿ë ÇÁ·Î±×·¥¡±À» ¼±ÅÃÇÑ´Ù. ÇÁ·ÎÁ§Æ®ÀÇ À̸§À» »ç¿ëÀÚ°¡ ¿øÇÏ´Â °æ·Î·Î À̵¿ÇÑ ´ÙÀ½ ¡°XDL_GeoPosition¡± ÀÔ·ÂÇÏ°í [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

 

ÇÁ·ÎÁ§Æ® À̸§Àº Visual Studio°¡ »ý¼ºÇÏ´Â À̸§À¸·Î ±âº»À¸·Î ÇÏ°Ú´Ù. ÀÌ ¹®¼­¿¡¼­´Â ´ëÈ­»óÀÚ ¿À¸¥ÂÊ ¾Æ·¡¿¡ ÀÖ´Â ¡°¼Ö·ç¼Ç¿ë µð·ºÅ͸® ¸¸µé±â¡±´Â ¼±ÅÃÇÏÁö ¾Ê°Ú´Ù.

¡°È®ÀΡ± ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ±âº»ÀûÀ¸·Î »ý¼ºµÇ°í, È­¸é¿¡ FormÀ» µðÀÚÀÎÇÒ ¼ö ÀÖ´Â È­¸éÀÌ ¶á´Ù. ¸¸¾à ¾Æ·¡¿Í °°ÀÌ Form µðÀÚÀÎÈ­¸éÀÌ »ý¼ºµÇÁö ¾ÊÀ¸¸é, [¼Ö·ç¼Ç Ž»ö±â] â¿¡¼­ ¡°Form1.cs¡±¸¦ ¸¶¿ì½º ´õºíŬ¸¯À» ÇÏ¿© µðÀÚÀÎÈ­¸éÀ» ¿¬´Ù.

 

 

1.2.4         ÂüÁ¶¸¦ ÅëÇØ NXDL.dll Ç׸ñÀ» Ãß°¡ÇÑ´Ù.

¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ¾Æ·¡¿¡ ÀÖ´Â ÂüÁ¶ ¾ÆÀÌÅÛÀÇ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» Ŭ¸¯ÇÏ¿© »ý¼ºµÇ´Â Æ˾÷¸Þ´º¿¡¼­ ¡°ÂüÁ¶Ãß°¡¡± ¸Þ´º¸¦ ¼±ÅÃÇÑ´Ù.

 

 

¸Þ´º¸¦ ¼±ÅÃÇÏ¸é ¾Æ·¡¿Í °°ÀÌ [ÂüÁ¶Ãß°¡] ´ëÈ­»óÀÚ°¡ ³ªÅ¸³ª¸ç, ´ëÈ­»óÀÚ ¾Æ·¡ÂÊ¿¡ ÀÖ´Â ¡°Ã£¾Æº¸±â¡± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

 

¿­±â ´ëÈ­»óÀÚ¿¡¼­ ¡°C:\Pixoneer\XDL1.2\bin\NXDL.dll¡± ÆÄÀÏÀ» ¼±ÅÃÇÑ ÈÄ ¡°¿­±â¡±¸¦ Ŭ¸¯ÇÏ°í, [ÂüÁ¶ Ãß°¡] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù. [ÂüÁ¶] ¿¡ ¡°NXDL¡±°¡ Ãß°¡µÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

 

1.2.5         ÇÁ·Î±×·¥ Á¾·á ½Ã ¸Þ¸ð¸®¸¦ ÇØÁ¦¸¦ À§ÇÑ Äڵ带 FormÀÌ ´ÝÈ÷´Â À̺¥Æ®¿¡ Ãß°¡ÇÑ´Ù.

Form1ÀÇ µðÀÚÀÎ È­¸é¿¡¼­ FormÀ» ¼±ÅÃÇÑ ÈÄ [¼Ó¼º] â(Visual Studio ¸Þ´º [º¸±â]-[´Ù¸¥ â]-[¼Ó¼º â]À» ¼±ÅÃÇÏ¸é µÈ´Ù.)¿¡¼­ ¡°À̺¥Æ®¡± ¸Þ´º¸¦ Ŭ¸¯ÇÏ°í À̺¥Æ® ¸ñ·Ï Áß ¡°FormClosed¡±¸¦ ¼±ÅÃÇÑ µÚ ¸¶¿ì½º ´õºíŬ¸¯À» ÇÏ¿© ÇØ´çÀ̺¥Æ®¸¦ Ãß°¡ÇÑ´Ù.

 

 

¾Æ·¡ÀÇ ±½Àº ±Û¾¾Ã³·³ Form1_FormClosed ÇÔ¼ö¿¡ Äڵ带 Ãß°¡ÇÑ´Ù.

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

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
Pixoneer.NXDL.Xfn.Close();	//ÄÚµå Ãß°¡
        }
    }
}

 

1.2.6         ´ÙÀ½°ú °°ÀÌ NXDL¿¡ ´ëÇÏ¿© ÂüÁ¶¸¦ ¼³Á¤ÇÑ´Ù.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Pixoneer.NXDL; // Ãß°¡

 

1.2.7         ´ÙÀ½°ú °°ÀÌ Form¿¡ ¹öÆ°À» ¿Ã·Á µðÀÚÀÎÇÑ´Ù.

 

 


1.3    Áö±¸»óÀÇ Æ¯Á¤ À§Ä¡(Reference Position)·ÎºÎÅÍ ¹æÀ§°¢(Azimuth Angle)°ú °Å¸®(Distance)¿¡ ÇØ´çÇÏ´Â À§Ä¡(Target Position) ±¸Çϱ⠿¹Á¦

¿©±â¿¡¼­ °Å¸®´Â Æò¸é»óÀÇ °Å¸®°¡ ¾Æ´Ï°í Áö±¸ °î·üÀ» °í·ÁÇÑ °Å¸®¸¦ ÀǹÌÇÑ´Ù.

 

 

1.3.1         Calc Position By Bearing And Distance¹öÆ°À» ´õºí Ŭ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿»ý¼ºÇÑ´Ù.

private void CalcPositionByBearingAndDistance_Click(object sender, EventArgs e)
{
}

 

1.3.2         CalcPositionByBearingAndDistance_Click ÇÔ¼ö¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÔ·ÂÇÑ´Ù. ¾Æ·¡ ¿¹Á¦´Â ÀÓÀÇÀÇ ±âÁØÁ¡(¿¹¸¦ µé¾î ÇöÀç ÀÚ½ÅÀÇ À§Ä¡)·ÎºÎÅÍ ¹æÀ§°¢°ú ƯÁ¤ °Å¸®»ó¿¡ ÀÖ´Â ÁÂÇ¥°ªÀ» °è»êÇÑ´Ù.

private void CalcPositionByBearingAndDistance_Click(object sender, EventArgs e)
{
     // Áö±¸ÀÇ Æ¯Á¤ ±âÁØÁ¡À¸·ÎºÎÅÍ ºÏÂÊÀ¸·ÎºÎÅÍ ½Ã°è¹æÇâÀÇ ¹æÀ§°¢°ú ÀÓÀÇÀÇ °Å¸®¿¡ ÇØ´çÇÏ´Â 
// ÁöÁ¡À» °è»ê.

     // 1. ±âÁØÁ¡ ¼³Á¤
     XAngle lon1 = XAngle.FromDegree(127);
     XAngle lat1 = XAngle.FromDegree(36);

    // 2. ºÏÂÊÀ¸·ÎºÎÅÍ ¹æÀ§°¢ ¼³Á¤
     XAngle bearing = XAngle.FromDegree(45);

     // 3. °Å¸® ¼³Á¤(unit : meter)
     double dist = 10000;

     // 4. °á°ú°ª¿¡ ÇØ´çÇÏ´Â À§°æµµ°ªÀ» ¾òÀ» XAngle»ý¼º
     XAngle lon2 = new XAngle();
     XAngle lat2 = new XAngle();

     // 5. CalcPosByBearingAndDistÇÔ¼ö¸¦ ÅëÇØ ÁöÁ¡ °è»ê
     XAngle ang = Xfn.CalcPosByBearingAndDist(lon1, lat1, bearing, dist, 
ref lon2, ref lat2);

     Console.WriteLine("Position : " + lon2.deg.ToString() + " " + 
lat2.deg.ToString());
     Console.WriteLine("Return Angle : " + ang.deg.ToString());
}

1.3.3         ÄÄÆÄÀÏÇÏ°í ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿© Calc Position By Bearing And Distance¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

1.3.4         Ãâ·Ââ¿¡ °ªÀÌ ÇÁ¸°Æ®µÊÀ» È®ÀÎÇÑ´Ù.

ÂüÁ¶ À§°æµµÀ§Ä¡ 127, 36ÀÎ À§Ä¡·ÎºÎÅÍ 45µµ ºÏ¹æÀ§°¢ÀÌ°í °Å¸®°¡ 10000meterÀÎ °á°ú¸¦ Ãâ·ÂÇÑ´Ù.

 

 

1.4    Áö±¸»óÀÇ Æ¯Á¡ ÇÑ À§Ä¡(Reference Position)¿Í ´Ù¸¥ Àå¼ÒÀÇ ÇÑ À§Ä¡(Target Position)·ÎºÎÅÍ ¹æÀ§°¢µµ¿Í °Å¸® ±¸ÇÏ´Â ¿¹Á¦

¿©±â¿¡¼­ °Å¸®´Â Æò¸é»óÀÇ °Å¸®°¡ ¾Æ´Ï°í Áö±¸ °î·üÀ» °í·ÁÇÑ °Å¸®¸¦ ÀǹÌÇÑ´Ù

.

 

1.4.1         CalcArcDistAndAngle_Click¹öÆ°À» ´õºí Ŭ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿»ý¼ºÇÑ´Ù.

private void CalcArcDistAndAngle_Click (object sender, EventArgs e)
{
}

 

1.4.2         CalcArcDistAndAngle_ClickÇÔ¼ö¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÔ·ÂÇÑ´Ù. ¾Æ·¡ ¿¹Á¦´Â ÀÓÀÇÀÇ 2Á¡À¸·ÎºÎÅÍ ¹æÀ§°¢°ú ƯÁ¤ °Å¸®¸¦ °è»êÇÑ´Ù.

private void CalcPositionByBearingAndDistance_Click(object sender, EventArgs e)
{
// Áö±¸ÀÇ Æ¯Á¤ µÎÁöÁ¡(±âÁØÁ¡°ú ÀÓÀÇÀÇ ÁöÁ¡)À¸·ÎºÎÅÍ ±âÁØÁ¡À¸·ÎºÎÅÍ ÀÓÀÇÀÇ ÁöÁ¡À¸·ÎÀÇ 
// ¹æÀ§°¢(Forward, Backward)°ª°ú ÁöÁ¡°£ÀÇ °Å¸®¸¦ ¾ò´Â´Ù.
      // 1. ±âÁØÁ¡ ¼³Á¤
      XAngle lon1 = XAngle.FromDegree(127);
      XAngle lat1 = XAngle.FromDegree(36);

      // 2. ÀÓÀÇÀÇ ÁöÁ¡ ¼³Á¤
      XAngle lon2 = XAngle.FromDegree(128);
      XAngle lat2 = XAngle.FromDegree(37);

      // 3. µÎ ÁöÁ¡°£ÀÇ Forward, Backward°¢µµ¸¦ ¾òÀ» °´Ã¼ »ý¼º
      XAngle fwdAz = new XAngle();
      XAngle revAz = new XAngle();

      double dist = 0;

      // 4. µÎÁöÁ¡À» ÀÔ·ÂÇÏ¿© CalArcDistAndAngleÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °Å¸®¿Í °¢µµ¸¦ ¾ò´Â´Ù.
      bool bResult = Xfn.CalArcDistAndAngle(lon1, lat1, lon2, lat2, ref dist, 
ref fwdAz, ref revAz);

      Console.WriteLine("Distance : " + dist.ToString());
      Console.WriteLine("Forward Angle : " + fwdAz.deg.ToString());
      Console.WriteLine("Backward Angle : " + revAz.deg.ToString());
}

1.4.3         ÄÄÆÄÀÏÇÏ°í ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿© Calc Arc Dist and Angle From Two Position¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

1.4.4         Ãâ·Ââ¿¡ °ªÀÌ ÇÁ¸°Æ®µÊÀ» È®ÀÎÇÑ´Ù.

ÂüÁ¶ À§Ä¡ 127, 36(°æÀ§µµ)ÀÎ À§Ä¡·ÎºÎÅÍ 128, 37(°æÀ§µµ)À§Ä¡·ÎºÎÅÍ °Å¸®°¡ 142618.087¹ÌÅÍ¿Í 28.6195662318174µµÀÎ ¹æÀ§°¢À» ¾òÀ» ¼ö ÀÖ´Ù.

 

 

1.5    Geographic ÁÂÇ¥°è·ÎºÎÅÍ ECEFÁÂÇ¥°è·ÎÀÇ º¯È¯ ¿¹Á¦

 

1.5.1         GeoToECEF_Click¹öÆ°À» ´õºíŬ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿»ý¼ºÇÑ´Ù.

private void GeoToECEF_Click (object sender, EventArgs e)
{
}

 

1.5.2         GeoToECEF_Click ÇÔ¼ö¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÔ·ÂÇÑ´Ù.

private void GeoToECEF_Click (object sender, EventArgs e)
{
// Lat/Lon(À§°æµµ)ÁÂÇ¥°è·Î ºÎÅÍ ECEFÁÂÇ¥°è·Î º¯È¯Çϱâ

        // 1. À§°æµµ ÁÂÇ¥°ªÀ» ¼³Á¤.
        XGeoPoint geo = new XGeoPoint();
        XVertex3d ecr = new XVertex3d();
        geo.lond = 127;
        geo.latd = 36;
        geo.hgt = 1200;

        // 2. ECEF°ªÀ» ¾ò´Â´Ù.
        Xfn.GeoToEcr(geo, ref ecr);

	// 3. °á°ú°ªÀ» ÇÁ¸°Æ®ÇÑ´Ù.
        Console.WriteLine("X : " + ecr.x.ToString() + "Y : " + ecr.y.ToString() 
+ "Z : " + ecr.z.ToString());
}

1.5.3         ÄÄÆÄÀÏÇÏ°í ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿© Geo To ECEF ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

1.5.4         Ãâ·Ââ¿¡ °ªÀÌ ÇÁ¸°Æ®µÊÀ» È®ÀÎÇÑ´Ù.

ÂüÁ¶ À§Ä¡ 127, 36(°æÀ§µµ)ÀÌ°í °íµµ°¡ 1200meterÀÎ À§Ä¡ÀÇ ECEF°ªÀº X : -3109559.92819602 Y : 4126525.40023087 Z : 3728897.01809016ÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

 

 

1.6    ECEFÁÂÇ¥°è·ÎºÎÅÍ GeographicÁÂÇ¥°è·ÎÀÇ º¯È¯ ¿¹Á¦

 

1.6.1         ECEFToGeo_Click¹öÆ°À» ´õºíŬ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿»ý¼ºÇÑ´Ù.

private void ECEFToGeo_Click (object sender, EventArgs e)
{
}

 

1.6.2         ECEFToGeo_Click ÇÔ¼ö¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÔ·ÂÇÑ´Ù.

private void ECEFToGeo_Click (object sender, EventArgs e)
{
// ECEFÁÂÇ¥°è·ÎºÎÅÍ Lat/Lon(À§°æµµ)ÁÂÇ¥°è·Î º¯È¯Çϱâ
        //  1. ECEF°ªÀ» ¼³Á¤
        XGeoPoint geo = new XGeoPoint();
        XVertex3d ecr = new XVertex3d();
        ecr.x = -3109559.9281960232;
        ecr.y = 4126525.4002308655;
        ecr.z = 3728897.0180901629;

        //  2. À§°æµµ°ªÀ» ¾ò´Â´Ù
        Xfn.EcrToGeo(ecr, ref geo);
}

1.6.3         ÄÄÆÄÀÏÇÏ°í ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿© ECEF To Geo¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

1.6.4         Ãâ·Ââ¿¡ °ªÀÌ ÇÁ¸°Æ®µÊÀ» È®ÀÎÇÑ´Ù.

ÂüÁ¶ À§Ä¡ ECEF°ªÀÌ X : -3109559.92819602 Y : 4126525.40023087 Z : 3728897.01809016ÀÎ Geographic ÁÂÇ¥°è °ªÀº 127, 36(°æÀ§µµ)ÀÌ°í °íµµ°¡ 1200meterÀÎ À§Ä¡ÀÇ ÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.