Tengo datos simples en una tabla de postgresql que se ve así:
id index easting northing utm_zone utm_zone_letter
1 1 233410.0000 1024701.0000 38 N
1 2 213310.0000 1167201.0000 36 N
2 1 213310.0000 1167201.0000 31 B
2 2 213310.0000 1167201.0000 31 B
Nota: Las coordenadas no son reales, sino que fueron ingresadas manualmente
Como puedes ver, estas son coordenadas UTM pero almacenadas en campos de tipo db comunes.
Quiero convertir esas últimas 4 columnas a uno de tipo Geometry para PostGis.
A algo como esto:
id Geometry
1 02347237427342342347
2 27584872345646325863
Usé una consulta similar a esta:
--crea un polígono con un SRID equivocado :(
SELECT z.id, ST_Polygon(z.geom, 3395) geom FROM (
--agrega el primer punto de la línea al final para cerrarla (requerido por ST_Polygon)
SELECT l.id id, ST_AddPoint(g.geom, ST_StartPoint(g.geom)) geom FROM (
-- agrupa puntos por ID y crea geometría de línea abierta desde cada grupo
SELECT t.id id, ST_MakeLine(t.strPoints) geom FROM (
--crea texto POINT(x,y) de las coordenadas
SELECT
g.id id,
g.index idx,
'POINT(' || g.easting || ' ' || g.northing || ')' strPoints
FROM data g
ORDER BY g.index
) t
GROUP BY t.id
HAVING count(t.strPoints) > 2
) g
) z
where ST_IsValid(z.geom)
Pero esto no usa utm_zone y utm_zone_letter y los puntos y líneas se crean sin un valor SRID. Crear un polígono a partir de tales valores y especificar algún SRID da malos resultados. Al mismo tiempo, como los puntos y líneas no tienen el SRID establecido, no puedo usar la función DB utmzone(geometry) porque requiere que la geometría tenga un SRID.
Investigué en ST_Transform, ST_FromText y otras funciones pero no pude encontrar una donde pueda especificar el número y la letra de la zona UTM para crear un valor de tipo Geometry.
Crear un punto sin especificar el SRID me da malos resultados: los puntos caen en pingüinos en la Antártida, lo cual es incorrecto.
¿Me puedes decir cómo convertir esos datos a valores de Geometría correctos con el SRID especificado correctamente?