Importante
La traducción es un esfuerzo comunitario puede unirse. Esta página está actualmente traducida en |progreso de traducción|.
16.2. Lección: Modelo de objeto espacial simple
¿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).
For further information, have a look at the OGC Simple Feature for SQL standard.
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 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(geom) = 'ST_Point'::text
OR 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. ★★★ Pruébese:
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
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','geom',2,4326,'POINT');
Why? geometry_columns is used by certain applications to be aware of
which tables in the database contain geometry data.
Nota
Si la declaración «INSERT» anterior provoca un error, primero ejecute esta consulta:
select * from geometry_columns;
If the column f_table_name contains the value people, then
this table has already been registered and you don’t need to do anything
more.
El valor 2 se refiere al número de dimensiones; en este caso, dos: X e **Y **.
The value 4326 refers to the projection we are using; in this case, WGS
84, which is referred to by the number 4326 (refer to the earlier discussion
about the EPSG).
★☆☆ Ponte a prueba:
Add an appropriate geometry_columns entry for your new cities layer
Respuesta
insert into geometry_columns values
('','public','cities','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, 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.
Now is probably a good time to open QGIS and try to view your people
table. Also, we should try editing / adding / deleting records and then
performing select queries in the database to see how the data has changed.
To load a PostgreSQL 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:
To see whether QGIS has found the address database and that your
username and password are correct, click Test Connect. If it works,
check the boxes next to Save Username and Save Password.
Then click OK to create this connection.
Back in the Add PostgreSQL Layers dialog, click Connect and add layers to your project as usual.
★★☆ Ponte a prueba:
Formule una consulta que muestre el nombre de una persona, el nombre de la calle y la posición (de la columna geom) como texto sin formato.
Respuesta
select people.name,
streets.name as street_name,
st_astext(people.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. En conclusión
Ha visto cómo agregar objetos espaciales a su base de datos y visualizarlos en el software GIS.
16.2.9. ¿Y ahora qué?
A continuación verá cómo importar data a, y exportar data desde, su base de datos.
