基于字段获取几何
Fetch geometry based on fields
如果我有一个只有多边形的数据源,并且每个多边形都有一个字段
字符串,比方说它的名字,这个名字对于每个几何图形都是唯一的,它们是
动态归因
几何名称与另一个几何名称越相似,
几何形状接近。
我想做的是获取名称开头的所有几何图形
用用户给的东西。
我看了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,但我唯一的想法是列出每个多边形,但我确信有更好的方法来完成这项任务
希望它更清楚。
一种有效的方法是将此实现为 radix tree 中的查找。
如果我有一个只有多边形的数据源,并且每个多边形都有一个字段 字符串,比方说它的名字,这个名字对于每个几何图形都是唯一的,它们是 动态归因 几何名称与另一个几何名称越相似, 几何形状接近。
我想做的是获取名称开头的所有几何图形 用用户给的东西。
我看了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,但我唯一的想法是列出每个多边形,但我确信有更好的方法来完成这项任务
希望它更清楚。
一种有效的方法是将此实现为 radix tree 中的查找。