2013-06-29 2 views
1

Я пытаюсь просто включить географические объекты из шейп-файла, лежащего в заданной ограничивающей рамке. Я не мог найти функцию, похожую на функцию шаблона Matlab с опцией BoundingBox [1], и поэтому я пытаюсь удалить ненужные точки из линейной строки слоя, но я не уверен, как это сделать (я вроде бы ожидал, что это будет напротив 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. См. Ссылку в the GDAL docs. Просто создайте свой ограничивающий прямоугольник как фактический объект геометрии, затем вызовите, например. poClippedLine = poLineString-> Intersection (poBoundingBox) - и poClippedLine будет тем, что вам нужно.

Однако имейте в виду, что этот метод создаст новые разделы на границах обрезанного ограничивающего прямоугольника, который вы можете или не захотите.

В противном случае: - да, я также не нашел метод RemovePoint. Поэтому вам просто нужно скопировать и создать новую строку строки с подмножеством вершин, которые вы хотите включить.