1편에 이어서 2편에서는 Image Layer 를 배경지도 위에 표현해보도록 하겠습니다.

 

Image Layer

 

Image Layer를 생성하기 위해 저는 GeoServer에 택지정보시스템에서 제공하는 지구정보데이터를 레이어로 발행시켜두고 진행하였습니다 :)

 

GeoServer를 사용하는 법이 궁금하신 분들은 GeoServer 공식사이트에서 제공하는 메뉴얼을 참고하시면 쉽게 이해하실 수 있습니다. 영어지만 이미지가 모두 첨부되어 있습니다! 본인이 사용하는 버전에 맞는 메뉴얼을 찾아보세요.

 

https://docs.geoserver.org/stable/en/user/index.html

 

GeoServer User Manual — GeoServer 2.20.x User Manual

GeoServer 2.20.x User Manual GeoServer User Manual GeoServer is an open source software server written in Java that allows users to share and edit geospatial data. Designed for interoperability, it publishes data from any major spatial data source using op

docs.geoserver.org

 

Image Layer 를 생성하기 위해 배경지도 맵을 생성합니다.

지난 Vector Layer 와 동일하게 Map 객체를 Layer 와 View 객체를 나누어 선언하여도 되고 함께 사용하셔도 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 배경지도 레이어
let layers = [
    new ol.layer.Tile({
        source: new ol.source.OSM()
    })
];
 
// 배경지도의 View 객체
let view = new ol.View({
    center: [127.8041858889821835.88559485525495],
    projection : 'EPSG:4326',
    zoom: 7
});
 
// 배경지도가 있는 Map
const map = new ol.Map({
    layers: layers,
    target: 'map',
    id : 'map',
    view: view
});
cs

 

배경지도 맵을 생성한 뒤 이제 Image Layer를 생성할텐데, 그 전에 Openlayers에서 Image Layer 를 사용할 수 있는 Source가 다양하게 있습니다. 

  • ol.source.ImageArcGISRest
  • ol.source.ImageCanvas
  • ol.source.ImageMapGuide
  • ol.source.ImageStatic
  • ol.source.ImageWMS
  • ol.source.Raster

저는 이 중에서 ol.source.ImageWMS 를 사용했습니다. 가장 기본적으로 사용되는 WMS source 이고 GeoServer 에 발행한 레이어를 호출할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
let wmsSource = new ol.source.ImageWMS({
    url : 'http://192.168.0.50:9001/geoserver/wms'// GeoServer를 설치한 서버의 URL 과 port를 사용합니다.
    params : {'LAYERS' : 'Sample:the_geom'}, // 발행했던 레이어의 이름을 사용합니다. 작업공간이 여러개면서 같은 레이어를 사용할 경우 작업공간 이름까지 선언해주면 더 명확합니다.
// url : 'http://192.168.0.50:9001/geoserver/Sample/wms?service=WMS&version=1.1.0&request=GetMap&layers=Sample:the_geom', // 혹은 url에 service, request, layers, version 등의 요소를 추가하여 사용할 수 도 있습니다.
    ratio : 1,
    serverType : 'geoserver'
});
 
let wmsLayer = new ol.layer.Image({
    source : wmsSource
});
 
map.addLayer(wmsLayer);
cs

어떻게 보면 Vector Layer 보다 쉽게 레이어를 호출합니다 :)

 

Image Layer 생성 화면

 

GeoServer에 발행한 레이어를 배경지도에 추가하여 표출하면 이렇게 나타난다!

이렇게 호출된 Image Layer 에 각 속성정보를 알고 싶을 때는 Openlayers Source의 함수 중 getGetFeatureInfoUrl() 을 사용하여 확인할 수 있습니다.

 

Openlayers에서 제공하는 API 설명

getGetFeatureInfoUrl() 은 좌표, 해상도, 좌표계, 데이터를 읽을 포맷 으로 파라미터를 주면 사용자가 읽어드릴 포맷 형식으로 데이터를 제공받을 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
map.on('click'function (evt) {
    document.getElementById('info').innerHTML = ''// 속성정보를 표출할 div 초기화
 
    let viewResolution = view.getResolution(); // 
    let url = wmsSource.getGetFeatureInfoUrl(evt.coordinate, viewResolution, 'EPSG:4326', { 'INFO_FORMAT''text/html' }); // 좌표, 해상도, 좌표계, 읽을 포맷
 
    if(url){
        document.getElementById('info').innerHTML = '<iframe width="100%" seamless="" src="' + url + '"></iframe>';
    }
});
cs

 

위와같이 작성하게 되면 지도에 feature 를 클릭하면 info div에 속성정보가 나타나게 됩니다.

 

Image Layer feature 클릭 이벤트 화면

 

역시 캡쳐화면보단 움직이는게 눈에 확 들어오네요!

Vector Layer에 이어 Image Layer 를 지도화면에 표출하는 방법에 대하여 설명을 해보았습니다.

가장 기본적인 Openlayers 기능이면서 레이어를 표출할 때 쓰기에 정리를 해봤습니다.

Image Layer 의 전체 소스도 첨부합니다!

