Я использую библиотеку 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);
Есть предложения?