ST_Geometry, полученный из текстовых или бинарных данных
Конвертация геометрии в тип ST_Geometry в Oracle
Ниже приводится описание форматов пространственных данных и способов их конвертации в пространственный тип Oracle.
Стандартное текстовое представление OGC
Представление в стандартном текстовом формате (WKT) - это текстовые строки ASCII, которые позволяют обмениваться геометрией в текстовой форме. Эти функции используются как язык программирования третьего или четвертого поколения (3GL или 4GL), поскольку они не требуют построения специальных программных структур.
Пространственный тип имеет несколько функций, которые генерируют геометрии из текстовых описаний. Это следующие функции:
- ST_GeomFromText: создает ST_Geometry из WKT-представления любого типа геометрии
- ST_PointFromText: создает ST_Point из точечного WKT-представления
- ST_LineFromText: создает ST_LineString из линейного WKT-представления
- ST_PolyFromText: создает ST_Polygon из полигонального WKT-представления
- ST_MPointFromText: создает ST_MultiPoint из мультиточечного WKT-представления
- ST_MLineFromText: создает ST_MultiLineString мультилинейного WKT-представления
- ST_MPolyFromText: создает ST_MultiPolygon мультиполигонального WKT-представления
Функция ST_AsText конвертирует геометрию в WKT-представление.
Использование WKT-представления в программах на языке C
Представление геометрии WKT может быть включено в программы, написанные на языке C. Структура такого применения описывается ниже. Нотация {}* обозначает ноль или более повторений токенов в скобках. Скобки не появляются в выходном списке токенов.
<Geometry Tagged Text> :=
| <Point Tagged Text>
| <LineString Tagged Text>
| <Polygon Tagged Text>
| <MultiPoint Tagged Text>
| <MultiLineString Tagged Text>
| <MultiPolygon Tagged Text>
<Point Tagged Text> :=
POINT <Point Text>
<LineString Tagged Text> :=
LINESTRING <LineString Text>
<Polygon Tagged Text> :=
POLYGON <Polygon Text>
<MultiPoint Tagged Text> :=
MULTIPOINT <Multipoint Text>
<MultiLineString Tagged Text> :=
MULTILINESTRING <MultiLineString Text>
<MultiPolygon Tagged Text> :=
MULTIPOLYGON <MultiPolygon Text>
<Point Text> := EMPTY
| <Point>
| Z <PointZ>
| M <PointM>
| ZM <PointZM>
<Point> := <x> <y>
<x> := double precision literal
<y> := double precision literal
<PointZ> := <x> <y> <z>
<x> := double precision literal
<y> := double precision literal
<z> := double precision literal
<PointM> := <x> <y> <m>
<x> := double precision literal
<y> := double precision literal
<m> := double precision literal
<PointZM> := <x> <y> <z> <m>
<x> := double precision literal
<y> := double precision literal
<z> := double precision literal
<m> := double precision literal
<LineString Text> := EMPTY
| ( <Point Text > {, <Point Text> }* )
| Z ( <PointZ Text > {, <PointZ Text> }* )
| M ( <PointM Text > {, <PointM Text> }* )
| ZM ( <PointZM Text > {, <PointZM Text> }* )
<Polygon Text> := EMPTY
| ( <LineString Text > {,< LineString Text > }*)
<Multipoint Text> := EMPTY
| ( <Point Text > {, <Point Text > }* )
<MultiLineString Text> := EMPTY
| ( <LineString Text > {,< LineString Text>}* )
<MultiPolygon Text> := EMPTY
| ( < Polygon Text > {, < Polygon Text > }* )
Использование WKT-представления в SQL-редакторе
Поскольку WKT является текстом, его можно просто вводить в SQL-скрипт или в SQL-редактор. Текст конвертируется в или из геометрии с помощью функции. Функции, конвертирующие текст в геометрию имеют следующий синтаксис:
function ('<text description>',<SRID>)
Например:
ST_PointFromText('point zm(10.01 20.04 3.2 9.5)', 1)
Идентификатор пространственной привязки (SRID) — первичный ключ таблицы ST_SPATIAL_REFERENCES — определяет системы пространственной привязки, использующиеся в экземпляре Oracle. SRID присваивается пространственному столбцу при его создании. Прежде чем геометрию можно будет ввести в столбец, ее SRID должен быть приведен в соответствие с SRID пространственного столбца.
Текстовое описание состоит из трех основных компонентов, взятых в одиночные кавычки:
'<geometry type> [coordinate type] [coordinate list]'
Можно задать один из следующих типов геометрии: точка, строка, полигон, мультиточка, мультилиния или мультиполигон.
Тип координат задает наличие или отсутствие z-координат и/или измерений. Оставьте этот аргумент пустым, если геометрия не содержит их; иначе, задайте тип координат как Z для геометрии, содержащей z-координаты, M - для геометрии с измерениями, и ZM - для геометрии z-координатами и измерениями.
Список координат содержит значения вершин геометрии двойной точности. Список координат разделяется запятыми и берется в скобки. Геометрии, состоящие из нескольких компонентов, содержат несколько частей, заключенных в скобки, по каждому компоненту. Если геометрия пуста, координаты заменяются ключевым словом EMPTY.
В следующих примерах содержатся все варианты текстового описания:
Тип геометрии |
Текстовое описание |
Комментарий |
---|---|---|
ST_Point |
'point empty' |
Пустая точка |
ST_Point |
'point z empty' |
Пустая точка с z-координатой |
ST_Point |
'point m empty' |
Пустая точка с m-измерением |
ST_Point |
'point zm empty' |
Пустая точка с z-координатой и m-измерением |
ST_Point |
'point ( 10.05 10.28 )' |
Точка (Point) |
ST_Point |
'point z( 10.05 10.28 2.51 )' |
Точка с z-координатой |
ST_Point |
'point m( 10.05 10.28 4.72 )' |
Точка с m-измерением |
ST_Point |
'point zm(10.05 10.28 2.51 4.72 )' |
Точка с z-координатой и m-измерением |
ST_LineString |
'linestring empty' |
Пустая линия |
ST_LineString |
'linestring z empty' |
Пустая линия с z-координатами |
ST_LineString |
'linestring m empty' |
Пустая линия с m-измерениями |
ST_LineString |
'linestring zm empty' |
Пустая линия с z-координатами и m-измерениями |
ST_LineString |
'linestring (10.05 10.28 , 20.95 20.89 )' |
Линия (Linestring) |
ST_LineString |
'linestring z(10.05 10.28 3.09, 20.95 31.98 4.72, 21.98 29.80 3.51 )' |
Линия с z-координатами |
ST_LineString |
'linestring m(10.05 10.28 5.84, 20.95 31.98 9.01, 21.98 29.80 12.84 )' |
Линия с m-измерениями |
ST_LineString |
'linestring zm(10.05 10.28 3.09 5.84, 20.95 31.98 4.72 9.01, 21.98 29.80 3.51 12.84)' |
Линия с z-координатами и m-измерениями |
ST_Polygon |
'polygon empty' |
Пустой полигон |
ST_Polygon |
'polygon z empty' |
Пустой полигон с z-координатами |
ST_Polygon |
'polygon m empty' |
Пустой полигон с m-измерениями |
ST_Polygon |
'polygon zm empty' |
Пустой полигон с z-координатами и m-измерениями |
ST_Polygon |
'polygon ((10 10, 10 20, 20 20, 20 15, 10 10))' |
Polygon |
ST_Polygon |
'polygon z((10 10 3, 10 20 3, 20 20 3, 20 15 4, 10 10 3))' |
Полигон с z-координатами |
ST_Polygon |
'polygon m((10 10 8, 10 20 9, 20 20 9, 20 15 9, 10 10 8 ))' |
Полигон с m-измерениями |
ST_Polygon |
'polygon zm((10 10 3 8, 10 20 3 9, 20 20 3 9, 20 15 4 9, 10 10 3 8 ))' |
Полигон с z-координатами и m-измерениями |
ST_MultiPoint |
'multipoint empty' |
Пустая мультиточка |
ST_MultiPoint |
'multipoint z empty' |
Пустая мультиточка с z-координатами |
ST_MultiPoint |
'multipoint m empty' |
Пустая мультиточка с m-измерениями |
ST_MultiPoint |
'multipoint zm empty' |
Пустая мультиточка с z-координатами и m-измерениями |
ST_MultiPoint |
'multipoint (10 10, 20 20)' |
Мультиточка с двумя точками |
ST_MultiPoint |
'multipoint z(10 10 2, 20 20 3)' |
Мультиточка с z-координатами |
ST_MultiPoint |
'multipoint m(10 10 4, 20 20 5)' |
Мультиточка с m-измерениями |
ST_MultiPoint |
'multipoint zm(10 10 2 4, 20 20 3 5)' |
Мультиточка с z-координатами и m-измерениями |
ST_MultiLineString |
'multilinestring empty' |
Пустая мультилиния |
ST_MultiLineString |
'multilinestring z empty' |
Пустая мультилиния с z-координатами |
ST_MultiLineString |
'multilinestring m empty' |
Пустая мультилиния с m-измерениями |
ST_MultiLineString |
'multilinestring zm empty' |
Пустая мультилиния с z-координатами и m-измерениями |
ST_MultiLineString |
'multilinestring ((10.05 10.28 , 20.95 20.89 ),( 20.95 20.89, 31.92 21.45))' |
Мультилиния |
ST_MultiLineString |
'multilinestring z((10.05 10.28 3.4, 20.95 20.89 4.5),( 20.95 20.89 4.5, 31.92 21.45 3.6))' |
Мультилиния с z-координатами |
ST_MultiLineString |
'multilinestring m((10.05 10.28 8.4, 20.95 20.89 9.5), (20.95 20.89 9.5, 31.92 21.45 8.6))' |
Мультилиния с m-измерениями |
ST_MultiLineString |
'multilinestring zm((10.05 10.28 3.4 8.4, 20.95 20.89 4.5 9.5), (20.95 20.89 4.5 9.5, 31.92 21.45 3.6 8.6))' |
Мультилиния с z-координатами и m-измерениями |
ST_MultiPolygon |
'multipolygon empty' |
Пустой мультиполигон |
ST_MultiPolygon |
'multipolygon z empty' |
Пустой мультиполигон с z-координатами |
ST_MultiPolygon |
'multipolygon m empty' |
Пустой мультиполигон с m-измерениями |
ST_MultiPolygon |
'multipolygon zm empty' |
Пусто |
ST_MultiPolygon |
'multipolygon (((10 10, 10 20, 20 20, 20 15 , 10 10)), ((50 40, 50 50, 60 50, 60 40, 50 40)))' |
Мультиполигон |
ST_MultiPolygon |
'multipolygon z(((10 10 7, 10 20 8, 20 20 7, 20 15 5, 10 10 7)), ((50 40 6, 50 50 6, 60 50 5, 60 40 6, 50 40 6)))' |
Мультиполигон с z-координатами |
ST_MultiPolygon |
'multipolygon m(((10 10 2, 10 20 3, 20 20 4, 20 15 5, 10 10 2)), ((50 40 7, 50 50 3, 60 50 4, 60 40 5, 50 40 7)))' |
Мультиполигон с m-измерениями |
ST_MultiPolygon |
'multipolygon zm(((10 10 7 2, 10 20 8 3, 20 20 7 4, 20 15 5 5, 10 10 7 2)), ((50 40 6 7, 50 50 6 3, 60 50 5 4, 60 40 6 5, 50 40 6 7)))' |
Мультиполигон с z-координатами и m-измерениями |
Стандартное двоичное представление (WKB) OGC
Хорошо известное двоичное представление для геометрии является частью спецификации Simple Features Открытого геопространственного консорциума (Open Geospatial Consortium (OGC), в котором реализуется простая модель хранения точечных, линейных и полигональных пространственных объектов с помощью координат x и y. Он обеспечивает портативное представление значения геометрии в виде непрерывного потока байтов. Она позволяет значениям геометрии обмениваться между клиентом ODBC и базой данных в двоичной форме. Она не сжата.
Тип ST_Geometry для Oracle имеет несколько функций, которые генерируют геометрии из бинарного WKB-представления. Это следующие функции:
- ST_GeomFromWKB: создает ST_Geometry из WKB-представления любого типа геометрии
- ST_PointFromWKB: создает ST_Point из точечного WKB-представления
- ST_LineFromWKB: создает ST_LineString из линейного WKB-представления
- ST_PolyFromWKB: создает ST_Polygon из полигонального WKB-представления
- ST_MPointFromWKB: создает ST_MultiPoint из мультиточечного WKB-представления
- ST_MLineFromWKB: создает ST_MultiLineString мультилинейного WKB-представления
- ST_MPolyFromWKB: создает ST_MultiPolygon мультиполигонального WKB-представления

Эти геометрические функции требуют определения структур языка C для картографирования бинарных представлений. Они предназначены для программ 3GL и не подходят для 4GL-среды.
Функция ST_AsBinary конвертирует значение геометрии в бинарное WKT-представление.
Более подробная информация о бинарных WKT-представлениях находится в разделе Бинарное WKT-представление геометрии OGC.