2011의 게시물 표시

[ArcObjects] Layer와 Feature Class/Table의 필드 별칭 설정

이미지
▣ 미션  - ArcMap에서 아래 그림과 같이 테이블과 속성정보 조회시 영문필드에 한글필드로 별칭을 보여주고 싶다. - 면적 등과 같이 Numeric 필드일 경우 소숫점 2째자리까지만 보여주고 천단위 구분자를 두고싶다. - GeoDatabase(Personal, File, ArcSDE)에서 레이어를 불러올 경우 한글별칭을 기본값으로 사용하고 싶다. ▣ 설명  - Layer의 필드정보는 Feature Layer 수준, FeatureClass, Table의 필드정보는 GeoDatabase 수준에서 변경.  - 따라서 FeatureClass, Table의 필드정보 변경은 물리적으로 저장되고 Layer의 필드정보는 ArcMap과 같이 Application 내에서만 임시 적용됨.  - FeatureClass에 이미 한글별칭이 적용되어 있더라도 Application에서 실시간 조인이 이루어지는 경우는 별칭이 적용되지 않을 수 있음. ▣ ArcObjects Interface  - INumberFormat  - ITableFields  - IFieldInfo  - IClassSchemaEdit  - ISchemaLock ▣ Code Snippet using System . Runtime . InteropServices ; using ESRI . ArcGIS . esriSystem ; using ESRI . ArcGIS . Geodatabase ; using ESRI . ArcGIS . Carto ; ■ 필드이름과 매칭되는 Alias 정보 생성 System . Collections . Hashtable FieldAliasTable = new System . Collections . Hashtable ( ) ; public void AddFieldAlias ( ) { FieldAliasTable . A...

[Cartography]Flow Map Renderer

이미지
▣ 개요  - O-D Data Flow Map Renderer  -   Features   : O-D, D-O 필드의 최소/최대값을 이용하여 심볼의 크기를 결정   : Sorting + Gradient Color 적용   : Symbol을 사용자가 선택/편집 할 수 있도록 UI 구성    : Scalable Symbol ▣ O-D Data : O-D Polyline ▣ Flow Map Renderer for ArcGIS UI ▣  Flow Map: O-D Arrow ▣ Flow Map: O-D Circle ▣ Flow Map: Single Arrow + Gradient Color ▣ Flow Map: Single Circle + Gradient Color ▣ Flow Map: Single Arrow ▣ Flow Map: Single Circle

[ArcObjects]How to identify on a map layer

▣ ArcObjects Interface  - IIdentify ▣ Code Snippet using ESRI . ArcGIS . Carto ; using ESRI . ArcGIS . Display ; using ESRI . ArcGIS . Geometry ; using ESRI . ArcGIS . Geodatabase ; using ESRI . ArcGIS . esriSystem ; ■ Identify on a map public static void IdentifyMap ( IMap focusMap , IPoint mapPoint ) { if ( focusMap . LayerCount = = 0 ) return ; ESRI . ArcGIS . esriSystem . UID uid = new UIDClass ( ) ; uid . Value = " {6CA416B1-E160-11D2-9F4E-00C04F6BC78E} " ; IEnumLayer enumLayer = focusMap . get_Layers ( uid , true ) ; enumLayer . Reset ( ) ; ILayer layer = enumLayer . Next ( ) ; while ( layer ! = null ) { if ( layer . Valid && layer . Visible ) { IdentifyLayer ( focusMap , layer , mapPoint ) ; } layer = enumLayer . Next ( ) ; } } ■ Identify on a layer static void IdentifyLayer ( IMap focusMap , ILayer layer , IPoint mapPoint ) { boo...

[ArcObjects]GRID VAT(Value Attribute Table) 활용

이미지
ArcGIS의 Grid 포맷을 사용할 때 Integer Grid일 경우 아래 그림과 같이 테이블을 열어 조작할 수 있습니다. 다음은 Grid의 VAT(Value Attribute Table)를 C# 코드에서 활용하는 예제입니다.  - VAT에 필드 추가하기  - VAT에 셀값의 면적 계산하기 ▣ Sample Integer GRID ▣ ArcObjects Interface  - IGridTableOp ▣ Code Snippet using System ; using ESRI . ArcGIS . Geodatabase ; using ESRI . ArcGIS . DataSourcesRaster ; using ESRI . ArcGIS . GeoAnalyst ; ■ VAT에 필드 추가하기 public static bool AddVatField ( IRaster raster , string fieldName , esriFieldType fieldType , int fieldLength ) { IRasterBandCollection bandCol = ( IRasterBandCollection ) raster ; IRasterBand band = bandCol . Item ( 0 ) ; bool hasTable = false ; band . HasTable ( out hasTable ) ; if ( hasTable ) { ITable attTable = band . AttributeTable ; if ( attTable . FindField ( fieldName ) ! = - 1 ) { return true ; } IField newField = new FieldClass ( ) ; IFieldEdit fieldEdit =...

[ArcGIS]지자체별 평균표고 미만의 셀 갯수와 면적 계산하기

이미지
스크립트나 프로그램을 작성하지 않고 DEM을 이용하여 지자체별 평균표고 미만의 셀 갯수와 면적을 계산하는 과정입니다. 1. 레이어 준비 ArcMap을 실행하여 다음과 같이 시군구 및 dem 레이어를 추가한다.  - 지자체 레이어 명: 시군구  - DEM 레이어 명: dem(셀사이즈 30을 가정함) 2. 필드 추가 TOC에서 시군구 레이어를 선택 후 오른쪽 마우스를 눌러 테이블을 열고 다음과 같이 필드를 추가한다. DEM_MEAN (Double) - 지자체별 평균표고 DEM_MIN (Double) - 지자체별 최소표고 DEM_MAX (Double) - 지자체별 최대표고 UND_CNT (Long Integer) - 지자체별 평균표고 미만의 셀 갯수 UND_ARA (Double) - 평균표고 미만 면적 3. Zonal Statistics 시군구 및 DEM 레이어를 이용해서 다음과 같이 Zonal Statistics 분석을 수행한다. Spatial Analyst 툴바 --> Zonal Statistics 또는 ArcToolbox --> Spatial Analyst Tools --> Zonal --> Zonal Statistics 도구를 사용하면 된다. Zone Field는 Unique한 값이어야 하며 아래에서는 시군구코드를 사용하였다. Join output table to zone layer를 체크하여 분석 후 바로 값을 계산할 수 있도록 한다. 분석이 완료되면 지자체 레이어의 테이블을 열고 Field Calculator를 이용하여 평균, 최소, 최대표고값을 계산한다. 조인테이블에서 평균값은 MEAN, 최소값은 MIN, 최대값은 MAX 필드이다. DEM_MEAN  <-- MEAN DEM_MIN  <-- MIN DEM_MAX  <-- MAX 지자체 레이어를 선택 후 오른쪽 마우스를 눌러 Join or Re...

[GeoTools]GridCoverage Statistics

GeoTools 에서 GridCoverage(Raster)의 단순통계를 계산하는 Java 샘플 코드입니다.  - JAI의 RectIter 인터페이스를 이용하여 계산  - AWT의 RenderedImage인터페이스를 이용하여 계산  - 단일 밴드에 대한 샘플입니다. ▣ Code Snippet import java . awt . image . Raster ; import java . awt . image . RenderedImage ; import java . text . DecimalFormat ; import javax . media . jai . PlanarImage ; import javax . media . jai . iterator . RectIter ; import javax . media . jai . iterator . RectIterFactory ; import org . geotools . coverage . grid . GridCoverage2D ; import org . geotools . coverage . grid . GridEnvelope2D ; ■ JAI(Java Advanced Imaging): RectIter Interface static void calculateStatistics1(GridCoverage2D inputGc) { int count = 0 ; double minVal = Double . MAX_VALUE ; double maxVal = Double . MIN_VALUE ; double sumOfVals = 0.0 ; double sumOfSqrs = 0.0 ; double noDataValue = ( Double ) inputGc . getProperty ( "GC_NODATA" ) ; PlanarImage renderedImage = ...