2010년 1월 31일 일요일

Raster Pyramids에 대해서...

래스터의 피라미드(Pyramids)는 디스플레이 속도 향상을 위해 원본 래스터의 해상도를 축소하여 생성한 데이터셋을 말합니다.

이미지의 Extent 및 픽셀값이 변경되지 않는 한 최초 한번 생성하며, 확대/축소시 축척에 맞는 적절한 피라미드 레벨을 선택하여 디스플레이합니다.

피라미드는 0 레벨에서 시작하고 이 레벨이 가장 높은 해상도를 가지며, 다른 레벨은 원본 데이터의 픽셀을 리샘플링(원본 데이터의 값을 보간)하여 사용합니다.


단. 래스터 분석에는 0 레벨의 원본 데이터를 활용합니다.


출처: http://edndoc.esri.com/arcsde/9.3/images/rasterpyramids.gif

Reduced-resolution dataset
Reduced-Resolution Dataset(RRD)은 원본 래스터보다 낮은 해상도로 만들어진 리샘플링된 래스터 데이터셋으로, 물리적으로 .rrd라는 확장자의 단일 파일로 저장/관리된다.

각각의 피라미드(RRD)의 레이어는 1/4 축척으로 연속적으로 다운샘플링 된다.

크기는 압축되지 않은 원본 파일의 8% 정도이며, 만약 압축된 래스터의 경우에는 이보다 더 커질 수 있다.

Pyramid resampling methods
피라미드를 생성하기 위해 Nearest Neighbor, Bilinear, Bicubic Interpolation 의 3가지 방법을 사용할 수 있으며, 픽셀 데이터의 유형(discrete or continuous)에 따라 가장 적절한 방법을 선택하면 된다.

Data는 어떤 척도(Scale)를 기준으로 수치화 했는지에 따라 다음과 같이 구분할 수 있다.
- 범주(categorical): 명목척도(nominal scale), 서열척도(ordinal scale)
- 연속(continuous): 등간척도(interval scale), 비율척도(ratio scale)

Nearest Neighbor interpolation
가장 근접한 값을 취하는 방법으로 새로운 값을 생성(추정)하지 않으며 가장 빠른 방법으로 명목(Nominal) 및 서열(Ordinal) 데이터에 가장 적합하다.
범주형
(categorical) 데이터(토지이용, 토양, 식생 등)에 많이 활용된다.

Bilinear Interpolation
픽셀값을 추정하기 위해 원본 이미지의 가장 근접한 4 픽셀의 가중평균값을 이용한다.
이 방법은 표고(elevation), 경사(slope), 지하수의 염도, 공항 소음 등과 같은 연속형
(continuous) 데이터에 효율적이다. 

BiCubic Interpolation
픽셀값을 추정하기 위해 원본 이미지의 가장 근접한 16 픽셀의 평균값을 이용한다.
부드럽고 시각적으로 최적의 값을 추출하며, 위성영상(satellite imagery)이나 항공사진(aerial photography)과 같은 연속형(continuous) 데이터에 효율적이다. 

Raster dataset's origin
다음 그림과 같이 피라미드 생성 기준점은 래스터 데이터의 좌상단점이며, 이를 기준으로 우하단으로 생성한다. 또한 JPEG 2000과 같은 Wavelet 압축 래스터 파일 포맷의 경우에는 내부 피라미드 구조를 가지고 있다.

참고 : http://webhelp.esri.com/arcgisdesktop/9.3/

2010년 1월 24일 일요일

[ArcGIS]포인트에 래스터 픽셀값 계산하기 VBA Script

포인트 레이어의 필드에 래스터의 픽셀값을 계산하는 VBA 스크립트 예입니다.

가령, DEM(Digital Elevation Model)과 사용자가 수집한 포인트 레이어가 있을 경우, 포인트 위치의 표고값을  필드값으로 계산하고자 할 때 사용할 수 있습니다.

소스를 수정/확장하면 더 많은 결과를 만들어 낼 수 있을 것입니다.

▣ 전제사항
 - ArcMap에 포인트 레이어 및 래스터 레이어가 추가되어 있을 것
 - 포인트 레이어는 Shapefile, Personal GDB(mdb), File GDB일 것
 - 래스터 레이어는 단일밴드일 것
 - 스크립트 실행 조건은 편집 상태가 아닐것(Update Cursor를 사용하기 때문임)

▣ 메인 코드

펼쳐두기..


▣ 전체 소스코드▣ 계산결과 예시

2010년 1월 23일 토요일

StatPlanet - Interactive Thematic Maps & Visualization Tool