wmsLayers.html
0.00MB

 

앞으로는 레이어를 좀 더 동적으로 만드는 방법이라거나 스타일을 동적으로 변경하는 등, 더 다양한 OpenLayers 기능을 소개해보도록 하겠습니다. 감사합니다 :)

'GIS > Openlayers' 카테고리의 다른 글

[Openlayers] Vector Layer 와 Image Layer - 1  (0) 2022.01.07
[Openlayers] GIS 오픈소스 Openlayers란?  (2) 2022.01.06

안녕하세요. 씨엔스 입니다.

오늘은 GIS 개발에서 오픈소스로 사용되고 있는 Openlayers 에 대하여 간략하게 소개하고 설명해보려 합니다.

지도서비스를 개발하기 위해서 Kakao나 Naver의 지도 API를 사용하는 경우도 있지만 오픈소스로 이용할 수 있는 라이브러리가 바로 Openlayers 인데요.

PostgreSQL 과 Geoserver 를 이용하여 매우 다양하게 사용할 수 있는 장점이 있습니다.

 

www.openlayers.org

 

OpenLayers - Welcome

A high-performance, feature-packed library for all your mapping needs.

openlayers.org

 

 

GIS 에 대해 자세히 설명하기 전에 기본 지식이 있다는 가정하에 글을 작성합니다.

우선 Openlayers 의 구조를 간단하게 설명해보도록 하겠습니다.

설명이 잘못되었거나 부족하다면 언제든 댓글 남겨주세요! 더 열심히 공부하겠습니다.

Openlayers 구조

 

Openlayers에서 지도서비스가 나타나기 위해서는 Map이 핵심요소로 필요합니다.

Map은 지도화면에 배경지도(BingMaps, GoogleMap, Kakao, Naver, OSM, 브이월드) 또는 배경지도 위에 WMS/WFS 레이어를 표출하기 위해 필요한 필수 객체 입니다.

Map을 사용하여 지도를 화면에 표출하기 위해서는 Layer와 View, Interaction, Controls 와 같은 요소가 필요한데 각각을 설명하자면,

Layer는 배경지도 또는 레이어를 표출하기 위해 사용하는 객체입니다. 하나 이상의 레이어가 필요하여 Map에서 배열로 사용됩니다.

View는 해상도, 화면 레벨, 좌표 등 지도의 시각적 효과에 대한 변수들을 정의합니다.

Controls는 화면에 고정된 위치에 사용되는 버튼등에 이벤트를 적용하여 회전, 위치이동 등의 이벤트를 제공합니다.

Interaction은 마우스, 키보드 등의 이벤트로 효과를 제공합니다. (true, false)

 

설명만으로는 이해가 잘 안될 수 있어 Openlayer를 이용하여 지도 화면을 띄워보도록 하겠습니다.

 

1
2
3
<link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
<script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
cs

먼저 Openlayers를 사용하기 위해 js 와 css를 추가해줍니다.

 

1
<div id="map" class="map" style="width: 600px; height: 50%;"></div>
cs

그리고 body 안에 div 태그에서 지도 화면을 띄울 곳을 정합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
    var layers = [
        new ol.layer.Tile({
          source: new ol.source.OSM()
        })
    ];
    var map = new ol.Map({
        layers: layers,
        target: 'map',
        view: new ol.View({
          center: [14206608.0228070654345508.083662013],
          zoom: 6
        })
    });
</script>
cs

Map 객체에 필요한 Layer와 View 객체를 추가하여 OSM기반의 배경지도를 화면에 표출하는 소스 입니다.

 

이렇게 하여 전체 소스를 정리하자면

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
<!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>Openlayers-baseMap</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
</head>
<body>
    <div id="map" class="map" style="width: 600px; height: 50%;"></div>
    <script>
      var layers = [
        new ol.layer.Tile({
          source: new ol.source.OSM()
        })
      ];
      var map = new ol.Map({
        layers: layers,
        target: 'map',
        view: new ol.View({
          center: [14206608.0228070654345508.083662013],
          zoom: 6
        })
      });
    </script>
</body>
</html>
cs

이런 식으로 HTML 소스를 작성하게 됩니다.

 

HTML파일을 저장하고 브라우저로 열면 화면이 나타나게 됩니다.

 

Map, Layer, View 객체를 이용하여 가장 간단하고 따라하기 쉬운 지도화면을 만들어 보았습니다.

Openlayers의 장점은 이처럼 간단하고 누구나 따라하여 사용할 수 있다는거같아요!

 

여기에 추가로 WMS나 WFS, Vector, Tile 등 다양한 Layer 객체를 배경지도 위에 올려 표현할 수 있고,

PostgreSQL등의 공간정보 사용이 가능한 데이터베이스와 Geoserver를 이용하여 많은 퍼포먼스를 낼 수 있는 

Openlayers의 기능을 적어보려 합니다.

 

감사합니다!

'GIS > Openlayers' 카테고리의 다른 글

[Openlayers] Vector Layer 와 Image Layer - 2  (0) 2022.01.12
[Openlayers] Vector Layer 와 Image Layer - 1  (0) 2022.01.07

+ Recent posts