Удалить точку из 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
        }

Любые идеи?


person tjp    schedule 29.06.2013    source источник


Ответы (1)


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

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

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

person patdevelop    schedule 06.06.2014