1+ <!DOCTYPE html>  
2+ < html > 
3+ < head > 
4+  < meta  charset ="UTF-8 "> 
5+  < title > 分段专题图</ title > 
6+  < link  href ="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css " rel ="stylesheet "> 
7+  < link  href ="http://cdn.bootcss.com/openlayers/4.0.1/ol.css " rel ="stylesheet "> 
8+  < style  type ="text/css "> 
9+  /*图例 style*/ 
10+  .legend  {
11+  position :  absolute;
12+  right :  10px  ;
13+  top :  350px  ;
14+  width :  250px  ;
15+  text-align :  center;
16+  border :  2px   solid # D6E3F1
17+  background :  # FFF
18+  z-index :  1000 ;
19+  display :  none;
20+  }
21+ 
22+  .legendTitle  {
23+  background :  # 1E90FF
24+  }
25+ 
26+  .legendContent  {
27+  padding-left :  15px  ;
28+  padding-right :  15px  ;
29+  height :  160px  ;
30+  display :  block;
31+  overflow-y :  auto;
32+  }
33+ 
34+  .legendItemHeader  {
35+  top :  5px  ;
36+  width :  100px  ;
37+  height :  18px  ;
38+  text-align :  center;
39+  }
40+ 
41+  .legendItemValue  {
42+  top :  5px  ;
43+  width :  120px  ;
44+  text-align :  center;
45+  height :  18px  ;
46+  }
47+ 
48+  /*信息框 style*/ 
49+  # infoBox  {
50+  border :  2px   solid # D6E3F1
51+  position :  absolute;
52+  right :  10px  ;
53+  top :  250px  ;
54+  width :  250px  ;
55+  z-index :  999 ;
56+  display :  none;
57+  }
58+ 
59+  <!- - </ style > 
60+ </ head > 
61+ < body  style =" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0; "> 
62+ < div  id ="map " style ="width: 100%;height:100%;border: 1px solid #dddddd "> </ div > 
63+ < div > 
64+  < div  id ="mapLegend " class ="legend "> 
65+  < div  class ="legendTitle "> 
66+  < span > 图例</ span > 
67+  </ div > 
68+  < div  class ="legendContent "> 
69+  < table > 
70+  < tr > 
71+  < td  class ="legendItemHeader "> 人口密度(1999年)</ td > 
72+  < td  class ="legendItemValue "> 颜色</ td > 
73+  </ tr > 
74+  < tr > 
75+  < td  class ="legendItemHeader "> 0 - 0.02</ td > 
76+  < td  class ="legendItemValue " style ="background: #FDE2CA "> </ td > 
77+  </ tr > 
78+  < tr > 
79+  < td  class ="legendItemHeader "> 0.02 - 0.04</ td > 
80+  < td  class ="legendItemValue " style ="background: #FACE9C "> </ td > 
81+  </ tr > 
82+  < tr > 
83+  < td  class ="legendItemHeader "> 0.04 - 0.06</ td > 
84+  < td  class ="legendItemValue " style ="background: #F09C42 "> </ td > 
85+  </ tr > 
86+  < tr > 
87+  < td  class ="legendItemHeader "> 0.06 - 0.1</ td > 
88+  < td  class ="legendItemValue " style ="background: #D0770B "> </ td > 
89+  </ tr > 
90+  < tr > 
91+  < td  class ="legendItemHeader "> 0.1 - 0.2</ td > 
92+  < td  class ="legendItemValue " style ="background: #945305 "> </ td > 
93+  </ tr > 
94+  </ table > 
95+  </ div > 
96+  </ div > 
97+  < div  id ="infoBox "> 
98+  < div  style ="text-align: center;background: #1E90FF ">  属性表 </ div > 
99+  < div  id ="infoContent " style ="overflow-y: auto; padding: 5px; background-color: #FFFFFF "> 
100+  </ div > 
101+  </ div > 
102+ </ div > 
103+ < script  src ="http://cdn.bootcss.com/openlayers/4.0.1/ol-debug.js "> </ script > 
104+ < script  type ="text/javascript " src ="../../dist/iclient9-openlayers.js "> </ script > 
105+ 
106+ < script  type ="text/javascript "> 
107+  var  map ,  options ,  themeLayer ,  themeSource 
108+  baseUrl  =  "http://113.209.64.227:8090/iserver/services/map-Jingjin/rest/maps/京津地区地图" , 
109+  url2  =  "http://113.209.64.227:8090/iserver/services/data-Jingjin/rest/data" , 
110+  extent  =  [ 114.59 ,  37.76 ,  119.51 ,  42.31 ] , 
111+  projection  =  new  ol . proj . Projection ( { 
112+  extent : extent , 
113+  units : 'm' 
114+  } ) ; 
115+  new  ol . supermap . MapService ( baseUrl ) . getMapInfo ( function  ( serviceResult )  { 
116+  var  mapJSONObj  =  serviceResult . result ; 
117+  map  =  new  ol . Map ( { 
118+  target : 'map' , 
119+  view : new  ol . View ( { 
120+  center : [ 116.85 ,  39.79 ] , 
121+  zoom : 2 , 
122+  projection : projection 
123+  } ) 
124+  } ) ; 
125+  options  =  ol . supermap . TileSuperMapRest . optionsFromMapJSON ( baseUrl ,  mapJSONObj ) ; 
126+  var  layer  =  new  ol . layer . Tile ( { 
127+  source : new  ol . supermap . TileSuperMapRest ( options ) 
128+  } ) ; 
129+  map . addLayer ( layer ) ; 
130+ 
131+  themeSource  =  new  ol . source . Range ( "ThemeLayer" ,  { map : map } ) ; 
132+  themeSource . setOpacity ( 0.8 ) ; 
133+  themeLayer  =  new  ol . layer . Image ( { 
134+  source : themeSource 
135+  } ) ; 
136+  themeLayer . setOpacity ( 0.8 ) ; 
137+  themeSource . style  =  { 
138+  shadowBlur : 16 , 
139+  shadowColor : "#000000" , 
140+  fillColor : "#FFFFFF" 
141+  } ; 
142+  // 开启 hover 高亮效果 
143+  themeSource . isHoverAble  =  true ; 
144+  // hover 高亮样式 
145+  themeSource . highlightStyle  =  { 
146+  stroke : true , 
147+  strokeWidth : 4 , 
148+  strokeColor : 'blue' , 
149+  fillColor : "#00EEEE" , 
150+  fillOpacity : 0.8 
151+  } ; 
152+  // 用于单值专题图的属性字段名称 
153+  themeSource . themeField  =  "POP_DENSITY99" ; 
154+  // 风格数组,设定值对应的样式 
155+  themeSource . styleGroups  =  [ 
156+  { 
157+  start : 0 , 
158+  end : 0.02 , 
159+  style : { 
160+  color : '#FDE2CA' 
161+  } 
162+  } , 
163+  { 
164+  start : 0.02 , 
165+  end : 0.04 , 
166+  style : { 
167+  color : '#FACE9C' 
168+  } 
169+  } , 
170+  { 
171+  start : 0.04 , 
172+  end : 0.06 , 
173+  style : { 
174+  color : '#F09C42' 
175+  } 
176+  } , 
177+  { 
178+  start : 0.06 , 
179+  end : 0.1 , 
180+  style : { 
181+  color : '#D0770B' 
182+  } 
183+  } , 
184+  { 
185+  start : 0.1 , 
186+  end : 0.2 , 
187+  style : { 
188+  color : '#945305' 
189+  } 
190+  } 
191+  ] ; 
192+  //专题图层 mousemove 事件 
193+  themeSource . on ( 'mousemove' ,  function  ( e )  { 
194+  if  ( e . target  &&  e . target . refDataID )  { 
195+  document . getElementById ( "infoBox" ) . style . display  =  "block" ; 
196+  var  fid  =  e . target . refDataID ; 
197+  var  fea  =  themeSource . getFeatureById ( fid ) ; 
198+  if  ( fea )  { 
199+  document . getElementById ( "infoContent" ) . innerHTML  =  "" ; 
200+  document . getElementById ( "infoContent" ) . innerHTML  +=  "ID: "  +  fea . attributes . SMID  +  "<br/>" ; 
201+  document . getElementById ( "infoContent" ) . innerHTML  +=  "行政区名:"  +  fea . attributes . NAME  +  "<br/>" ; 
202+  document . getElementById ( "infoContent" ) . innerHTML  +=  "人口密度:"  +  parseFloat ( fea . attributes . POP_DENSITY99 ) . toFixed ( 5 )  +  "<br/>" ; 
203+  } 
204+  } 
205+  else  { 
206+  document . getElementById ( "infoContent" ) . innerHTML  =  "" ; 
207+  document . getElementById ( "infoBox" ) . style . display  =  "none" ; 
208+  } 
209+  } ) ; 
210+ 
211+  var  pointerInteraction  =  new  ol . interaction . Pointer ( ) ; 
212+  pointerInteraction . handleMoveEvent_  =  function  ( event )  { 
213+  themeSource . fire ( 'mousemove' ,  event ) ; 
214+  } ; 
215+  map . addInteraction ( pointerInteraction ) ; 
216+  clearLayer ( ) ; 
217+  var  getFeatureParam ,  getFeatureBySQLService ,  getFeatureBySQLParams ; 
218+  getFeatureParam  =  new  SuperMap . FilterParameter ( { 
219+  name : "Jingjin" , 
220+  attributeFilter : "SMID > -1" 
221+  } ) ; 
222+  getFeatureBySQLParams  =  new  SuperMap . GetFeaturesBySQLParameters ( { 
223+  queryParameter : getFeatureParam , 
224+  toIndex : 500 , 
225+  datasetNames :[ "Jingjin:BaseMap_R" ] 
226+  } ) ; 
227+  getFeatureBySQLService  =  new  SuperMap . REST . GetFeaturesBySQLService ( url2 ,  { 
228+  format : SuperMap . DataFormat . ISERVER , 
229+  eventListeners : { "processCompleted" : processCompleted ,  "processFailed" : processFailed } 
230+  } ) ; 
231+  getFeatureBySQLService . processAsync ( getFeatureBySQLParams ) ; 
232+  } ) ; 
233+ 
234+  function  processCompleted ( getFeaturesEventArgs )  { 
235+  var  result  =  getFeaturesEventArgs . result ; 
236+  if  ( result  &&  result . features )  { 
237+  themeSource . addFeatures ( result . features ) ; 
238+  map . addLayer ( themeLayer ) ; 
239+  } 
240+  //显示图例 
241+  document . getElementById ( "mapLegend" ) . style . display  =  "block" ; 
242+  } 
243+ 
244+  function  processFailed ( e )  { 
245+  alert ( e . error . errorMsg ) ; 
246+  } 
247+ 
248+  function  clearLayer ( )  { 
249+  document . getElementById ( "mapLegend" ) . style . display  =  "none" ; 
250+  document . getElementById ( "infoBox" ) . style . display  =  "none" ; 
251+  //先清除上次的显示结果 
252+  themeSource . clear ( ) ; 
253+  } 
254+ 
255+ </ script > 
256+ </ body > 
257+ </ html > 
0 commit comments