根据字段

时间:2016-01-07 12:39:09

标签: c++ gdal

如果我有一个只包含多边形的数据源,并且每个多边形的字段都是 字符串,让我们说出它的名字,这个名字对于每个几何都是唯一的,它们是 动态归因 几何图形的名称与另一个图形的名称越相似,就越多 几何形状很接近。

我想要做的是获取名称开始的所有几何 用户给出的东西。

我查看了GDAL的算法,但似乎没有什么能适合我的问题 我没有足够的搜索,我也不想看所有的几何形状 找到合适的。

谢谢,

编辑:

正如评论中所提到的,我没有举例说明我想做什么。

因此,我在C ++中使用GDAL和OGR库(v1.11.0),因为我必须同时处理栅格和矢量数据。 在我的过程中,我使用函数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,但我唯一的想法是列出每个多边形,但我确信有更好的方法来完成这项任务

希望它更清楚。

1 个答案:

答案 0 :(得分:0)

一种有效的方法是将其实现为radix tree中的查找。