Я использую библиотеку GEOS и пытаюсь создать Polygon
с дырой в нем. В соответствии с документация, Я должен пройти в LinearRing
, который представляет собой внешнюю «оболочку», и std::vector<Geometry*>
, который представляет собой отверстия в оболочке. Первый параметр прост, но второй доставляет мне неприятности. Polygon
хочет, чтобы элементы во втором параметре были LineString
с (LineString
это подкласс Geometry
); в противном случае выдается исключение о том, что LineString
s нужны для дырок. Если я просто брошу 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);
Какие-либо предложения?
Я решил это.
У меня была строка включения, которая включала geos / geom / GeometryFactory.h. В этом файле была предварительная декларация geos::geom::LinearRing
, но это не говорит о том, что этот класс был подклассом geos::geom::Geometry
, Поэтому компилятор рассматривал его как два разных класса. имеющий #include <geos/geom/LinearRing.h>
починил это.
Других решений пока нет …