16.2. Modelo de Objeto SImple ILSI
¿Cómo podemos almacenar y representar entidades geográficas en una base de datos? En esta lección, cubriremos un enfoque, el Modelo de objetos simples como lo define el OGC.
El objetivo de esta lección: Aprender qué es el modelo SFS y cómo utilizarlo.
16.2.1. Qué es OGC
El Consorcio Geoespacial Abierto (OGC), una organización internacional voluntaria de estándares de consenso, se originó en 1994. En el OGC, más de 370+ organizaciones comerciales, gubernamentales, sin fines de lucro y de investigación en todo el mundo colaboran en un proceso de consenso abierto que fomenta el desarrollo e implementación de estándares para geoespacial contenido y servicios, procesamiento de datos GIS e intercambio de datos. * - Wikipedia *
16.2.2. ¿Qué es el modelo SFS?
El modelo de Objeto Simple para SQL (SFS) es una forma no topológica de almacenar datos geoespaciales en una base de datos y define funciones para acceder, operar y construir estos datos.
El modelo define datos geoespaciales de los tipos de punto, cadena de líneas y polígono (y agregaciones de ellos a objetos múltiples).
Para más información mire el estándar OGC Simple Feature for SQL .
16.2.3. Añadir un campo geometría a la tabla
Agreguemos un campo de puntos a nuestra tabla de gente:
alter table people add column the_geom geometry;
16.2.4. Añadir una restricción basada en el tipo de geometría
Notará que el tipo de campo de geometría no especifica implícitamente qué tipo de geometría para el campo; para eso, necesitamos una restricción:
alter table people
add constraint people_geom_point_chk
check(st_geometrytype(the_geom) = 'ST_Point'::text
OR the_geom IS NULL);
Esto agrega una restricción a la tabla para que solo acepte una geometría de punto o un valor nulo.
16.2.5. Try Yourself
Cree una nueva tabla llamada ciudades y asígnele algunas columnas apropiadas, incluido un campo de geometría para almacenar polígonos (los límites de la ciudad). Asegúrese de que tenga una restricción que obligue a que las geometrías sean polígonos.
Respuesta
create table cities (id serial not null primary key,
name varchar(50),
the_geom geometry not null);
alter table cities
add constraint cities_geom_point_chk
check (st_geometrytype(the_geom) = 'ST_Polygon'::text );
16.2.6. Rellenar geometry_columns de tabla
En este punto, también debe agregar una entrada en geometry_columns
de la tabla:
insert into geometry_columns values
('','public','people','the_geom',2,4326,'POINT');
Porque? geometry_columns Algunas aplicaciones lo utilizan para saber qué tablas de la base de datos contienen datos geométricos.
Nota
Si la declaración «INSERT» anterior provoca un error, primero ejecute esta consulta:
select * from geometry_columns;
Si la columna f_table_name contiene el valor people, entonces esta tabla ya ha sido registrada y no necesita hacer nada más.
El valor 2
se refiere al número de dimensiones; en este caso, dos: X e **Y **.
El valor 4326 se refiere a la proyección que estamos usando; en este caso, WGS 84, al que se hace referencia con el número 4326 (consulte la discusión anterior sobre EPSG).
Try Yourself
Agregue una entrada geometry_columns apropiada para su nueva capa de ciudades
Respuesta
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
16.2.7. Agregar registro de geometría a la tabla usando SQL
Ahora que nuestras tablas están geo-habilitadas, podemos almacenar geometrías en ellas:
insert into people (name,house_no, street_id, phone_no, the_geom)
values ('Fault Towers',
34,
3,
'072 812 31 28',
'SRID=4326;POINT(33 -33)');
Nota
En la nueva entrada anterior, deberá especificar qué proyección (SRID) desea usar. Esto se debe a que ingresó la geometría del nuevo punto utilizando una cadena de texto simple, que no agrega automáticamente la información de proyección correcta. Obviamente, el nuevo punto debe usar el mismo SRID que el conjunto de datos al que se está agregando, por lo que debe especificarlo.
Si en este punto estuviera utilizando una interfaz gráfica, por ejemplo, especificar la proyección para cada punto sería automático. En otras palabras, normalmente no tendrá que preocuparse por utilizar la proyección correcta para cada punto que desee agregar si ya lo ha especificado para ese conjunto de datos, como hicimos anteriormente.
Este es probablemente un buen momento para abrir QGIS e intentar ver su tabla people. Además, deberíamos intentar editar / agregar / eliminar registros y luego realizar consultas de selección en la base de datos para ver cómo han cambiado los datos.
To load a PostGIS layer in QGIS, use the
menu option or toolbar button:Esto abrirá el diálogo:
Click en el botón Nuevo para abrir este diálogo:
Luego defina una nueva conexión, por ejemplo:
Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:
Para ver si QGIS ha encontrado la base de datos address y si su nombre de usuario y contraseña son correctos, haga clic en Probar conexión. Si funciona, marque las casillas junto a Guardar nombre de usuario y Guardar contraseña. Luego haga clic en Aceptar para crear esta conexión.
Regresa al diálogo Añadir capas PostGIS, click Conectar y agregue capas a su proyecto como de costumbre.
Try Yourself
Formule una consulta que muestre el nombre de una persona, el nombre de la calle y la posición (de la columna the_geom) como texto sin formato.
Respuesta
select people.name,
streets.name as street_name,
st_astext(people.the_geom) as geometry
from streets, people
where people.street_id=streets.id;
Resultado:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
Como puede ver, nuestra restricción permite que se agreguen valores nulos a la base de datos.
16.2.8. In Conclusion
Ha visto cómo agregar objetos espaciales a su base de datos y visualizarlos en el software GIS.
16.2.9. What’s Next?
A continuación verá cómo importar data a, y exportar data desde, su base de datos.