Ошибка при использовании OGR, чтобы выяснить, находится ли центр пикселя внутри многоугольника

Я пытаюсь разработать (используя C ++ — MSVS 12.0) функцию, которая определяет, какие пиксели (из растрового изображения) имеют центр внутри многоугольника (ранее заполненного с помощью шейп-файла). Я использую GDAL 1.11.0 (только что установил, используя devinstall) для сборки из исходного кода и использую опцию INCLUDE_OGR_FRMTS = YES. Я могу использовать GDAL и большинство функций OGR без проблем. Тем не менее, когда я использую следующий код:

if (polygon->Contains(tmpPoint))

Я получаю сообщение об ошибке: ОШИБКА 6: Поддержка GEOS не включена

Кто-нибудь знает, как решить эту проблему?

Я использую:

#include "ogrsf_frmts.h"

и моя функция объявлена:

void FindPixels(GDALDataset *image, OGRLayer *poLayer, OGRPolygon *polygon)

и часть моего кода:

OGRPoint *tmpPoint = NULL

OGRSpatialReference *spatialReference = NULL;

spatialReference = polygon->getSpatialReference();

tmpPoint = new OGRPoint();

tmpPoint->assignSpatialReference(spatialReference);

цикл начинается:

tmpPoint->setX(imgTLX + (j * imgRes) + imgResHalf);

tmpPoint->setY(imgTLY - (i * imgRes) - imgResHalf);

if (polygon->Contains(tmpPoint))

Заранее спасибо!

мегабайт

0

Решение

использование GDALRasterizeLayers записать изображение многоугольника на растр. Таким образом, вы найдете все пиксели, которые попадают в многоугольник, или нет. По умолчанию прожиг пикселя происходит только в том случае, если центр пересекает многоугольник.

Если исходный слой имеет несколько полигонов, вам может потребоваться различить их, установив фильтр атрибутов или используя поля идентификатора сгоревшего атрибута (хотя это не будет работать, если полигоны перекрываются).

-1

Другие решения


По вопросам рекламы [email protected]