ST_ImportOSGB

将基于对象存储的倾斜摄影项目(OSGB格式)导入到数据库中。

语法

boolean ST_ImportOSGB(cstring table_name, cstring url, cstring options default '{}');

参数

参数名称

描述

table_name

osg表名及其瓦片表前缀。

url

基于对象存储服务的路径。更多信息,请参见对象存储服务路径

options

导入选项:

  • schema:目标表schema,字符串类型,默认为public。

  • parallel:并行度。提高并行度将会加速导入,但可能消耗大量内存,可根据实际的数据或数据库运行状态选择合适的值。建议小于16,小于1将被忽略。整数类型,默认为1。

  • batch_size:SQL执行的批大小。整数类型,取值范围:1~2147483647,默认为10000。

  • project:项目名。将填充在每一条记录的project_name字段,字符串类型。

  • srid:指定数据的SRID,整数类型。

  • gateway:是否以gateway模式导入数据。若选择gateway模式,数据将以引用的形式存储在数据库内,调用时实时从引用地址取得,可以大大减轻数据库内存储压力,但可能会造成调用时更缓慢。布尔类型,默认为false。

  • tileset_prefix:生成的3D Tiles地址前缀,若指定可以方便自定义反向代理。字符串类型。

描述

将基于对象存储的OSGB文件导入到数据库中。

导入限制说明:

  • 仅支持OSGB格式的文件。

  • 指定目录下需要存在一个名为metadata.xml的文件,文件可以位于根目录或任意子目录下。

  • 需要导入完整的OSGB文件,否则将丢失相关信息。

  • 当数据量较大,且使用客户端连接数据库进行OSGB文件导入时,请适当调整客户端超时限制,避免因超时终止而导致的数据导入失败。

导入成功后会在数据库内生成两张表:

主表

表名格式:[table_name]

说明:存储倾斜摄影项目的元数据信息。

表结构:

字段

类型

说明

project_id

uuid

项目ID,自动生成。

project_name

text

项目名称。

若用户不指定project_name,则该列值为空。

常用于存储多个子项目的表。

srid

integer

项目使用的空间参考。

默认从metadata.xmlModelMetadata/SRS节点读取,若在options/srid中指定则会覆盖读取值。

ref_point

geometry

项目锚定的三维点位。

默认从metadata.xmlModelMetadata/SSRSOrigin节点读取,类型为Point3DZ

extent

geometry

整个项目的大致范围,为PolygonZ类型。

aux

text

元数据,值为metadata.xml文件内容。

tiletable

varchar(64)

对应瓦片表表名。

瓦片表

表名格式:[table_name]_tile

说明:存储该项目所有的瓦片数据。

表结构:

字段

类型

说明

project_id

uuid

项目ID,与主表一致。

project_name

text

项目名称,与主表一致。

uid

uuid

瓦片ID,自动生成。

lod

integer

瓦片LOD级别,通过文件名推断(形如Tile_L14_0.osgb),若无法推断,则为0。

precision

float8

估算的瓦片精度,常用于导出3DTiles。

parent

uuid

该瓦片的父瓦片ID。

若为根节点,则为空。

children

uuid[]

该瓦片的全部子瓦片的ID。

若无子瓦片,则为空。

aux

jsonb

该瓦片的元数据。

当前为瓦片的相对根目录的文件名,存储在file_name节点下。

tile

scene

瓦片实体。

重要

如果并行度不为1,将不支持自动建表,需要您预先手动创建,建表语句如下

# 以在默认schema下创建一个名为test_osgb的表为例
# 创建主表
CREATE TABLE IF NOT EXISTS test_osgb(
    project_id uuid primary key,
    project_name text, 
    srid integer,
    ref_point geometry, 
    extent geometry,
    aux text, 
    tiletable varchar(64) NOT null
);

# 创建瓦片表
CREATE TABLE IF NOT EXISTS test_osgb_tile(
    project_id uuid NOT NULL,
        project_name text, 
        uid uuid NOT NULL,
        lod integer, 
     		precision float8,
        parent uuid, 
     		children uuid[],
        aux jsonb, 
     		tile scene NOT NULL,
        PRIMARY KEY(project_id, uid)
);

示例

-- 常规导入
SELECT ST_ImportOSGB('test_osgb', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_oblique_project/');

---------
t

-- 并行导入
SELECT ST_ImportOSGB('test_osgb', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_oblique_project/', '{"parallel": 4}');

---------
t