【发布时间】:2012-12-17 13:58:45
【问题描述】:
我正在使用 GeoExt、OpenLayers 开发一个 Web 应用程序,并拥有自己的 GeoServer 来提供各种地图。不过,如果需要,我想让用户添加其他 WMS,以便能够使用所有需要的图层。
因此,我对 GetFeatureInfo 请求的问题。现在我在geoext的地图面板上附加了一个工具栏按钮,
new GeoExt.Action({
iconCls: "feature",
map: map,
toggleGroup: "tools",
tooltip: "Feature",
control: featureControl
})
它的控制属性是
var featureControl = new OpenLayers.Control.WMSGetFeatureInfo({
queryVisible: true,
drillDown: true,
infoFormat:"application/vnd.ogc.gml"
});
我还定义了一个事件侦听器,以便在收到响应后执行我真正想做的事情,但这与这里无关。我的问题如下:
考虑到用户点击了有 2 个以上可见层并且其中至少一个来自不同来源的点,OpenLayers 将不得不针对不同来源执行一个 AJAX 请求,并且根据 OpenLayers 自己的文档,
收到 GetFeatureInfo 响应时触发。事件 对象有一个带有响应正文的文本属性(字符串),一个 features 属性与解析的特征数组,一个 xy 属性 与触发鼠标单击或悬停事件的位置 请求,以及请求本身的请求属性。如果向下钻取 设置为 true 并发出多个请求以收集功能 来自所有层、文本和请求的信息将仅包含响应 最后一个请求的主体和请求对象。
所以,是的,它显然不会立即那样工作。看一下调试器,我可以清楚地看到,从不同的来源给出两个层,它实际上执行了请求,只是它不等待第一个的响应并跳转到下一个(显然,是异步的)。我已经考虑过一个接一个地处理请求,这意味着按照上述方式执行第一个请求,一旦完成并保存响应,就可以进行下一个请求。但我还是习惯了 GeoExt 使用的数据结构。
我是否缺少任何 API(无论是 GeoExt 还是 OpenLayers)选项/方法?有什么好的解决方法吗?
感谢阅读:-)
PS:对不起,如果我不够清楚,英语不是我的母语。如果上述内容不够清楚,请告诉我:)
【问题讨论】:
标签: extjs openlayers geoserver getfeatureinfo