C++ 基于字段获取几何体

C++ 基于字段获取几何体,c++,gdal,C++,Gdal,如果我有一个只有多边形的数据源,每个多边形都有一个 字符串,让我们说一下它的名称,这个名称对于每个几何体都是唯一的,它们是 动态属性化 一个几何图形的名称与另一个几何图形的名称越相似,越容易识别 几何图形非常接近 我要做的是获取名称开始的所有几何体 用用户提供的东西 我看了格达尔的算法,但似乎没有什么适合我的问题,也许 我搜索得不够,我不想看所有的几何图形 找到合适的 谢谢 编辑: 正如在评论中提到的,我没有给出任何我试图做的例子 < >我在C++中使用GDAL和OGR库(V1.11),因为我必

如果我有一个只有多边形的数据源,每个多边形都有一个 字符串,让我们说一下它的名称,这个名称对于每个几何体都是唯一的,它们是 动态属性化 一个几何图形的名称与另一个几何图形的名称越相似,越容易识别 几何图形非常接近

我要做的是获取名称开始的所有几何体 用用户提供的东西

我看了格达尔的算法,但似乎没有什么适合我的问题,也许 我搜索得不够,我不想看所有的几何图形 找到合适的

谢谢

编辑:

正如在评论中提到的,我没有给出任何我试图做的例子

< >我在C++中使用GDAL和OGR库(V1.11),因为我必须同时使用栅格和向量数据。 在我的过程中,我使用函数GDALPolygonize()来提取多边形,下面是一个示例:

GDALDataset dataset; //this a dataset of int32
size_t width, height;
//Do something with the dataset
const char *pszDriverName = "ESRI Shapefile";
OGRSFDriver *poDriver;

OGRRegisterAll();

poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(
                                 pszDriverName );
if( poDriver == NULL )
  {
printf( "%s driver not available.\n", pszDriverName );
exit( 1 );
  }
OGRDataSource *poDS;

poDS = poDriver->CreateDataSource("name.shp", NULL );
if( poDS == NULL )
  {
printf( "Creation of output file failed.\n" );
exit( 1 );
  }

OGRLayer *poLayer;

poLayer = poDS->CreateLayer( "region", NULL, wkbPolygon, NULL );
if( poLayer == NULL )
  {
printf( "Layer creation failed.\n" );
exit( 1 );
  }

OGRFieldDefn oField( "id", OFTString ); //I use string but there i can use another type

oField.SetWidth(32);

if( poLayer->CreateField( &oField ) != OGRERR_NONE )
  {
printf( "Creating Name field failed.\n" );
exit( 1 );
  }

GDALPolygonize(dataset->GetRasterBand(1), nullptr, poLayer, 0, nullptr, nullptr, nullptr);


OGRDataSource::DestroyDataSource( poDS );
GDALClose(dataset);
此代码主要取自GDAL网站

因此,我使用OGRPolygon给出的多边形。然后,稍后,用户选择一个多边形,目标是找到共享一定位数的多边形

多亏了GDAL,我可以使用OGRFeature和OGRField,但我唯一的想法是列出每个多边形,但我相信有更好的方法来完成这项任务


希望它更清晰。

一个有效的方法是在一个数据库中实现查找

我认为反对票是因为你没有提供任何代码来解释你的
多边形
类型的定义。好的,我会尽量说得更清楚谢谢,我想我可以使用这样的数据结构,它似乎适合我的problem@user3497357不用谢。“接受并投票”功能就是为了实现这一点。