1

我试图仅包含位于给定边界框内的 shapefile 中的地理特征。我找不到类似于带有 BoundingBox 选项 [ 1 ] 的 Matlab 的 shaperead 函数的函数,因此我试图从图层的线串中删除不相关的点,但是我不确定如何执行此操作(我有点期望会有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
        }

有任何想法吗?

4

1 回答 1

0

鉴于您想要做的事情,也许您可​​以使用 OGR 中的 Intersection() 方法。请参阅GDAL 文档中的参考资料。只需将您的边界框创建为实际的几何对象,然后调用例如 poClippedLine = poLineString->Intersection(poBoundingBox) - poClippedLine 将是您所需要的。

但是,请注意,此方法将在剪裁边界框的“边界”处创建新部分,您可能想要也可能不想要。

否则:- 是的,我也没有找到 RemovePoint 方法。因此,您可能只需要使用要包含的顶点子集复制并创建一个新的 lineString。

于 2014-06-06T02:07:52.777 回答