CSV con Latitud y Longitud en el Mapa: Abrilo en el Navegador y Arreglá los Siete Problemas Más Comunes
Tres columnas — un id, lat y lon — guardadas como CSV y soltadas en el csv-viewer: ese es todo el tutorial para un archivo prolijo. Nada se sube a ningún servidor; el archivo se procesa dentro de la pestaña de tu navegador. Si el encabezado dice lat y lon, el selector de columnas ya viene completado y solo tenés que hacer clic en Abrir en el mapa.
El resto trata de archivos que no son tan prolijos — Excel en pt-BR o es escribe -23,55 y ;, una fila de título se sienta arriba del encabezado, los grados y los minutos comparten una sola celda — y un visor que adivina mal no siempre te avisa. Cada caso: el archivo, lo que muestra el visor (citado tal cual de nuestra corrida, incluyendo cuando no muestra nada), la solución en Excel, LibreOffice Calc o Google Sheets, y la solución con ogr2ogr.
Probado el 15 de septiembre de 2026 contra static-page-tools@6016a1b más el cambio de robustez del csv-viewer — coma decimal, contador de filas omitidas, resguardo Latin-1 — sin publicar todavía al momento de escribir esto; GDAL 3.13.3 «Iowa City» para las transcripciones de línea de comandos.
Lo que busca el visor
La primera línea es el encabezado — siempre la fila 0 — y el delimitador se elige contando ,, ; y tabulaciones solo en esa línea; gana el más frecuente, y un empate se resuelve a favor de la coma. Las celdas entre comillas se respetan; un salto de línea dentro de una no. No hay forma de forzar el delimitador, ni caja para pegar texto, ni caja de URL; un archivo por vez al soltar, sin límite de bytes.
Las columnas de coordenadas se buscan por nombre — sin distinguir mayúsculas, coincidencia exacta — en tres listas:
- Latitud —
lat,latitude,latitudine,latitud,y,y_coord,ycoord,ylat,lat_dd,latitude_dd. - Longitud —
lon,lng,long,longitude,longitudine,longitud,x,x_coord,xcoord,xlon,lon_dd,longitude_dd. - Geometría WKT —
wkt,geom,geometry,wkb,shape,the_geom,geo,geomwkt,wkt_geom.
Sin coincidencia exacta: cualquiera que contenga lat, y cualquiera que contenga lon o lng; si tampoco hay nada: las dos primeras columnas. Estas son preselecciones. El selector Selecciona las columnas de coordenadas se abre en todos los archivos, hasta en uno perfecto, con la ayuda Selecciona qué columnas contienen las coordenadas. La detección automática ha pre-seleccionado los campos más probables., un desplegable Columna de Latitud y otro Columna de Longitud, y Abrir en el mapa. Una columna WKT abre el mismo selector en su pestaña WKT / Geometría; no existe un camino de "mapeo instantáneo".
Al confirmar, el panel de capas imprime 3 puntos para un archivo de tres filas y, cuando alguna fila no sobrevivió, un segundo contador: 1 fila sin coordenadas válidas — la forma plural del mensaje es 2 filas sin coordenadas válidas. Una fila se cuenta cuando su latitud o longitud no es un número después de parsearla, o queda fuera de ±90 y ±180. Las columnas de coordenadas salen de la tabla de atributos; el resto de las columnas se queda.
La coma decimal: -23,55
Síntoma. Excel en pt-BR o es, "Guardar como CSV": -23,55 con ; entre columnas. Google Sheets, LibreOffice Calc y un libro soltado directamente en el visor (el caso .xlsx de abajo) escriben comas entre columnas y ponen entre comillas las celdas con coma decimal: 1,"-23,55","-46,63",São Paulo. Una exportación con tabulaciones da -23,55 con tabs.
Lo que muestra el visor. Las tres se leen bien: 3 puntos, sin contador, primer punto sobre São Paulo en -46.63, -23.55 dentro del GeoJSON exportado (fixtures 1, 2, 1b). La regla se aplica a la celda, no al archivo: el visor lee -23,55 como −23,55 sin importar el delimitador — ;, tabulación, o una celda entre comillas en un archivo separado por comas, que es justo lo que escriben Google Sheets, LibreOffice Calc y un libro soltado directamente (el caso .xlsx de abajo) para una planilla en pt-BR o es. Lo único que no puede rescatar es una coma decimal sin comillas en un archivo separado por comas, porque 1,-23,55,-46,63 son cinco celdas antes de que cualquier parser las vea — y ninguna planilla escribe eso. El límite es 1,234: se lee como 1,234 (un grado y algo), nunca como 1234, porque un valor con separador de miles no puede ser una coordenada en grados. Los atributos quedan como están — un preço de 12,50 sigue siendo el texto 12,50.
Solución en la planilla, para herramientas que necesitan un punto. Excel: Opciones → Avanzadas, destildá "Usar separadores del sistema", separador decimal .. Calc: Herramientas → Opciones → Configuración de idioma → Configuración regional → Inglés (EE. UU.). Sheets: Archivo → Configuración → Configuración regional → Estados Unidos. Después exportá.
Solución en la línea de comandos. En GDAL 3.13.3, con nombrar las columnas alcanza: ogr2ogr -f GeoJSON out.geojson decimal-comma-semicolon.csv -oo X_POSSIBLE_NAMES=lon -oo Y_POSSIBLE_NAMES=lat escribe "coordinates":[-46.63,-23.55], y los archivos con tabulación y con coma entre comillas dan el mismo par. Lo que hace -oo AUTODETECT_TYPE=YES con las demás columnas depende del delimitador: en un archivo con ;, lat queda como Real -23.55; en un archivo con coma entre comillas o con tabulación, la misma celda queda como String -23,55. Para los atributos, y para cualquier herramienta que no sea GDAL, la exportación consciente de la configuración regional es la solución honesta.
Una fila de título arriba del encabezado
Síntoma. Una línea de título — Levantamento de campo, setembro 2026, equipe A — arriba del encabezado real id;lat;lon;nome, filas separadas por ; con comas decimales.
Lo que muestra el visor. El título tiene dos comas y ningún punto y coma, así que gana la coma y el título pasa a ser el encabezado: el selector preselecciona Levantamento de campo como latitud y setembro 2026 como longitud. La línea del encabezado real no tiene comas, así que se convierte en una fila de datos cuya "latitud" es id;lat;lon;nome — no es un número — y se cuenta: 3 puntos · 1 fila sin coordenadas válidas. Cada fila de datos se parte por sus comas en 1;-23, 55;-46 y 63;São Paulo; el parser lee los dígitos iniciales, y los tres puntos se dibujan en [55, 1], [79, 2] y [12, 3] — el océano Índico, al norte de las Seychelles (fixture 3). Un trazado silenciosamente equivocado, con un contador que le echa la culpa a la única fila que estaba bien; el atributo que sobrevive es equipe A, con 63;São Paulo. Esto no es "todo cae en una sola columna" — eso necesita un título sin comas; un título con comas destroza cada fila en tantas celdas como comas tenga, más una.
Solución en la planilla. Borrá la fila de título para que el encabezado quede en la fila 1 — en Excel, Calc y Sheets por igual; una fila de unidades debajo del encabezado se cuenta apenas como una fila sin coordenadas válidas — es la fila de título arriba del encabezado la que destroza todo.
Solución en la línea de comandos. El driver CSV de GDAL no tiene una opción para "saltar N líneas" (HEADERS solo acepta YES, NO o AUTO), así que hay que sacar la línea y después nombrar el separador: tail -n +2 title-row.csv > title-row-noheader.csv, y luego ogr2ogr -f GeoJSON title-row-fixed.geojson title-row-noheader.csv -oo SEPARATOR=SEMICOLON -oo X_POSSIBLE_NAMES=lon -oo Y_POSSIBLE_NAMES=lat -oo AUTODETECT_TYPE=YES escribe "coordinates":[-46.63,-23.55], comas decimales incluidas. Leído tal cual, ogrinfo comete el mismo error que el visor e imprime Levantamento de campo (String) = 1;-23.
Latitud y longitud invertidas
Síntoma. Columnas llamadas lat y lon, con los valores al revés: 1,-46.63,-23.55,São Paulo — una exportación lon,lat pegada debajo de un encabezado lat,lon; GeoJSON, WKT y la mayoría de las APIs escriben primero la longitud.
Lo que muestra el visor. Dos resultados posibles. Si los dos valores quedan dentro de ±90 — como cualquier punto brasileño, ya que el país va de aproximadamente −74° a −29° de longitud — el mapa se dibuja en el océano equivocado y no dice nada: 3 puntos, sin aviso, sin contador, primer punto [-23.55, -46.63], en el Atlántico Sur a unos 3.290 km al sudeste de São Paulo (fixture 4). Si una longitud queda más allá de ±90 — el 139,69 de Tokio en la columna lat — esa fila se descarta y se cuenta: 2 puntos · 1 fila sin coordenadas válidas, mientras las otras dos filas brasileñas del mismo archivo se siguen dibujando en el Atlántico Sur (fixture 5). El contador avisa que algo estaba mal; no puede avisar que los puntos que sobrevivieron también están mal.
La solución es el selector. Nada detecta una inversión — una latitud de −46,63 es un punto perfectamente válido. Poné Columna de Latitud en lon y Columna de Longitud en lat, hacé clic en Abrir en el mapa, y el mismo archivo se dibuja sobre São Paulo, primer punto [-46.63, -23.55] (medido en la fixture 4). O invertí los dos nombres de columna en la planilla.
Grados, minutos y una letra de hemisferio en una celda
Síntoma. 23°33'S en la celda de latitud, 46°38'W en la celda de longitud — una exportación de GPS o una libreta de campo pasada en limpio.
Lo que muestra el visor. 3 puntos, sin mensaje, primer punto [46, 23]: 23° norte, 46° este, el centro de Arabia Saudita (fixture 6). El parser lee los dígitos iniciales y se detiene en el símbolo de grado; se pierden los minutos y también la letra de hemisferio que llevaba el signo negativo. El cambio de robustez no tocó esto: una celda con símbolo de grado queda como tarea del lector.
Solución en la planilla. Una sola fórmula convierte grados-minutos-hemisferio a grados decimales y les cambia el signo tanto a S como a W. Con el texto en A1, en Calc o Sheets con configuración regional pt-BR o es (; entre argumentos; Excel en inglés pide ,):
=IF(OR(RIGHT(A1;1)="S";RIGHT(A1;1)="W");-1;1)*(VALUE(LEFT(A1;FIND("°";A1)-1))+VALUE(MID(A1;FIND("°";A1)+1;FIND("'";A1)-FIND("°";A1)-1))/60)
Corrida en LibreOffice: 23°33'S → -23.55, 15°47'S → -15.78333, 46°38'W → -46.63333. Poné el resultado en una columna llamada lat o lon y el visor la reconoce por el nombre.
Para un puñado de puntos, el coordinate-converter tiene un campo GMS con una sola trampa que medimos: pide segundos. 23°33'S 46°38'W da Formato GMS no reconocido.; 23°33'00"S 46°38'00"W da -23.55000000 y -46.63333333. Agregá los 00".
En la línea de comandos, nada. GDAL no tiene parser de GMS: ogrinfo -oo AUTODETECT_TYPE=YES tipa la celda como String, y ogr2ogr con -oo X_POSSIBLE_NAMES=lon -oo Y_POSSIBLE_NAMES=lat termina con código 0, imprime Warning 1: Invalid value type found in record 1 for field lat, y escribe "geometry":null en cada fila — un archivo "convertido" sin un solo punto adentro.
Coordenadas UTM (este y norte) pegadas como latitud y longitud
Síntoma. 333624,7394648 — metros en SIRGAS 2000 / zona UTM 23S, columnas easting y northing.
Lo que muestra el visor. Ninguno de los dos nombres es un alias y ninguno contiene lat o lon, así que el selector recurre a las dos primeras columnas y preselecciona id y easting. Confirmar eso, o elegir easting y northing a mano, da el mismo resultado: todas las filas fallan el control de rango, no sobrevive ningún punto, y el visor muestra No se encontraron columnas de coordenadas válidas. Verifica que las columnas seleccionadas contengan valores numéricos de latitud y longitud. (fixture 7). El mensaje habla de los valores, no de los nombres; no hay ningún campo para indicar el CRS.
Solución en la línea de comandos. Nombrá las columnas, declará el CRS de origen, pedí WGS 84: ogr2ogr -f GeoJSON utm-fixed.geojson utm.csv -oo X_POSSIBLE_NAMES=easting -oo Y_POSSIBLE_NAMES=northing -s_srs EPSG:31983 -t_srs EPSG:4326 deja el primer punto en -46.6300, -23.5500 — São Paulo, con un residuo de unas pocas millonésimas de grado que es el redondeo en metros de nuestra fixture. 31983 es SIRGAS 2000 / zona UTM 23S; ese nombre sale de gdalsrsinfo -o wkt1 EPSG:31983, porque 31982 y 31984 son las zonas vecinas (unos 6° de diferencia, sin error), 3198 es un CRS libio válido, y solo 319830 falla. La guía rápida de códigos EPSG para Brasil y América Latina tiene los códigos de zona. GDAL escribe por defecto un miembro crs (CRS84) en ese GeoJSON; -lco RFC7946=YES lo saca y redondea a siete decimales, que es lo que un visor necesita.
En la planilla, no se puede. Pasar de UTM a coordenadas geográficas es matemática de proyección; una planilla donde easting se renombra lon es la versión silenciosa de este mismo error.
Latin-1 desde Excel: São Paulo o S�o Paulo
Síntoma. Excel en Windows, "CSV (delimitado por comas)" — no "CSV UTF-8" — escribe Windows-1252: ã es el byte único 0xE3, inválido como UTF-8. Las coordenadas son ASCII y nunca les importó; los atributos se rompen.
Lo que muestra el visor. 3 puntos, el primer punto correcto, y São Paulo en la tabla de atributos — no S�o Paulo (fixture 8). El archivo se decodifica primero como UTF-8 estricto; cuando eso falla en un byte como 0xE3, se decodifica como Windows-1252 en su lugar. Un archivo realmente UTF-8 no se ve afectado.
Solución en la planilla. Excel: Guardar como → "CSV UTF-8 (delimitado por comas)". Calc: Texto CSV → Editar configuración del filtro → Conjunto de caracteres "Unicode (UTF-8)". Sheets siempre escribe en UTF-8.
Solución en la línea de comandos. iconv -f WINDOWS-1252 -t UTF-8 latin1.csv > latin1-utf8.csv — el byte 0xE3 pasa a ser C3 A3. GDAL sobre el archivo crudo muestra el mismo daño (ogrinfo imprime nome (String) = S�o Paulo), así que corré iconv antes de ogr2ogr también.
Al soltar el .xlsx directamente
Síntoma. Soltás el libro de Excel directamente. El visor lee .xls y .xlsx, solo la primera hoja.
Lo que muestra el visor. Depende de cómo esté guardada cada celda, así que armamos un libro pt-BR con los dos tipos y medimos celda por celda (fixture 9). Una celda numérica con -23.55 y formato de número 0.00 — lo que Excel pt-BR muestra como -23,55 — sale como -23.55; la configuración regional de pantalla no queda guardada en el archivo. Una celda con el texto -15,79, guardada como texto por Excel, sale entre comillas, "-15,79" — la misma forma que una exportación de Sheets — y se lee como −15,79. Las dos caen donde tienen que caer: 3 puntos, sin contador, [-46.63, -23.55] y [-47.88, -15.79].
Solución. Movés la hoja con las coordenadas a la primera posición, o la exportás como CSV UTF-8 y usás las soluciones de arriba.
Archivos de prueba que podés usar
Ningún host público tiene CSVs de prueba tan chicos, así que acá van los nuestros — tres filas cada uno. Copiá un ítem en un editor de texto, un span por línea, guardalo como .csv, y soltalo en el csv-viewer. El paréntesis indica el caso de arriba, en orden de sección.
- Coma decimal, con punto y coma (fixture 1) —
id;lat;lon;nome·1;-23,55;-46,63;São Paulo·2;-15,79;-47,88;Brasília·3;-3,12;-60,02;Manaus(caso 1). - Coma decimal, entre comillas, separado por comas (fixture 1b) —
id,lat,lon,nome·1,"-23,55","-46,63",São Paulo·2,"-15,79","-47,88",Brasília·3,"-3,12","-60,02",Manaus(caso 1). - Coma decimal, separado por tabulaciones (fixture 2) — la fixture 1 con una tabulación tipeada donde tiene
;(caso 1). - Fila de título arriba del encabezado (fixture 3) —
Levantamento de campo, setembro 2026, equipe A·id;lat;lon;nome·1;-23,55;-46,63;São Paulo·2;-15,79;-47,88;Brasília·3;-3,12;-60,02;Manaus(caso 2). - Invertida, dentro de rango (fixture 4) —
id,lat,lon,nome·1,-46.63,-23.55,São Paulo·2,-47.88,-15.79,Brasília·3,-60.02,-3.12,Manaus(caso 3). - Invertida, una fila fuera de rango (fixture 5) —
id,lat,lon,nome·1,-46.63,-23.55,São Paulo·2,-47.88,-15.79,Brasília·3,139.69,35.68,Tóquio(caso 3). - Grados y minutos (fixture 6) —
id,lat,lon,nome·1,23°33'S,46°38'W,São Paulo·2,15°47'S,47°53'W,Brasília·3,3°07'S,60°01'W,Manaus(caso 4). - UTM zona 23S (fixture 7) —
id,easting,northing,nome·1,333624,7394648,São Paulo·2,191433,8252182,Brasília·3,687688,7465276,Rio de Janeiro(caso 5; Rio, no Manaus, porque Manaus queda en la zona 20S). - Latin-1 (fixture 8) — el control re-codificado con
iconv -f UTF-8 -t WINDOWS-1252 all-valid.csv > latin1.csv(caso 6). - Un libro al estilo pt-BR armado para imitar a Excel (fixture 9) — un
.xlsxcon el encabezado del control, fila 2 con celdas numéricas con formato0.00, fila 3 con celdas de texto-15,79y-47,88, fila 4 numérica —3 puntossobre Brasil (caso 7). - Control (fixture 10) —
id,lat,lon,nome·1,-23.55,-46.63,São Paulo·2,-15.79,-47.88,Brasília·3,-3.12,-60.02,Manaus—3 puntossobre Brasil.
Y un archivo real. El Programa Queimadas del INPE publica todos los focos de incendio activos de Brasil en un CSV diario: el archivo del 14 de septiembre de 2026 es focos_diario_br_20260914.csv, 4.283.545 bytes, UTF-8, 16 columnas separadas por comas que empiezan id,lat,lon,data_hora_gmt,satelite,municipio,estado,…, 27.447 filas. Responde 200 con Accept-Ranges: bytes y Access-Control-Allow-Origin: * — abierto, sin cuenta. No hay ningún archivo de licencia al lado de los CSVs; la nota de gobernanza de datos del INPE en focos/documentos/ (hermano de focos/csv/) describe los datos como disponibles para cualquier usuario a través de su página de datos abiertos, así que el crédito es para INPE / Programa Queimadas.
lat y lon son coincidencias exactas de alias y los espacios iniciales de las celdas se recortan: nuestra corrida dibujó 27447 puntos, sin filas omitidas, primer punto [-45.2744, -5.2883] en Maranhão, 581 ms desde Abrir en el mapa hasta la fila de la capa.
Dos advertencias, fechadas el 15 de septiembre de 2026: el directorio diario guarda alrededor de un mes de archivos, así que el nombre de arriba se pudre — hay que usar el más nuevo; y los archivos mensuales de al lado pesan unos 99 MiB, para descargar y no para soltar.
Para equipos
Poner los puntos en un mapa es la mitad fácil. Alguien te mandó un CSV porque un equipo tiene que hacer algo en esos puntos: un estado por fila, fotos y un formulario desde el campo, una revisión, un informe para el viernes. Geodocs importa el mismo archivo a un mapa de equipo, mantiene las columnas como campos que el equipo completa, corre la revisión, y genera el informe con el mapa adentro. El visor es donde revisás el archivo; el espacio de trabajo es donde se convierte en trabajo.