[ArcGIS]FeatureClass XY Domain..

이미지
  > XY Domain에 대한 자료를 찾던 중 알게 된 내용을 정리하였습니다. 보다 자세한 내용을 알고 싶었으나, 짧은 영어로 인한 독해의 압박에 그만.. 혹시 한글로 된 기술문서를 가지고 계시거나 사이트를 아시는 분은 코멘트 부탁 드립니다. ㅜㅜ   << XY Domain >>     > ShapeFile 의 경우에는 FeatureClass의 XY Domain이 없어 Edit 시에도 범위의 구애를 받지 않는다. 하지만 PersonalGDB(mdb), SDE의 경우에는  XY Domain의 범위를 관리한다.   > 위 그림은 ArcCatalog에서 FeatureClass의 속성 창에 표시되는 Domain 정보이다.   ■ PersonalGDB(mdb) : mdb파일을 MS Access로 연다.   > GDB_GeomColumns 테이블 : 해당 테이블의 [TableName] 필드로 FeatureClass를 찾아 SpatialReference ID 인 [SRID]필드에서 ID를 찾는다. 이 ID가 키 가 된다.   > GDB_SpatialRefs 테이블 : 해당 [SRID]의 Row에 보면 좌표정보와 FalseX, FalseY, XYUnits 등 Domain에 대한 정보와 기타 다양한 정보를 확인할 수 있다.   ■ SDE : Oracle에 SDE 유저로 접속하면 SDE에서 관리하는 테이블을 볼 수 있다.   > SDE.LAYERS 테이블 : 해당 테이블의 [TABLE_NAME] 필드로 FeatureClass를 찾아 SpatialReference ID 인 [SRID]필드에서 ID를 찾는다. 이 ID가 키 가 된다.   > SDE.SPATIAL_REFERENCES 테이블 : 해당 [SRID]의 Row에 보면 좌표정보와 FALSEX, FALSEY, XYUNITS 등...

