Usando o OpenLayers 3, não consigo receber esta mensagem:
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.
Este é o código:
// 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
});
Tentei definir a configuração crossOrigin para:
crossOrigin: null
crossOrigin: 'null'
crossOrigin: 'anonymous'
Só vejo o controle de aumento / redução de zoom, mas a camada não é renderizada.
Eu fui com a opção 3 do Simon abaixo. Habilitei o CORS no GeoServer, copiando os arquivos jar necessários dos jetty-servlets e habilitando-os no \ 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>
Depois disso, testei a página novamente e recebi o mesmo erro:
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.
Parece que ainda estou perdendo alguma coisa. Preciso fazer alguma coisa do OpenLayers Side?
Acabei me livrando do Jetty e desinstalando completamente o GeoServer. O problema é que quando você instala o instalador geoserver do Windows, ele instala uma versão do jetty com 4 anos de idade! (Jetty versão 6.1.8) Embora eu tenha copiado os arquivos jar para o CORS, ele é suportado apenas no Jetty 7+.
Descobri que você pode instalar um arquivo WAR. Decidi usar o Tomcat, pois é nisso que o GeoServer é mais testado, de acordo com esta nota no site do GeoServer:
Nota O GeoServer foi testado principalmente usando o Tomcat e, portanto, essas instruções podem não funcionar com outros aplicativos de contêiner.
Estas são as instruções para instalar o arquivo WAR:
http://docs.geoserver.org/stable/en/user/installation/war.html
Este é um bom vídeo de instruções também:
https://www.youtube.com/watch?v=YEOA8WWWVCw
Depois de concluir a instalação, você ativa o CORS: