PostgreSQL에서 공간 데이터베이스(Spatial Database) 생성

PostgreSQL와 PostGIS를 각각 최신버전(글작성 기준으로 9.4.2-1 64Bits)을 설치 하였습니다. PostGIS 이전버전에서는 설치 단계에서 공간 데이터베이스 설치를 체크하면 자동으로 생성해 주었으나 최신버전에서는 체크를 하여도 공간 데이터베이스가 생성 되지 않아 직접 SQL문을 통해 공간 데이터베이스를 생성해 줘야 합니다. 일단 PostgreSQL과 PostGIS를 모두 설치를 합니다. 그리고 pgAdmin을 실행하고 새로운 데이터베이스 생성을 위해 아래 화면처럼 Databases에서 메뉴를 호출하고 New Database…를 실행합니다.

새롭게 표시된 New Database… 대화상자에서 생성할 데이터베이스의 이름과 소유자를 지정합니다. 데이터베이스 명은 gis로 입력 하였고 소유자는 postgres를 선택하였습니다.

생성된 gis 데이터베이스에 SQL문을 입력하기 위해 SQL 입력기를 아래 화면의 툴 버튼을 클릭하여 실행합니다.

표시된 Query 대화상자에서 아래화면처럼 입력하고 실행합니다.

그리고 또 아래처럼 입력하고 실행합니다.

여기까지가 공간 데이터베이스를 생성하기 위한 절차인데요. 지금까지 옳바르게 진행이 되었다면 아래화면처럼 spatial_ref_sys 테이블이 생성된 것이 보입니다.

이상으로 공간 데이터베이스를 생성하기 위한 과정을 정리해 봤습니다.

[연구논문] 모바일 관광을 위한 위치 기반 서비스 기술

약 2년전 연구과제 사업의 산출물 중 하나로 발행된 논문입니다. 모바일 환경에서 사용자의 위치 정확도를 향상하기 위한 방안으로 사용자가 갈 수 있는 길에 대한 네트워크 데이터를 구축하고 이 네트워크 데이터와 이동 속도 등을 고려하여 사용자의 위치 정확도를 높이기 위한 알고리즘 개발과 실제 구현에 대한 연구과제였습니다.

이 연구과제에서 네트워크 데이터를 구축하기 위한 과정 중 자동화를 위해 DuraMap-Xr을 이용하였고 정확도 향상 알고리즘과 모바일에서의 활용에 대한 프로그램은 BlackPoint-Xr을 이용하였습니다. 아래의 URL은 실제 논문에 대한 다운로드 URL입니다.

사용자 삽입 이미지

연구 과제가 마무리될 쯤 언제 시간이 되면 이곳 블로그를 통해 공유해야겠다 했는데, 잊고 있다가 모바일 GIS로 구글링을 하다가 다시 제게 역으로 검색되어 이제서야 올려봅니다.

[C#] 관리자 권한으로 실행하기

관리자 권한이 없는 상태에서 시스템의 정보를 읽거나 쓰려고 할때 프로그램이 올바르게 작동하지 않습니다. 이럴때 프로그램이 실행되면서, 관리자 권한으로 상승시키는 것이 필요한데요. C#에서 이러한 내용에 대한 코드를 정리합니다. 모든 코드는 Program.cs에서 이루어집니다. 먼저 using 절에 다음과 같은 네임스페이스를 추가합니다.

using System.Security.Principal;
using System.Diagnostics;

그리고 현재 관리자 권한 상태인지의 여부를 파악하는 함수를 추가합니다.

public static bool IsAdministrator()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();

    if (null != identity)
    {
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }

    return false;
}

Program.cs 파일의 Main 함수의 시작 부분에 다음의 코드를 추가합니다.

if (IsAdministrator() == false)
{
    try
    {
        ProcessStartInfo procInfo = new ProcessStartInfo();
        procInfo.UseShellExecute = true;
        procInfo.FileName = Application.ExecutablePath;
        procInfo.WorkingDirectory = Environment.CurrentDirectory;
        procInfo.Verb = "runas";
        Process.Start(procInfo);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }

    return;
}