Описание
ST_Transform преобразует двумерные данные ST_Geometry в пространственную привязку, определенную идентификатором пространственной привязки (SRID).
Использование ST_Transform в PostgreSQL
В PostgreSQL целевая пространственная привязка, указанная вами для преобразования, должна использовать ту же географическую систему координат, что и в столбце ST_Geometry.
Если данные хранятся в базе данных (а не в базе геоданных), выполните следующие шаги для изменения пространственной привязки данных ST_Geometry:
- Создайте резервную копию таблицы.
- Создайте второй (целевой) столбец ST_Geometry в таблице.
- Зарегистрируйте целевой столбец ST_Geometry, указывая новый SRID.
Указание пространственной привязки для столбца выполняется размещением записи в системной таблице sde_geometry_columns.
- Выполните ST_Transform. Укажите, что преобразованные данные будут отсылаться в целевой столбец ST_Geometry.
- Отмените регистрацию первого столбца (исходного) 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 не обновляет эту таблицу.
- Создайте резервную копию таблицы.
- Создайте второй (целевой) столбец ST_Geometry в таблице.
- Выполните ST_Transform. Укажите, что преобразованные данные будут отсылаться в целевой столбец ST_Geometry.
- Удалите пространственный индекс из исходного столбца ST_Geometry.
- Удалите исходный столбец ST_Geometry.
- Создайте пространственный индекс в целевом столбце 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.
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 вставляется точка. SRID 4267 использует географическую систему координат NAD 1927.
Далее создается таблица n83, и функция ST_Transform вставляет геометрию из таблицы n27 в таблицу n83, но уже с SRID равным 4269 и ID географического преобразования равным 1241. SRID 4269 использует географическую систему координат NAD 1983, а 1241 – стандартный ID для преобразования NAD_1927_To_NAD_1983_NADCON. Это файловое преобразование, и его можно использовать для 48 континентальных штатов США.
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)
);