교육용 또는 일반인들이 멋진 주제도를 생성할 수 있는 무료 지도제작도구를 소개합니다.

플래시로 만들어졌으며, 웹 또는 Stand-alone 버전을 제공하며, 사용자가 데이터 편집을 통해 자신만의 지도를 생성할 수 있습니다.


StatPlanet

StatPlanet은 파워풀한 인터랙티브 데이터 시각화 및 매핑 도구입니다.

UNESCO, SACMEQ, Global Environmental Facility 등의 국제기구들이 더 쉽게 의사 소통을 위해 데이터를 해석하는 데 사용하고 있습니다.


StatPlanet의 가장 큰 장점은 비전문가가 사용자 친화적인 인터페이스를 통해 통계를 탐색해 볼 수 있게 한다는 것입니다. 또한, 이 소프트웨어는 원시 데이터의 변환에 있어 복잡한 프로세스를 자동화하여 인터랙티브 지도 및 시각화를 할 수 있게 합니다.


따라서 비 전문가도 인터랙티브 지도를 상대적으로 쉽게 시각화할 수 있으며, 무료로 소프트웨어를 다운로드 하여 사용할 수 있습니다.


StatPlanet은 현재 다음과 같이 3가지 버전이 있습니다.

 - StatPlanet

 - StatPlanet Map Maker

 - StatPlanet Graph Maker


StatPlanet은 210개 이상의 국가, 250개 이상의 지표를 제공하며 다음과 같은 정보를 포함합니다.

 - 인구, 교육, 환경, 성별, 건강, 사회 경제적 지표 등


이 데이터는 UNESCO, SACMEQ, World Health Organization와 같은 다양한 소스로부터 생산됩니다.


StatPlanet Map Maker와 Graph Maker는 StatPlanet의 다운로드 버전이며, 자신의 데이터를 시각화하거나 자신만의 지도 경계를 추가하여 지도를 생성할 수 있습니다.


또한 오프라인 사용을 위한 Stand-alone 버전 및 온라인 퍼블리싱을 위한 웹 버전을 동시에 제공합니다.


 Frank van Cappelle에 의해 2005년부터 개발되었으며, 2008년 이후, StatPlanet의 맞춤형 버전의 개발이 UNESCO International Institute for Educational Planning (IIEP)의 SACMEQ 연구 프로그램의 일환으로 진행되고 있습니다.


2010년 1월 22일 금요일

[ArcObjects]Get Unique Values

Unique Value 렌더러(IUniqueValueRenderer)를 생성하기 위해서는 Unique Values를 얻어와야 합니다.

다음 예제는 ArcObjects의 IDataStatistics 인터페이스 및 ICursor 인터페이스를 활용하여 Unique Value를 얻어오는 일반적인 코드입니다.

IDataStatistics 의
Statistics 속성은 IStatisticsResults로서 Count, Minimum, Maximum, Mean, Sum, Standard Deviation 값을 가져올 수 있습니다.

사실 이 방법 외에도 Unique Value를 얻는 방법은 많습니다. 데이터의 크기나 응용프로그램의 특성에 따라 최적의 방법을 찾으면 되겠지요...


Understanding Cursors in ArcObjects

① IDataStatistics의 UniqueValues 속성을 이용하여 얻기

