domingo, 22 de septiembre de 2013

Crear o Ingresar una Proyección / Datum nueva a la tabla del spatial_ref_sys del PostGis


Antes de iniciar este post, deseo saludar al amigo Eddison Araya  de Costa Rica por la sugerencia de este tema. A veces en la tabla spatial_ref_sys del PostGis no hay Proyecciones o Datums que necesitamos como es el caso del “CRTM 05” de Costa Rica, cuyos parámetros son:

Elipsoide: WGS84
Factor de Escala: 0.9999
Falso Norte: 0
Falso Este 500000
Longitud de Origen: -84°
Latitud de Origen: 0°
Shift X : 0
Shift Y: 0
Shift Z: 0

A)  Estructura de la tabla spatial_ref_sys

 Luego veamos la estructura de la tabla spatial_ref_sys y el contenido de la nueva Proyección / Datum



COLUMNAS

CONTENIDO

COMENTARIO

srid

123456

código de la proyección, tu puedes poner un código que quieras, pero debe ser único en la tabla spatial_ref_sys

auth_name

ingeografos

nombre del autor, puedes poner tu nombre

auth_srid

123456

código de la proyección dado por el autor. Debe ser el mismo que el de la Columna srid

srtext

PROJCS["COSTA RICA (CRTM 05)", GEOGCS["CR05 / CRTM05",DATUM["CR05",SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030“]],AUTHORITY["EPSG","1065“]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901“]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","5367“]],UNIT["metre",1,AUTHORITY"EPSG","9001"]],

PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER"scale_factor",0.9999],PARAMETER"false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","123456"],AXIS["Easting“,EAST],AXIS["Northing",NORTH]]

Sistema de Coordenadas representado en el formato WELL KNOW TEXT (WKT)

proj4text

+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

Sistema de Coordenadas según el formato de PROJ4

 






































Nota sobre la columna srtext: el valor de la columna es esta


 













  Dónde los códigos son (en el orden presentado):

a. 7030: código del esferoide (WGS 84)
b. 1065: Datum (CR05)

c. 8901: Meridiano Central (Greenwich)
d. 9122: Unidad de medida usado por el Sistema de Referencia de Coordenadas (Grados sexagesimales)

e. 5367: código del Sistema de Referencia de Coordenadas (CR05 / CRTM05)
f. 9001: Unidad de la Proyección (metros)

g. 123456: código de la Proyección / Datum ingresado

Los códigos desde la a, hasta el f, están en la base de datos que está disponible en

http://www.epsg.org/


Sistema de Referencia obtenido de la pagina http://www.epsg.org/
 Los códigos hablados anteriormente enmarcados en rojo
 

 
Datum obtenido de la pagina http://www.epsg.org/
y los códigos hablados anteriormente enmarcados en rojo

 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 

B)  Modo de ingreso de la nueva Proyección / Datum a la tabla  spatial_ref_sys

Hay dos formar de ingresar una nueva Proyección / Datum a la tabla spatial_ref_sys:

- Directamente en la tabla spatial_ref_sys: haciendo doble click en la parte final de la tabla en mención y colocar los parámetros respectivos descritos en el apartado A de este Post.
 1)    Posesionarse en la última fila de la tabla en mención, donde está el asterisco.

 2)    Luego coloca los parámetros de acuerdo al apartado A de este Post.


- Mediante una sentencia SQL de Inserción a la tabla spatial_ref_sys: para eso abrimos una consulta SQL y ponemos esta sentencia:

 
INSERT INTO spatial_ref_sys(srid, auth_name, auth_srid, srtext, proj4text)
    VALUES (123456,'ingeografos',123456,
    'PROJCS["COSTA RICA (CRTM 05)", GEOGCS["CR05 / CRTM05",DATUM["CR05",SPHEROID   ["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030“]],AUTHORITY["EPSG","1065“]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901“]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","5367“]],UNIT["metre",1,AUTHORITY"EPSG","9001"]],
PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER"scale_factor",0.9999],PARAMETER"false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","123456"],AXIS["Easting“,EAST],AXIS["Northing",NORTH]]',
 '+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m ');



Y luego ejecutamos la consulta y actualizamos la tabla y veremos la nueva Proyección / Datum

 
C) Verificación de la nueva Proyección / Datum ingresada a la tabla  spatial_ref_sys

Para verificarlo, hacemos otra consulta SQL tal como esta:


SELECT ST_AsEWKT(st_Transform((ST_SetSRID(ST_MakePoint(-82.94439225, 8.64435069),4326)),123456))


Dónde:
ST_MakePoint(-82.94439225, 8.64435069), crea un punto con las coordenadas Longitud -82.94439225, Latitud 8.64435069.

ST_SetSRID(ST_MakePoint(-82.94439225, 8.64435069),4326)),  crea un punto con las coordenadas Longitud -82.94439225, Latitud 8.64435069 con el datum que tiene por código 4326 en la tabla spatial_ref_sys , que es el datum WGS84, Proyección Geográfica.

(ST_Transform((ST_SetSRID(ST_MakePoint(-82.94439225, 8.64435069),4326)),123456), crea un punto con las coordenadas Longitud -82.94439225, Latitud 8.64435069 con el datum que tiene por código 4326 en la tabla spatial_ref_sys , que es el datum WGS84, Proyección Geográfica y lo transforma al Datum CR05, Proyección CRTM05, cuyo código en la misma tabla es el 123456.

SELECT ST_AsEWKT(ST_Transform((ST_SetSRID(ST_MakePoint(-82.94439225, 8.64435069),4326)),123456)), que es toda la sentencia sql, y muestra las coordenadas -82.94439225, 8.64435069 cuyo datum de origen es el WGS84 proyectadas al CRTM05 con este resultado:
 "SRID=123456;POINT(61678.33129184 955980.598525378)"

 
se puede usar el documento de este enlace:
http://www.rnpdigital.com/catastro/Documentos/GUiA_TEC_GEORREF_PLAN_AGRIM_ACT_FEBR_2013.pdf

en la pagina 18 del mismo, hay 8 coordenadas Geográficas en WGS84 y se pueden transformar a CRTM 05 para comparar los resultados, viendo que hay una diferencia desde el tercer decimal (en los milímetros), concluyendo que la transformación es aceptable.

Esperando que este post sea de ayuda y otra vez saludando al amigo Eddison Araya de Costa Rica, será hasta el otro mes. Hasta luego
 

 
ª