openlayers3(이하 OL3)와 Leaflet Feature Click Event 이벤트를 알아보겠습니다.

서비스바로가기

Openlayers3 와 Leaflet 라이브러리를 받을 수 있는 곳은 아래와 같습니다. 

OpenLayers3 사이트  :  https://openlayers.org/ 

Leaflet 사이트 : http://leafletjs.com/

VWORLD 사이트  :  http://map.vworld.kr

 

1. Openlayers3(OL3)

<script></script>부분은 아래와 같습니다.

3행~15행 : wfs 데이터 불러오기

35행~ 46행 : OL3 지도 띄우기

48행~96행 : Feature Click 기능 구현

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<script type="text/javascript">
    //wfs 불러오기
    var vectorSource = new ol.source.Vector({
        format : new ol.format.GeoJSON(),
        url: function(extent) {
            return 'http://*.***.**.***:8080/geoserver/progworks/wfs?service=WFS&' +
            'version=1.1.0&'+
            'request=GetFeature&'+
            'typename=progworks:z_upis_c_uq152&' +
            'outputFormat=application/json&'+
            'srsname=EPSG:3857&' +
            'bbox=' + extent.join(','+ ',EPSG:3857';
        },
        strategy: ol.loadingstrategy.bbox
    })
    
    //레스터 지도
    var raster = new ol.layer.Tile({
        source: new ol.source.XYZ({
               url: 'http://xdworld.vworld.kr:8080/2d/Base/201802/{z}/{x}/{y}.png'
           })
    });
 
    var vector = new ol.layer.Vector({
        source: vectorSource,
        style: new ol.style.Style({
            stroke: new ol.style.Stroke({
                color: 'rgba(0, 0, 255, 1.0)',
                width: 2
            })
        })
    });
 
    //지도띄우기
    var map = new ol.Map({
        
        layers: [raster,vector],
       
        target: document.getElementById('map'),
       
        view: new ol.View({
          center: [14128579.824512570.74],
          maxZoom: 19,
          zoom: 14
        })
    });
    
    var select = null;
 
    var selectSingleClick = new ol.interaction.Select({
        multi: true
    });
 
    var selectClick = new ol.interaction.Select({
        condition: ol.events.condition.click,
        multi: true
    });
 
    var selectPointerMove = new ol.interaction.Select({
        condition: ol.events.condition.pointerMove,
        multi: true
    });
 
    var selectAltClick = new ol.interaction.Select({
        condition: function(mapBrowserEvent) {
            return ol.events.condition.click(mapBrowserEvent) &&
                ol.events.condition.altKeyOnly(mapBrowserEvent);
        },
        multi: true
    });
 
    var selectElement = document.getElementById('type');
 
    var changeInteraction = function() {
        if (select !== null) {
            map.removeInteraction(select);
        }
        var value = selectElement.value;
        if (value == 'singleclick') {
            select = selectSingleClick;
        } else if (value == 'click') {
            select = selectClick;
        } else if (value == 'pointermove') {
            select = selectPointerMove;
        } else if (value == 'altclick') {
            select = selectAltClick;
        } else {
            select = null;
        }
        if (select !== null) {
            map.addInteraction(select);
        }
    };
 
    selectElement.onchange = changeInteraction;
    changeInteraction();    
    
</script>
cs

 

<body></body>부분은 아래와 같습니다.

1
2
3
<body>
    <div id="map"></div>
</body>
cs

 

2. Leaflet

<script></script>부분은 아래와 같습니다.

4행 : leaflet 지도 띄우기

7행 : VWORLD 지도로 변경

9행 : wfs데이터 URL 설정

11행~19행 : 파라메타 설정

27행~51행 : wfs 로드 및 클릭이벤트 구현

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<script type="text/javascript">
 
    //leaflet 지도 띄우기
    var leafletMap = L.map('leafletMap').setView([37.52470308242787126.9234],14)
    
    //Vworld Tile 변경
    L.tileLayer('http://xdworld.vworld.kr:8080/2d/Base/201802/{z}/{x}/{y}.png').addTo(leafletMap);
         
    var owsrootUrl = 'http://*.***.**.***:8080/geoserver/progworks/wfs';
    
    var defaultParameters = {
        service : 'WFS',
        version : '1.1.0',
        request : 'GetFeature',
        typeName : 'progworks:z_upis_c_uq152',
        outputFormat : 'application/json',
        format_options : 'callback:getJson',
        SrsName : 'EPSG:4326',
    };
    
    var parameters = L.Util.extend(defaultParameters);
    
    var URL = owsrootUrl + L.Util.getParamString(parameters);
    
    var WFSLayer = null;
    var selected;
    var ajax = $.ajax({
        url : URL,
        dataType : 'json',
        jsonpCallback : 'getJson',
        
        success: function(response) {
            WFSLayer = L.geoJson(response, {
                style: function (feature) {
                    return{
                        color: '#0000FF',
                        weight: 4
                    }; 
                }
            }).on('click'function (e) {
                if (selected) {
                  e.target.resetStyle(selected)
                }
                selected = e.layer
                selected.bringToFront()
                selected.setStyle({
                  'color''red'
                })
            }).addTo(leafletMap)
        }
    });
    
</script>
cs

<body></body>부분은 아래와 같습니다.

1
2
3
<body>
    <div id="leafletMap"></div>
</body>
cs

 

3. 결과화면

+ Recent posts