ST_Geometry generado a partir de un texto conocido y de datos binarios conocidos

Convertir geometría al tipo ST_Geometry en Oracle

La siguiente es una descripción de formatos de datos espaciales y de cómo convertir entre estos y el tipo espacial de Oracle.

Representación de texto conocido de OGC

La representación de texto conocido (WKT) es una cadena de texto ASCII con formato que permite el intercambio de geometría en forma de texto ASCII. Puede utilizar estas funciones en un programa de lenguaje de tercera o cuarta generación (3GL o 4GL) debido a que no requieren la definición de ninguna estructura de programa especial.

El tipo espacial tiene diversas funciones que generan geometrías a partir de descripciones de texto. Las funciones incluyen las siguientes:

  • ST_GeomFromText: crea un ST_Geometry a partir de una representación de WKT de cualquier tipo de geometría
  • ST_PointFromText: crea un ST_Point a partir de una representación de WKT de punto
  • ST_LineFromText: crea un ST_LineString a partir de una representación de WKT de cadena de texto de líneas
  • ST_PolyFromText: crea un ST_Polygon a partir de una representación de WKT de polígono
  • ST_MPointFromText: crea un ST_MultiPoint a partir de una representación de WKT multipunto
  • ST_MLineFromText: crea un ST_MultiLineString a partir de una representación de WKT de cadena de texto multilínea
  • ST_MPolyFromText: crea un ST_MultiPolygon a partir de una representación de WKT de multipolígono

La función ST_AsText convierte una geometría existente en una representación de WKT.

Utilizar la representación de texto conocido en un programa en C

La representación de WKT de geometría se puede incorporar en programas en C. La estructura para tal implementación se define a continuación. La notación {}* indica cero o más repeticiones de los tokens dentro de las llaves. Las llaves no aparecen en la lista de token de salida.

<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 > }*  )

Utilizar la representación de texto conocido en un editor SQL

Debido a que la representación de texto conocido es un texto, se puede escribir en una secuencia de comandos SQL o directamente en un editor SQL. El texto se convierte en y desde una geometría mediante una función. Las funciones que convierten texto en geometría tienen la siguiente sintaxis:

function ('<text description>',<SRID>)

Por ejemplo:

ST_PointFromText('point zm(10.01 20.04 3.2 9.5)', 1)

El identificador de referencia espacial (SRID) (la clave principal de la tabla ST_SPATIAL_REFERENCES) identifica los posibles sistemas de referencia espaciales dentro de una instancia de Oracle. Se asigna un SRID a una columna espacial cuando se crea. Para que se pueda insertar una geometría en una columna espacial, el SRID debe coincidir con el SRID de la columna espacial.

La descripción del texto está conformada por tres componentes básicos encerrados en comillas simples:

'<geometry type> [coordinate type] [coordinate list]'

El tipo de geometría se define como uno de los siguientes: punto, cadena de texto de líneas, polígono, multipunto, cadena de texto multilínea o multipolígono.

El tipo de coordenada especifica si la geometría tiene o no medidas o coordenadas z. Deje este argumento en blanco si la geometría no tiene ninguna; de lo contrario, establezca el tipo de coordenada en Z para geometrías que contienen coordenadas z, M para geometrías con medidas, y ZM para geometrías que tienen ambas.

La lista de coordenadas define los vértices de precisión doble de la geometría. Las listas de coordenadas están delimitadas por comas y están encerradas en paréntesis. Las geometrías con varios componentes requieren conjuntos de paréntesis para encerrar cada parte del componente. Si la geometría está vacía, la palabra clave EMPTY reemplaza las coordenadas.

Los siguientes ejemplos brindan una lista completa de todas las permutaciones posibles de la parte de descripción de texto de la representación de texto:

Tipo de geometría

Descripción de texto

Comentario

ST_Point

'punto vacío'

Punto vacío

ST_Point

'punto z vacío'

Punto vacío con coordenada z

ST_Point

'punto m vacío'

Punto vacío con medida

ST_Point

'punto zm vacío'

Punto vacío con medida y coordenada z

ST_Point

'punto ( 10.05 10.28 )'

Punto

ST_Point

'punto z( 10.05 10.28 2.51 )'

Punto con coordenada z

ST_Point

'punto m( 10.05 10.28 4.72 )'

Punto con medida

ST_Point

'punto zm(10.05 10.28 2.51 4.72 )'

Punto con medida y coordenada z

ST_LineString

'cadena de texto de líneas vacía'

Cadena de texto de líneas vacía

ST_LineString

'cadena de texto de líneas z vacía'

Cadena de texto de líneas vacía con coordenadas z

ST_LineString

'cadena de texto de líneas m vacía'

Cadena de texto de líneas vacía con medidas

ST_LineString

'cadena de texto de líneas zm vacía'

Cadena de texto de líneas vacía con medidas y coordenadas z

ST_LineString

'cadena de texto de líneas (10.05 10.28 , 20.95 20.89 )'

Cadena de texto de líneas

ST_LineString

'cadena de texto de líneas z(10.05 10.28 3.09, 20.95 31.98 4.72, 21.98 29.80 3.51 )'

Cadena de texto de líneas con coordenadas z

ST_LineString

'cadena de texto de líneas m(10.05 10.28 5.84, 20.95 31.98 9.01, 21.98 29.80 12.84 )'

Cadena de texto de líneas con medidas

ST_LineString

'cadena de texto de líneas 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)'

Cadena de texto de líneas con medidas y coordenadas z

