• Programming by 白影를 방문하신 여러분을 환영합니다 :)

매우 간단하다...

shp 파일의 경로로 파일을 열고

객체를 호출한 다음에

해당 sde의 layer에 집어넣는다...

여기서 객체가 1개인 경우는 상관없지만 여러개가 있는 경우 아래와 같이 while문을 이용해서 넣어주는 것이 좋다.

몇개인지 굳이 셀 필요는 없으니까...

Arcobject를 만져본 사람이라면 대략 변수가 뭘 의미하는지는 아실거라 생각하고

아래 소스만 올립니다. (아래소스만으로는 안되고... 위에 기본적인 설정 및 접속 세팅은 필요합니다...)



            IFeatureClass pFClass = pWorkspace.openFeatureClass(layerName);             

            FeatureClass shpFClass = null;    

            ShapefileWorkspaceFactory shapefileWorkspaceFactory = new ShapefileWorkspaceFactory();

            Workspace workspace = new Workspace(shapefileWorkspaceFactory.openFromFile(shpPath, 0));

            shpFClass = new FeatureClass(workspace.openFeatureClass(shpNm));

            

            String shapeFieldName = shpFClass.getShapeFieldName();

            Fields shpFields = (Fields) shpFClass.getFields();

              

            int lngIndex = shpFields.findField(shapeFieldName);

            Field field = (Field) shpFields.getField(lngIndex);

            

            int shpFieldCount = shpFields.getFieldCount();

            FeatureCursor featureCursor = new FeatureCursor(shpFClass.search(null, true));            

            IFeature shpFeature = (IFeature) featureCursor.nextFeature();

              

            while (shpFeature != null) {

                StringBuffer row = new StringBuffer();

                IFeature pFeature = pFClass.createFeature();                


                for (int index = 0; index < shpFieldCount; index++) {

                    int fieldType = shpFeature.getFields().getField(index).getType();

                    if(pFeature.getFields().findField(shpFeature.getFields().getField(index).getName())==-1){

                        if(shpFeature.getFields().getField(index).getName().equals("FID"))

                            strError=shpFeature.getValue(index).toString();

                        continue;

                    }

                switch (fieldType) {

                    case esriFieldType.esriFieldTypeDouble:

                        if(!shpFeature.getFields().getField(index).getName().equals("AREA") && !shpFeature.getFields().getField(index).getName().equals("LEN")){         

                            row.append(shpFeature.getValue(index) + "\t");

                          }

                        break;

                    case esriFieldType.esriFieldTypeInteger:      

                        break;

                    case esriFieldType.esriFieldTypeSingle:

                        row.append(shpFeature.getValue(index) + "\t");

                        break;

                    case esriFieldType.esriFieldTypeSmallInteger:

                        row.append(shpFeature.getValue(index) + "\t");

                        break;

                    case esriFieldType.esriFieldTypeString:

                      row.append(shpFeature.getValue(index) + "\t");

                    break;

                    case esriFieldType.esriFieldTypeGeometry:

                      row.append("(geometry)" + "\t");

                      

                    IGeometry Geometry = shpFeature.getShape();

                    Geometry.setSpatialReferenceByRef(FromProjection);

                    Geometry.project(ToProjection);

                  

                    IEnvelope shpExtent = Geometry.getEnvelope();

                    pFeature.setShapeByRef(Geometry);

                    break;

                }

              }

                  

                pFeature.setValue(pFeature.getFields().findField("FieldNm"), FieldValue);

                pFeature.store(); 

                shpFeature = (IFeature) featureCursor.nextFeature();     

            }


'Programming > Arcgis' 카테고리의 다른 글

ArcObject API Local 설치  (0) 2015.03.27

Arcobject API를 Local에 설치하기


대부분 회사들이 망분리를 하고 있기 때문에 외부 API를 끌어다 쓸수 없는 경우가 많다.

그런경우 Local에 API를 설치하여 사용해야 하는데 Arcobject도 마찬가지이다.


본인도 갑작스런 망분리에.... 로컬로 바꾸는 법을 몰라서 조금 헤매였다...

처음 받았던 소스에 API도 제대로 다 안 들어있는 것도 문제였고 세팅도 제대로 되어있지 않았다.


먼저 설치할 API를 다운로드 받는다. (로그인 필수... 가입이 안되어있다면 가입부터 하자.)

https://developers.arcgis.com/en/downloads/

필자는 Javascrip로 개발을 하였기때문에 빨간 네모칸의 자료를 다운 받았다.

물론 구버전도 받을수 있다. (옵션 선택)



다운로드를 받은 후 압축을 푼다.



압축을 풀면 아래와 같은 내용물이 보일거다.

그중에 arcgis_js_api 부분만 필요하므로 프로젝트에 js들을 모아둔 폴더로 카피한다.

그리고 install.html 파일을 열어서 설명서를 읽어보면



위와 같은 설명이 적혀있는데 말 그대로 init.js와 dojo.js 파일을 찾아서 [HOSTNAME_AND_PATH_TO_JSAPI] 이부분을 자신이 해당 시스템의 ip 주소를 입력해주면 된다. 예를 들면 10.20.30.40이 접속 주소라면 저 부분에 적어주면 된다. Local에서 테스트 용도로 사용하려면 "http://localhost:포트번호"를 적어주면 된다.

그리고 물론 GIS에서 API 링크를 로컬 주소로 바꿔주는것도 잊어먹으면 안된다.


<script type="text/javascript" src="${Ctx}/js//arcgis_js_api/library/3.8/3.8/init.js"></script>

위와 같이 적어주면 된다. 뒤쪽의 init.js는 안 적어도 되지만 간혹 안되는 경우가 있으면 지정해주면 잘 작동한다.



'Programming > Arcgis' 카테고리의 다른 글

Arcobject shp파일을 sde의 layer에 import하기  (0) 2015.03.27
1