ST_Transform

Определение

ST_Transform преобразует двумерные данные ST_Geometry в пространственную привязку, определенную идентификатором пространственной привязки (SRID).

ВниманиеВнимание:

Если вы зарегистрировали пространственный столбец в базе данных PostgreSQL, используя функцию st_register_spatial_column, то SRID во время регистрации прописывается в таблицу sde_geometry_columns. Если вы создали пространственный индекс в пространственном столбце в базе данных Oracle, то во время создания пространственного индекса SRID прописывается в таблицу st_geometry_columns. Когда вы используете ST_Transform для изменения SRID в ST_Geometry, SRID в таблицах sde_geometry_columns или st_geometry_columns не обновляется.

Использование ST_Transform в PostgreSQL

В PostgreSQL целевая пространственная привязка, указанная вами для преобразования, должна использовать ту же географическую систему координат, что и в столбце ST_Geometry.

Если данные хранятся в базе данных (а не в базе геоданных), выполните следующие шаги для изменения пространственной привязки данных ST_Geometry:

  1. Создайте резервную копию таблицы.
  2. Создайте второй (целевой) столбец ST_Geometry в таблице.
  3. Зарегистрируйте целевой столбец ST_Geometry, указывая новый SRID.

    Указание пространственной привязки для столбца выполняется размещением записи в системной таблице sde_geometry_columns.

  4. Выполните ST_Transform. Укажите, что преобразованные данные будут отсылаться в целевой столбец ST_Geometry.
  5. Отмените регистрацию первого столбца (исходного) ST_Geometry.

Если данные хранятся в базе геоданных, вы должны использовать инструменты ArcGIS, чтобы перепроецировать данные в новый класс пространственных объектов. Выполнение ST_Transform у класса пространственных объектов базы геоданных позволяет обойти использование функциональности для обновления системных таблиц базы геоданных с новым SRID.

Использование ST_Transform в Oracle

В Oracle вы можете преобразовать пространственные привязки с одинаковой географической системой координат или разными системами координат. Если географические системы координат отличаются, выполняется географическое преобразование. Географическое преобразование конвертирует две географические системы координат. Географическое преобразование определяется в конкретном направлении, например, из NAD 1927 в NAD 1983, но функция ST_Transform правильно применит преобразование независимо от исходной и целевой систем координат.

Методы географического преобразования можно разделить на два типа: математические и файловые. Математические методы являются самодостаточными, и им не требуется внешняя информация. Файловые методы используют файлы на диске для расчета значений смещения. Обычно они более точны, чем математические методы. Файловые методы используются в Австралии, Канаде, Германии, Новой Зеландии, Испании и США. Эти файлы (кроме Канады) можно найти в папке установки ArcGIS for Desktop или напрямую от различных национальных картографических агентств.

В базах геоданных в Oracle: для поддержки файловых преобразований файлы должны быть размещены на сервере Oracle в той же относительной структуре папок, что и у папки pedata в директории установки ArcGIS for Desktop.

Например, в директории установки ArcGIS for Desktop есть папка pedata. Эта папка включает в себя несколько папок, но три папки, которые содержат поддерживаемые файловые методы, называются harn, nadcon и ntv2. Либо скопируйте папку pedata и ее содержание из директории установки ArcGIS for Desktop на сервер Oracle, либо создайте на сервере Oracle директорию, которая включает в себя поддерживаемый файловый метод трансформации поддиректорий и файлов. После перемещения папки файлов на сервер Oracle установите переменную среды ОС с именем PEDATAHOME на сервере. Установите переменную PEDATAHOME в местоположение директории, которая содержит поддиректории и файлы; например, если папка pedata скопирована на C:\pedata на сервере Microsoft Windows, то установите для переменной среды PEDATAHOME значение C:\pedata.

Сведения об установке переменных среды см. в документации по операционной системе.

После установки переменной PEDATAHOME необходимо инициировать новый сеанс SQL перед использованием функции ST_Transform; перезагружать сервер не нужно.

Если данные хранятся в базе данных (а не в базе геоданных), и пространственный индекс в пространственном столбце не определен, то вы можете добавить второй столбец ST_Geometry и направить преобразованные данные в него. Вы можете оставить оба столбца, исходный (источника) ST_Geometry и целевой ST_Geometry в таблице. Однако вы можете отображать только один столбец в ArcGIS, используя представление или изменяя определение слоя запроса для таблицы.

Если данные хранятся в базе данных (а не в базе геоданных), и в пространственном столбце имеется определенной пространственный индекс, то вы не сможете защитить исходный столбец ST_Geometry. После определения пространственного индекса в столбце ST_Geometry в таблицу метаданных st_geometry_columns записывается SRID. ST_Transform не обновляет эту таблицу.

  1. Создайте резервную копию таблицы.
  2. Создайте второй (целевой) столбец ST_Geometry в таблице.
  3. Выполните ST_Transform. Укажите, что преобразованные данные будут отсылаться в целевой столбец ST_Geometry.
  4. Удалите пространственный индекс из исходного столбца ST_Geometry.
  5. Удалите исходный столбец ST_Geometry.
  6. Создайте пространственный индекс в целевом столбце ST_Geometry.