[ArcObjects]두 FeatureClass의 XY Domain 범위 합치기..

  > 두 개의 A, B FeatureClass를 Merge하여 하나의 FeatureClass로 만드는 과정에서.. > A의 Fields를 사용하여 새로운 FeatureClass를 만들고 A와 B의 FeatureClass의 Geometry를 Insert 하는 과정에서 A의 SpatialReference에 정의된 XY Domain의 범위에서 벗어난 Geometry가 B에 존재한다면 “The coordinates or measures are out of bounds.” 이라는 오류가 발생했다. > 물런 IBasicGeoprocessor 인터페이스의 Merge 메소드를 사용하면 별 문제 없이 작업이 가능하겠지만 단순한 Merge 작업이 아닌 중간에 어떠한 프로세스가 들어간다면 어쩔 수없이 수동으로 Merge작업을 해야 한다. > 위 오류는 ArcMap에서 Edit 작업 시에도 정의된 Domain 범위 이외의 지역에 새로운 Geometry를 저장하려 할 경우 같은 오류가 발생한다. > END(ESRI Developer Network)에 따르면 XY Domain의 범위는 최초 FeatureClass가 생성될 때 지정되면 변경할 수가 없단다.. ㅜㅜ > 결국 새로운 FeatureClass의 SpatialReference를 설정할 때 A, B 두 개의 XY Domain을 비교하여 넓은 범위의 XY Domain을 찾아서 설정한 후에 작업을 진행하면 된다. > 아래 코드는 두 개의 FeatureClass의 XY Domain을 비교하여 새로운 XY Domain을 설정하는 코드이다. 1: private void RecalculateDomain(IFeatureClass pFC1, IFeatureClass pFC2, IFields pFields) 2: { 3: if (pFC1 == null ) return ; 4: if (pFC2 == null ) return ; 5:...

[ArcObjects]ArcSDE Connection 정보 저장…

>> ArcObjects로 프로젝트를 진행하던 도중.. FeatureClass나 Table의 정보를 저장하였다가 불러와서 사용해야 하는 기능이 있었다. 로컬 ShapeFile이나 Personal GDB, File GDB의 경우에는 파일의 Path를 저장하여 나중에 해당 Path로 WorkSpace를 잡아주면 되는데… 문제는 SDE상에 올라가 있는 DataSet이다. >> SDE에 올라가있는 데이터의 경우에 필요한 것이 서버정보(IP), 인스턴스(esri_sde), USER, PASSWORD 인데.. 다른건 모두 저장하면 되는데.. 문제는.. PassWord 였다.. 사용자에게 입력받기도 그렇고.. 그렇다고 매번 데이터를 사용할때 마다 PassWord를 입력받기도 그렇고.. >> 일단 다음 코드로 SDE WorkSpace의 ConnectionString을 보았다. 1: IDataset pWSDataSet = (IDataset)pDestDS.Workspace; 2: IWorkspaceName2 pWorkspaceName = (IWorkspaceName2)pWSDataSet.FullName; 3:   4: string sConStr = pWorkspaceName.ConnectionString; >> 결과는 다음과 같다. ENCRYPTED_PASSWORD=0002c45e2fbea2776344f09010b76e10bc831a5900;SERVER=192.xxx.xxx.xxx;INSTANCE=esri_sde;USER=kopss_ws;VERSION=SDE.DEFAULT;AUTHENTICATION_MODE=DBMS >> ENCRYPTED_PASSWORD : 사용자가 입력한 PassWord 를 암호화 하여 저장하고 있다. >> 구글링 및 EDN을 뒤져봤지만 Arc에서 암호화된 값을 복호화하는 방법은 찾을 수 없었다. >> 결국 SD...

SLD(Styled Layer Descriptor) Converter & Editor?

이미지
Styling은 정말 손이 많이 가는 작업이다. 아래 도구들을 하나씩 사용해 보면서 부족한 점들을 나열해 보면  - 여러 레이어를 쉽게 스타일링 작업하기에는 불편함  - OpenGeo Suite의 경우 Web Browser에서 배치로 레이어를 Import하면서 Default SLD 를 생성해 주고 이를 GeoExplorer를 이용해서 하나씩 편집해 나갈 수 있어 그나마 편리함  - uDig은 Desktop 환경이기 때문에 스타일링 작업은 편리하지만 일일이 하나씩 SLD를 내보내기해야 하는 불편함 조만간 데스크탑 환경에서 레이어 스타일링 후 배치로 SLD 파일로 내보내는 기능을 만들어볼까 한다. 대상 소프트웨어는  - ArcGIS Desktop  - Free 또는 Open Source 중 Map Control 라이브러리 : Shapefile, Raster, PostGIS를 지원해야 함 GeoServer  등  WMS (Web Map Service)를 지원하거나 활용하는 경우 Styling을 위하   SLD (Styled Layer Descriptor)를 편집해야 하는 경우 활용할 수 있는 도구 모음 ▣ SLD 배우기 :  http://docs.geoserver.org/stable/en/user/styling/index.html 1. ArcMap의 레이어를 SLD(Styled Layer Descriptor) 파일로 내보내기 ▣ Arcmap2SLD  - mxd to SLD – ArcMap2SLD: http://blogs.onterrasystems.com/gisblog/?p=75  - VB로 제작, Validation 기능 ▣ Arc2Earth Desktop  - SLD/SE 1.0  - 한글 인코딩 지원하지 않지만 도구들 중에서 기능적으로 가장 뛰어남  - 포인트 심볼의 경우 Mark(...

[PostGIS]Proximity & Distance Funtion

OSGeo(Open Source GeoSpatial) 한국어 지부 활동을 하면서 Open Source Winter School 프로그램 중 PostGIS 강사로 참여하게 되었습니다. 1차 강의를 마친 후 메일로 질문도 보내 주시고 합니다. 블로그를 통해 질문에 답하는 자리를 만들어볼까 합니다. 혹시 2차 교육에 관심 있으신 분들은 아래 URL에서 확인바랍니다. *  제1차 GeoSpatial Open Source Winter School  : 2012년 2월 9일 ~ 10일 *  제2차 GeoSpatial Open Source Winter School  : 2012년 2월 28일 ~ 29일 Geometry의 거리(Distance)는 Geometry의 공간좌표체계(spatial reference system)에 정의된 단위(unit)에 의해 결정됩니다. 1. Proximity & Distance 1 ▣ Transverse_Mercator(예: EPSG:2097, Bessle 1841) 좌표를 사용하는 레이어에서 POINT(197215  447711) 지점에서 1KM 반경 내에 있는 대형매장(stores)은 무엇인가? 성능면에서는 ST_DWithin 사용이 유리  ■ ST_DWithin SELECT * FROM stores WHERE ST_DWithin ( the_geom , ST_GeomFromText ( 'POINT(197215 447711)' , 2097 ) , 1000 ) ;  ■ ST_Distance SELECT * FROM stores WHERE ST_Distance ( the_geom , ST_GeomFromText ( 'POINT(197215 447711)' , 2097 ) ) < 1000 ;  ■ ST_Buffer + ST_Intersects SELECT * FROM stores WHE...

[PostGIS]ERROR: LWGEOM_estimated_extent

GeoServer  등  GeoTools 를 사용하는 프로그램의 경우  PostGIS Data Store를 사용하여 레이어의Extent를 구할 때 다음과 같은 오류가 발생하는 경우가 있다. ▣ GeoTools - PostGIS Map<String, Serializable> params = new HashMap<String, Serializable>() ; params.put(JDBCDataStoreFactory.DBTYPE.key, "postgis") ; params.put(JDBCDataStoreFactory.HOST.key, "localhost") ; params.put(JDBCDataStoreFactory.PORT.key, 5432) ; params.put(JDBCDataStoreFactory.SCHEMA.key, " public ") ; params.put(JDBCDataStoreFactory.DATABASE.key, "uoc") ; params.put(JDBCDataStoreFactory.USER.key, "postgres") ; params.put(JDBCDataStoreFactory.PASSWD.key, "postgis") ; try { DataStore pgDataStore = DataStoreFinder . getDataStore ( params ) ; SimpleFeatureSource srcSfs = pgDataStore . getFeatureSource ( "ubsm0103" ) ; ReferencedEnvelope extent = srcSfs . getFeatures ( Filter . INCLUDE ) . getBounds ( ) ; System . out . println ( extent ) ; } catch (IOEx...

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