openlayers 3加載GeoServer發佈的wfs類型服務

轉:https://blog.csdn.net/u013323965/article/details/52449502

問題產生:

     openlayer3加載WFS存在跨域問題,須要用jsonp解決,而jsonp須要用script加載,但加載有誤,如圖所示,讀取cite:bou2_4p圖層的GeoJSON
載入地址是這樣的http://localhost:8080/geoserver/cite/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=cite:bou2_4p&maxFeatures=20000000&outputFormat=application%2Fjson
(與WMS不一樣,真正的發佈地址並非這個)
 
在geoserver中看到,它輸出的格式是json,但若是在js中調用會存在跨域的問題產生
 
但出現瞭如圖所示的問題,查看開發工具發現json數據沒有套上回調名。


 

調用代碼

在代碼中,我將輸出格式改變爲javascript來解決jsonp
 1 //參數字段 
 2     var wfsParams = {  3             service : 'WFS',  4             version : '1.0.0',  5             request : 'GetFeature',  6             typeName : 'cite:bou2_4p',  //圖層名稱 
 7             outputFormat : 'text/javascript',  //重點,不要改變 
 8             format_options : 'callback:loadFeatures'  //回調函數聲明 
 9  }; 10       
11      var vectorSource = new ol.source.Vector({ 12          format: new ol.format.GeoJSON(), 13          loader: function(extent, resolution, projection) {  //加載函數 
14              var url = 'http://localhost:8080/geoserver/wfs'; 15  $.ajax({ 16  url: url, 17                  data : $.param(wfsParams),   //傳參 
18                  type : 'GET', 19                  dataType: 'jsonp',   //解決跨域的關鍵 
20                  jsonpCallback:'loadFeatures'  //回調 
21                      
22  }); 23  }, 24          strategy: ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({ 25              maxZoom: 25    
26  })), 27          projection: 'EPSG:4326'    
28  }); 29       //回調函數使用 
30      window.loadFeatures = function(response) { 31          vectorSource.addFeatures((new ol.format.GeoJSON()).readFeatures(response));  //載入要素 
32              
33  }; 34      var vectorLayer = new ol.layer.Vector({ 35  source: vectorSource 36      });
View Code
但出現瞭如圖所示的問題,查看開發工具發現json數據沒有套上回調名。


問題的解決

 
問題應該是在geoserver中產生的,後來在geoserver的web.xml中發現,jsonp的註釋沒有被註銷,致使沒法輸出jsonp
 
最後結果,看到已經沒有問題
相關文章
相關標籤/搜索