Если данные хранятся в базе геоданных, вы должны использовать инструменты ArcGIS, чтобы перепроецировать данные в новый класс пространственных объектов. Выполнение ST_Transform у класса пространственных объектов базы геоданных позволяет обойти использование функциональности для обновления системных таблиц базы геоданных с новым SRID.

Использование ST_Transform с SQLite

В SQLite вы можете преобразовать пространственные привязки с одинаковой географической системой координат или разными системами координат. Если географические системы координат отличаются, выполняется географическое преобразование. Географическое преобразование конвертирует две географические системы координат. Географическое преобразование определяется в конкретном направлении, например, из NAD 1927 в NAD 1983, но функция ST_Transform правильно применит преобразование независимо от исходной и целевой систем координат.

Методы географического преобразования можно разделить на два типа: математические и файловые. Математические методы являются самодостаточными, и им не требуется внешняя информация. Файловые методы используют файлы на диске для расчета значений смещения. Обычно они более точны, чем математические методы. Файловые методы используются в Австралии, Канаде, Германии, Новой Зеландии, Испании и США. Эти файлы (кроме Канады) можно найти в папке установки ArcGIS for Desktop или напрямую от различных национальных картографических агентств.

Синтаксис

Исходная и целевая пространственные привязки не имеют единой географической системы координат

Oracle и PostgreSQL

sde.st_transform (geometry1 sde.st_geometry, srid integer)

SQLite

st_transform (geometry1 geometryblob, srid in32)

Исходная и целевая пространственные привязки не имеют единой географической системы координат

Oracle

sde.st_transform (g1 sde.st_geometry, srid integer, geogtrans_id integer)

SQLite

st_transform (geometry1 geometryblob, srid int32, geogtrans_id int32)

Тип возврата

Oracle и PostgreSQL

ST_Geometry

SQLite

Geometryblob

Примеры

Преобразование данных, когда географические системы координат пространственных привязок источника и назначения совпадают

В следующем примере создается таблица transform_test с двумя строковыми столбцами: ln1 и ln2. В столбец ln1 вставляется линия с SRID 4326. В следующем выражении UPDATE функция ST_Transform берет строку в ln1, преобразует ее из координатной привязки, назначенной SRID 4326, в координатную привязку, назначенную SRID 3857, и помещает ее в столбец ln2.

ПримечаниеПримечание:

Идентификаторы SRID 4326 и 3857 имеют один и тот же географический датум.

Oracle

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);

INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

PostgreSQL

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);

INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

SQLite

CREATE TABLE transform_test (id integer);

SELECT AddGeometryColumn(
 NULL,
 'transform_test',
 'ln1',
 4326,
 'linestring',
 'xy',
 'null'
);

INSERT INTO transform_test (ln1) VALUES (
 st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln1 = st_transform (ln1, 3857);

Преобразование данных, когда географические системы координат пространственных привязок источника и назначения не совпадают (только Oracle и SQLite)

В следующем примере создается таблица n27, содержащая столбец ID и столбец геометрии. В таблицу n27 вставляется точка с SRID 4267. 4267 SRID использует географическую систему координат NAD 1927.

Далее создается таблица n83 и используется функция ST_Transform для вставки геометрии из таблицы n27 в таблицу n83 с SRID 4269 и географическим преобразованием ID 1241. SRID 4269 использует географическую систему координат NAD 1983 и ID 1241 для преобразования NAD_1927_To_NAD_1983_NADCON. Это файловое преобразование, и его можно использовать для 48 континентальных штатов США.

ПодсказкаПодсказка:

Список поддерживаемых географических преобразований см. в технической статье и связанных списках: http://support.esri.com/en/knowledgebase/techarticles/detail/21327.

Oracle

--Create table.
CREATE TABLE n27 (
 id integer,
 geometry sde.st_geometry
);

--Insert point with SRID 4267.
INSERT INTO N27 (id, geometry) VALUES (
 1, 
 sde.st_geometry ('point (-123.0 49.0)', 4267)
);

--Create the n83 table as the destination table of the transformation.
CREATE TABLE n83 (
 id integer,
 geometry sde.st_geometry
);

--Run the transformation.
INSERT INTO N83 (id, geometry)(
 select c.id, sde.st_transform (c.geometry, 4269, 1241)
 from N27 c
);

Если переменная PEDATAHOME задана правильно, выражение SELECT, выполняемое для таблицы n83, возвращает следующее:

SELECT id, sde.st_astext (geometry) description 
 FROM N83;

ID	DESCRIPTION
1 | POINT((-123.00130569 48.999828199))

SQLite

--Create source table.
CREATE TABLE n27 (id integer);

SELECT AddGeometryColumn(
 NULL,
 'n27',
 'geometry',
 4267,
 'point',
 'xy',
 'null'
);

--Insert point with SRID 4267.
INSERT INTO n27 (id, geometry) VALUES (
 1, 
 st_geometry ('point (-123.0 49.0)', 4267)
);

--Create the n83 table as the destination table of the transformation.
CREATE TABLE n83 (id integer);

SELECT AddGeometryColumn(
 NULL,
 'n83',
 'geometry',
 4269,
 'point',
 'xy',
 'null'
);

--Run the transformation.
INSERT INTO n83 (id, geometry) VALUES (
 1, 
 st_transform ((select geometry from n27 where id=1), 4269, 1241)
);

Связанные темы

5/25/2014