Экспорт из Oracle Spatial в PostGIS

ora2pgpro поддерживает полный экспорт пространственных объектов из БД Oracle. Для управления этим типом экспорта предусмотрены следующие директивы.

AUTODETECT_SPATIAL_TYPE

По умолчанию ora2pgpro анализирует индексы, чтобы определить тип пространственного ограничения и размерность, определённую в Oracle. Эти ограничения передаются при создании индекса, например, так:

CREATE INDEX ... INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS('sdo_indx_dims=2, layer_gtype=point');

Если параметры ограничений в Oracle не указаны, по умолчанию эти столбцы экспортируются с универсальным типом GEOMETRY, чтобы получать любой тип пространственных данных.

Директива AUTODETECT_SPATIAL_TYPE заставляет ora2pgpro автоматически определять фактический тип пространственных данных и размерность, используемые в столбце с пространственными данными, в противном случае используется тип геометрии без ограничений. Когда эта функциональность включена (по умолчанию), ora2pgpro сканирует выборку из 50000 строк, чтобы проанализировать используемый тип GTYPE. Размер выборки можно увеличить или уменьшить, указав в AUTODETECT_SPATIAL_TYPE необходимое количество строк для сканирования.

Например, если директива AUTODETECT_SPATIAL_TYPE отключена, столбец shape с типом Oracle SDO_GEOMETRY будет преобразован следующим образом:

shape geometry(GEOMETRY) or shape geometry(GEOMETRYZ, 4326)

Если директива включена и столбец содержит отдельный тип геометрии, использующий одно измерение с двумерными или трёхмерными многоугольниками:

shape geometry(POLYGON, 4326) or shape geometry(POLYGONZ, 4326)
CONVERT_SRID

Эта директива позволяет управлять автоматическим преобразованием SRID Oracle в значения, соответствующие стандарту EPSG. Когда директива включена, ora2pgpro использует функцию Oracle sdo_cs.map_oracle_srid_to_epsg() для преобразования всех SRID. По умолчанию включена.

Если Oracle возвращает NULL для SDO_SRID, NULL заменяется значением по умолчанию 8307, преобразованным в значение по EPSG: 4326 (см. DEFAULT_SRID).

Если задать значение больше 1, все SRID получат это значение, то есть DEFAULT_SRID не используется, если Oracle возвращает NULL.

Обратите внимание, что значение EPSG можно задать на стороне Oracle, если sdo_cs.map_oracle_srid_to_epsg() возращает NULL:

  system@db> UPDATE sdo_coord_ref_sys SET legacy_code=41014 WHERE srid = 27572;
  
DEFAULT_SRID

Используйте эту директиву, чтобы переопределить значение EPSG для SRID по умолчанию (4326). CONVERT_SRID переопределяет это значение, см. выше.

GEOMETRY_EXTRACT_TYPE

Эта директива может принимать следующие значения: WKT (по умолчанию), WKB или INTERNAL. Если задано значение WKT, ora2pgpro использует SDO_UTIL.TO_WKTGEOMETRY(), чтобы извлечь геометрические данные. Когда задано значение WKB, ora2pgpro выводит их в двоичном формате с использованием SDO_UTIL.TO_WKBGEOMETRY(). Если извлекать данные вышеописанными способами в виде вызовов на стороне Oracle, при большом количестве строк может произойти нехватка памяти из-за значительного времени выполнения. Кроме того, с WKB 3D геометрии и некоторые другие геометрии, такие как CURVEPOLYGON, не извлекаются. В таких случаях можно использовать тип извлечения INTERNAL. При этом для преобразования данных SDO_GEOMETRY в WKT используется библиотека Pure Perl, а само преобразование осуществляется на стороне ora2pgpro. Эта функциональность требует доработки, поэтому перед использованием необходимо проверять корректность экспортированных геометрий. Для пространственных объектов по умолчанию используется тип извлечения INTERNAL.

POSTGIS_SCHEMA

Используйте эту директиву, чтобы добавить определённую схему в путь поиска для функций PostGIS.

ST_SRID_FUNCTION

Задаёт функцию Oracle для извлечения SRID из метаданных ST_Geometry. По умолчанию: ST_SRID. Для ArcSDE, например, следует указать sde.st_srid.

ST_DIMENSION_FUNCTION

Задаёт функцию Oracle для извлечения размерности из метаданных ST_Geometry. По умолчанию: ST_DIMENSION. Для ArcSDE, например, следует указать sde.st_dimension.

ST_GEOMETRYTYPE_FUNCTION

Задаёт функцию Oracle для извлечения типа геометрии из столбца ST_Geometry. По умолчанию: ST_GEOMETRYTYPE. Для ArcSDE, например, следует указать sde.st_geometrytype.

ST_ASBINARY_FUNCTION

Задаёт функцию Oracle для преобразования значения ST_Geometry в формат WKB. По умолчанию: ST_ASBINARY. Для ArcSDE, например, следует указать sde.st_asbinary .

ST_ASTEXT_FUNCTION

Задаёт функцию Oracle для преобразования значения ST_Geometry в формат WKT. По умолчанию: ST_ASTEXT. Для ArcSDE, например, следует указать sde.st_astext .