gpt4 book ai didi

c++ - 从 GDAL LineString 中删除点

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:05 25 4
gpt4 key购买 nike

我试图只包含来自给定边界框内的 shapefile 的地理特征。我找不到类似于带有 BoundingBox 选项的 Matlab shaperead 函数的函数 [ 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
}

有什么想法吗?

最佳答案

鉴于你想做什么,也许你可以在 OGR 中使用 Intersection() 方法。请参阅 the GDAL docs 中的引用资料.只需将边界框创建为实际的 Geometry 对象,然后调用例如poClippedLine = poLineString->Intersection(poBoundingBox) - poClippedLine 将是您所需要的。

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

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

关于c++ - 从 GDAL LineString 中删除点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com