728x90
SMALL
parameter가 상관이 없으면 아래와 같은 소스를 사용할 수 있다
WMSCapabilities parser를 사용하고
fetch를 이용해 geoserver에서 getcapabilities를 request한다
응답한다면 result값을 변환하고 그 안에 있는 해당 layerId의 EX_GeographicBoundingBox값을 가져온다
(bbox=경계영역의 모서리좌표.. 그런것임...)
이것을 proj의 transformextent함수를 사용하여 원하는 좌표로 변환해준다
나같은 경우는 3857로 변환해주었다
변환된 extent값을 map.getView().fit() 함수에 넣어주면 그 영역대로 설정이 된다
뭔가 자동줌을 하는건 안되고 extent를 구해서 fit해주는 방법이 최선인것 같다
function setExtentFromGeoserver(layerId, isUsrLayer) {
var base_url = geoserver_url + "?layers=" + geoserver_uri + ":"+ layerId;
var parser = new ol.format.WMSCapabilities();
// Parse WMS Capabilities to retrieve layer extent
fetch(base_url + '&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities').then(function(response) {
return response.text();
}).then(function(text) {
var result = parser.read(text);
var extent = result.Capability.Layer.Layer.find(l => l.Name === layerId).EX_GeographicBoundingBox;
var extent_3857 = ol.proj.transformExtent(extent, 'EPSG:4326', 'EPSG:3857');
map.getView().fit(extent_3857);
});
}
하지만 나는 지도의 영역이 고정되어있지않고 parameter가 필요한 상황이었기 때문에
추후 parameter를 가져와서 extent를 구할 수 있는 소스로 변경하게된다...
그글은 다음글에...
728x90
LIST
댓글