Avec OpenLayers 3, je n'arrive pas à faire disparaître ce message:
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.
Voici le code:
// 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
});
J'ai essayé de définir le paramètre crossOrigin sur:
crossOrigin: null
crossOrigin: 'null'
crossOrigin: 'anonymous'
Je ne vois que le contrôle du zoom avant / arrière mais le calque n'est pas rendu.
Je suis allé avec l'option 3 de simon ci-dessous. J'ai activé CORS dans GeoServer en copiant les fichiers jar nécessaires de jetty-servlets et en l'activant dans le \ 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>
Après avoir fait cela, j'ai de nouveau testé la page et je reçois la même erreur:
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.
On dirait que je manque encore quelque chose. Dois-je faire quelque chose du côté OpenLayers?
J'ai fini par me débarrasser de Jetty et désinstaller complètement GeoServer. Le problème est que lorsque vous installez le programme d'installation de geoserver windows, il installe une version de jetty qui a 4 ans! (Jetty version 6.1.8) Même si j'avais copié les fichiers jar pour CORS, il n'est pris en charge que dans Jetty 7+.
J'ai découvert que vous pouvez installer un fichier WAR. J'ai décidé d'utiliser Tomcat car c'est ce sur quoi GeoServer est principalement testé selon cette note du site GeoServer:
Remarque GeoServer a été principalement testé à l'aide de Tomcat, et par conséquent ces instructions peuvent ne pas fonctionner avec d'autres applications de conteneur.
Voici les instructions pour installer le fichier WAR:
http://docs.geoserver.org/stable/en/user/installation/war.html
C'est aussi une belle vidéo de démonstration:
https://www.youtube.com/watch?v=YEOA8WWWVCw
Une fois l'installation terminée, vous activez CORS: