나. GeoServer에서의 WMTS서비스하기 - GeoServer 타일 캐시/타일 레이어에서 GeoWebCache로 서비스 - 물론, 미리 만들어 놓는것도 좋으나, 클라이언트들이 호출시 계속 캐시로 누적되는 방식이라 위 2가지의 장단점을 다 가지고 있습니다. - 미리만든다면 위1번처럼 레벨별 타일로 만드는 시간도 많이 걸리고, 서버가 그동안 느려집니다. 그리고 갱신시에도 이런 작업을 계속 해야하는 유지보수 문제도 걸립니다. 변동이 심한 벡터데이터는 금물. 또한, QGIS 등 데스크탑 프로그램으로 만드는것보다 불안정하겠지요 - 미리 안만들면, 처음 서비스 개시일엔 느립니다. 그리고 큰문제로 WMS는 비동기식으로 서버가 결과를 제때 못주더라도 클라이언트는 잘 돌아갑니다. 그러나 WMTS는 서버가 실시간 타일을 만들고 보내주랴 부하가 걸려 타 서비스에도 영향을 주고, 클라이언트는 각각의 타일이니 몇개의 타임스케줄에 걸려 상당히 버벅거립니다. - 이러한 단점으로 서버에서는 17레벨 이상을 만드는걸 권장하지 않구요(GeoServer에서는 20레벨이상이라지만, 전국 지도를 해보니 16정도가 좋습니다) 그리고, 클라이언트에서도 16레벨이상의 resolutions을 사용하지 않는게 좋습니다. => OpenLayers에서는 Tile(WMTS)레이어로 생성해서 사용합니다. function createTileWMTSLayer(LayerName, LayerTypename, _levelCount, minZoom, maxZoom, _visible, _crossOrigin, _opacity){ if(maxZoom)maxZoom = maxZoom-1; if(!minZoom)minZoom = Map_View.getMaxZoom(); if(!_crossOrigin) _crossOrigin = 'anonymous'; else if(_crossOrigin == "null") _crossOrigin = null; if(!_opacity) _opacity = 0.7; var FGIS_WMTSURL = geoserverURL + 'gwc/service/wmts'; var gridsetName = 'EPSG:900913'; var gridNames = [ 'EPSG:900913:0', 'EPSG:900913:1', 'EPSG:900913:2', 'EPSG:900913:3', 'EPSG:900913:4' , 'EPSG:900913:5', 'EPSG:900913:6', 'EPSG:900913:7', 'EPSG:900913:8', 'EPSG:900913:9' , 'EPSG:900913:10', 'EPSG:900913:11', 'EPSG:900913:12', 'EPSG:900913:13', 'EPSG:900913:14' , 'EPSG:900913:15', 'EPSG:900913:16' , 'EPSG:900913:17', 'EPSG:900913:18', 'EPSG:900913:19', 'EPSG:900913:20']; gridNames.length = _levelCount; var resolutions = [ 156543.03390625, 78271.516953125, 39135.7584765625, 19567.87923828125, 9783.939619140625 , 4891.9698095703125, 2445.9849047851562, 1222.9924523925781, 611.4962261962891, 305.74811309814453 , 152.87405654907226, 76.43702827453613, 38.218514137268066, 19.109257068634033, 9.554628534317017 , 4.777314267158508, 2.388657133579254 , 1.194328566789627, 0.5971642833948135, 0.29858214169740677, 0.14929107084870338]; resolutions.length = _levelCount; var projection = new ol.proj.Projection({ code: 'EPSG:900913', units: 'm', axisOrientation: 'neu' }); var params = { 'VERSION': '1.0.0', 'STYLE': "", 'TILEMATRIX': gridNames, 'TILEMATRIXSET': gridsetName, 'SERVICE': 'WMTS', 'FORMAT': 'image/png' }; return new ol.layer.Tile({ id: LayerName, name: LayerName, layerName: LayerName, source: new ol.source.WMTS({ url: FGIS_WMTSURL, layer: LayerTypename, matrixSet: params['TILEMATRIXSET'], format: params['FORMAT'], projection: projection, tileGrid: new ol.tilegrid.WMTS({ tileSize: [256,256], extent: [-2.003750834E7,-2.003750834E7,2.003750834E7,2.003750834E7], origin: [-2.003750834E7, 2.003750834E7], resolutions: resolutions, matrixIds: params['TILEMATRIX'], crossOrigin: _crossOrigin, }), crossOrigin: _crossOrigin, style: params['STYLE'], wrapX: true, VERSION: params['VERSION'] }), opacity: _opacity, minResolution: resolutionForZoom(minZoom), maxResolution: resolutionForZoom(maxZoom), visible: _visible }); }; |