[code c#]
public static System.Collections.IEnumerator GetUniqueValues(ITable ipTable, IQueryFilter ipFilter, string fieldName, bool useSorting)
{
    ICursor ipCursor = null;

    if (useSorting)
    {
        //앞 글에서 Sorted Cursor 얻기 참고
        ipCursor = GetSortedCursor(ipTable, ipFilter, new string[] { fieldName }, true);
    }
    else
    {
        ipCursor = ipTable.Search(ipFilter, true);
    }           

    IDataStatistics ipDataStat = new DataStatisticsClass();
    ipDataStat.Field = fieldName;
    ipDataStat.Cursor = ipCursor;

    System.Collections.IEnumerator ipEnum = ipDataStat.UniqueValues;

    System.Runtime.InteropServices.Marshal.ReleaseComObject(ipCursor);

    return ipEnum;
}
[/code]
② ICursor를 이용하여 Unique Values 얻기
[code c#]
public static System.Collections.Generic.List<object> GetUniqueValuesList(ITable ipTable, IQueryFilter ipFilter, string fieldName, bool useSorting)
{
    System.Collections.Generic.List<object> uvList = new System.Collections.Generic.List<object>();

    int idxField = ipTable.FindField(fieldName);
    if (idxField == -1) return uvList;

    ICursor ipCursor = ipTable.Search(ipFilter, true);
    IRow ipRow = ipCursor.NextRow();
    while (ipRow != null)
    {
        object curValue = ipRow.get_Value(idxField);

        if (! uvList.Contains(curValue))
        {
            uvList.Add(curValue);
        }

        ipRow = ipCursor.NextRow();
    }

    if (useSorting)
    {
        uvList.Sort();
    }

    System.Runtime.InteropServices.Marshal.ReleaseComObject(ipCursor);

    return uvList;
}
[/code]
③ 활용 예
[code c#]
IWorkspace  ipSourcewS = OpenShapefileWs("폴더경로");
IFeatureClass  ipInputFc = OpenFeatureClass(ipSourcewS, "클래스이름");

System.Collections.Generic.List<object> uvList = null;
uvList = GetUniqueValuesList((ITable)ipInputFc, null, "필드명", true);
foreach (string uvValue in uvList)
{
    System.Diagnostics.Debug.WriteLine(uvValue);
}

System.Collections.IEnumerator ipEnum = GetUniqueValues((ITable)ipInputFc, null, "필드명", true);
ipEnum.Reset();
while (ipEnum.MoveNext())
{
    System.Diagnostics.Debug.WriteLine(ipEnum.Current.ToString());
}
[/code]

Cartography Tool

주제도 작성을 위해서는 다양한 요소들이 고려되어야 합니다. 특히, 단계구분도를 작성하는 경우에 컬러 스키마를 어떻게 적용할 것인가는 중요한 문제이며, 여기에서는 컬러선택 지침을 제공하는 툴을 소개합니다.

Colorbrewer 2.0: Color Advice for Maps
ColorBrewer는 Choropleth Map(단계구분도 등)와 같은 주제도(Thematic Map) 작성에 필요한 컬러 스키마 지침을 제공하는 웹 툴입니다.

ColorBrewer는 250여개 이상의 조합이 가능한  35개의 기본 스키로 구성되고, 각 스키마는 CMYK, RGB, HEX, Lab, AV3(HSV) 컬러 모델을 포함합니다.

ColorBrewer 2.0은 Flash(AxisMaps)로 개발되었으며, 아래는 예시화면입니다.

※ License and Update Info
※ Axis Maps LLC - Cartography. Visualization. Design.
※ ColorBrewer 1.0
※ Cartography 2.0

ColorTool for ArcMap
ColorTool은 ColorBrewer 컬러램프를 이용하여 만든 ArcMap(ArcGIS Desktop) 플러그인 도구입니다.

ColorTool은 Quantile, Equal Interval, Natural Breaks (Jenks), Unique Value Classification 유형을 지원하며, 범례옵션(소숫점 자리수 등) 등을 추가로 제공합니다.

위 링크를 따라가시면 다운로드 할 수 있으며, 아래는 툴의 사용 예입니다.


TypeBrewer: A Map Design Help Tool for Selecting Typography
TypeBrewer는 비 전문 지도제작자에게 반 구조화된 환경에서 Typography(활자(문자)를 가지고 지도를 디자인하는 기술을 가르키는 말이었으나, 최근에는 라벨링, 이미지, 그래픽, 색채 등 모든 지도구성 요소를 디자인 하는 기술로 확대되었다.)를 미리 탐색해 볼 수 있는 도구입니다. 지도제작 도구는 아니지만 지도 디자인 전에 미리 다양한 대안을 만들어 볼 수 있는 기회를 제공합니다.
 

2010년 1월 21일 목요일

QGIS 1.4.0 Enceladus 출시

2009년 9월 QGIS 1.3.0 'Mimas' 버전이 출시된지 4개월만에 QGIS 1.4.0 'Enceladus' 버전(2010-01-10)이 출시되었습니다.

Quantum GIS (QGIS)는 GNU General Public License를 사용하는  Open Source Geographic Information System (GIS) Desktop 프로그램입니다.

Linux, Unix, Mac OSX, and Windows 모두 호환되며, Vector(Shapfile 등), Raster(GeoTiff 등), and Database(PostGIS 등) format을 지원합니다.

Plugin Manager를 통해 GPS Track 등도 지원하며 GDAL, PROJ, GEOS 등 Open Source Library를 사용합니다.

▣ 1.4.0 새로운 기능: http://blog.qgis.org/node/142
 - New Symbology Infrastructure
 - Field Calculator
 - Print Composer
 - User interface improvements
 - Render caching
 - Custom SVG search paths
 - Specify CRS when creating new shapefile
 - Customizable attribute forms
 - 그 외 80여가지 이상 패치

▣ Quantum GIS에 대한 한글 소개자료나 매뉴얼은 이곳을 참고하세요...
Quantum GIS 소개 : http://endofcap.tistory.com/258

ASTER Global Digital Elevation Map

전세계 30미터 해상도의 DEM(Digital Elevation Model)을 다운로드 받을 수 있는 곳입니다.

주)픽소니어의 일본 협력 기관인 ERSDAC(ASTER 운용기관)은 NASA 와 공동으로 ASTER 위성영상을 이용하여 전세계 DEM 을 제작하여 2009년 6월 29일부터 서비스를 시작하였습니다.

ASTER GDEM 은 ASTER 의 스테레오 영상을 이용하여 만들어졌으며 해상도는 30m 입니다.

1. ASTER Global Digital Elevation Map
http://asterweb.jpl.nasa.gov/gdem.asp

아래의 사이트로 접속하시면 자세한 정보 및 검색/다운로드가 가능합니다.

[ArcGIS]MapTip 활성화

▣ 질문 : ArcMap에서 레이어의 MapTip을 사용하고 싶은데 다음과 같이 MapTips 체크박스가 비활성화 되어 있습니다. 어떻게 활성화하나요?

▣ 답변MapTip이 비활성화 되는 경우는 Spatial Index가 생성되지 않은 경우입니다.
 GeoDatabase(Personal, File GeoDatabase, Remote(SDE))의 경우에는 Spatial Index를 생성/관리하기 때문에 대부분이 자동 활성화 됩니다. 단, File GeoDatabase에서도 Compressed File GeoDatabase일 경우 활성화되지 않습니다.

▣ Shapefile Spatial Index 생성하는 방법
1. ArcMap
 : Editor 툴바에서 Start Editing --> Stop Editing 메뉴를 차례로 실행하세요. 편집상태가 되면 자동으로 Spatial Index를 생성합니다.

2. ArcCatalog
 : Shapefile을 더블클릭한 후 등록정보의 Indexes 탭 중 Spatial Index 패널의 Add 버튼을 실행합니다.




[ArcObjects]Get Sorted Cursor

ArcObjects를 사용하면서 소팅된 Cursor가 필요한 경우가 종종 있습니다.
다음은 소팅된 커서를 받아오는 예이며, ITableSort 인터페이스와 IQueryFilterDefinition 인터페이스를 사용할 수 있습니다.

ITableSort 인터페이스는 8.0버전에서부터 지원하는 인터페이스이고, 특히,  IQueryFilterDefinition 인터페이스는 9.2 버전에서 추가된 인터페이스입니다.

IQueryFilterDefinition  인터페이스는 SDE 및 Access GeoDatabase에서만 사용이 가능하며 File GeoDatabse 및 File 기반 데이터 소스(Shapefile 등)에서는 현재 지원하지 않습니다.

① ITableSort 인터페이스 활용

[code c#]
public static ICursor GetSortedCursor91(ITable ipTable, IQueryFilter ipFilter, string[] fieldList, bool ascending)
{
    ICursor ipCursor = null;

    ITableSort ipTableSort = new TableSortClass();

    ipTableSort.Table = ipTable;
    ipTableSort.QueryFilter = ipFilter;
    ipTableSort.Fields = string.Join(", ", fieldList);

    foreach (string fieldName in fieldList)
    {
        ipTableSort.set_Ascending(fieldName, ascending);

        int idxField = ipTable.FindField(fieldName);
        IField ipField = ipTable.Fields.get_Field(idxField);

        if (ipField.Type == esriFieldType.esriFieldTypeString)
        {
            ipTableSort.set_CaseSensitive(fieldName, true);
        }
    }

    try
    {
        ipTableSort.Sort(null);

        ipCursor = ipTableSort.Rows;
    }
    catch (Exception Ex)
    {
        System.Diagnostics.Debug.WriteLine(string.Format("GetSortedCursor Failed : {0}", Ex.Message));
    }

    return ipCursor;
}
[/code]
② IQueryFilterDefinition 인터페이스 활용
[code c#]
public static ICursor GetSortedCursor92(ITable ipTable, IQueryFilter ipFilter, string[] fieldList, bool ascending)
{
    ICursor ipCursor = null;
  
    IWorkspace ipWs = ((IDataset)ipTable).Workspace;

    if (ipWs.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace)
    {
        string order = ascending ? " ASC" : " DESC";

        if (ipFilter == null) ipFilter = new QueryFilterClass();

        IQueryFilterDefinition ipFDef = (IQueryFilterDefinition)ipFilter;
        ipFDef.PostfixClause = "ORDER BY " + string.Join(", ", fieldList) + order;

        ipCursor = ipTable.Search(ipFilter, false);
    }
    else
    {
        ipCursor = GetSortedCursor91(ipTable, ipFilter, fieldList, ascending);
    }

    return ipCursor;
}
[/code]

③ 활용 예

[code c#]
IWorkspace  ipSourcewS = OpenShapefileWs("폴더경로");
IFeatureClass  ipInputFc = OpenFeatureClass(ipSourcewS, "클래스이름");

string[] fieldList = new string[] {"필드이름1", "필드이름2"};

ICursor ipCursor = GetSortedCursor91((ITable)ipInputFc, null, fieldList, true);

IRow ipRow = ipCursor.NextRow();

int idxField = ipInputFc.FindField("필드이름1");
while (ipRow != null)
{
    System.Diagnostics.Debug.WriteLine(ipRow.get_Value(idxField).ToString());

    ipRow = ipCursor.NextRow();
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(ipCursor);
[/code]

2010년 1월 19일 화요일

[2010.01.18.]SW 공공발주서 대기업 배제 방침 기사

오늘 이런 기사가 났어요....

예외사항이 어떻게 적용될 지 모르겠지만. 암튼 반가운 소리네요..

그렇다고 중소 소프트웨어업체는 내수시장만 보란 소리는 아니겠지요?

 

이데일리 | 김국헌 | 입력 2010.01.18 10:15 | 수정 2010.01.18 10:16

 

최경환 지식경제부 장관이 공공부문 소프트웨어 발주에서 대기업을 배제할 방침이라고 밝혔다.

 

최 장관은 18일 서울 삼성동 코엑스 인터컨티넨탈 호텔에서 열린 한국무역협회 최고경영자 조찬 강연에서 "대기업은 해외로 나가도록 공공부문 입찰제를 바꿀 것"이라고 밝혔다.

 

그는 "정보기술(IT) 인프라는 좋지만 소프트웨어는 꼴찌"라며 "대기업 소프트웨어 회사는 대기업 전산실 노릇만 하면서 (중소 소프트웨어업체의) 소프트웨어를 전부 공짜로 달라고 해 (중소 소프트웨어업체는) 3D업종이 됐다"고 지적했다.

 

최 장관은 "이제 대기업은 해외로 나가란 메시지를 분명하게 할 때가 됐다"며 "공공 부문 입찰제를 바꿔 대기업은 해외로 나가게 하고, 소프트웨어 분야의 고급인력을 양성하기 위해 지원시스템을 바꾸겠다"고 강조했다.

 

중략....

출처 : http://media.daum.net/digital/view.html?cateid=1038&newsid=20100118101511352&p=Edaily

2010년 1월 17일 일요일

아이티(Haiti) 지진과 GeoWeb Portal

중앙아메리카 아이티(Haiti) 수도 포르토프랭스(18°32′N 72°20′W)에서 1월 12일(현지시각) 진도 7.3의 강진이 발생했습니다. 빠른 복구를 기원합니다.

아래는 GEOProtal, Disater Charter, NOAA에서 제공하는 범지구 차원의 지리공간데이터를 제공하는 사례입니다. 특히,
International Charter의 경우 지진 발생 후 하루만에 구호활동 등을 돕기위한 지도를 작성하여 배포하는 체계가 부러울 뿐입니다.

현재 진행중인 국가공간정보체계(NSDI) 구축사업이 진정으로 나아가야 할 방향이 아닐까요?

1. GEOPortal
GEOportal 은 전세계적으로 제공되고 있는 지오포탈/국가/지역 등의 지구관측정보와 서비스에 접근하기 위한 진입점을 제공합니다.


2. International Charter Space & Major Disaster
International Charter는 자연/인 재해 발생지역의 공간정보를 취득하고 지도화하여 구호현장에 있는 사람이나 일반인에게 정보를 제공합니다.

3. Gnis Desktop
NOAA's National Geophysical Data Center (NGDC)에서 제공하는 Web Map Service(WMS) 중 주요 지진발생지점을 Gnis Desktop에서 지도화한 모습입니다.

2010년 1월 16일 토요일

Map Projection II

여러가지 지도 투영법입니다.
지도 투영법(Map Projection)은 위선과 경선으로 이루어진 지구상의 가상적 좌표를 평면상에 옮기는 방법을 말합니다.
지구는 구체이기 때문에 방향(방위)·각도·거리·넓이(면적)에서 왜곡이 발생할 수 있으며 작성목적에 따라 이를 최소화할 수 있는 방법을 선택합니다.
아래 지도에서 그려진 원을 통하여 도법에 따른 왜곡을 확인할 수 있습니다.