OpenLayers:在多边形内的像素上运行计算

时间:2019-01-14 04:32:23

标签: openlayers

在OpenLayers 4.6.5中,我需要对TileImage源运行一些计算,但仅针对位于多边形内的像素,并根据这些计算结果为多边形计算一些基本统计信息。

我为每个多边形设想的过程如下:

  • 对于多边形中的每个像素,计算红色带除以绿色带的值
  • 计算为多边形中所有像素计算的所有值的平均值
  • 创建一个新的多边形图层,其中包含一个与原始多边形形状相同的多边形,但以基于平均值的颜色进行着色

这似乎是一个相当简单的任务,但是我在网上找不到任何讨论这种事情的东西。我希望找到一些类似于“ forEachPixelInFeature”方法的东西,但这似乎并不存在。我怀疑该过程需要从首先检查每个像素以确定它是否在多边形内的步骤开始,但是我在网上找不到任何可以帮助我的东西。

请注意,我正在使用的多边形不是规则的矩形,因此,不幸的是,任何使用简单矩形边界框的解决方案都行不通。

如果有人能指出我正确的方向,我将非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以像这样在多边形中获取像素

var geom = myFeature.getGeometry();
var size = map.getSize();
var pixels = [];
if (geom.intersectsExtent(map.getView().calculateExtent(size))) {
  for (var i=0; i<size[0]; i++) {
    for (var j=0; j<size[1]; j++) {
      var coordinate = map.getCoordinateFromPixel([i,j]);
      if (geom.intersectsCoordinate(coordinate)) pixels.push([i,j]);
    }
  }
}
console.log(pixels);