2014-01-29 3 views
3

GEOS 라이브러리를 사용하고 있는데 구멍이있는 Polygon을 만들려고합니다. documentation에 따르면, 외부 "쉘"을 나타내는 LinearRing과 쉘의 구멍을 나타내는 std::vector<Geometry*>을 전달해야합니다. 첫 번째 매개 변수는 쉽지만 두 번째 매개 변수는 문제가됩니다. Polygon은 두 번째 매개 변수의 요소가 LineString s (LineStringGeometry의 하위 클래스 임)가되도록합니다. 그렇지 않으면 구멍에 LineString이 필요하다는 예외가 발생합니다. 방금 LineStringGeometry으로 전송하면 예외가 발생합니다. 만약 내가 그것을 캐스팅하지 않으면 컴파일 에러가 발생한다. 한 타입의 포인터는 다른 타입의 포인터로 캐스트 될 수 없다. 나는 여기서 무엇을해야 할지를 알 수 없다.구멍이있는 다각형을 만드는 방법 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); 

어떤 제안 :

다음 오류를 보여 간단한 코드 샘플입니까?

답변

2

해결했습니다.

geos/geom/GeometryFactory.h가 포함 된 포함 행이 있습니다. 이 파일에는 geos::geom::LinearRing에 대한 전달 선언이 있지만 그 클래스는 geos::geom::Geometry의 하위 클래스라고 말하지 않았습니다. 따라서 컴파일러는이를 두 개의 다른 클래스로 처리했습니다. #include <geos/geom/LinearRing.h>을 고쳤습니다.

관련 문제