Saltar al contenido
Volver al blog
AI Agent
QGIS
Tutorial

Cómo georreferenciar un mapa o una imagen en QGIS

Published

Un mapa topográfico USGS de 1947 de San Francisco dividido en dos: a la izquierda el escaneo original, a la derecha el mismo mapa georreferenciado y superpuesto sobre OpenStreetMap, el Bay Bridge continuando más allá del borde del mapa, bajo el título Georeferencing in QGIS.
La hoja San Francisco North de 1947, antes y después. Mapa: USGS, dominio público. Mapa base: contribuyentes de OpenStreetMap.

Para georreferenciar un mapa o una imagen en QGIS, abre Layer > Georeferencer, carga el escaneo con Open Raster, haz clic en al menos cuatro puntos que puedas identificar y escribe sus coordenadas reales, elige Polynomial 1 y un CRS de destino proyectado en Transformation Settings, y luego pulsa Start Georeferencing. QGIS genera un GeoTIFF y lo añade a tu proyecto.

Colocar los puntos es la parte fácil. La parte que la mayoría de los tutoriales se salta es juzgar el resultado, porque el número que QGIS te muestra puede ser cero en un mapa que está a cientos de metros de distancia. Georreferencié un mapa USGS de 1947 de San Francisco y medí cada resultado contra puntos que el ajuste nunca vio. Los números que aparecen abajo provienen de esa prueba.

La respuesta breve

Tu entradaMétodoTiempo o coste
Un escaneo con coordenadas impresas (retícula, marcas de la cuadrícula, valores de las esquinas)Método 1, escribe los valores impresosGratis. 8 puntos, luego una deformación de 34 s en un escaneo de 6,888 x 8,933 px
Un escaneo sin coordenadas, o una foto de un mapaMétodo 1, From Map Canvas sobre un mapa baseGratis. Prevé 10 puntos o más
Un GeoPDF de USGS u otra agenciaÁbrelo directamente, ya está colocadoGratis, cero puntos
Puntos ya leídos y quieres que te comprueben el ajusteMétodo 2, un agente de AI1 mensaje, 99 s en mi prueba
Una superposición visual rápida, sin necesidad de precisiónMétodo 3, el plugin Freehand raster georeferencerPlugin gratuito

Antes de empezar

Necesitas QGIS 3.26 o posterior, donde el Georeferencer se encuentra en el menú Layer. Yo usé QGIS 3.44.7. Los tutoriales antiguos te mandan a Raster > Georeferencer, que es donde vivía antes, como el plugin GDAL Georeferencer.

Lee el margen del mapa antes de hacer clic en nada. Te dice tres cosas que escribirás más tarde: el sistema de coordenadas de los valores impresos, el datum y la escala. Mi muestra es el cuadrángulo USGS San Francisco North, CA, de 1947, a escala 1:24,000, que cualquiera puede descargar desde topoView. Su margen dice "Proyección policónica. Datum de Norteamérica de 1927", y sus esquinas llevan latitudes y longitudes cada 7'30". Los mapas históricos de USGS son de dominio público.

Para que la prueba fuera honesta, cogí el GeoTIFF propio de USGS de esa hoja y le quité la georreferenciación, de modo que lo que cargué en QGIS fue un JPEG simple de 9.2 MB y 6,888 x 8,933 píxeles. Eso es aproximadamente 300 dpi, o 2.03 m de terreno por píxel. La georreferenciación de USGS se quedó a un lado como clave de respuestas.

Dónde se equivoca la web

"Cuanto menor es el RMSE, mejor es el resultado." No con una thin plate spline. Esa transformación dobla la imagen hasta que pasa exactamente por cada punto, así que sus residuales siempre son cero. Escribí a propósito una latitud mal, 37°47' en lugar de 37°47'30'', y ejecuté ambas transformaciones sobre los mismos ocho puntos. Polynomial 1 mostró un RMSE de 297 m y atribuyó 762 m de ese error al punto malo. La thin plate spline mostró 0.00 m, y el mapa se desviaba hasta 594 m en puntos que no se le habían dado.

