GRASS 矢量格式

司机简称

GRASS

生成依赖项

libgrass

GRASS driver可以读取GRASS(版本6及更高版本)矢量地图。每一个草向量图都表示为一个数据源。草地向量贴图可以有0、1或更多层。

草点表示为wkbPoint,线和边界表示为wkblienstring,区域表示为wkbPolygon。wkbMulti公司 * 不使用wkbGeometryCollection。可以在一个图层中混合更多的要素类型。如果一个层只包含一种类型的特性,则会对其进行适当的设置,并可由OGRLayer::GetLayerDefn()检索;

如果几何图形附着了同一图层的多个类别,则将其表示为多个要素(每个类别对应一个要素)。

支持二维和三维地图。

驱动程序功能

Supports Georeferencing

This driver supports georeferencing

数据源名称

数据源名称是GRASS vector目录中“head”文件的完整路径。使用草地环境变量的名称可以表示为:

$GISDBASE/$LOCATION_NAME/$MAPSET/vector/mymap/head

其中“mymap”是向量映射的名称。例如:

/home/cimrman/grass_data/jizerky/jara/vector/liptakov/head

图层名

通常图层号用作图层名。图层号0用于所有没有任何类别的要素。可以选择为链接到数据库的草皮层命名,但是目前草皮模块不支持这样做。在“dbln”矢量文件中,图层名可以添加为图层号后的“/name”,例如原始记录:

1 rivers cat $GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ dbf

可以给“rivers”命名

1/rivers rivers cat $GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ dbf

第1层将被列为“河流”层。

属性过滤器

如果层具有存储在数据库中的属性,则查询将传递给基础数据库驱动程序。这意味着,可以使用的SQL条件取决于层链接到的驱动程序和数据库。例如,DBF驱动程序当前的SQL表达式集非常有限,PostgreSQL提供了非常丰富的SQL表达式集。

如果一个层没有链接的属性,并且只有类别,则使用OGR内部SQL引擎计算表达式。类别是附加到几何图形的整数,它是ID的排序,但它不是FID,因为一个图层中的多个要素可以具有相同的类别。

设置属性过滤器后,计算将执行一次。

空间滤波器

存储在拓扑结构中的特征的边界框用于评估特征是否与当前空间过滤器匹配。

设置空间过滤器后,将执行一次计算。

GISBASE

GISBASE是安装GRASS的目录的完整路径。默认情况下,GRASS驱动程序使用指定给gdal配置脚本的路径。通过设置GISBASE环境变量可以强制使用其他目录。GISBASE用于查找GRASS数据库驱动程序。

缺少拓扑

如果拓扑可用(也称为级别2),GRASS驱动程序可以读取GRASS矢量文件。如果报告了一个错误,说明拓扑不可用,则有必要使用v.build模块在GRASS中构建拓扑。

随机存取

如果在具有属性的层上使用随机访问(GetFeature而不是GetNextFeature),则读取功能可能非常慢。这是因为驱动程序必须按类别查询每个特性的属性(以避免使用大量内存),而随机访问数据库通常很慢。这可以在基于GRASS-side优化/写入文件(DBF,SQLite)驱动程序上得到改进。

已知问题

由于GRASS库的缺陷,无法按FIFO顺序启动/停止数据库驱动程序,必须使用FILO顺序。编写OGR的GRASS驱动程序时要考虑到这个限制,如果不使用,并且驱动程序保持打开状态,则始终关闭kill()用于终止它。但在极少数情况下,驱动程序可能会尝试停止数据库驱动程序,而数据库驱动程序不是最后打开的,应用程序将挂起。如果一个层的顺序读取(GetNextFeature)没有完成(在到达最后一个可用功能之前停止读取),读取另一个层的功能,然后完成第一个层的读取,则可能会发生这种情况,因为在这种情况下不使用kill()。

也见


这个驱动程序的开发是由Faunalia资助的 (www.faunalia.it ②)