En la tabla “spatial_ref_sys” veremos las proyecciones soportadas por el PostGis. Y tiene estas columnas:
SRID: código único que está asociado a una única proyección en PostGis.
AUTH_NAME: aparece el nombre de la fuente de estos códigos que es EPSG que son las siglas de European Petroleum Survey Group (http://www.epsg.org/).
AUTH_SRID: son los códigos ideados por las organizaciones que están en la columna AUTH_NAME y en todos los casos son de la EPSG.
SRTEXT: parámetros de la proyección asociados a los códigos de las columnas SRID y AUTH_SRID.
PROJ4TEXT: parámetros de la proyección según el PROJ4
Quizá para nuestro ejemplo el más útil será el SRID y el SRTEXT ya que es un código único y nombre de la proyección la cual estará proyectada nuestra tabla
Para el caso de Perú, tenemos estas proyecciones que usamos:
srid | auth_name | auth_srid | Proyección Geográfica / UTM |
4326 | EPSG | 4326 | Geográficas WGS 84 |
4248 | EPSG | 4248 | Geográficas PSAD 56 |
24877 | EPSG | 24877 | PSAD 56 Zona 17 S |
24878 | EPSG | 24878 | PSAD 56 Zona 18 S |
24879 | EPSG | 24879 | PSAD 56 Zona 19 S |
32717 | EPSG | 32717 | WGS 84 Zona 17 S |
32718 | EPSG | 32718 | WGS 84 Zona 18 S |
32719 | EPSG | 32719 | WGS 84 Zona 19 S |
En la tabla “geometry_columns” Veremos los nombres de las tablas, las proyecciones y el tipo de geometría que tienen, y está compuesta por 8 columnas de las cuales las más importantes para este momento son:
F_TABLE_NAME: nombre de una tabla que está en la base de datos de PostGis.
F_GEOMETRY_COLUMN: nombre de la columna que están contenidas las geometrías de la tabla.
SRID: código de proyección que está en la tabla “spatial_ref_sys”.
Recuérdese que estas tablas siempre deben estar presentes en las bases de datos que tengamos en el PostGis.
Ahora veremos 3 casos que nos podríamos encontrar al tratar de configurar y saber que proyección tienen las tablas en PostGis:
A) Cuando recién estoy por importar un archivo shp al Postgis:
El PostGis no lee los archivos prj asociados a los archivos shp, así que debemos de darle la proyección que se encuentran para que la tabla que será creada a partir de este shp herede su proyección. Si por ejemplo si queremos llevar el shape “aeródromos.shp” y si queremos que la tabla que crearemos con el nombre “OPCION_01” este con la proyección PSAD56 / Zona 18S, lo haremos de esta manera:
Para comprobar que tiene una proyección veremos que en la tabla “geometry_columns” se encuentre el nombre de la tabla que acabamos de importar con el código SRID de la proyección que le corresponde. Otra forma es hacer click derecho sobre la tabla creada y vamos a propiedades y luego aparecerá la ventana de las propiedades y vamos a la pestaña de “Constraints”, aparecerán 2 columnas, en la columna “Constraint_name” buscamos la entrada “enforce_srid_the_geom” y en la otra columna que dice “Definition” debe estar algo como “st_srid(the_geom) = 24878” donde 24878 la proyección PSAD56 / Zona 18S para es el código SRID de la proyección de la tabla “OPCION _01”.
Otra forma es poner esta sentencia en el SQL:
Select st_SRID(the_geom) from “OPCION_1”
Donde nos mostrara en el “Output pane” un mensaje que nos mostrara el 24878 para cada geometría de la columna the_geom.
B) Ya tengo una tabla en PostGis y tiene como proyección -1, ¿cómo configuro su proyección?
Para este caso, primero, verificamos la proyección que tiene esta tabla, usaremos la tabla “OPCION_2” que queremos evaluar, para esto usamos en el SQL esta secuencia:
Select st_SRID(the_geom) from “OPCION_2”
Donde nos mostrara en el “Output pane” un mensaje que nos mostrara -1
Una segunda forma es ver en la tabla “geometry_columns” y en la columna F_TABLE_NAME ubicamos el nombre de la tabla “OPCION_02” y vemos que en la columna SRID está el valor -1.
Otra forma es hacer click derecho sobre la tabla creada y vamos a propiedades y luego aparecerá la ventana de las propiedades y vamos a la pestaña de “Constraints”, aparecerán 2 columnas, en la columna “Constraint_name” buscamos la entrada “enforce_srid_the_geom” y en la otra columna que dice “Definition” debe estar algo como “st_srid(the_geom) = (-1)” donde -1 es el código SRID de la proyección de la tabla “OPCION_02”.
Para proyectar esta tabla a la proyección PSAD56 / Zona 18S, usamos esta sentencia en el SQL:
Select UpdateGeometrySRID (‘OPCION_02’, ‘the_geom’, 24878)
Luego nuestra tabla quedara ya proyectada con el datum mencionado, debemos actualizar la tabla “geometry_columns” y “OPCION_02” (click derecho en ambas tablas y dar Refresh) para ver los cambios efectuados.
C) Tengo una tabla en PostGis y no aparece nada en la pestaña “Constraints” y/o el nombre de la tabla no aparece en la tabla “geometry_columns”, ¿Cómo configuro su proyección?
En este caso usaremos la tabla “OPCION_03”, hacemos indistintamente ya que no importa el orden, en la tabla “geometry_columns” agregamos una fila con estos valores en las siguientes columnas:
“oid”: es un numero que automáticamente aparecerá al rellenar los demás campos siguientes. No hace falta poner nada acá.
“f_table_catalog”: ‘’ , solo poner 2 comillas nada más.
“f_tabla_schema:” public
“f_table_name”: OPCION_03
“f_geometry_column”: the_geom
“coord_dimension”: 2
“srid”: -1
“type”: POINT
Y hacemos click derecho en la table “OPCION_03” y en properties, pestaña Constraints hacemos esto:
En la pestaña de parte de abajo, desglosamos la pestaña y seleccionamos “Primary key”, pulsamos el botón “add” y en la pestaña “columns” seleccionamos la columna “gid” de la lista desglosable debajo de esta pestaña, pulsamos “add” y luego “ok”.
En la misma pestaña “Constraints” y seleccionamos “check” (este proceso lo haremos 3 veces) , aparecerá una ventana con dos recuadros, en el recuadro Name ponemos enforce_dims_the_geom y en el recuadro Check ponemos st_ndims(the_geom) = 2 y presionamos ok.
Seleccionamos “check” otra vez, aparecerá la misma ventana con los dos recuadros, en el recuadro Name ahora ponemos enforce_geotype_the_geom y en el recuadro Check ponemos (the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL y presionamos ok.
Seleccionamos “check” por última vez, aparecerá la misma ventana con los dos recuadros, en el recuadro Name ahora ponemos enforce_srid_the_geom y en el recuadro Check ponemos srid(the_geom) =( -1) y presionamos ok. AL final la pestaña “Constraints” debe verse así:
Luego de estos dos procesos que indistintamente pueden ser en cualquier orden, en el SQL hacemos este select que vimos anteriormente; en el caso que esta tabla sea proyectada a PSAD56 / Zona 18S, usamos esta sentencia en el SQL (recuérdese que nuestra tabla se llama “OPCION_03”):
Select UpdateGeometrySRID (‘OPCION_03’, ‘the_geom’, 24878)
Refrescamos las tablas “OPCION_03” y “geometry_columns”, y podemos ver los resultados como se muestra en la figura que sigue:
Nota: es posible que para esta tercera opción en el momento que ingresamos el check enforce_srid_the_geom con el valor srid(the_geom) =( -1) , y al estar en la pestaña “Constraints” nos aparezca este error “ERROR: la restricción check “enforce_srid_the_geom” es violada por alguna fila”, esto ocurre porque ya nuestra tabla tiene una proyección diferente de -1.
Para averiguarlo vamos al SQL y hacemos:
Select st_SRID(the_geom) from “OPCION_2”
Donde nos mostrara en el “Output pane” un mensaje que nos mostrara el verdadero valor de SRID de la tabla.
En este caso el valor es de 24878 para el SRID. Luego de esto, vamos a la pestaña “Constraints” y ahora si agregamos el check que nos falta. En Name ponemos enforce_srid_the_geom y en Check ponemos srid(the_geom) =24878 y listo (no lleva los paréntesis el 24878).
Esperando que sea muy útil este post. Los espero en marzo para un nuevo Tip. Nos vemos.