feat: WMS 서버 안정화
parent
a5f294bee6
commit
0a4ef04aca
8
pom.xml
8
pom.xml
|
|
@ -2,11 +2,11 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>myMap</groupId>
|
||||
<artifactId>myMap</artifactId>
|
||||
<groupId>geoMap</groupId>
|
||||
<artifactId>geoMap</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<version>1.0.0</version>
|
||||
<name>myMap</name>
|
||||
<name>geoMap</name>
|
||||
<url>http://www.egovframe.go.kr</url> <licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
|
|
@ -607,7 +607,7 @@
|
|||
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<directory>${project.basedir}/target</directory> <finalName>myMap</finalName>
|
||||
<directory>${project.basedir}/target</directory> <finalName>geoMap</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
|
|
|
|||
|
|
@ -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<String, Object> getOrganizationUserGlGmGsGfCodesByProjectMasterCompanyCode(String projectMasterCompanyCode) throws Exception {
|
||||
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
|
||||
params.put("comCode", projectMasterCompanyCode);
|
||||
|
||||
List<EgovMap> 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<String, Object> spGetMasterCompanyDistrictParams = new HashMap<String, Object>();
|
||||
|
||||
spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName);
|
||||
|
||||
|
||||
drillingInquiryMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams);
|
||||
|
||||
return spGetMasterCompanyDistrictParams;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public JSONObject drillingInquiryProjectCodes(HttpServletRequest request, HashMap<String, Object> 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<EgovMap> dataList = drillingInquiryMapper.drillingInquiryProjectCodes(params);
|
||||
|
||||
HashMap<String, Object> spGetMasterCompanyDistrictParams = getOrganizationUserGlGmGsGfCodesByProjectMasterCompanyCode(projectMasterCompanyCode);
|
||||
List<String> projectCodeList = new ArrayList<String>();
|
||||
|
||||
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<EgovMap> 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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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<org.geotools.map.Layer> 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<org.geotools.map.Layer> 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<org.geotools.map.Layer> targetLayers, Style style, FeatureLayer layer, Filter filter) throws Exception {
|
||||
private static void addFeatureLayer(ArrayList<org.geotools.map.Layer> targetLayers, Style style, FeatureLayer layer, Filter filter, AVList params) throws Exception {
|
||||
LinkedList<MapStyle> styleList = new LinkedList<MapStyle>();
|
||||
for (FeatureTypeStyle fStyle : style.featureTypeStyles()) {
|
||||
if (fStyle.featureTypeNames().isEmpty()) {
|
||||
|
|
@ -386,19 +391,49 @@ public class RenderMngr {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 필터 청크 로직 추가
|
||||
List<Filter> filterChunks = null;
|
||||
|
||||
// [수정] "request.wms" 키로 GetMapRequest 객체를 찾는 대신,
|
||||
// "request.wms.filterChunks" 라는 새로운 키로 리스트를 직접 찾습니다.
|
||||
Object chunkObject = params.getValue("request.wms.filterChunks");
|
||||
if (chunkObject instanceof List) {
|
||||
try {
|
||||
filterChunks = (List<Filter>) 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<MapStyle> styleList, LayerFactory.LayerType layerType, String serverName, String typeName, FeatureTypeStyle featureStyle) {
|
||||
DuplicatingStyleVisitor visitor = new DuplicatingStyleVisitor();
|
||||
|
|
|
|||
|
|
@ -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<Filter> 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<Filter> baseFilters = new ArrayList<Filter>(); // 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<String, Object> serviceParams = new HashMap<String, Object>();
|
||||
JSONObject result = inquiryService.drillingInquiryProjectCodes(req, serviceParams);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> projectCodes = (List<String>) result.get("dataList");
|
||||
|
||||
if (projectCodes != null && !projectCodes.isEmpty()) {
|
||||
|
||||
// [수정] 청크 분할 로직 (900개 단위)
|
||||
final int CHUNK_SIZE = 900;
|
||||
projectCodeChunks = new ArrayList<Filter>(); // 필터 청크 리스트 초기화
|
||||
|
||||
List<Filter> currentChunk = new ArrayList<Filter>(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<Filter>(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<String, Object> 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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<Filter> 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<Filter> getFilterChunks() {
|
||||
return this.filterChunks;
|
||||
}
|
||||
|
||||
public void setFilterChunks(List<Filter> filterChunks) {
|
||||
this.filterChunks = filterChunks;
|
||||
}
|
||||
|
||||
public String[] getLayers() {
|
||||
return this.layers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,26 +14,9 @@
|
|||
</select>
|
||||
|
||||
<select id="drillingInquiryProjectCodes" parameterType="map" resultType="egovMap">
|
||||
SELECT PROJECT_CODE
|
||||
FROM TABLE(SP_GET_TBL_CSI_BY_KEYWORD(
|
||||
#{constTag, jdbcType=VARCHAR},
|
||||
#{constName, jdbcType=VARCHAR},
|
||||
#{constStartDate, jdbcType=VARCHAR},
|
||||
#{constEndDate, jdbcType=VARCHAR},
|
||||
#{constStateCode, jdbcType=VARCHAR},
|
||||
#{masterCompanyOCode, jdbcType=VARCHAR},
|
||||
#{masterCompanyTwCode, jdbcType=VARCHAR},
|
||||
#{masterCompanyThCode, jdbcType=VARCHAR},
|
||||
#{masterCompanyName, jdbcType=VARCHAR},
|
||||
#{constCompanyName, jdbcType=VARCHAR},
|
||||
#{constComCodes, jdbcType=VARCHAR},
|
||||
#{constCompanyAdmin, jdbcType=VARCHAR},
|
||||
#{constCompanyTel, jdbcType=VARCHAR},
|
||||
NULL,
|
||||
#{sortfield},
|
||||
#{sorttype},
|
||||
#{nCount},
|
||||
#{nPage}))
|
||||
SELECT DISTINCT tpi.PROJECT_CODE
|
||||
FROM TBL_PROJECT_INFO tpi
|
||||
WHERE tpi.PROJECT_MASTER_COMPANY_CODE = #{comCode}
|
||||
</select>
|
||||
|
||||
<select id="getComNameByComCode" parameterType="map" resultType="egovMap">
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue