空间数据库

司机简称

OCI

生成依赖项

内控类库

此驱动程序支持以Oracle Spatial(8.1.7或更高版本)对象关系格式读取和写入数据。Oracle Spatial驱动程序通常不内置在OGR中,但可能内置在Oracle客户端库可用的平台上。

打开数据库时,其名称应以“OCI:userid/password@database_instance:table,table”的形式指定。表列表是可选的。访问默认本地数据库实例时,可以省略数据库实例部分。

如果没有提供表的列表,那么OGR将把所有SDO_GEOM_元数据中出现的所有表视为图层,并将表名视为图层名。除非在数据源名称中显式列出,否则无法访问所有SDO_GEOM_元数据表中未列出的非空间表或空间表。即使在所有所需层都在all_SDO_GEOM_元数据表中的数据库中,也可能希望仅列出要使用的表,因为这可以大大缩短具有多个表的数据库中的初始化时间。

如果该表有一个名为OGR_FID的整数列,它将被OGR用作特性id(并且不会显示为常规属性)。将数据加载到Oracle Spatial时,OGR将始终创建OGR_FID字段。

驱动程序功能

Supports Create()

This driver supports the GDALDriver::Create() operation

Supports Georeferencing

This driver supports georeferencing

SQL问题

默认情况下,当对OGRDataSource使用ExecuteSQL()调用或对ogr2ogr使用-SQL命令选项时,Oracle驱动程序直接将SQL语句传递给Oracle,而不是在内部对它们求值。属性查询表达式也传递给Oracle。

通过ExecuteSQL()接口还支持两个特殊命令。这些是“ DELLAYER:<table_name> 删除图层,以及 VALLAYER:<table_name> “要将SDO_GEOM.VALIDATE_GEOMETRY()检查应用于层。在内部,这些伪命令被转换为更复杂的用于Oracle的SQL命令。

也可以请求驱动程序使用 OGR SQL 发动机,通过 “OGRSQL” ExecuteSQL()方法的字符串,作为SQL方言的名称。

告诫

  • 类型识别逻辑目前有点贫乏。对于整型字段和实数字段,不需要保存实数宽度信息。

  • OGR将完全忽略Oracle中的各种类型,如对象和blob。

  • 目前,OGR事务语义没有正确映射到Oracle中的事务语义。

  • If an attribute called OGR_FID exists in the schema for tables being read, it will be used as the FID. Random (FID based) reads on tables without an identified (and indexed) FID field can be very slow. To force use of a particular field name the OCI_FID configuration option (e.g. environment variable) can be set to the target field name.

  • 读取时,曲线几何类型将转换为六度线段中的字符串或线性环。驱动程序不支持写入曲线几何图形。

  • Oracle Spatial中不支持点云(SDO_PC)、三角网(SDO_TIN)和注释文本数据类型。

  • 可能需要将环境变量NLS_LANG定义为“American_America.UTF8”,以避免在非英语环境中浮点数被截断为整数的问题。

  • 对于开发人员:在内存错误检测工具Valgrind下运行驱动程序时,指定数据库实例(通常为localhost)或使用TWO_TASK环境变量似乎是必需的,否则将报告“TNS:permission denied”错误)

创建问题

Oracle Spatial驱动程序不支持创建新数据集(数据库实例),但它允许在现有数据库中创建新层。

关闭OGRDataSource后,新创建的层将自动生成空间索引。此时,USER_SDO_GEOM_元数据表也将根据实际编写的功能,使用表的边界进行更新。这样做的一个结果是,一旦加载了一个层,通常不可能在不手动修改用户几何元数据中的DIMINFO信息和重建空间索引的情况下,在原始范围之外加载其他特性。

