VWorld 배경지도를 참조로 공간 DB 편집

Mr.Tiler-Xr에서 VWorld의 배경지도를 표출하는 기능과 SHP 파일을 편집하는 기능을 조합한 가상의 활용 예를 간단히 설명해 봅니다.

Mr.Tiler-Xr은 기본적으로 새로운 SHP 파일을 원하는 스키마로 생성할 수 있습니다. 아래의 UI는 Mr.Tiler-Xr에서 제공하는 SHP 파일 생성에 대한 UI 화면입니다.

이렇게 생성된 SHP 파일을 VWorld와 함께 중첩하고, 생성된 SHP 파일을 대상으로 편집 기능을 활용해 아래의 화면처럼 도형을 속성과 함께 추가하거나 편집할 수 있습니다.

국가에서 제공하는 VWorld라는 배경지도를 활용해서, 이를 기반으로 수치지도를 생성할 수 있는 기능은 그 활용도가 매우 높다고 할 수 있습니다.

이제 이 기능을 활용해서 설비도를 그릴 준비가 되었군요. 이제 자고 내일 해야징… _ _zzZ

DuraMap-Xr에서 TMS 레이어 활용하기

C#과 같은 COM을 지원하는 언어에서 GIS 어플리케이션을 개발할 수 있는 GIS 엔진인 DuraMap-Xr에서 TMS 형식의 배경지도를 레이어로 활용할 수 있는 코드를 정리해 봅니다. VWorld에서 제공하는 배경지도를 예시로 하였습니다.

먼저 아래는 듀라맵에서 VWorld의 배경지도를 표시한 화면입니다.

위의 실행 화면에 대한 코드를 살펴보겠습니다. 먼저 TMS 레이어를 추가하는 코드입니다.

XrMapLib.ValueList URLs = new XrMapLib.ValueList();
URLs.AddValueByString(
    "http://xdworld.vworld.kr:8080/2d/Base/201512/${z}/${x}/${y}.png");

XrMapLib.Extent MaxMBR = new XrMapLib.Extent();
MaxMBR.MinX = -20037508.342789244;
MaxMBR.MinY = -20037508.342789244;
MaxMBR.MaxX = 20037508.342789244;
MaxMBR.MaxY = 20037508.342789244;

double[] upps = {
    78000, 39000, 19600, 9800, 4900, 2400, //Dummy
    1222.9924523925781, 611.4962261962891, 305.74811309814453, 
    152.87405654907226, 76.43702827453613, 38.218514137268066, 
    19.109257068634033, 9.554628534317017, 4.777314267158508, 
    2.388657133579254, 1.194328566789627, 0.5971642833948135 };

XrMapLib.ValueList UPPs = new XrMapLib.ValueList();

for (int iUPP = 0; iUPP < upps.Length; ++iUPP)
{
    double UPP = upps[iUPP];
    double MapScale = axXr1.GetMapScaleFromUPP(UPP);

    UPPs.AddValueByFloat(UPP, 14);

    if (iUPP > 5)
    {
        Scales.Add(MapScale);
    }
}

axXr1.Layers.AddTMSLayer("basemap", URLs, MaxMBR, UPPs, true);
axXr1.WaitForAllConnections();

XrMapLib.Coord MapCenter = new XrMapLib.Coord();
MapCenter.X = 14289580.202989;
MapCenter.Y = 4436964.90266281;
axXr1.MapCenter = MapCenter;
axXr1.MapScale = Scales[0];
axXr1.Update();

axXr1.MouseMode = XrMapLib.XrMapViewModeEnum.XrPanMode;

