OpenLayers: выполнение вычислений для пикселей в пределах многоугольника - PullRequest
0 голосов
/ 14 января 2019

В OpenLayers 4.6.5 мне нужно выполнить некоторые вычисления для источника TileImage, но только для пикселей, которые находятся внутри многоугольника, и вычислить некоторые базовые статистические данные для многоугольника на основе результатов этих вычислений.

Процесс, который я рассматриваю для каждого многоугольника, будет следующим:

  • Для каждого пикселя в многоугольнике рассчитать значение красной полосы, деленное на зеленую полосу
  • Рассчитать среднее всех значений, рассчитанных для всех пикселей в многоугольнике
  • Создание нового многоугольного слоя, содержащего один многоугольник, идентичный по форме исходному многоугольнику, но затененный цветом на основе среднего значения

Это кажется довольно простой задачей, но я не могу найти в Интернете ничего такого, что обсуждает подобные вещи. Я надеялся найти что-то похожее на метод forEachPixelInFeature, но этого, похоже, не существует. Я подозреваю, что процесс должен начаться с шага, который сначала проверяет каждый пиксель, чтобы определить, находится ли он внутри многоугольника, но я не могу найти в Интернете ничего, что также помогло бы мне в этом.

Обратите внимание, что полигоны, с которыми я работаю, не являются обычными прямоугольниками, и поэтому, к сожалению, любое решение, использующее простые прямоугольные ограничивающие рамки, не будет работать.

Был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление здесь.

1 Ответ

0 голосов
/ 14 января 2019

Вы можете получить пиксели в многоугольнике, как это

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...