首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenLayers GetFeatureInfo请求未被触发

OpenLayers GetFeatureInfo请求未被触发
EN

Stack Overflow用户
提问于 2014-06-28 18:27:47
回答 1查看 1.4K关注 0票数 0

我正在使用Google和OpenLayers JS库创建一个包含地图的小网页(v2.13)。地图的基本层是谷歌街道地图,这很好,我可以浏览地图,放大等。

我在映射中添加了许多层,这些层来自托管在远程服务器上的Web映射服务(我指的是代码)。这也很好,层叠在谷歌地图上也很好。

问题是,当我单击地图上的图层特性时,WMSGetFeatureInfo控件无法工作。不向指定的URL发送任何请求,也不会触发回调函数,任何事情都不会发生。下面是一些代码:

代码语言:javascript
复制
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路径时,单击映射会触发调试控制台中相同来源的策略错误。

EN

回答 1

Stack Overflow用户

发布于 2014-06-29 10:48:30

我为这个问题找到了其他人想要的一些不同的潜在解决方案,但没有一个对我有用。最后,唯一起作用的是:

  • 在层创建构造函数中使用的URL (在OpenLayers.Layer.WMS中)必须与用于GetFeatureInfo构造函数的URL相同(在OpenLayers.Control.WMSGetFeatureInfo中)

否则,映射层将工作,但GetFeatureInfo请求将失败。我不知道仅仅是域名需要相同,还是完整的URL。

我对此并不特别高兴。这意味着我必须在服务器上创建一个端点,它充当代理,并将GetMap请求路由到实际的远程geoserver。我以前不需要这么做(为什么不-同一来源的政策?)现在,它会增加映射中显示的层的延迟时间(更不用说我的服务器会受到GetMap请求的冲击)。

这似乎是OpenLayers的一个问题(但我不确定)。如果有人知道解决方案,我会很感兴趣的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24469745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档