【问题标题】:Strange error returned while trying to access raster pixel value尝试访问光栅像素值时返回奇怪的错误
【发布时间】:2017-09-07 11:52:47
【问题描述】:

我正在尝试通过 OpenLayers getFeatureInfoUrl() 从 webapp 访问通过 MapServer 提供的像素值。服务器响应 msWMSFeatureInfo():WMS 服务器错误。无效的 I/J 值 我试过用谷歌搜索它,但找不到任何线索,说明我的请求可能导致的问题只是 I/J 值是指鼠标点击的坐标,因此问题可能源于 evt.coordinate:

var vs = this.wmsLayer
mapol.on('singleclick', function(evt) {
  document.getElementById('info').innerHTML = '';
  var viewResolution = /** @type {number} */ (view.getResolution());
  var url = vs.getSource().getGetFeatureInfoUrl(
     evt.coordinate, viewResolution, 'EPSG:4326',
      {'INFO_FORMAT': 'text/html'});
  if (url) {
    document.getElementById('info').innerHTML =
        '<iframe seamless src="' + url + '"></iframe>';
  }
});

wmsLayer 使用与请求相同的“EPSG:4326”坐标系。 谁能帮我获取点击位置的像素值:)

【问题讨论】:

  • 您的视图是什么投影?如果它与 EPSG:4326 不同,则需要将传递给 getGetFeatureInfoUrlevt.coordinate 转换为 EPSG:4326。
  • 嗨,谢谢你的线索。我将视图中的投影定义为 EPSG:4326,它现在可以工作了!!!但是,我的地图现在看起来很紧张。是否可以在所有参数中使用 EPSG:3857,它会以这种方式工作吗?另一个问题:我在 .map 文件的 LAYER 类和第一个类中定义了 TEMPLATE,因为光栅被分类以显示更复杂的颜色范围。我必须为每个 CLASS 定义 TEMPLATE 吗?
  • 无论如何,请继续添加您的评论作为答案,以便我确认并将问题标记为已回答。

标签: openlayers raster wms mapserver getfeatureinfo


【解决方案1】:

您传递给#getGetFeatureInfoUrl() 方法的坐标的SRS 需要与您作为参数提供的投影相匹配。因此,您必须将代码更改为

var url = vs.getSource().getGetFeatureInfoUrl(
   ol.proj.toLonLat(evt.coordinate, view.getProjection()),
   viewResolution, 'EPSG:4326', {'INFO_FORMAT': 'text/html'});

【讨论】:

  • 正如我所说,此解决方案有效,但前提是地图视图和图层都在 epsg:4326 中。如果我想在 epsg:3857 中显示地图和图层,getFeatureInfoUrl() 不会返回任何内容。
  • 这可能是 MapServer 配置问题。对此有更多了解的人可能想参与进来。为了进一步调试,如果您可以在所有这些情况下发布 OpenLayers 生成的 GetFeatureInfo 请求 url,这将有所帮助。
  • 您好,很抱歉回复晚了。我以某种方式设法让它继续下去。问题实际上并不在坐标系中,而是 viewResolution 和我的 WMS 具有非常大的单元格/像素。单击或靠近单元格中心会返回正确的结果。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
相关资源
最近更新 更多