图层创建选项

  • OVERWRITE :这可能是“是”,以强制在创建请求的层之前销毁具有相同所需名称的现有层(=表)。默认值为“否”

  • TRUNCATE :这可能是“YES”,以强制重用现有表,但首先截断表中的所有记录,保留索引或依赖项。默认值为“否”。

  • LAUNDER :这可能是“是”,以强制在此层上创建的新字段将其字段名“清洗”为与Oracle更兼容的形式。这将转换为大写,并将一些特殊字符(如“-”和“#”转换为“#”)。默认值为“否”。

  • PRECISION :如果可以使用数字(宽度、精度)或VARCHAR2(宽度)类型,则可以使用“是”强制在此层上创建的新字段尝试表示宽度和精度信息。如果“否”,则将使用类型NUMBER、INTEGER和VARCHAR2。默认为“是”。

  • DIM :这可以设置为2或3以强制创建图层的尺寸。在GDAL 2.2之前,默认使用3。从GDAL 2.2开始,默认情况下使用图层几何图形类型的尺寸。

  • SPATIAL_INDEX :这可能设置为FALSE,以在层加载完成时禁用空间索引的创建。默认情况下,如果任何图层要素具有有效的几何图形,则创建索引。默认为“是”。注意:选项在GDAL 2之前的版本中称为INDEX

  • INDEX_PARAMETERS :这可以设置为在创建空间索引时传递创建参数。例如,将索引x参数设置为SdoyRrTr.PCTFLUE=0将导致RTRAY索引没有任何空格创建。默认情况下,不会传递导致创建默认R树空间索引的参数。

  • ADD_LAYER_GTYPE =YES/NO:可以通过CREATE index的PARAMETERS子句中的layer gtype关键字将其设置为NO以禁用对空间索引中几何体类型的约束。类型为MultiPoint、MultiLineString或MultiPolygon的图层也将接受单个几何体类型(点、线串、多边形)。默认为“是”。

  • DIMINFO_X :可以将其设置为xmin、xmax、xres值,以控制写入用户几何元数据表中的X维度信息。默认情况下,数据块是从实际写入的数据中收集的。

  • DIMINFO_Y :可以将其设置为ymin、ymax、yres值,以控制写入到USER_SDO_GEOM_元数据表中的Y维度信息。默认情况下,数据块是从实际写入的数据中收集的。

  • DIMINFO_Z :可以将其设置为zmin、zmax、zres值,以控制写入USER_SDO_GEOM_元数据表中的Z维度信息。默认情况下,固定值为-10000100000,0.002用于三维图层。

  • SRID :默认情况下,此驱动程序将尝试在MDSYS.CS_SRS表中查找具有与此数据集完全匹配的已知文本坐标系的现有行。如果找不到,将向该表添加新行。SRID创建选项允许用户强制使用现有的Oracle SRID项,即使它与驱动程序期望的WKT不完全匹配。

  • MULTI_LOAD :如果启用,则每个SQL INSERT命令将以100个为一组创建新功能,而不是每个功能都是单独的INSERT命令。启用此选项是快速加载数据的最快方式。默认情况下,多重加载模式处于启用状态,通过设置为“否”,可以强制关闭现有层或新层的多重加载模式。每个组中的行数由多重加载计数定义。要一次加载一行,请将MULTI_load设置为NO。

  • MULTI_LOAD_COUNT :定义每个ARRAY INSERT命令的功能数,而不是MULTI-LOAD定义的默认100项。由于每个数组插入都将提交一个事务,因此此选项不应与ogr2ogr“-gt N”结合使用。当使用多负载计数时,最好使用“-gt unlimited”。默认值为100。如果未指定MULTI_LOAD或MULTI_LOAD_COUNT,则加载将以100行为一组进行。

  • FIRST_ID :定义第一行的id列的第一个数值。当用于附加或更新现有数据集时,它也可以作为打开选项使用。

  • NO_LOGGING :定义将使用取消记录属性创建表和几何图形。

  • LOADER_FILE :如果设置了此选项,则所有功能信息都将写入适合与SQL一起使用的文件 加载程序,而不是直接插入数据库。图层本身仍会立即在数据库中创建。SQL语句 加载程序支持是实验性的,在试图获得最佳加载性能时,通常应使用多加载启用模式。

  • GEOMETRY_NAME :默认情况下,OGR使用名为orau geometry的geometry列创建新表。如果要使用其他名称,可以为其提供“几何体名称图层创建”选项。

图层打开选项

  • FIRST_ID :请参见第一个ID上的图层创建选项注释。

  • MULTI_LOAD :请参见“层”“创建选项”“在多重加载时的注释”。

  • MULTI_LOAD_COUNT :请参见“层创建选项”“有关多个加载计数的注释”。

  • WORKSPACE :定义要使用的用户工作区。

例子

将shapefile简单地转换为Oracle。将使用ABC.shp中的功能和ABC.dbf中的属性创建表“ABC”。

% ogr2ogr -f OCI OCI:warmerda/password@gdal800.dreadfest.com abc.shp

第二个例子从VPF加载一个政治边界层(通过 OGDI driver ),并将层从神秘的OGDI层名称重命名为更合理的名称。如果存在所需名称的现有表,则该表将被覆盖。

% ogr2ogr  -f OCI OCI:warmerda/password \
        gltp:/vrf/usr4/mpp1/v0eur/vmaplv0/eurnasia \
        -lco OVERWRITE=yes -nln polbndl_bnd 'polbndl@bnd(*)_line'

此示例显示如何使用ogrinfo在Oracle中计算SQL查询语句。更复杂的Oracle空间特定查询也可以通过-sql命令行切换到ogrinfo来使用。

ogrinfo -ro OCI:warmerda/password -sql "SELECT pop_1994 from canada where province_name = 'Alberta'"

信用

我想谢谢你 SRC, LLC 为其发展提供资金支持这一驱动力。