Удалить точку из GDAL LineString

Я пытаюсь просто включить географические объекты из шейп-файла, которые находятся в заданной ограничительной рамке. Я не смог найти функцию, аналогичную функции shaperead в Matlab, с опцией BoundingBox [1] и поэтому я пытаюсь удалить нерелевантные точки из линейной линии слоя, однако я не уверен, как это сделать (я ожидал, что будет противоположность addPoint [2]). Код, который у меня пока есть:

        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
}

Есть идеи?

1

Решение

Учитывая, что вы хотите сделать, возможно, вы можете использовать метод Intersection () в OGR. Смотрите ссылку в Документы GDAL. Просто создайте свою ограничивающую рамку как фактический объект Geometry, а затем вызовите, например, poClippedLine = poLineString-> Пересечение (poBoundingBox) — и poClippedLine будет то, что вам нужно.

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]