gpt4 book ai didi

c++ - 如何创建带孔 GEOS 库的多边形

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:27 25 4
gpt4 key购买 nike

我正在使用 GEOS 库,并且正在尝试创建一个 Polygon有一个洞。根据 documentation , 我必须传入 LinearRing ,代表外部“壳”,和一个 std::vector<Geometry*> , 表示壳中的孔。第一个参数很简单,但第二个参数给我带来了麻烦。 Polygon希望第二个参数中的元素是 LineString s ( LineStringGeometry 的子类);否则,它会抛出一个异常说明 LineString孔需要 s。如果我只是投 LineString s 至 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>修复它。

关于c++ - 如何创建带孔 GEOS 库的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com