"Introduce las coordenadas en WGS 84." Los valores impresos en los mapas antiguos de EE. UU. suelen ser NAD27, y el margen lo dice. En San Francisco, la misma latitud y longitud en NAD27 y en WGS 84 están a 93 m de distancia, 92 m de ellos de este a oeste. Escríbelos como EPSG:4326 y toda la hoja cae a una manzana de distancia, con residuales que parecen perfectos, porque todos los puntos se movieron juntos. En el diálogo Enter Map Coordinates, configura el CRS de los puntos como dice el margen: EPSG:4267 para NAD27.

"Deja el CRS de destino en grados." Puedes hacerlo, pero un ajuste afín plano en latitud y longitud no coincide con cómo se dibujó un mapa proyectado. Con los mismos ocho puntos, Polynomial 1 dio 2.98 m de RMSE con EPSG:4267 como destino, y 0.72 m con NAD27 / UTM zone 10N (EPSG:26710). Elige un CRS proyectado en el datum del mapa, y el ajuste se lee también en metros.

Método 1: El Georeferencer de QGIS

Es la herramienta integrada y la primera que conviene aprender. Funciona tanto para escaneos con coordenadas impresas como para escaneos sin ellas.

Abrir el escaneo

Layer > Georeferencer, luego File > Open Raster y elige la imagen. JPEG, PNG y TIFF funcionan todos.

Añadir un punto de control

Haz clic en Add GCP Point, haz zoom y haz clic en un punto que puedas identificar con exactitud: una esquina del marco del mapa, un cruce de la retícula, una marca de la cuadrícula. Se abre el diálogo Enter Map Coordinates. Escribe la coordenada impresa. Acepta grados, minutos y segundos con espacios (-122 25 0), grados decimales o metros proyectados. Configura el CRS que hay bajo los campos según el que nombre el margen.

O toma la coordenada del lienzo del mapa

Cuando el escaneo no tiene coordenadas, carga primero un mapa base en la ventana principal de QGIS (la guía de mapas base tiene los clics), luego pulsa From Map Canvas y haz clic en el mismo punto sobre él. QGIS rellena las coordenadas y el CRS por ti.

Reparte los puntos

Pon uno cerca de cada esquina y unos pocos en el medio. Los puntos agrupados en una zona ajustan esa zona y dejan que el resto de la hoja se desvíe. Usé las cuatro esquinas del marco del mapa y los cuatro cruces de la retícula del interior.

Arriba: el Georeferencer con zoom en la marca de 25 minutos del marco del mapa, un punto verde sobre la marca. Abajo: el diálogo Enter Map Coordinates con -122 25 0 y 37 52 30 escritos y EPSG:4267 NAD27 seleccionado.
Un clic en la marca de 25' del borde superior y, a continuación, su valor impreso escrito en grados, minutos y segundos, en NAD27.

Cada punto que añades va a un archivo .points junto a la imagen. Consérvalo: el Georeferencer lo carga solo la próxima vez que abras el mismo escaneo, y puedes corregir un punto en lugar de empezar de nuevo.

Elegir la transformación

Settings > Transformation Settings contiene la decisión más importante. El manual de QGIS 3.44 enumera siete transformaciones, con estos mínimos de puntos:

TransformaciónPuntos mínimosPara qué se usa
Linear2Un escaneo limpio que solo necesita un desplazamiento y una escala. Escribe un world file, sin deformación
Helmert2Lo mismo más una rotación
Polynomial 13La mayoría de los escaneos planos de mapas impresos. Las líneas rectas se mantienen rectas
Projective4Una foto de un mapa tomada en ángulo
Polynomial 26Una hoja curvada o doblada. Deforma los bordes más allá de tus puntos
Polynomial 310Igual, pero más fuerte. Rara vez vale la pena
Thin plate spline10 según el manualMapas dañados o dibujados a mano con muchos puntos. Oculta errores, ver arriba

Mi regla: empieza con Polynomial 1. Pasa a algo más flexible solo cuando sus residuales muestren un patrón, como que todos los puntos de un lado tiren en la misma dirección, y nunca porque un número más alto se viera peor.

El diálogo Transformation Settings con Polynomial 1, CRS de destino EPSG:26710 NAD27 / UTM zone 10N, un archivo de salida que termina en _modified.tif y remuestreo Cubic.
Los ajustes que usé: Polynomial 1, el datum propio del mapa en un CRS proyectado, remuestreo cúbico para un escaneo más suave.

Dos ajustes de ese diálogo ahorran problemas más adelante. Resampling method cambia cómo se ven los píxeles deformados: el vecino más próximo conserva los colores originales, el cúbico se ve mejor en un escaneo. Y la salida no tiene compresión por defecto: mi JPEG de 9.2 MB se convirtió en un GeoTIFF de 187 MB. Abre Raster creation options y elige un perfil de compresión si el archivo va a viajar.

Leer los residuales

Cuando tienes más puntos de los que necesita la transformación, QGIS muestra el residual de cada punto en la tabla GCP y un error medio en la barra de estado, ambos en píxeles para un escaneo sin coordenadas.

La ventana del Georeferencer con el escaneo San Francisco North 1947 y ocho puntos de control rojos, la tabla GCP en la que se enumeran las coordenadas de origen y destino y residuales entre 0.15 y 0.46 píxeles, y la barra de estado que muestra Transform: Polynomial 1 Mean error: 0.447243.
Ocho puntos, Polynomial 1: residuales de 0.15 a 0.46 píxeles y un error medio de 0.447 píxeles, unos 0.9 m sobre el terreno.

Para juzgar una cifra en píxeles, conviértela en metros y compárala con lo que el propio mapa puede ofrecer.

  1. Metros por píxel. Multiplica el denominador de la escala por el tamaño de un píxel escaneado. A 300 dpi un píxel es 0.0847 mm, así que en un mapa 1:24,000 cubre 2.03 m. Mis 0.447 píxeles son 0.9 m.
  2. Lo que el mapa puede prometer. Los US National Map Accuracy Standards exigen que el 90 por ciento de los puntos bien definidos de una hoja 1:24,000 estén dentro de 1/50 de pulgada, que USGS da como 12.2 m. Una regla práctica más estricta es el grosor de una línea dibujada, 0.2 mm en la hoja, que son 4.8 m a 1:24,000.
  3. Puntos que el ajuste nunca vio. Un residual solo dice que los puntos concuerdan entre sí. Dejé las ocho marcas de la retícula de los bordes fuera del ajuste y medí dónde las colocó el resultado: 1.0 m de desviación de media, 1.6 m en el peor caso.

Así que la georreferenciación añadió aproximadamente un metro de error a un mapa que solo promete 12 m. En una hoja antigua, el mapa es casi siempre el límite, no tus clics.

Start Georeferencing escribió entonces el GeoTIFF en 34 segundos y lo añadió al proyecto. Sobre OpenStreetMap, las calles de 1947 caen sobre las de hoy:

OpenStreetMap del distrito de The Marina y Fort Mason en San Francisco, luego la misma vista con el mapa USGS de 1947 georreferenciado al 55 por ciento de opacidad, Lombard Street y la línea de costa alineadas (after)
OpenStreetMap del distrito de The Marina y Fort Mason en San Francisco, luego la misma vista con el mapa USGS de 1947 georreferenciado al 55 por ciento de opacidad, Lombard Street y la línea de costa alineadas (before)
OpenStreetMapMapa de 1947
Arrastra para comparar
The Marina y Fort Mason, San Francisco. Desliza para superponer la hoja de 1947 sobre el mapa actual.

Úsalo cuando: quieras un resultado que puedas defender, con residuales, un archivo .points y un GeoTIFF que lea cualquier GIS.

No lo uses cuando: solo necesites un fondo aproximado durante unos minutos. El método 3 es más rápido para eso.

Método 2: Puntos de control comprobados por un agente de AI

Creamos AI Agent, un plugin gratuito de QGIS con un panel de chat que ejecuta los pasos en tu proyecto abierto. Esta sección trata sobre nuestra propia herramienta. Tiene una herramienta de georreferenciación que toma puntos de control como pares de píxel y coordenada, ajusta una de las transformaciones del Georeferencer mediante GDAL y devuelve el residual de cada punto en metros evaluado según la escala del mapa.

