2013-06-29 6 views
1

주어진 경계 상자 내에있는 모양 파일의 지형지 물을 포함하려고합니다. BoundingBox 옵션 [1]이있는 Matlab의 shaperead 함수와 비슷한 함수를 찾을 수 없으므로 레이어의 선 스트링에서 관련이없는 점을 제거하려고하지만이 작업을 수행하는 방법이 확실하지 않습니다. addPoint [2]의 반대쪽). 지금까지 가지고있는 코드는 다음과 같습니다.GDAL에서 포인트 제거 LineString

 OGRLineString *poLineString = (OGRLineString *) poGeometry; 

     int numPoints = poLineString->getNumPoints(); 
     cout << "num points" << poLineString->getNumPoints() << endl; 

     //for each feature check if its in the bounding box 
     for (int i=0; i<numPoints; i++) 
     { 
      // start off assuming we are including everything 
      bool xInclude, yInclude = 1; 

      OGRPoint* poPoint; 

      poLineString->getPoint(i, poPoint); 

      double ptX = poPoint->getX(); 
      double ptY = poPoint->getY(); 

      cout << "ptX " << ptX << " ptY " << ptY <<endl; 

      //tlE, tlN, maxE, maxN are eastings/northings coordinates 
      if((ptX<tlE)||(ptX>maxE)) 
       xInclude=0; 

      if((ptY<minN)||(ptY>tlN)) 
       yInclude=0; 

      if(!(xInclude && yInclude)) 
       //poLineString->setPoint(i,0,0); 
       REMOVE POINT HERE 
     } 

아이디어가 있습니까?

답변

0

OGR에서 Intersection() 메서드를 사용하여 원하는 작업을 수행 할 수 있습니다. 참조 번호는 the GDAL docs입니다. 테두리 상자를 실제 Geometry 객체로 만든 다음 예를 들어 전화하십시오. poClippedLine = poLineString-> Intersection (poBoundingBox) - poClippedLine이 필요한 것입니다.

그러나이 방법을 사용하면 클리핑 된 경계 상자의 '테두리'에 새 섹션이 만들어 지므로주의해야 할 수도 있고 원치 않을 수도 있습니다.

그렇지 않으면 : - 예, RemovePoint 메소드도 찾을 수 없습니다. 따라서 포함하려는 정점의 하위 집합으로 새로운 lineString을 복사하고 작성하면됩니다.