Как создать полигон с дырками в библиотеке GEOS

Я использую библиотеку GEOS и пытаюсь создать Polygon с дырой в нем. В соответствии с документация, Я должен пройти в LinearRing, который представляет собой внешнюю «оболочку», и std::vector<Geometry*>, который представляет собой отверстия в оболочке. Первый параметр прост, но второй доставляет мне неприятности. Polygon хочет, чтобы элементы во втором параметре были LineStringс (LineString это подкласс Geometry); в противном случае выдается исключение о том, что LineStrings нужны для дырок. Если я просто брошу LineStringс Geometryзатем выдает исключение. Если я не приведу его, я получу ошибку компиляции, говорящую, что указатели одного типа не могут быть преобразованы в указатели другого типа. Я не могу понять, что здесь делать.

Вот пример короткого кода, который демонстрирует ошибку:

geos::geom::CoordinateSequence* temp = factory->getCoordinateSequenceFactory()->create((std::size_t) 0, 0);

temp->add(geos::geom::Coordinate(0, 0));
temp->add(geos::geom::Coordinate(100, 0));
temp->add(geos::geom::Coordinate(100, 100));
temp->add(geos::geom::Coordinate(0, 100));
temp->add(geos::geom::Coordinate(0, 0));

geos::geom::LinearRing *shell=factory->createLinearRing(temp);

temp = factory->getCoordinateSequenceFactory()->create((std::size_t) 0, 0);

temp->add(geos::geom::Coordinate(1, 1));
temp->add(geos::geom::Coordinate(10, 1));
temp->add(geos::geom::Coordinate(10, 10));
temp->add(geos::geom::Coordinate(1, 10));
temp->add(geos::geom::Coordinate(1, 1));

geos::geom::LinearRing *hole=factory->createLinearRing(temp);
holes->push_back((geos::geom::Geometry*) hole);

factory->createPolygon(shell,holes);

Какие-либо предложения?

3

Решение

Я решил это.

У меня была строка включения, которая включала geos / geom / GeometryFactory.h. В этом файле была предварительная декларация geos::geom::LinearRing, но это не говорит о том, что этот класс был подклассом geos::geom::Geometry, Поэтому компилятор рассматривал его как два разных класса. имеющий #include <geos/geom/LinearRing.h> починил это.

2

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

Других решений пока нет …

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