放大时点图层 WMS GetFeatureInfo 失败

Posted

技术标签:

【中文标题】放大时点图层 WMS GetFeatureInfo 失败【英文标题】:Point Layer WMS GetFeatureInfo failing when zoom in 【发布时间】:2014-05-02 16:29:49 【问题描述】:

我在 GisStackExchange 上发布了这个,但运气不好。

我有一个问题,我认为这与 OpenLayers 和我的 Google 地图基础层之间的交互有关(与坐标系统不一致,或类似的东西)。也许这也可能与我通过 WMS 发送到 GeoServer 的请求有关。但我很困惑。

我的设置:就像我说的,我有一个带有来自 google 的基础层的 olMap。 这是地图初始化:

function initMap() 

    // World Geodetic System 1984 projection (lon/lat)
    var WGS84 = new OpenLayers.Projection("EPSG:4326");

    // WGS84 Google Mercator projection (meters)
    var WGS84_google_mercator = new OpenLayers.Projection("EPSG:900913");

    var options = 
       projection: WGS84_google_mercator,
       displayProjection: WGS84,
    ;


    window.map = new OpenLayers.Map('map_canvas', options);

    var google_default =  new OpenLayers.Layer.Google("Google Default", wrapDateLine: false, numZoomLevels: 30, sphericalMercator: true)
    var google_satellite = new OpenLayers.Layer.Google("Google Satellite", type: google.maps.MapTypeId.SATELLITE, wrapDateLine: false)

    map.addLayers([google_default]);


    window.map.zoomTo(2);
    window.map.setCenter(0);

        // build up all controls
    window.map.addControl(new OpenLayers.Control.Zoom());
    window.map.addControl(new OpenLayers.Control.MousePosition())
    window.map.addControl(new OpenLayers.Control.Navigation());
    window.map.addControl(new OpenLayers.Control.LayerSwitcher());


当缩放较小时,服务器会向我发送带有功能信息的响应,但是当放大时服务器不再响应。

我试图修复传递缓冲区参数区域以在服务器端创建交叉点。但是即使缩放值过高,我也没有很好的结果:

vendorParams: 
   buffer: 100, // one hundred is an excessive value
, 

我还打印出缩放时不同但有意义的 event.xy,不是吗?

在 WMSGetFeatureInfo 控件侦听器的 beforegetfeatureinfo 方法中启动警报:

beforegetfeatureinfo function(event) 
                  // Code here to set the content of queryableMapLayers
                  // The event object will contain xy of mouse click
                  alert(event.xy);
                

没有缩放我得到 (1136, 273) 值和 (600, 304) 大缩放大约在相同的地图位置。就像我说的,我对这个问题感到困惑。我花了很多时间在谷歌上搜索它,但我没有找到任何指南。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我建议为您的地图对象使用正确的坐标参考,即 EPSG:3857 (Web Mercator)。我也不认为地图有 30 个缩放级别。以下是 Google 卫星底图的示例地图对象。

//define map object with base layers
map = new OpenLayers.Map('OpenLayers_canvas', 
    projection: 'EPSG:3857',
    layers:
        [
        new OpenLayers.Layer.Google('Google Satellite',  type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22 )
        ],
    center: new OpenLayers.LonLat(-99.1638182, 19.3880964).transform('EPSG:4326', 'EPSG:3857'),
    zoom: 10
);

【讨论】:

以上是关于放大时点图层 WMS GetFeatureInfo 失败的主要内容,如果未能解决你的问题,请参考以下文章

WMS GetFeatureInfo;多层,不同来源

手动生成 WMS GetFeatureInfo URL

怎样使GeoServer在WMS的GetFeatureInfo请求返回JSON格式数据

如何设置wms参数(bbox、width、height、x、y)

地理服务器和传单 GetFeatureInfo

Mapserver 忽略了我的 GetFeatureInfo-requests 模板文件