From 0a4ef04aca94ad13a7521aecf06c5f2b37febd36 Mon Sep 17 00:00:00 2001 From: thkim Date: Tue, 11 Nov 2025 17:55:34 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20WMS=20=EC=84=9C=EB=B2=84=20=EC=95=88?= =?UTF-8?q?=EC=A0=95=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 +- .../impl/DrillingInquiryServiceImpl.java | 117 ++----------- .../webserver/core/render/RenderMngr.java | 67 +++++-- .../plugin/ows/service/parser/WMSParser.java | 164 ++++++++++-------- .../plugin/ows/wms/wms130/WMSGetMap.java | 2 + .../ows/wms/wms130/request/GetMapRequest.java | 37 ++-- .../inquiry/DrillingInquiryMapper.xml | 23 +-- src/main/webapp/WEB-INF/lib/gt-api-14.5.jar | Bin 201018 -> 0 bytes src/main/webapp/WEB-INF/lib/gt-main-14.5.jar | Bin 1743592 -> 0 bytes .../webapp/WEB-INF/lib/gt-metadata-14.5.jar | Bin 508940 -> 0 bytes .../webapp/WEB-INF/lib/gt-opengis-14.5.jar | Bin 345854 -> 0 bytes .../WEB-INF/lib/gt-referencing-14.5.jar | Bin 1171358 -> 0 bytes .../webapp/WEB-INF/lib/gt-shapefile-14.5.jar | Bin 219401 -> 0 bytes 13 files changed, 191 insertions(+), 227 deletions(-) delete mode 100644 src/main/webapp/WEB-INF/lib/gt-api-14.5.jar delete mode 100644 src/main/webapp/WEB-INF/lib/gt-main-14.5.jar delete mode 100644 src/main/webapp/WEB-INF/lib/gt-metadata-14.5.jar delete mode 100644 src/main/webapp/WEB-INF/lib/gt-opengis-14.5.jar delete mode 100644 src/main/webapp/WEB-INF/lib/gt-referencing-14.5.jar delete mode 100644 src/main/webapp/WEB-INF/lib/gt-shapefile-14.5.jar diff --git a/pom.xml b/pom.xml index f9f5280..72ddcce 100644 --- a/pom.xml +++ b/pom.xml @@ -2,11 +2,11 @@ 4.0.0 - myMap - myMap + geoMap + geoMap war 1.0.0 - myMap + geoMap http://www.egovframe.go.kr The Apache Software License, Version 2.0 @@ -607,7 +607,7 @@ install - ${project.basedir}/target myMap + ${project.basedir}/target geoMap org.apache.maven.plugins diff --git a/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java index f6b57e0..41f9045 100644 --- a/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java +++ b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java @@ -7,6 +7,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.ArrayList; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -28,121 +29,33 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService { @Resource(name="drillingInquiryMapper") private DrillingInquiryMapper drillingInquiryMapper; - - - - - - /** - * 발주기관 사용자의 Gl Gm Gs Gf Codes 구한다 - */ - private HashMap getOrganizationUserGlGmGsGfCodesByProjectMasterCompanyCode(String projectMasterCompanyCode) throws Exception { - - HashMap params = new HashMap(); - - params.put("comCode", projectMasterCompanyCode); - - List datas = drillingInquiryMapper.getComNameByComCode(params); - - - if( datas.size() < 1 ) { - throw new Exception( "발주기관의 gl gm gs gf codes를 구할 수 없습니다." ); - } - - - EgovMap data = datas.get(0); - - String projectMasterCompanyName = MyUtil.getStringFromObject(data.get("comName")); - HashMap spGetMasterCompanyDistrictParams = new HashMap(); - - spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName); - - - drillingInquiryMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams); - - return spGetMasterCompanyDistrictParams; - - } - @Override public JSONObject drillingInquiryProjectCodes(HttpServletRequest request, HashMap params) throws Exception { - JSONObject jsonResponse = new JSONObject(); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String projectMasterCompanyCode = request.getParameter("projectMasterCompanyCode"); + JSONObject jsonResponse = new JSONObject(); + String projectMasterCompanyCode = request.getParameter("PROJECT_MASTER_COMPANY_CODE"); if( projectMasterCompanyCode == null){ - throw new Exception( "projectMasterCompanyCode 값이 존재하지 않습니다." ); + throw new Exception( "PROJECT_MASTER_COMPANY_CODE 값이 존재하지 않습니다." ); } + params.put("comCode", projectMasterCompanyCode); + List dataList = drillingInquiryMapper.drillingInquiryProjectCodes(params); - HashMap spGetMasterCompanyDistrictParams = getOrganizationUserGlGmGsGfCodesByProjectMasterCompanyCode(projectMasterCompanyCode); + List projectCodeList = new ArrayList(); - String masterCompanyOCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gl") ); - String masterCompanyTwCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gm") ); - String masterCompanyThCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") ); - String masterCompanyName = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") ); - String sortfield = "C".equals(MyUtil.getStringFromObject(params.get("constTag"))) ? "0" : "2"; - String sorttype = "2"; - params.put("masterCompanyOCode", masterCompanyOCode); - params.put("masterCompanyTwCode", masterCompanyTwCode); - params.put("masterCompanyThCode", masterCompanyThCode); - params.put("masterCompanyName", masterCompanyName); - params.put("sortfield", sortfield); - params.put("sorttype", sorttype); - - - try { - - try { - - String keyName = "constComCodes"; - - if( params.get("constCompanyName") != null && !MyUtil.getStringFromObject(params.get("constCompanyName")).trim().isEmpty() ) { - params.put(keyName, drillingInquiryMapper.getComCodes(params)); - } else { - params.put(keyName, null); - } - - List dataList = drillingInquiryMapper.drillingInquiryProjectCodes(params); - - - - String lpszProjectCodesWithComma = ""; - for( EgovMap data : dataList ) { - - String projectCode = MyUtil.getStringFromObject(data.get("projectCode")); - if( projectCode != null ) { - if( !lpszProjectCodesWithComma.equals("") ) { - lpszProjectCodesWithComma += " OR "; - } - lpszProjectCodesWithComma += "PROJECT_CODE='" + projectCode + "'"; - } - } - - jsonResponse.put("data", lpszProjectCodesWithComma); - return jsonResponse; - } catch (SQLException e) { - String strTxt = - "---------- BUG REPORTING START ----------" + "\n" + - "에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" + - "params:[\n" + params.toString() + "\n]\n" + - "e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" + - "new Date().toString():[" + new Date().toString() + "]\n" + "\n" + - "---------- BUG REPORTING END ----------" + "\n" + - ""; - System.out.println(strTxt); - throw new Exception( "오류가 발생하였습니다." + "\n" + "SQLException" ); - } - - - } catch (org.json.simple.parser.ParseException e) { - // TODO Auto-generated catch block - throw new Exception( e.getMessage() ); + for( EgovMap data : dataList ) { + String projectCode = MyUtil.getStringFromObject(data.get("projectCode")); + if( projectCode != null ) { + projectCodeList.add(projectCode); + } } + + jsonResponse.put("dataList", projectCodeList); + return jsonResponse; } diff --git a/src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java index 6c766a6..f70c051 100644 --- a/src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java @@ -1,6 +1,5 @@ package kr.or.geoinfo.webserver.core.render; -import kr.or.geoinfo.drilling.inquiry.service.DrillingInquiryService; import kr.or.geoinfo.webserver.core.ServerContext; import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerUtil; @@ -23,6 +22,8 @@ import kr.or.geoinfo.webserver.core.util.AVList; import kr.or.geoinfo.webserver.core.util.ServerUtil; import kr.or.geoinfo.webserver.core.vector.O2DSMngr; import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; + import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import java.awt.Color; @@ -35,6 +36,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; @@ -51,6 +53,7 @@ import org.geotools.data.Transaction; import org.geotools.data.crs.ForceCoordinateSystemFeatureReader; import org.geotools.data.memory.MemoryDataStore; import org.geotools.data.simple.SimpleFeatureSource; +import org.geotools.factory.CommonFactoryFinder; import org.geotools.feature.NameImpl; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.map.GridCoverageLayer; @@ -74,6 +77,7 @@ import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.Name; import org.opengis.filter.Filter; +import org.opengis.filter.FilterFactory2; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.springframework.beans.factory.annotation.Autowired; public class RenderMngr { @@ -287,17 +291,18 @@ public class RenderMngr { } } + private static void makeNamedLayer(ArrayList targetLayers, Layer layer, String styleName, AVList params) throws Exception { if (layer instanceof FeatureLayer) { Filter filter = (Filter)params.getValue("request.wms.filter"); Style layerStyle = ((FeatureLayer)layer).getRenderStyle(styleName); - RenderMngr.addFeatureLayer(targetLayers, layerStyle, (FeatureLayer)layer, filter); // 여기를 주석처리하면 쩜이 박히지 않은 이미지만 생성된다. + RenderMngr.addFeatureLayer(targetLayers, layerStyle, (FeatureLayer)layer, filter, params); // params 전달 } else if (layer instanceof GroupLayer) { GroupLayer groupLayer = (GroupLayer)layer; Filter filter = (Filter)params.getValue("request.wms.filter"); for (FeatureLayer fLayer : groupLayer.getLayerList()) { Style layerStyle = fLayer.getRenderStyle(styleName); - RenderMngr.addFeatureLayer(targetLayers, layerStyle, fLayer, filter); + RenderMngr.addFeatureLayer(targetLayers, layerStyle, fLayer, filter, params); // params 전달 } } else if (layer instanceof WMSLayer) { AVList wmsParams = params.copy(); @@ -327,12 +332,12 @@ public class RenderMngr { private static void makeNamedLayer(ArrayList targetLayers, Layer layer, Style style, AVList params) throws Exception { if (layer instanceof FeatureLayer) { Filter filter = (Filter)params.getValue("request.wms.filter"); - RenderMngr.addFeatureLayer(targetLayers, style, (FeatureLayer)layer, filter); + RenderMngr.addFeatureLayer(targetLayers, style, (FeatureLayer)layer, filter, params); // params 전달 } else if (layer instanceof GroupLayer) { GroupLayer groupLayer = (GroupLayer)layer; Filter filter = (Filter)params.getValue("request.wms.filter"); for (FeatureLayer fLayer : groupLayer.getLayerList()) { - RenderMngr.addFeatureLayer(targetLayers, style, fLayer, filter); + RenderMngr.addFeatureLayer(targetLayers, style, fLayer, filter, params); // params 전달 } } else if (layer instanceof WMSLayer) { AVList wmsParams = params.copy(); @@ -359,7 +364,7 @@ public class RenderMngr { } } - private static void addFeatureLayer(ArrayList targetLayers, Style style, FeatureLayer layer, Filter filter) throws Exception { + private static void addFeatureLayer(ArrayList targetLayers, Style style, FeatureLayer layer, Filter filter, AVList params) throws Exception { LinkedList styleList = new LinkedList(); for (FeatureTypeStyle fStyle : style.featureTypeStyles()) { if (fStyle.featureTypeNames().isEmpty()) { @@ -386,19 +391,49 @@ public class RenderMngr { } } } + + // 필터 청크 로직 추가 + List filterChunks = null; + + // [수정] "request.wms" 키로 GetMapRequest 객체를 찾는 대신, + // "request.wms.filterChunks" 라는 새로운 키로 리스트를 직접 찾습니다. + Object chunkObject = params.getValue("request.wms.filterChunks"); + if (chunkObject instanceof List) { + try { + filterChunks = (List) chunkObject; + } catch (ClassCastException e) { + // 캐스팅 오류 시 로깅 (필요에 따라) + filterChunks = null; + } + } + + FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null); + boolean isRendered = false; for (MapStyle renderStyle : styleList) { try { - System.out.println( - "renderStyle.getLayerType().getType(): [" + renderStyle.getLayerType().getType() + "]\n" + - "renderStyle.getServerName(): [" + renderStyle.getServerName() + "]\n" + - "renderStyle.getTypeName(): [" + renderStyle.getTypeName() + "]\n" - ); SimpleFeatureSource featureSource = O2DSMngr.getFeatureSource((LayerFactory.LayerType)renderStyle.getLayerType(), (String)renderStyle.getServerName(), (String)renderStyle.getTypeName()); - RenderFeatureSource renderSource = new RenderFeatureSource(featureSource); - ExFeatureLayer exLayer = new ExFeatureLayer((FeatureSource)renderSource, (Style)renderStyle); - exLayer.setQuery(new Query(renderSource.getSchema().getTypeName(), filter)); - targetLayers.add((org.geotools.map.Layer)exLayer); + + // 필터 청크가 있는지 확인 + if (filterChunks != null && !filterChunks.isEmpty()) { + // 청크 리스트가 있으면: 청크 개수만큼 레이어를 생성 + for (Filter chunkFilter : filterChunks) { + // 기본 필터(filter)와 청크 필터(chunkFilter)를 AND로 결합 + Filter combinedFilter = ff.and(filter, chunkFilter); + + RenderFeatureSource renderSource = new RenderFeatureSource(featureSource); + ExFeatureLayer exLayer = new ExFeatureLayer((FeatureSource)renderSource, (Style)renderStyle); + exLayer.setQuery(new Query(renderSource.getSchema().getTypeName(), combinedFilter)); + targetLayers.add((org.geotools.map.Layer)exLayer); + } + } else { + // 청크 리스트가 없으면: 기존 방식대로 레이어 1개 생성 + RenderFeatureSource renderSource = new RenderFeatureSource(featureSource); + ExFeatureLayer exLayer = new ExFeatureLayer((FeatureSource)renderSource, (Style)renderStyle); + exLayer.setQuery(new Query(renderSource.getSchema().getTypeName(), filter)); // 기본 필터만 사용 + targetLayers.add((org.geotools.map.Layer)exLayer); + } + isRendered = true; } catch (Exception e) { @@ -409,6 +444,8 @@ public class RenderMngr { throw new IOException("This NamedLayer [" + layer.getName() + "] has no available rendering styles."); } } + + private static void addFeatureTypeStyleList(LinkedList styleList, LayerFactory.LayerType layerType, String serverName, String typeName, FeatureTypeStyle featureStyle) { DuplicatingStyleVisitor visitor = new DuplicatingStyleVisitor(); diff --git a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java index f1425a0..adc5efa 100644 --- a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java @@ -31,6 +31,10 @@ import java.net.URL; import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.ArrayList; +import java.util.List; +import java.util.Arrays; + import javax.servlet.http.HttpServletRequest; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -42,6 +46,11 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.io.IOUtils; + + +import org.geotools.factory.CommonFactoryFinder; +import org.opengis.filter.FilterFactory2; + import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.v1_1.OGCConfiguration; import org.geotools.geometry.jts.ReferencedEnvelope; @@ -258,37 +267,90 @@ public class WMSParser { } catch (Exception e) { LogMngr.getInstance().reqInfo("[SERVICE]", "The value '" + sSld + "' of SLD_BODY is not appropriate. " + e.getMessage()); } - Filter filter = null; + + + + + + Filter baseFilter = null; // 프로젝트 코드 외의 기본 필터 + List projectCodeChunks = null; // 프로젝트 코드 청크 필터 리스트 + try { - Filter fFilter = null; - String strFilter = this.reqMap.get("FILTER"); - if (!ServerUtil.isNullString(strFilter)) { - strFilter = strFilter.trim().replace(" ", ""); - if (strFilter.startsWith("(")) - strFilter = strFilter.substring(1); - if (strFilter.endsWith(")")) - strFilter = strFilter.substring(0, strFilter.length() - 1); - fFilter = getFilter(strFilter); - } - Filter cFilter = null; - String strCql = this.reqMap.get("CQL"); - - // thkim 발주기관에서 요청한 경우, 발주기관에 소속된 시추공만 보여준다. - strCql = drillingProjectCodes(strCql); - if (!ServerUtil.isNullString(strCql)) - cFilter = CQL.toFilter(strCql); - if (fFilter != null) { - if (cFilter != null) { - And and = QueryMngr.filterFactory.and(fFilter, cFilter); - } else { - filter = fFilter; + FilterFactory2 ff = QueryMngr.filterFactory; + List baseFilters = new ArrayList(); // AND로 묶일 기본 필터 + + // 1. "FILTER" 파라미터 처리 + String strFilter = this.reqMap.get("FILTER"); + if (!ServerUtil.isNullString(strFilter)) { + strFilter = strFilter.trim().replace(" ", ""); + if (strFilter.startsWith("(")) strFilter = strFilter.substring(1); + if (strFilter.endsWith(")")) strFilter = strFilter.substring(0, strFilter.length() - 1); + baseFilters.add(getFilter(strFilter)); } - } else if (cFilter != null) { - filter = cFilter; - } + + // 2. "CQL" 파라미터 처리 + String strCql = this.reqMap.get("CQL"); + if (!ServerUtil.isNullString(strCql)) { + baseFilters.add(CQL.toFilter(strCql)); + } + + // 3. 'PROJECT_MASTER_COMPANY_CODE' 파라미터 처리 + String projectMasterCompanyCode = req.getParameter("PROJECT_MASTER_COMPANY_CODE"); + + if (projectMasterCompanyCode != null && !projectMasterCompanyCode.trim().isEmpty()) { + try { + DrillingInquiryService inquiryService = + (DrillingInquiryService) ApplicationContextUtils.getBean("drillingInquiryService"); + + HashMap serviceParams = new HashMap(); + JSONObject result = inquiryService.drillingInquiryProjectCodes(req, serviceParams); + + @SuppressWarnings("unchecked") + List projectCodes = (List) result.get("dataList"); + + if (projectCodes != null && !projectCodes.isEmpty()) { + + // [수정] 청크 분할 로직 (900개 단위) + final int CHUNK_SIZE = 900; + projectCodeChunks = new ArrayList(); // 필터 청크 리스트 초기화 + + List currentChunk = new ArrayList(CHUNK_SIZE); + for (String code : projectCodes) { + currentChunk.add(ff.equals(ff.property("PROJECT_CODE"), ff.literal(code))); + + if (currentChunk.size() == CHUNK_SIZE) { + projectCodeChunks.add(ff.or(currentChunk)); // 900개 묶음 OR 필터를 리스트에 추가 + currentChunk = new ArrayList(CHUNK_SIZE); + } + } + + if (!currentChunk.isEmpty()) { + projectCodeChunks.add(ff.or(currentChunk)); // 마지막 청크 추가 + } + + } else { + baseFilters.add(Filter.EXCLUDE); // 코드가 없으면 제외 + } + + } catch (Exception e) { + LogMngr.getInstance().logError("[SERVICE]", "DrillingInquiryService(projectCodes) 호출 오류: " + e.getMessage()); + baseFilters.add(Filter.EXCLUDE); + } + } + + // 4. 기본 필터 조합 (AND 연산) + if (baseFilters.isEmpty()) { + baseFilter = Filter.INCLUDE; + } else if (baseFilters.size() == 1) { + baseFilter = baseFilters.get(0); + } else { + baseFilter = ff.and(baseFilters); + } + } catch (Exception e) { - throw new OWSServiceException("The value of FILTER or CQL is not appropriate. " + e, "InvalidParameterValue", "FILTER"); + throw new OWSServiceException("The value of FILTER or CQL is not appropriate. " + e, "InvalidParameterValue", "FILTER"); } + GetMapRequest typeRequest = new GetMapRequest(); typeRequest.setBbox(bbox); typeRequest.setBgcolor(bgcolor); @@ -299,9 +361,10 @@ public class WMSParser { typeRequest.setStyles(stylesArry); typeRequest.setTransparent(transparent); typeRequest.setSld(sld); - typeRequest.setFilter(filter); + typeRequest.setFilter(baseFilter); // 최종 조합된 필터 설정 + typeRequest.setFilterChunks(projectCodeChunks); return (Request)typeRequest; - } +} private Request getGetFeatureInfo() throws OWSServiceException, UnsupportedEncodingException { String layers = this.reqMap.get("LAYERS"); @@ -934,49 +997,6 @@ public class WMSParser { - private String drillingProjectCodes(String strCql) throws Exception { - JSONObject result = null; - String projectCodes = null; - - String projectMasterCompanyCode = req.getParameter("projectMasterCompanyCode"); - if( projectMasterCompanyCode != null ) { - try { - // 1. ApplicationContext에서 Service Bean을 직접 가져옵니다. - DrillingInquiryService inquiryService = - (DrillingInquiryService) ApplicationContextUtils.getBean("drillingInquiryService"); - - // 2. 서비스 호출에 필요한 파라미터 준비 - HashMap serviceParams = new HashMap<>(); - // 예: req에서 파라미터를 꺼내서 serviceParams에 담기 - // serviceParams.put("constName", req.getParameter("constName")); - - // 3. 서비스 메서드 호출 - result = inquiryService.drillingInquiryProjectCodes(req, serviceParams); - - projectCodes = MyUtil.getStringFromObject( result.get("data") ); - - // 4. 결과 사용 - System.out.println("WMSService에서 조회된 코드: " + projectCodes); - - } catch (Exception e) { - // Bean을 가져오거나 서비스 호출 시 발생한 예외 처리 - LogMngr.getInstance().logError("[SERVICE]", "DrillingInquiryService 호출 오류: " + e.getMessage()); - } - - - if( projectCodes == null ) { - throw new Exception("projectCodes를 구할 수 없습니다."); - } - if( strCql == null ) { - strCql = " PROJECT_CODE IN (" + projectCodes + ") "; - } else { - strCql = " ( " + strCql + " ) AND (" + projectCodes + ") "; - } - } - - return strCql; - } - } diff --git a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java index b5c66f8..b6e4606 100644 --- a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java @@ -33,6 +33,8 @@ public class WMSGetMap { params.setValue("request.wms.filter", this.requestObj.getFilter()); if (this.requestObj.getSld() != null) params.setValue("request.wms.sld", this.requestObj.getSld()); + + params.setValue("request.wms.filterChunks", this.requestObj.getFilterChunks()); BufferedImage image = null; Document doc = null; try { diff --git a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java index 5f44dbd..8a9e5dc 100644 --- a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java @@ -2,27 +2,36 @@ package kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request; import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; import java.awt.Color; +import java.util.List; + import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.styling.StyledLayerDescriptor; import org.geotools.styling.visitor.DuplicatingStyleVisitor; +import org.opengis.filter.Filter; public class GetMapRequest extends Request { - private String[] layers = null; - - private String[] styles = null; - - private ReferencedEnvelope bbox = null; - - private int width; - - private int height; - - private boolean transparent = false; - - private Color bgcolor = Color.white; - + + + private List filterChunks = null; + + private String[] layers = null; + private String[] styles = null; + private ReferencedEnvelope bbox = null; + private int width; + private int height; + private boolean transparent = false; + private Color bgcolor = Color.white; private StyledLayerDescriptor sld = null; + + public List getFilterChunks() { + return this.filterChunks; + } + + public void setFilterChunks(List filterChunks) { + this.filterChunks = filterChunks; + } + public String[] getLayers() { return this.layers; } diff --git a/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml b/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml index e035958..b633e1f 100644 --- a/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml +++ b/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml @@ -14,26 +14,9 @@