티스토리 뷰
이전 게시글에서는 Geoserver에 레이어를 발행하고, 레이어를 OpenLayer로 띄워보았다.
그리고 OpenLayers 홈페이지에서 웹으로 지도를 불러와서 띄우는 코드를 보며 공부했었다.
https://openlayers.org/en/latest/examples/
이번에는 Geoserver에 올려놓은 레이어들을 지도 위에 불러오는 포스팅을 해보겠다.
vscode live server 이용하면 더욱 편하게 코딩할 수 있당
작업환경
- Visual Studio Code
- Live Server를 이용
레이어 데이터 확인
내가 지도위에 쌓을 레이어의 데이터를 확인해야한다.
GeoServer -> 레이어 미리보기 -> OpenLayers
위의 주소창 url 데이터를 메모장에 복사 붙여넣기 해보면, 아래와 같은 데이터들을 확인할 수 있다.
http://localhost:8090/geoserver/jwkim/wms
?service=WMS
&version=1.1.0
&request=GetMap
&layers=jwkim%3Aadmin_emd
&bbox=179171.578125%2C536569.125%2C216220.796875%2C566855.5
&width=768
&height=627
&srs=EPSG%3A5186
&format=application/openlayers
WMS란?
GIS 데이터에 접근하기 위한 인터페이스로써 웹을 통해 지도 이미지형식으로 서비스하는 것을 말한다.
따라서 필자는 WMS를 이용해서 지도위에 레이어를 쌓을것이다.
위의 데이터를 아래의 params 값으로 넣어준다
이때 format은 image/png로 해줘야한다.
//layer추가
var wmsLayer = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:admin_emd',
'bbox' : ['179171.578125', '536569.125', '216220.796875', '566855.5'],
'width' : '768',
'height' : '627',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
map.addLayer(wmsLayer);
결과
전체코드
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.14.1/css/ol.css" type="text/css">
<style>
.map {
height: 1200px;
width: 100%;
}
</style>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.14.1/build/ol.js"></script>
<title>OpenLayers example</title>
</head>
<body>
<h2>레이어 추가</h2>
<div id="map" class="map"></div>
<script type="text/javascript">
//layer추가
var wmsLayer = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:admin_emd',
'bbox' : ['179171.578125', '536569.125', '216220.796875', '566855.5'],
'width' : '768',
'height' : '627',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//지도
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({source: new ol.source.OSM()}),
],
view: new ol.View({
projection: 'EPSG:900913',
center: ol.proj.fromLonLat([127, 37.5]),
zoom: 10
})
});
map.addLayer(wmsLayer);
//Full Screen 버튼
var myFullScreenControl = new ol.control.FullScreen();
map.addControl(myFullScreenControl);
</script>
</body>
</html>
여러 레이어 중첩하기
한번에 많은 레이어를 불러오다보니까 엄청 느려졌다.. 하하
위에 단일문을 복붙하였다. 시간날때 메서드로 바꿔보자.
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.14.1/css/ol.css" type="text/css">
<style>
.map {
height: 1200px;
width: 100%;
}
</style>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.14.1/build/ol.js"></script>
<title>OpenLayers example</title>
</head>
<body>
<h2>레이어 추가</h2>
<div id="map" class="map"></div>
<script type="text/javascript">
//admin_emd layer추가
var admin_emd = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:admin_emd',
'bbox' : ['179171.578125', '536569.125', '216220.796875', '566855.5'],
'width' : '768',
'height' : '627',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//admin_sgg layer추가
var admin_sgg = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:admin_sgg',
'bbox' : ['179171.578125', '536569.125', '216220.796875', '566855.5'],
'width' : '768',
'height' : '627',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//admin_sid layer추가
var admin_sid = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:admin_sid',
'bbox' : ['179171.65625', '536569.125', '216220.640625', '566855.3125'],
'width' : '768',
'height' : '627',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//building layer추가
building = new ol.layer.Tile({
// var building = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:building',
'bbox' : ['198237.6875', '536769.8125', '208468.21875', '547033.625'],
'width' : '765',
'height' : '768',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//firestation layer추가
var firestation = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:firestation',
'bbox' : ['187630.765625', '541616.875', '212591.015625', '562717.5625'],
'width' : '768',
'height' : '649',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//healthcenter 추가
var healthcenter = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:healthcenter',
'bbox' : ['188136.5', '539746.625', '211089.703125', '562047.9375'],
'width' : '768',
'height' : '746',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//policestation 추가
var policestation = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:policestation',
'bbox' : ['186727.828125', '541685.9375', '211232.9375', '561549.0625'],
'width' : '768',
'height' : '622',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//river 추가
var river = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:river',
'bbox' : ['179220.40625', '537515.3125', '215692.96875', '566031.0625'],
'width' : '768',
'height' : '600',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//road_link2 추가
var road_link2 = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:road_link2',
'bbox' : ['181825.078125', '536813.125', '216154.171875', '565854.8125'],
'width' : '768',
'height' : '649',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//road_link_geographic 추가
var road_link_geographic = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:road_link_geographic',
'bbox' : ['126.794357299805', '37.4306793212891', '127.182807922363', '37.6923599243164'],
'width' : '768',
'height' : '517',
'srs' : 'EPSG:4326',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//stores 추가
var stores = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:stores',
'bbox' : ['182205.53125', '539181.5625', '213761.59375', '563138.0625'],
'width' : '768',
'height' : '583',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//subway 추가
var subway = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:subway',
'bbox' : ['182127.671875', '536496.9375', '215355.609375', '567087.3125'],
'width' : '768',
'height' : '707',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//subway_station 추가
var subway_station = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:subway_station',
'bbox' : ['182443.375', '539637.0625', '214706.734375', '565563.9375'],
'width' : '768',
'height' : '617',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//wardoffice 추가
var wardoffice = new ol.layer.Tile({
visible:true,
source : new ol.source.TileWMS({
url : 'http://localhost:8090/geoserver/jwkim/wms',
params : {
'version' : '1.1.0',
'request' : 'GetMap',
'layers' : 'jwkim:wardoffice',
'bbox' : ['186697.421875', '539727.4375', '210930.453125', '563255.0625'],
'width' : '768',
'height' : '745',
'srs' : 'EPSG:5186',
'format' : 'image/png'
},
serverType : 'geoserver',
})
});
//지도
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({source: new ol.source.OSM()}),
],
view: new ol.View({
projection: 'EPSG:900913',
center: ol.proj.fromLonLat([127, 37.5]),
zoom: 12
})
});
//층이 쌓이는 원리이기때문에 순서가 중요하다.
map.addLayer(admin_sid);
map.addLayer(admin_sgg);
map.addLayer(admin_emd);
map.addLayer(river);
map.addLayer(building);
map.addLayer(road_link_geographic);
map.addLayer(road_link2);
map.addLayer(subway);
map.addLayer(policestation);
map.addLayer(stores);
map.addLayer(wardoffice);
map.addLayer(subway_station);
map.addLayer(healthcenter);
map.addLayer(firestation);
//Full Screen 버튼
var myFullScreenControl = new ol.control.FullScreen();
map.addControl(myFullScreenControl);
</script>
</body>
</html>
Error 해결
1. 지도에 레이어가 안올라가는 문제가 있었는데
원인은 데이터 값을 param 값에 제대로 입력하지 않아서 였다
주소창의 데이터 값에서 %2C와 %3A의 값도 데이터인줄 알고 ㅋㅋㅋ ㅜ 같이 적었다
심지어 약간 형태가 이상해서 이거 혹시 16진수인가 해서 10진수로 변환해서도 데이터를 바꿔서 적었는데 해결이 안되었어서 사알짝쿵 멘붕이 왔는데 선배님이 와서 보고 해결해 주셨다.
이게 뭔지는 다음 게시글로 올려야겠다.
2. 다른 데이터는 멀쩡히 올라가는데 안올라가는 데이터도 있었다.
레이어 편집에 가서 좌표계 값을 수정하거나, 레이어 최소경계 영역을 수정해보면서 해결하였다.
3. 코드를 작성하면서 문제가 하나 있었는데 코드 순서가 중요하다
예를들어 맵을 위에다가 addLayer를 데이터 받아오기 전에 먼저 써주면 페이지가 동작하지 않는다.
그리고 addLayer 순서도 어떤 레이어를 위에 보이게 할지 생각해야하기 때문에 순서도 따져야한다.
2022.04.07 - [GIS] - Geoserver에서 파일 import 해보기
Ref.
https://zzang9iu.tistory.com/26
'GIS' 카테고리의 다른 글
VWorld API (Feat. OSM) (0) | 2022.04.13 |
---|---|
CentOS에서 Geoserver 설치하기 (0) | 2022.04.08 |
Geoserver에서 파일 import 해보기 (0) | 2022.04.07 |
CentOS7에서 PostGIS 설치 (postgis25_12) (0) | 2022.04.07 |
파일의 좌표계 확인하기 (1) | 2022.04.07 |
- Total
- Today
- Yesterday
- 리눅스
- shp2pgsql
- 공간데이터병합
- CreateCell
- yumrepository
- 인터넷안되는환경에서설치
- su postgres 안됨
- 폐쇄망에서패키지설치
- Geoserver
- Some resources were not updated.
- getCell
- 엑셀POI
- SVN
- Postgis
- Centos7에서 Postgresql12 설치
- 리눅스폐쇄망
- apachepoi
- svn프로젝트불러오기
- mybatisif
- 부하측정
- createRow
- Postgresql12
- jdbcType
- getRow
- yumdownloader
- 폐쇄망에서rpm설치
- 공간데이터
- setForceFormulaRecalculation
- postgis 설치
- OpenLayers
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |