본문 바로가기
개발 공부 Today I Learned

[국비 82일차 TIL] geoServer 지도 띄우기 및 시도, 시군구 옵션 셀렉트 박스

by 개발자신입 2024. 3. 21.
반응형

 

ServletController

 

package servlet.controller; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import servlet.service.ServletService; @Controller public class ServletController { ‌@Resource(name = "ServletService") ‌private ServletService servletService; ‌@RequestMapping(value = "/main.do") ‌public String mainTest(ModelMap model) throws Exception { ‌‌System.out.println("main start"); ​​​​​​​​List<Map<String, Object>> sdList = servletService.selectSD(); ​​​​​​​​List<Map<String, Object>> sggList = servletService.selectSGG(); ​​​​​​​​List<Map<String, Object>> bjdList = servletService.selectBJD(); ​​​​​​​​ ​​​​​​​​model.addAttribute("sdList", sdList); ​​​​​​​​model.addAttribute("sggList", sggList); ​​​​​​​​model.addAttribute("bjdList", bjdList); ​​​​​​​​ ‌‌return "main/main"; } }

 

ServletService (인터페이스)

package servlet.service; import java.util.List; import java.util.Map; public interface ServletService { ‌String addStringTest(String str) throws Exception; ‌List<Map<String, Object>> selectSD(); ‌List<Map<String, Object>> selectSGG(); ‌List<Map<String, Object>> selectBJD(); }

 

 

ServletImpl

 

package servlet.impl; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.psl.dataaccess.util.EgovMap; import servlet.service.ServletService; @Service("ServletService") public class ServletImpl extends EgovAbstractServiceImpl implements ServletService{ ‌@Resource(name="ServletDAO") ‌private ServletDAO dao; ‌public String addStringTest(String str) throws Exception { ‌‌List<EgovMap> mediaType = dao.selectAll(); ‌‌return str + " -> testImpl "; } ‌@Override ‌public List<Map<String, Object>> selectSD() { ‌‌return dao.selectList("servlet.sdlist"); } ‌@Override ‌public List<Map<String, Object>> selectSGG() { ‌‌return dao.selectList("servlet.sgglist"); } ‌@Override ‌public List<Map<String, Object>> selectBJD() { ‌‌return dao.selectList("servlet.bjdlist"); } }

 

ServletDAO

package servlet.impl; import java.util.List; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import egovframework.rte.psl.dataaccess.util.EgovMap; @Repository("ServletDAO") public class ServletDAO extends EgovComAbstractDAO { ‌@Autowired ‌private SqlSessionTemplate session; ‌public List<EgovMap> selectAll() { ‌‌return selectList("servlet.serVletTest"); } }

 

 

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>브이월드 오픈API</title> <script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script> <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v6.15.1/build/ol.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v6.15.1/ol.css"> <!-- 제이쿼리 --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>2DMap</title> <script type="text/javascript"> ‌$(document) ‌‌‌.ready( function() { let map = new ol.Map( ‌‌‌{ // OpenLayer의 맵 객체를 생성한다. ‌‌‌‌target : 'map', // 맵 객체를 연결하기 위한 target으로 <div>의 id값을 지정해준다. ‌‌‌‌layers : [ // 지도에서 사용 할 레이어의 목록을 정희하는 공간이다. ‌‌‌‌new ol.layer.Tile( ‌‌‌‌‌‌{ ‌‌‌‌‌‌‌source : new ol.source.OSM( ‌‌‌‌‌‌‌‌‌{ ‌‌‌‌‌‌‌‌‌‌url : 'https://api.vworld.kr/req/wmts/1.0.0/5FEEDEDB-3705-3E32-8DC7-583B0B613B26/Base/{z}/{y}/{x}.png' // vworld의 지도를 가져온다. ‌‌‌‌‌‌‌‌‌}) ‌‌‌‌‌‌}) ], ‌‌‌‌view : new ol.View({ // 지도가 보여 줄 중심좌표, 축소, 확대 등을 설정한다. 보통은 줌, 중심좌표를 설정하는 경우가 많다. ‌‌‌‌‌center : ol.proj.fromLonLat([ 128.4, ‌‌‌‌‌‌‌35.7 ]), ‌‌‌‌‌zoom : 7 ‌‌‌‌}) ‌‌‌}); ‌// sd 시,도 ‌var wms1 = new ol.layer.Tile( ‌‌‌{ ‌‌‌‌source : new ol.source.TileWMS( ‌‌‌‌‌‌{ ‌‌‌‌‌‌‌target : 'wms', ‌‌‌‌‌‌‌url : 'http://localhost/geoserver/korea/wms?service=WMS', // 1. 레이어 URL ‌‌‌‌‌‌‌params : { ‌‌‌‌‌‌‌‌'VERSION' : '1.1.0', // 2. 버전 ‌‌‌‌‌‌‌‌'LAYERS' : 'korea:tl_sd', // 3. 작업공간:레이어 명 ‌‌‌‌‌‌‌‌'BBOX' : [ ‌‌‌‌‌‌‌‌‌‌-2.0037508342789244E7, ‌‌‌‌‌‌‌‌‌‌-2.00489661040146E7, ‌‌‌‌‌‌‌‌‌‌2.0037508342789244E7, ‌‌‌‌‌‌‌‌‌‌2.0048966104014594E7 ], ‌‌‌‌‌‌‌‌'SRS' : 'EPSG:3857', // SRID ‌‌‌‌‌‌‌‌'FORMAT' : 'image/png', // 포맷 ‌‌‌‌‌‌‌‌/* 'CQL_FILTER' : "sd_nm LIKE '%서울특별시%'" */ ‌‌‌‌‌‌‌}, ‌‌‌‌‌‌‌serverType : 'geoserver', ‌‌‌‌‌‌}), ‌‌‌‌‌​​​​opacity: 0.5 // 투명도 설정 ‌‌‌}); ‌map.addLayer(wms1); // 맵 객체에 레이어를 추가함 ‌// sgg 시군구 ‌var wms2 = new ol.layer.Tile( ‌‌‌{ ‌‌‌‌source : new ol.source.TileWMS( ‌‌‌‌‌‌{ ‌‌‌‌‌‌‌target : 'wms', ‌‌‌‌‌‌‌url : 'http://localhost/geoserver/korea/wms?service=WMS', // 1. 레이어 URL ‌‌‌‌‌‌‌params : { ‌‌‌‌‌‌‌‌'VERSION' : '1.1.0', // 2. 버전 ‌‌‌‌‌‌‌‌'LAYERS' : 'korea:tl_sgg', // 3. 작업공간:레이어 명 ‌‌‌‌‌‌‌‌'BBOX' : [ ‌‌‌‌‌‌‌‌‌‌-2.0037508342789244E7, ‌‌‌‌‌‌‌‌‌‌-2.00489661040146E7, ‌‌‌‌‌‌‌‌‌‌2.0037508342789244E7, ‌‌‌‌‌‌‌‌‌‌2.0048966104014594E7 ], ‌‌‌‌‌‌‌‌'SRS' : 'EPSG:3857', // SRID ‌‌‌‌‌‌‌‌'FORMAT' : 'image/png', // 포맷 ‌‌‌‌‌‌‌‌/* 'CQL_FILTER' : 'col_adm_se=11560' */ ‌‌‌‌‌‌‌}, ‌‌‌‌‌‌‌serverType : 'geoserver', ‌‌‌‌‌‌}), ‌‌‌‌‌​​​​opacity: 0.5 // 투명도 설정 ‌‌‌}); ‌map.addLayer(wms2); // 맵 객체에 레이어를 추가함 ‌// bjd 법정동 ‌var wms3 = new ol.layer.Tile( ‌‌‌{ ‌‌‌‌source : new ol.source.TileWMS( ‌‌‌‌‌‌{ ‌‌‌‌‌‌‌target : 'wms', ‌‌‌‌‌‌‌url : 'http://localhost/geoserver/korea/wms?service=WMS', // 1. 레이어 URL ‌‌‌‌‌‌‌params : { ‌‌‌‌‌‌‌‌'VERSION' : '1.1.0', // 2. 버전 ‌‌‌‌‌‌‌‌'LAYERS' : 'korea:tl_bjd', // 3. 작업공간:레이어 명 ‌‌‌‌‌‌‌‌'BBOX' : [ ‌‌‌‌‌‌‌‌‌‌-2.0037508342789244E7, ‌‌‌‌‌‌‌‌‌‌-2.00489661040146E7, ‌‌‌‌‌‌‌‌‌‌2.0037508342789244E7, ‌‌‌‌‌‌‌‌‌‌2.0048966104014594E7 ], ‌‌‌‌‌‌‌‌'SRS' : 'EPSG:3857', // SRID ‌‌‌‌‌‌‌‌'FORMAT' : 'image/png', // 포맷 ‌‌‌‌‌‌‌‌/* 'CQL_FILTER' : "bjd_nm LIKE '%후암동%'" */ ‌‌‌‌‌‌‌}, ‌‌‌‌‌‌‌serverType : 'geoserver', ‌‌‌‌‌‌}), ‌‌‌‌‌​​​​opacity: 0.5 // 투명도 설정 ‌‌‌}); ‌map.addLayer(wms3); // 맵 객체에 레이어를 추가함 }); </script> <style type="text/css"> .map { ‌height: 800px; ‌width: 100% } .select-box-container { ‌display: flex; ‌justify-content: left; ‌align-items: left; ‌height: 50vh; } .select-box { ‌margin: 0 20px; } </style> </head> <body> ‌<div id="map" class="map"></div> ‌<div class="select-box-container"> ‌‌<div class="select-box"> ‌‌‌<h2>시도 선택</h2> ‌‌‌<select id="sdSelect"> ‌‌‌‌<c:forEach var="row" items="${sdList}"> ‌‌‌‌‌<option value="${row.sd_nm}">${row.sd_nm}</option> ‌‌‌‌</c:forEach> ‌‌‌</select> ‌‌</div> ‌</div> </body> </html>

 

Servlet-SQL.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="servlet"> ​​​​<select id="sdlist" resultType="HashMap"> ​​​​​​​​SELECT sd_nm ​​​​​​​​FROM tl_sd ​​​​</select> ​​​​ ​​​​<select id="sgglist" resultType="HashMap"> ​​​​​​​​SELECT sgg_nm ​​​​​​​​FROM tl_sgg ​​​​</select> ​​​​ ​​​​<select id="bjdlist" resultType="HashMap"> ​​​​​​​​SELECT bjd_nm ​​​​​​​​FROM tl_bjd ​​​​</select> </mapper>

 

반응형

댓글