위의 코드 중 2번은 타일맵에 접근하기 위한 URL의 리스트입니다. VWorld는 TMS 이미지에 접근하기 위한 URL을 하나만 제공합니다. 5~9번 코드는 TMS의 전체 MBR 값입니다. 그리고 11번 코드에서 upps 배열에 저장된 값은 Units Per Pixel 값들로써, 1 픽셀당 몇 m인지에 대한 값입니다. 20번 코드의 반복문은 이 upps 배열을 통해 실제 지도 축척값을 계산하여 Scales라는 배열에 저장합니다. 33번 코드가서 TMS 레이어를 추가하는 코드이고, 37~40번 코드에서 첫 실행시 지도의 중심 위치와 지도 축척을 지정합니다. 앞서 UPP값을 지도 축척값으로 계산하여 Scales라는 배열에 저장한다고 하였는데, Scales 변수는 아래와 같습니다.

private List<double> Scales = new List<double>();

TMS를 통한 배경지도는 이미 정해진 축척 레벨이 존재합니다. 이 축척값으로 지도를 확대하고 축소할 경우에 가장 최상의 지도 품질을 사용자에게 제공할 수 있는데요. 듀라맵에서는 이를 위해 아래와 같은 코드가 필요합니다.

private void axXr1_OnBeforeMapDrawing(object sender, EventArgs e)
{
    double NewMapScale = axXr1.MapScale;

    int cntLevels = Scales.Count;
    double Gap = Double.MaxValue;
    int CurrentLevel = -1;
    for (int i = 0; i < cntLevels; i++)
    {
        double ThatGap = Math.Abs(NewMapScale - Scales[i]);
        if (Gap > ThatGap)
        {
            Gap = ThatGap;
            CurrentLevel = i;
        }
    }

    axXr1.MapScale = Scales[CurrentLevel];
}

위는 듀라맵의 OnBeforeMapDrawing 이벤트에 대한 코드로써, TMS에서 제공하는 가장 접합한 지도 축척값을 유지하도록 하고 있습니다. 위의 코드에 대한 Visual Studio 2013 프로젝트를 아래에 첨부합니다.

듀라맵 엔진은 제작사인 지오서비스의 자료실에서 다운로드 받으시기 바라며, 링크는 아래와 같습니다.

지오서비스 자료실

BlackPoint-Xr을 이용해 개발한 지반재해 현장관리시스템

안드로이드 기반의 모바일 GIS 엔진인 BlackPoint-Xr을 이용해 개발한 “지반재해 현장관리 시스템 v2016”을 간단히 소개해 봅니다.

맵(Map)하면 항공영상과 수치지도의 표시에서 시작합니다. 해당 필지를 선택하면 아래처럼 선택된 필지에 대한 지반재해 정보가 표시됩니다.

그리고 지반재해에 대한 등급을 속성에 대해 검색할 수 있는 아래의 같은 UI를 제공해서 검색하고자 하는 정보를 효과적으로 검색할 수 있도록 하였습니다.

토사유실량의 산정은 USLE를 통해 계산할 수 있습니다. USLE는 Universal Soil Loss Equation의 앞자를 따온 것으로 이름에서도 알 수 있듯이 토양 유실(Soil Loss)에 대해 가장 많이 사용되는 식입니다. USLE는 아래와 같습니다.

위의 식에서 R, K, LS, C, P 인자가 보이는데요. 각 인자는 아래와 같습니다.

  • R – 강우침식인자로써, 일반적으로 연간등강우침식도를 통해 얻을 수 있습니다.
  • K – 토양침식인자로써, 1:25000의 정밀토양도를 통해 얻을 수 있습니다.
  • LS – 경사도 및 경사장인자로써 1:5000 등고선 수치지도를 통해 얻을 수 있습니다.
  • C – 식생피복인자로써 토지피복도를 통해 얻을 수 있습니다.
  • P – 경작인자로써 토지이용현황도를 통해 얻을 수 있습니다.

유사유출량의 단위는 톤(Ton)이며, 위의 식을 통해 알 수 있듯이 토사유출은 강우와 토양침식, 지형의 경사도, 지형위에서 자라고 있는 식생 및 경작이 주로 영향을 미친다는 것을 알 수 있습니다.

끝으로 아래의 그림은 이 시스템에서 사용한 공간 데이터가 모바일 환경에서 사용되기 위한 변환에 대해 설명을 하고 있습니다.