ST_Polygon

'polígono vacío'

Polígono vacío

ST_Polygon

'polígono z vacío'

Polígono vacío con coordenadas z

ST_Polygon

'polígono m vacío'

Polígono vacío con medidas

ST_Polygon

'polígono zm vacío'

Polígono vacío con medidas y coordenadas z

ST_Polygon

'polígono ((10 10, 10 20, 20 20, 20 15, 10 10))'

Polígono

ST_Polygon

'polígono z((10 10 3, 10 20 3, 20 20 3, 20 15 4, 10 10 3))'

Polígono con coordenadas z

ST_Polygon

'polígono m((10 10 8, 10 20 9, 20 20 9, 20 15 9, 10 10 8 ))'

Polígono con medidas

ST_Polygon

'polígono zm((10 10 3 8, 10 20 3 9, 20 20 3 9, 20 15 4 9, 10 10 3 8 ))'

Polígono con medidas y coordenadas z

ST_MultiPoint

'multipunto vacío'

Multipunto vacío

ST_MultiPoint

'multipunto z vacío'

Multipunto vacío con coordenadas z

ST_MultiPoint

'multipunto m vacío'

Multipunto vacío con medidas

ST_MultiPoint

'multipunto zm vacío'

Multipunto vacío con medidas y coordenadas z

ST_MultiPoint

'multipunto (10 10, 20 20)'

Multipunto con dos puntos

ST_MultiPoint

'multipunto z(10 10 2, 20 20 3)'

Multipunto con coordenadas z

ST_MultiPoint

'multipunto m(10 10 4, 20 20 5)'

Multipunto con medidas

ST_MultiPoint

'multipunto zm(10 10 2 4, 20 20 3 5)'

Multipunto con medidas y coordenadas z

ST_MultiLineString

'cadena de texto multilínea vacía'

Cadena de texto multilínea vacía

ST_MultiLineString

'cadena de texto multilínea z vacía'

Cadena de texto multilínea vacía con coordenadas z

ST_MultiLineString

'cadena de texto multilínea m vacía'

Cadena de texto multilínea vacía con medidas

ST_MultiLineString

'cadena de texto multilínea zm vacía'

Cadena de texto multilínea vacía con medidas y coordenadas z

ST_MultiLineString

'cadena de texto multilínea ((10.05 10.28 , 20.95 20.89 ),( 20.95 20.89, 31.92 21.45))'

Cadena de texto multilínea

ST_MultiLineString

'cadena de texto multilínea 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))'

Cadena de texto multilínea con coordenadas z

ST_MultiLineString

'cadena de texto multilínea 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))'

Cadena de texto multilínea con medidas

ST_MultiLineString

'cadena de texto multilínea 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))'

Cadena de texto multilínea con medidas y coordenadas z

ST_MultiPolygon

'multipolígono vacío'

Multipolígono vacío

ST_MultiPolygon

'multipolígono z vacío'

Multipolígono vacío con coordenadas z

ST_MultiPolygon

'multipolígono m vacío'

Multipolígono vacío con medidas

ST_MultiPolygon

'multipolígono zm vacío'

Vacío

ST_MultiPolygon

'multipolígono (((10 10, 10 20, 20 20, 20 15 , 10 10), (50 40, 50 50, 60 50, 60 40, 50 40)))'

Multipolígono

ST_MultiPolygon

'multipolígono 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)))'

Multipolígono con coordenadas z

ST_MultiPolygon

'multipolígono 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)))'

Multipolígono con medidas

ST_MultiPolygon

'multipolígono 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)))'

Multipolígono con medidas y coordenadas z

Todas las posibles permutaciones de la parte de descripción de texto de la representación de texto

Representación binaria conocida de OGC

La representación binaria conocida para la geometría forma parte de las especificaciones de entidades simples del Open Geospatial Consortium (OGC) que implementa un modelo de almacenamiento simple para entidades de puntos, línea y poligonales con las coordenadas x,y. Ofrece una representación portátil de un valor de geometría como una transmisión contigua de bytes. Permite que los valores de geometría se intercambien entre un cliente ODBC y una base de datos en forma binaria. No está comprimido.

El tipo ST_Geometry de Oracle tiene diversas funciones que generan geometrías a partir de representaciones (WKB) binarias conocidas. Las funciones incluyen las siguientes:

  • ST_GeomFromWKB: crea un ST_Geometry a partir de una representación de WKB de cualquier tipo de geometría
  • ST_PointFromWKB: crea un ST_Point a partir de una representación de WKB de punto
  • ST_LineFromWKB: crea un ST_LineString a partir de una representación de WKB de cadena de texto de líneas
  • ST_PolyFromWKB: crea un ST_Polygon a partir de una representación de WKB de polígono
  • ST_MPointFromWKB: crea un ST_MultiPoint a partir de una representación de WKB multipunto
  • ST_MLineFromWKB: crea un ST_MultiLineString a partir de una representación de WKB de cadena de texto multilínea
  • ST_MPolyFromWKB: crea un ST_MultiPolygon a partir de una representación de WKB de multipolígono
NotaNota:

Estas funciones de geometría requieren la definición de estructuras en C para asignar la representación binaria. Están pensadas para ser utilizadas dentro de un programa 3GL y no son aptas para un entorno de 4GL.

La función ST_AsBinary convierte un valor de geometría existente en una representación binaria conocida.

Para obtener más información acerca de la representación binaria conocida, consulte La representación binaria conocida de OGC para geometría.


3/6/2012