4
4
<!DOCTYPE html>
5
5
< html >
6
6
< head >
7
- < meta charset ="UTF-8 ">
8
- < title data-i18n ="resources.title_layerService "> </ title >
7
+ < meta charset ="UTF-8 ">
8
+ < title data-i18n ="resources.title_layerService "> </ title >
9
+ < style >
10
+ # layersList ,
11
+ # mapLegend {
12
+ max-height : 40vh ;
13
+ overflow : auto;
14
+ font-size : 12px ;
15
+ }
16
+
17
+ # layersList label {
18
+ font-weight : 400 ;
19
+ }
20
+
21
+ .layer-group {
22
+ padding : 4px 0 ;
23
+ }
24
+
25
+ .layer-group ::before {
26
+ width : 10px ;
27
+ height : 10px ;
28
+ display : inline-block;
29
+ margin-right : 6px ;
30
+ background : url(../ img/arrowDown.png) no-repeat center center / contain;
31
+ content : '' ;
32
+ }
33
+
34
+ .layer-group [aria-expanded = 'true' ]::before {
35
+ rotate : 180deg ;
36
+ }
37
+
38
+ .legend-wrapper {
39
+ padding-left : 12px ;
40
+ }
41
+
42
+ </ style >
9
43
</ head >
44
+
10
45
< body style =" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0; ">
11
- < div id ="map " style ="width: 100%;height:100% ">
12
- < div style ="z-index: 999;position: relative ;width: 250px;float: right ">
46
+ < div id ="map " style ="width: 100%;height:100% "> </ div >
47
+ < div style ="z-index: 999;position: absolute ;width:250px;top:0; right:0 ">
13
48
< div class ="panel panel-primary " style ="width:250px;margin-top: 20px;position: absolute;float:right ">
14
49
< div class ="panel-heading ">
15
50
< h5 class ='panel-title text-center '>
16
- < span data-i18n ="resources.text_layerList "> </ span >
51
+ < span data-i18n ="resources.text_layerList "> </ span >
17
52
</ h5 >
18
53
</ div >
19
54
< div class ="panel-body " id ="layersList "> </ div >
20
55
21
56
</ div >
22
- < div class ="panel panel-primary legend " style ="width:250px;margin-top: 400px ;position: absolute;float:right;max-height: 500px;overflow: auto ; ">
57
+ < div class ="panel panel-primary legend " style ="width:250px;margin-top: 50vh ;position: absolute;float:right; ">
23
58
< div class ="panel-heading ">
24
- < h5 class ='panel-title text-center '>
25
- < span data-i18n ="resources.text_legend "> </ span >
26
- </ h5 >
59
+ < h5 class ='panel-title text-center '>
60
+ < span data-i18n ="resources.text_legend "> </ span >
61
+ </ h5 >
27
62
</ div >
28
63
< div class ="panel-body " id ="mapLegend "> </ div >
29
64
</ div >
30
65
</ div >
31
- </ div >
66
+ </ div >
32
67
33
- < script type ="text/javascript " include ="bootstrap-css " src ="../js/include-web.js "> </ script >
34
- < script type ="text/javascript " src ="../../dist/leaflet/include-leaflet.js "> </ script >
35
- < script type ="text/javascript ">
36
- var url = ( window . isLocal ? window . server : "https://iserver.supermap.io" ) + "/iserver/services/map-jingjin/rest/maps/京津地区土地利用现状图" ;
68
+ < script type ="text/javascript " include ="bootstrap " src ="../js/include-web.js "> </ script >
69
+ < script type ="text/javascript " src ="../../dist/leaflet/include-leaflet.js "> </ script >
70
+ < script type ="text/javascript ">
71
+ var url = ( window . isLocal ? window . server : "https://iserver.supermap.io" ) + "/iserver/services/map-jingjin/rest/maps/京津地区土地利用现状图" ;
37
72
var map = L . map ( 'map' , {
38
- preferCanvas : true ,
39
- crs : L . CRS . EPSG4326 ,
40
- center : [ 40.04 , 117.08 ] ,
41
- maxZoom : 18 ,
42
- zoom : 7
73
+ preferCanvas : true ,
74
+ crs : L . CRS . EPSG4326 ,
75
+ center : [ 40.04 , 117.08 ] ,
76
+ maxZoom : 18 ,
77
+ zoom : 7
43
78
} ) ;
44
79
new L . supermap . TiledMapLayer ( url ) . addTo ( map ) ;
45
80
getLayers ( ) ;
46
81
82
+ function createLayersDom ( layers , parentDom , layerName ) {
83
+ layers . map ( function ( layer ) {
84
+ var fullLayerName = layerName || '' ;
85
+ if ( Object . keys ( layer . subLayers ) . length ) {
86
+ fullLayerName = '@@' + layer . name + fullLayerName ;
87
+ var groupWrapper = document . createElement ( 'div' ) ;
88
+ var layerGroup = document . createElement ( 'div' ) ;
89
+ layerGroup . innerHTML = layer . name ;
90
+ layerGroup . className = 'layer-group' ;
91
+ layerGroup . setAttribute ( 'data-toggle' , 'collapse' ) ;
92
+ layerGroup . setAttribute ( 'data-target' , '#' + layer . name ) ;
93
+ groupWrapper . appendChild ( layerGroup ) ;
94
+
95
+ parentDom . appendChild ( groupWrapper ) ;
96
+ var collapse = document . createElement ( 'div' ) ;
97
+ collapse . id = layer . name ;
98
+ collapse . className = 'collapse' ;
99
+ collapse . style . paddingLeft = '18px' ;
100
+ groupWrapper . appendChild ( collapse ) ;
101
+ createLayersDom ( layer . subLayers . layers , collapse , fullLayerName ) ;
102
+ } else {
103
+ var checkbox = document . createElement ( 'input' ) ;
104
+ checkbox . id = layer . name ;
105
+ checkbox . type = 'checkbox' ;
106
+ checkbox . value = layer . name + fullLayerName ;
107
+ var label = document . createElement ( 'label' ) ;
108
+ label . textContent = layer . name ;
109
+ label . style . marginLeft = "8px"
110
+ label . setAttribute ( 'for' , checkbox . id ) ;
111
+ parentDom . appendChild ( checkbox ) ;
112
+ parentDom . appendChild ( label ) ;
113
+ // 初始化,默认获取土地利用图层图例
114
+ if ( checkbox . value === "Landuse_R@Jingjin#1@@京津地区土地利用现状图" ) {
115
+ checkbox . checked = true ;
116
+ createLegend ( ) ;
117
+ }
118
+ var brElement = document . createElement ( 'br' ) ;
119
+ parentDom . appendChild ( brElement ) ;
120
+ }
121
+ } ) ;
122
+ }
123
+
47
124
function getLayers ( ) {
48
- new L . supermap . LayerInfoService ( url ) . getLayersInfo ( function ( serviceResult ) {
49
- serviceResult . result . subLayers . layers . map ( function ( layer ) {
50
- var checkbox = document . createElement ( 'input' ) ;
51
- checkbox . type = 'checkbox' ;
52
- checkbox . value = layer . name ;
53
- var label = document . createElement ( 'label' ) ;
54
- label . textContent = layer . name ;
55
- label . style . marginLeft = "15px"
56
- layersList . appendChild ( checkbox ) ;
57
- layersList . appendChild ( label ) ;
58
- // 初始化,默认获取土地利用图层图例
59
- if ( checkbox . value === "Landuse_R@Jingjin#1" ) {
60
- checkbox . checked = true ;
61
- createLegend ( ) ;
62
- }
63
- var brElement = document . createElement ( 'br' ) ;
64
- layersList . appendChild ( brElement ) ;
65
- } ) ;
66
- var submitBtn = document . createElement ( 'input' ) ;
67
- submitBtn . type = 'button' ;
68
- submitBtn . classList = 'btn btn-default' ;
69
- submitBtn . value = resources . btn_getLegend ;
70
- submitBtn . addEventListener ( 'click' , createLegend ) ;
71
- layersList . appendChild ( submitBtn ) ;
125
+ new L . supermap . LayerInfoService ( url ) . getLayersInfo ( function ( serviceResult ) {
126
+ var layers = serviceResult . result . subLayers . layers ;
127
+ var parentDom = document . getElementById ( 'layersList' ) ;
128
+ var layerName = '@@' + serviceResult . result . name ;
129
+ createLayersDom ( layers , parentDom , layerName ) ;
130
+ var submitBtn = document . createElement ( 'input' ) ;
131
+ submitBtn . type = 'button' ;
132
+ submitBtn . classList = 'btn btn-default' ;
133
+ submitBtn . value = resources . btn_getLegend ;
134
+ submitBtn . addEventListener ( 'click' , createLegend ) ;
135
+ layersList . appendChild ( submitBtn ) ;
136
+ } ) ;
137
+ }
138
+
139
+ function createLegendDom ( layerLegends , parentDom ) {
140
+ layerLegends . forEach ( function ( layerLegend ) {
141
+ var legendWrapper = document . createElement ( 'div' ) ;
142
+ legendWrapper . className = 'legend-wrapper' ;
143
+ var layerName = document . createElement ( 'div' ) ;
144
+ layerName . innerHTML = layerLegend . layerName ;
145
+ parentDom . appendChild ( layerName ) ;
146
+ parentDom . appendChild ( legendWrapper ) ;
147
+ layerLegend . legends . forEach ( function ( legend ) {
148
+ var legendItem = document . createElement ( 'div' ) ;
149
+ var legendPic = document . createElement ( 'img' ) ;
150
+ var legendLabel = document . createElement ( 'label' ) ;
151
+ legendLabel . innerHTML = legend . label ;
152
+ legendLabel . style . marginLeft = "4px"
153
+ // legendPic.src = legend.url;
154
+ legendPic . src = 'data:image/png;base64,' + legend . imageData ;
155
+ legendItem . appendChild ( legendPic ) ;
156
+ legendItem . appendChild ( legendLabel ) ;
157
+ legendWrapper . appendChild ( legendItem ) ;
72
158
} ) ;
159
+ if ( layerLegend . subLayerLegends ) {
160
+ createLegendDom ( layerLegend . subLayerLegends , legendWrapper ) ;
161
+ }
162
+ } )
73
163
}
74
164
75
165
function createLegend ( ) {
76
- var legendContainer = document . getElementById ( "mapLegend" ) ;
77
- legendContainer . innerHTML = ''
78
- // 获取所有被选中的图层,并拼接成参数
79
- var checkboxes = document . querySelectorAll ( '#layersList input[type="checkbox"]' )
80
- var layers = "" ;
81
- checkboxes . forEach ( ( checkbox ) => {
82
- if ( checkbox . checked ) {
83
- layers += checkbox . value + "@@京津地区土地利用现状图 ,"
84
- }
85
- } ) ;
166
+ var legendContainer = document . getElementById ( "mapLegend" ) ;
167
+ legendContainer . innerHTML = ''
168
+ // 获取所有被选中的图层,并拼接成参数
169
+ var checkboxes = document . querySelectorAll ( '#layersList input[type="checkbox"]' )
170
+ var layers = "" ;
171
+ checkboxes . forEach ( ( checkbox ) => {
172
+ if ( checkbox . checked ) {
173
+ layers += checkbox . value + ","
174
+ }
175
+ } ) ;
86
176
87
- // 发起请求,获取图例
88
- var getLayersLegendInfoParams = new L . supermap . GetLayersLegendInfoParameters ( {
89
- // bbox 或 layers 参数必须至少设置一个参数
90
- // bbox: "114.59,37.76,119.51,42.31",
91
- layers : "show:" + layers ,
92
- width : 18 ,
93
- height : 18
94
- } )
95
- new L . supermap . LayerInfoService ( url ) . getLayersLegendInfo ( getLayersLegendInfoParams , function ( serviceResult ) {
96
- serviceResult . result . layerLegends . map ( function ( layerLegend ) {
97
- layerLegend . legends . map ( function ( legend ) {
98
- var legendPic = document . createElement ( 'img' ) ;
99
- var legendLabel = document . createElement ( 'span' ) ;
100
- legendLabel . innerHTML = legend . label ;
101
- legendLabel . style . marginLeft = "15px"
102
- // legendPic.src = legend.url;
103
- legendPic . src = 'data:image/png;base64,' + legend . imageData ;
104
- legendContainer . appendChild ( legendPic ) ;
105
- legendContainer . appendChild ( legendLabel ) ;
106
- var brElement = document . createElement ( 'br' ) ;
107
- legendContainer . appendChild ( brElement ) ;
108
- } )
109
- } )
110
- } ) ;
177
+ // 发起请求,获取图例
178
+ var getLayersLegendInfoParams = new L . supermap . GetLayersLegendInfoParameters ( {
179
+ // bbox 或 layers 参数必须至少设置一个参数
180
+ // bbox: "114.59,37.76,119.51,42.31",
181
+ layers : "show:" + layers ,
182
+ width : 18 ,
183
+ height : 18
184
+ } )
185
+ new L . supermap . LayerInfoService ( url ) . getLayersLegendInfo ( getLayersLegendInfoParams , function ( serviceResult ) {
186
+ createLegendDom ( serviceResult . result . layerLegends , legendContainer ) ;
187
+ } ) ;
111
188
}
112
- </ script >
189
+
190
+ </ script >
113
191
</ body >
114
- </ html >
192
+
193
+ </ html >
0 commit comments