我正在使用GEOS库,我正在尝试创建一个带有洞的Polygon
。根据{{3}},我必须传入代表外部“shell”的LinearRing
和代表shell中的洞的std::vector<Geometry*>
。第一个参数很简单,但第二个参数给我带来了麻烦。 Polygon
希望第二个参数中的元素为LineString
s(LineString
是Geometry
的子类);否则,它会抛出一个例外,说明这些洞需要LineString
。如果我只是将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);
有什么建议吗?
答案 0 :(得分:2)
我解决了。
我有一个包含geos/geom/GeometryFactory.h
的包含行。在该文件中,有geos::geom::LinearRing
的前向声明,但它没有说该类是geos::geom::Geometry
的子类。因此,编译器将其视为两个不同的类。 #include <geos/geom/LinearRing.h>
修复了它。