GIS

ArcGIS Server (ADF) Definition Query : 데피니션 쿼리 소스에서 구현하기

조심이 2009. 11. 11. 10:20
반응형

맵문서 자체에 필요한 피쳐들만을 정의해서 사용할 수 있지만
맵로드시에 많은 데이터중 조건에 의해서 필요한 피쳐들만 보여줄 필요가 있을때
사용한다.

public void DefinitionQuery(string resourceString )
 {        //나는 page_load 이벤트에 사용하여 맵리소를  초기화를 시켰다.
          if (!MapResourceManager1.Initialized)
            MapResourceManager1.Initialize();

        //definition query로 처음 검색조건에 맞는 피쳐만 가져오기
        ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality mapFunc = Map1.GetFunctionality     
       (resourceString) as ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality;

      //Local 리소스를 사용한다.
        MapResourceLocal AGSLocalMapResource = (MapResourceLocal)mapFunc.Resource;
        IServerContext mapcontext = AGSLocalMapResource.ServerContextInfo.ServerContext;
        IMapServerObjects mso = (IMapServerObjects)AGSLocalMapResource.MapServer;

        IMap map = mso.get_Map(AGSLocalMapResource.DataFrame);

     //2개 이상의 레이어 처리(동일 조건일때..)
        int layercheck = 0;
        for (int i = 0; i < map.LayerCount; i++)
        {
            ILayer layer = map.get_Layer(i);

            if (layer is IFeatureLayer)
            {

               if (layer.Name.Equals("레이어1") || layer.Name.Equals("레이어2"))
                {
                    IFeatureLayerDefinition layerDef;

                    string queryString = "조건문";       //조건 검사
                                      
                    IFeatureLayer2 FLayer = layer as IFeatureLayer2;

                    layerDef = (IFeatureLayerDefinition)FLayer;
                    layerDef.DefinitionExpression = queryString;
                    layercheck++;

                    if (layercheck == 2)  //2개의 레이어 처리를 하였다면 빠져나가기.
                    {
                        queryString = "";
                        break;
                    }
                    else
                    {
                        queryString = "";
                        continue;
                    }
                }
            }

         
        }

        AGSLocalMapResource.RefreshServerObjects(); //또는 Map1.refresh(); 사용

 }

반응형