Sử dụng OpenLayers 3, tôi không thể xóa thông báo này:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver:8085/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:view1&maxFeatures=1&outputFormat=JSON. This can be fixed by moving the resource to the same domain or enabling CORS.
Đây là mã:
// Ol3 only supports Projections "EPSG:4326" and "EPSG:3857". For every other projection you need proj4js
proj4.defs("EPSG:2236", "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
// Leases Layer
var myLayer = new ol.layer.Vector({
source: new ol.source.GeoJSON({
projection: 'EPSG:2236',
url: 'http://myserver:8085/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:view1&maxFeatures=1&outputFormat=JSON',
crossOrigin: null
})
});
// View
var view = new ol.View({
projection: 'EPSG:2236',
center: [0, 0],
zoom: 4
});
// Map
var map = new ol.Map({
target: 'map',
renderer: 'canvas',
layers: [myLayer],
view: view
});
Tôi đã thử thiết lập cài đặt crossOrigin thành:
crossOrigin: null
crossOrigin: 'null'
crossOrigin: 'anonymous'
Tôi chỉ thấy điều khiển phóng to / thu nhỏ nhưng lớp không được hiển thị.
Tôi đã đi với tùy chọn 3 của simon dưới đây. Tôi đã kích hoạt CORS trong GeoServer bằng cách sao chép các tệp jar jetty-servlets cần thiết và bật nó trong \ WEB-INF \ web.xml:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
Sau khi tôi làm điều đó, tôi đã kiểm tra lại trang và nhận được cùng một lỗi:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver:8085/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:view1&maxFeatures=1&outputFormat=JSON. This can be fixed by moving the resource to the same domain or enabling CORS.
Hình như tôi vẫn còn thiếu một cái gì đó. Tôi có phải làm bất cứ điều gì từ OpenLayers Side không?
Cuối cùng tôi đã thoát khỏi Jetty và gỡ cài đặt hoàn toàn GeoServer. Vấn đề là khi bạn cài đặt trình cài đặt windows geoserver, nó sẽ cài đặt một phiên bản cầu cảng đã 4 năm tuổi! (Phiên bản Jetty 6.1.8) Mặc dù tôi đã sao chép các tệp jar cho CORS, nhưng nó chỉ được hỗ trợ trong Jetty 7+.
Tôi phát hiện ra rằng bạn có thể cài đặt tệp WAR. Tôi đã quyết định sử dụng Tomcat vì đó là những gì GeoServer chủ yếu được thử nghiệm theo ghi chú này từ trang web GeoServer:
Lưu ý GeoServer đã được thử nghiệm chủ yếu bằng Tomcat và do đó các hướng dẫn này có thể không hoạt động với các ứng dụng container khác.
Đây là các hướng dẫn để cài đặt tệp WAR:
http://docs.geoserver.org/ sóng / en / user / install / war.html
Đây cũng là một video hướng dẫn tuyệt vời:
https://www.youtube.com/watch?v=YEOA8WWWVCw
Sau khi hoàn tất cài đặt, bạn kích hoạt CORS: