2014-01-29 5 views
3

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

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

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); 

Есть предложения?

ответ

2

Я решил.

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

Смежные вопросы