11월, 2011의 게시물 표시

[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 = ...

[ArcObjects]Raster Statistics & RasterCursor

ArcObjects에서 RasterDataset의 단순통계를 계산하는 C# 샘플 코드입니다.  - IRasterStatistics 인터페이스를 이용하여 계산  - IRasterCursor 인터페이스를 이용하여 계산, 이 코드에서는 Raster cursor를 이용해서 raster dataset의 pixel data에 어떻게 접근하는지도 잘 살펴 보시기 바랍니다. ▣ Code Snippet ■ Reference using System ; using System . Diagnostics ; using ESRI . ArcGIS . Geodatabase ; using ESRI . ArcGIS . DataSourcesRaster ; ■ IRasterStatistics void RasterStatistics1 ( IRasterDataset2 inputRasterDs , int bandIndex ) { // Create a raster. IRaster2 inputRaster = ( IRaster2 ) inputRasterDs . CreateFullRaster ( ) ; IRasterBandCollection bands = ( IRasterBandCollection ) inputRaster ; IRasterBand rasterBand = bands . Item ( bandIndex ) ; // Get statistics IRasterStatistics rs = rasterBand . Statistics ; Debug . WriteLine ( string . Format ( " RasterDataset Path = {0} " , inputRasterDs . CompleteName ) ) ; Debug . WriteLine ( string . Format ( " Minimum = {0} " , rs . Minimum ) ) ...