我试图只包含位于给定边界框内的shapefile中的地理要素。我找不到类似于Matlab的shaperead函数和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
}
有什么想法吗?
答案 0 :(得分:0)
考虑到你想做什么,也许你可以在OGR中使用Intersection()方法。请参阅the GDAL docs中的参考。只需将边界框创建为实际的Geometry对象,然后调用例如poClippedLine = poLineString-&gt; Intersection(poBoundingBox) - 和poClippedLine将是你需要的。
但是,请注意,此方法将在剪切的边界框的“边框”处创建新的部分,您可能想要也可能不想要这些部分。
否则: - 是的,我还没有找到RemovePoint方法。因此,您可能只需要复制并创建一个包含要包含的顶点子集的新lineString。