He hecho algunos cambios en el código para obtener las coordenadas en DMS, si es necesario. Sólo se necesitan ajustes en la información EPSG.
Latitud
(CASE WHEN $y < 0 THEN '-' ELSE '' END) || floor (abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) || '°' || floor(((abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) - floor (abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
))) * 60) ||'\'' || substr( (tostring((((abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) - floor (abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
))) * 60) - floor(((abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) - floor (abs(Y( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
))) * 60)) * 60),1,5) || '"'
Longitud
(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) || '°' || floor(((abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) - floor (abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
))) * 60) ||'\'' || substr( (tostring((((abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) - floor (abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
))) * 60) - floor(((abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
)) - floor (abs(X( transform( $geometry, 'EPSG:31983', 'EPSG:4326'))
))) * 60)) * 60),1,5) || '"'
0 votos
Puedo sugerir una solución. No es óptima, pero si estás atascado en este momento, puedes hacer tu trabajo. Haga clic con el botón derecho y guarde como CSV. Abre el CSV en Excel o Google Docs, introduce tu fórmula (que debería ser más limpia y fácil). Elimine todos los campos excepto el identificador único y las cadenas DMS convertidas. Guárdelo. Haga una unión de tablas con la capa existente y estará listo.
2 votos
Ten cuidado con las entradas negativas.
0 votos
Sólo para añadir a la respuesta de spatialthought: el redondeo abajo al grado más cercano funcionará en Excel utilizando la función FLOOR().