4

私は GEOS ライブラリを使用してPolygonおり、穴のある を作成しようとしています。ドキュメントに従って、LinearRing外側の「シェル」を表す a とstd::vector<Geometry*>、シェルの穴を表すa を渡す必要があります。最初のパラメータは簡単ですが、2 番目のパラメータが問題です。Polygonは、2 番目のパラメーターの要素をLineStrings にする必要があります (LineStringは のサブクラスですGeometry)。LineStringそれ以外の場合、穴には s が必要であるという例外がスローされます。LineStrings をにキャストする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);

助言がありますか?

4

1 に答える 1

2

私はそれを解決しました。

を含むインクルード行がありましgeos/geom/GeometryFactory.hた。そのファイルには、 への前方宣言がありましたがgeos::geom::LinearRing、そのクラスが のサブクラスであるとは言いませんでしたgeos::geom::Geometry。したがって、コンパイラはそれを 2 つの異なるクラスとして扱いました。それを#include <geos/geom/LinearRing.h>修正した。

于 2014-01-30T03:41:42.680 に答える