我正在使用Google和OpenLayers JS库创建一个包含地图的小网页(v2.13)。地图的基本层是谷歌街道地图,这很好,我可以浏览地图,放大等。
我在映射中添加了许多层,这些层来自托管在远程服务器上的Web映射服务(我指的是代码)。这也很好,层叠在谷歌地图上也很好。
问题是,当我单击地图上的图层特性时,WMSGetFeatureInfo控件无法工作。不向指定的URL发送任何请求,也不会触发回调函数,任何事情都不会发生。下面是一些代码:
var remoteGeoServer = "https://www.remotegeoserver.com/geoserver/wms";
var options = {
controls: [],
maxExtent: new OpenLayers.Bounds(420000, 485000, 770000, 985000),
projection: "EPSG:2157",
units: 'm',
scales: [5000000, 2500000, 1250000, 600000, 400000, 200000, 100000, 50000, 25000]
};
var map = new OpenLayers.Map('map-container', options);
// ... define styles, rules etc.
var overlayLayer = new OpenLayers.Layer.WMS("Overlayed Layer", remoteGeoServer, {<some_options>}); // other layers are created too...
var infoControls = {
click: new OpenLayers.Control.WMSGetFeatureInfo({
url: "/geoserver/wms",
title: 'Identify features by clicking',
layers: [overlayedLayer],
infoFormat: 'text/plain',
queryVisible: true
})
};
var baseLayer = new OpenLayers.Layer.Google("Google Streets", {numZoomLevels: 20});
map.addLayers( [baseLayer, overlayLayer] );
map.setBaseLayer( baseLayer );
for (var i in infoControls) {
infoControls[i].events.register("getfeatureinfo", this, showInfo);
map.addControl(infoControls[i]);
}
// ... and later
function showInfo(evt) {
console.log("Hurray!");
}
infoControls.click.activate();我应该解释一下,尽管infoControls中的infoControls被称为"/geoserver/wms",但在我的服务器上没有运行web映射服务器。我只是将GetFeatureInfo请求转发给运行实际geoserver的远程服务器。否则,相同来源的策略将启动,GetFeatureInfo请求将被拒绝。
但是什么都没有发生,我的"/geoserver/wms“端点永远不会被调用。我做错了什么吗?另外,这不是我的主要问题,但是为什么我能够在创建层时成功地给OpenLayers远程服务器URL (如果相同的原点策略不适用的话--尽管映射仍然很好,并且对远程服务器的GET映像请求是成功的)。
值得注意的是,当我用远程服务器url替换infoControls中的本地url路径时,单击映射会触发调试控制台中相同来源的策略错误。
发布于 2014-06-29 10:48:30
我为这个问题找到了其他人想要的一些不同的潜在解决方案,但没有一个对我有用。最后,唯一起作用的是:
OpenLayers.Layer.WMS中)必须与用于GetFeatureInfo构造函数的URL相同(在OpenLayers.Control.WMSGetFeatureInfo中)否则,映射层将工作,但GetFeatureInfo请求将失败。我不知道仅仅是域名需要相同,还是完整的URL。
我对此并不特别高兴。这意味着我必须在服务器上创建一个端点,它充当代理,并将GetMap请求路由到实际的远程geoserver。我以前不需要这么做(为什么不-同一来源的政策?)现在,它会增加映射中显示的层的延迟时间(更不用说我的服务器会受到GetMap请求的冲击)。
这似乎是OpenLayers的一个问题(但我不确定)。如果有人知道解决方案,我会很感兴趣的。
https://stackoverflow.com/questions/24469745
复制相似问题