También puede colocar un escaneo sin puntos en absoluto, leyendo sus nombres de lugar y comparándolo con mapas de referencia: un mapa antiguo de Edimburgo en la guía de AI Agent terminó con un error mediano de 5.9 m. Eso requiere nombres legibles, y las hojas muy antiguas a menudo fallan. Para un mapa con retícula impresa, los puntos son la vía más segura, y leerlos es rápido: una imagen sin coordenadas está en QGIS con la columna de píxel como x y menos la fila como y, así que la barra de estado muestra el píxel bajo el cursor. Cargué el escaneo, mantuve el error tipográfico de la prueba anterior en el punto 8 y envié un mensaje:

Georreferencia la layer sf-north-1947-scan. Es el cuadrángulo USGS San Francisco North de 1947, escala 1:24,000, coordenadas en NAD27. He leído estos puntos de control en el escaneo (columna de píxel, fila → latitud, longitud): 1. 1022, 792 → 37°52'30"N, 122°30'W (esquina NO) [...] 8. 4632, 5344 → 37°47'N, 122°25'W. ¿Es el resultado suficientemente preciso para un mapa 1:24,000?

La ejecución tardó 99 segundos, mostrados en el panel como 14 acciones. El agente leyó la layer, ajustó los ocho puntos en Python para comprobarlos, descubrió que el punto 8 estaba a 925 m de donde lo situaba su fila, lo excluyó y escribió el GeoTIFF a partir de los otros siete en NAD27 / UTM zone 10N.

Preguntó una vez, antes de ejecutar su propia comprobación en Python. Su respuesta dio un RMSE de 0.73 m con un máximo de 0.95 m frente a una tolerancia de 4.8 m, y añadió que esto mide la concordancia entre puntos, no la precisión absoluta del mapa.

QGIS con el mapa georreferenciado de 1947 de San Francisco al 72 por ciento de opacidad sobre OpenStreetMap, y el panel de AI Agent a la derecha explicando que el punto 8 se excluyó porque estaba a unos 925 m de distancia, el error RMS de 0.73 m y la tolerancia de 4.8 m.
Un mensaje, 99 segundos: el error tipográfico del punto 8 detectado y descartado, 0.73 m de RMSE con los otros siete, el resultado sobre el mapa base.

Comprobé su GeoTIFF igual que el mío, con las ocho marcas de los bordes que nunca vio: 1.0 m de desviación de media, 1.6 m en el peor caso, igual que el Georeferencer. La diferencia es el error tipográfico. En el Georeferencer habría tenido que detectarlo yo mismo en la columna de residuales, y con una thin plate spline no lo habría detectado en absoluto.

También dejó los puntos como un archivo .points junto a la salida, así que el mismo ajuste se abre en el Georeferencer si quieres mover un punto a mano. Cada mensaje deja un checkpoint en el panel, y un clic deshace toda la ejecución. El plan gratuito tiene 10 mensajes al mes, sin API key y sin tarjeta.

Úsalo cuando: tengas los puntos y quieras el ajuste, la comprobación de outliers y el veredicto en un solo paso, o georreferencies hojas en serie.

No lo uses cuando: el mapa no tenga ni nombres de lugar legibles ni puntos que puedas leer, como un boceto dibujado a mano. Colocar los puntos a mano con el método 1 es entonces la única vía.

Prueba AI Agent gratis en QGIS

Método 3: Una superposición a mano alzada con un plugin

El plugin Freehand raster georeferencer, versión 0.8.3 cuando leí su documentación, te permite soltar una imagen en el mapa y moverla, rotarla y escalarla a mano hasta que encaje, como harías en Google Earth. El resultado se muestra encima de tus otras layers al instante, y el plugin exporta la imagen con un world file cuando terminas.

Su README es claro sobre los límites: solo transformaciones afines, sin rubber sheeting, sin residuales y únicamente archivos BMP, JPEG, PNG y TIFF. No obtienes ningún número que diga cuánto te desvías.

Úsalo cuando: necesites un plano escaneado aproximadamente en su sitio para trazar algunas entidades o para mostrar a un cliente dónde estaban las cosas.

No lo uses cuando: alguien vaya a medir sobre el resultado. Usa el método 1.

Lo que hay que recordar

  • En QGIS 3.26 y posteriores, la herramienta está en Layer > Georeferencer. Empieza con cuatro puntos bien repartidos, Polynomial 1 y un CRS de destino proyectado en el datum propio del mapa.
  • Un RMSE de cero no demuestra nada: una thin plate spline siempre lo alcanza, y en mi prueba lo hizo en un mapa a 594 m de distancia.
  • Convierte los residuales a metros (píxeles x tamaño en el terreno de un píxel) y compáralos con lo que promete el mapa, 12.2 m para una hoja USGS 1:24,000.
  • Comprueba el resultado en puntos que dejaste fuera del ajuste. Los míos estaban a 1.0 m de distancia de media en la hoja de San Francisco de 1947.
  • Escribe los puntos en el datum que nombre el margen. NAD27 está a 93 m de WGS 84 en San Francisco, así que una hoja USGS de 1947 lleva EPSG:4267.

Preguntas frecuentes

¿Dónde está el Georeferencer en QGIS?

En QGIS 3.26 y posteriores está en Layer > Georeferencer. En versiones anteriores era Raster > Georeferencer, proporcionado por el plugin GDAL Georeferencer, que había que activar en el gestor de plugins. Si ninguno de los dos menús lo muestra, puede que un plugin o un perfil de personalización haya cambiado tus menús.

¿Cuántos puntos de control necesito?

El mínimo es 2 para Linear y Helmert, 3 para Polynomial 1, 4 para Projective, 6 para Polynomial 2 y 10 para Polynomial 3, y el manual de QGIS pide 10 o más para una thin plate spline. En la práctica, usa aproximadamente el doble del mínimo, repartidos hacia las esquinas, y reserva algunos más aparte como checkpoints. Yo usé 8 para Polynomial 1 y 8 más para comprobar.

¿Polynomial, Helmert o thin plate spline: cuál?

Helmert para un escaneo limpio y plano que solo necesita rotación y escala. Polynomial 1 para casi todos los mapas impresos, ya que también absorbe un pequeño cizallamiento del escáner. Thin plate spline solo para un mapa dañado o dibujado a mano con muchos puntos buenos, y luego compruébala en puntos que no usaste, porque sus residuales siempre son cero.

¿Qué es un buen RMSE?

Uno que sea pequeño en comparación con lo que el mapa puede ofrecer. Conviértelo a metros y compáralo con 0.2 mm por el denominador de la escala (4.8 m a 1:24,000) o con el estándar oficial del mapa (12.2 m para hojas USGS 1:24,000). Por debajo de un píxel en un escaneo limpio es normal. Un único punto con un residual muy por encima de los demás suele ser un error tipográfico o un clic equivocado, no un mapa malo.

¿Cómo georreferencio un PDF?

Primero comprueba si ya lo es. Los mapas topográficos de USGS y muchos planos de organismos son GeoPDF, y QGIS los abre en su sitio: el PDF de San Francisco de 1947 se cargó con sus coordenadas y sin puntos de control, renderizado por GDAL a 150 dpi a menos que pongas GDAL_PDF_DPI más alto. Un PDF simple no tiene coordenadas: exporta la página a PNG o TIFF a 300 dpi y usa el método 1.

¿Cómo georreferencio un mapa sin coordenadas?

Usa elementos que no se hayan movido desde que se dibujó el mapa, como cruces de carreteras, puentes, iglesias y esquinas de la costa, y toma sus coordenadas con From Map Canvas sobre un mapa base o sobre tu ortofoto nacional. Reparte 10 o más por toda la hoja. Espera residuales mayores que con una cuadrícula impresa, porque el mapa antiguo y el mundo actual ya no coinciden en todos los sitios.

El centro de AI de QGIS reúne todo lo que AI puede y no puede hacer dentro de QGIS, y la guía de AI Agent cubre el resto del plugin. Una vez que el mapa antiguo está en su sitio, puedes descargar datos de OpenStreetMap para compararlo con las calles actuales, obtener una imagen Sentinel-2 de la misma zona o convertir el escaneo en vectores.

Prueba AI Agent gratis en QGIS