[GIS] Xr로 만든 지도 이미지 세번째..

오랜만에…. 현재 작업하고 있는 Xr 맵엔진에 대해 소개합니다. 아래의 지도 이미지는 SHP 파일들로 구성된 지도 이미지입니다. 이미지를 클릭하면 원래 크기로 보실 수 있습니다.

사용자 삽입 이미지
이 지도 이미지는 Xr 맵 엔진으로 만든 BeautifyMap이라는 디자인 툴로 만들어졌습니다. BeautifyMap은 사용자가 원하는 스타일의 지도를 디자인하기 위한 툴로써 사용자가 지정한 타일의 크기(일반적으로 256×256 픽셀이며 BeautifyMap에서 자유롭게 크기를 지정할 수 있음)의 격자 이미지로 잘라서 지도 서버 FTP에 자동으로 올려주는 툴입니다.

구글이나 네이버 그리고 다음에서 서비스하는 맵에서 볼 수 있는 세련된 지도 스타일을 간단하게 구성할 수 있는 툴입니다. BeautifyMap은  RIA 기술을 이용한 맵 솔루션을 구성하는 3가지 요소 중에 하나입니다. 일정상으로는 이번달까지 마무리하기로 되어 있어 있습니다.

지도 이미지를 살펴보면… SHP 레이어와 색상과 텍스트만으로 꾸며진 것을 볼 수 있는데요. 여기에 세련된 아이콘 이미지를 사용하면 훨씬 멋진 스타일의 지도가 연출되리라 생각합니다.

[C#] DataTable 생성

NET의 DataTable은 개발자들에 데이터를 주고 받기 위한 인터페이스로써의 표준으로 생각해도 별 무리가 없을듯 합니다. 아직은 .NET 초년생이라 잘 모르겠습니다만… 어떤 형식을 가지고 있는 데이터를 개발자 사이에서 주고 받을때 데이터 덩어리만 툭… 던져주기 보다는 이 데이터 덩어리를 읽을 수 있는 인인터페이스까지 제공해 주면 더욱 좋을텐데요. 바로 이 인터페이스가 되는 녀석으로 DataTable을 사용하면 참 좋을것 같습니다.

DataTable은 이 클래스의 이름에서도 나와 있듯 데이터베이스에서 테이블에 해당하는 녀석입니다. 테이블은 필드들로 구성되어 있고.. 이 필드들에 대한 레코드들로 구성됩니다. 필드는 컬럼(Column)이라고도 하며 레코드는 로우(Row)라고도 합니다.

데이터에 대해서 개발자 서로간에 인정할 수 있는 방법으로써 DataTable을 사용해야 할 필요가 생겨 DataTable을 생성하는 방법에 대해 정리해 봅니다.

사용자 삽입 이미지
위의 도식도를 보면 DataTable은 DataColumn과 DataRow 클래스에 대한 다수의 인스턴스를 가지고 있다는 것을 알 수 있습니다. DataColumn은 필드의 정의이며 DataRow은 레코드에 대한 정의입니다. .NET을 개발한 MS 개발자들 덕에 참…. 쉽죠잉? -_-;

먼저 DataTable을 생성하는 코드는 아래와 같습니다.

DataTable dt = new DataTable("TableName");

생성자의 인자는 테이블의 이름입니다. 참고로 다수의 DataTable은 DataSet에 포함될 수 있는데 이 DataSet에서의 식별자가 바로 이 테이블의 이름입니다. 식별자이므로 당연히 중복되는 큰~ 일 나는 겁니다.

다음은 이렇게 생성한 테이블에 필드를 정의하는 코드입니다. 식별자로써 ID와 이름으로써 Name, 나이값으로써 Age 필드를 정의하는 코드입니다.

DataColumn col1 = new DataColumn();
col1.DataType = System.Type.GetType("System.Int32");
col1.ColumnName = "ID";
col1.AutoIncrement = true;
dt.Columns.Add(col1);

DataColumn col2 = new DataColumn();
col2.DataType = System.Type.GetType("System.String");
col2.ColumnName = "Name";
col2.DefaultValue = "No Name";
dt.Columns.Add(col2);

DataColumn col3 = new DataColumn();
col3.DataType = System.Type.GetType("System.Int32");
col3.ColumnName = "Age";
col3.DefaultValue = 0;
dt.Columns.Add(col3);

각 필드(컬럼)에 대한 데이터 타입은 .NET의 Type의 그것을 그대로…. 사용할 수 있도록 되어 있습니다. 그리고 아래는 이제 이렇게 정의된 필드에 대해 레코드를 추가하는 코드입니다.

DataRow dr1 = dt.NewRow();
dr1["Name"] = "개똥이";
dr1["Age"] = 10;
dt.Rows.Add(dr1);

DataRow dr2 = dt.NewRow();
dr2["Name"] = "소똥이";
dr2["Age"] = 13;
dt.Rows.Add(dr2);

DataRow dr3 = dt.NewRow();
dr3["Name"] = "말똥이";
dr3["Age"] = 15;
dt.Rows.Add(dr3);

레코드에 해당되는 DataRow는 DataTable의 NewRow 매서드를 통해 생성된다는 점에 주의해야 합니다.

끝으로 테이블을 정의할때 Primary Key 등과 같은 정의를 빼놓을 수 없습니다. 아래는 간단히 앞서 정의한 ID 필드값으로 Primary Key를 정의하는 코드입니다.

DataColumn[] key = new DataColumn[1];
key[0] = col1;
dt.PrimaryKey = key;

이상으로 기본적으로 DataTable을 생성하고 컬럼과 레코드를 추가하는 것에 대해 정리해 보았습니다.