OnlineMapMaker logo

Visor de mapas JSON: muestra coordenadas de un JSON en un mapa

Sube o pega JSON normal, por ejemplo la respuesta de una API o la exportación de una app, y ve en un mapa cada registro con latitud y longitud. El visor encuentra solo la lista de registros y los campos de coordenadas, incluso dentro de objetos anidados, y te deja exportar los puntos como GeoJSON o CSV. Abrir pantalla completa ↗

Rate this tool:
Publicidad
Publicidad
Loading viewer…
¿Necesitas ayuda con tu proyecto GIS?Descubre Nuestros Servicios

Qué hace este visor

Muchos datos de ubicación nunca llegan como archivo SIG. Llegan como JSON normal: la respuesta de una API del tiempo, una lista de tiendas de un localizador, una exportación de una app de reparto o un archivo que te manda un desarrollador. Cada registro tiene una latitud y una longitud en algún sitio, pero una herramienta de mapas que espera GeoJSON no puede leerlo, y al abrirlo en una hoja de cálculo se pierde la estructura anidada.

Este visor lee ese JSON tal como es. Recorre todo el documento buscando listas de registros, convierte los objetos anidados en nombres de campo como `location.lat` y reconoce los nombres habituales de latitud y longitud, además de campos únicos que guardan los dos valores, como arrays `[lng, lat]` o textos `"lat, lng"`. Cada registro con coordenadas válidas aparece en el mapa. La barra lateral te dice cuántos registros no tenían coordenadas o tenían valores fuera del rango válido, y te avisa cuando la latitud y la longitud parecen intercambiadas.

Lo hice para ese momento en que alguien te manda un JSON y te pregunta «¿dónde están estos?». Puedes revisar los datos en segundos, colorear los puntos por cualquier campo, hacer clic en un punto para leer el registro completo y descargar el resultado como GeoJSON para un SIG o como CSV para una hoja de cálculo. El archivo se lee en tu navegador y nunca se sube.

Publicidad
Publicidad

Formas de JSON que entiende el visor

El JSON real tiene muchas formas. Estas son las que el visor lee sin ninguna configuración. En cada caso muestra la lista de registros que encontró, y puedes elegir otra si el archivo tiene varias.

Un array simple de objetos
[{ "name": "Berlin", "lat": 52.52, "lng": 13.405 }]
La forma más común. El propio array es la lista de registros, y lat y lng se encuentran por su nombre.
Registros dentro de una respuesta de API
{ "data": { "cities": [{ "name": "Paris", "latitude": 48.8566, "longitude": 2.3522 }] } }
El visor recorre todo el documento y encuentra la lista en data.cities. Las demás listas del archivo aparecen en el menú «List of records».
Coordenadas dentro de un objeto anidado
[{ "name": "Rome", "location": { "lat": 41.9028, "lon": 12.4964 } }]
Los objetos anidados se aplanan, así que los campos pasan a ser location.lat y location.lon. Se prefieren una latitud y una longitud con el mismo objeto padre.
Un array con los dos valores
[{ "id": 7, "coordinates": [2.1686, 41.3874] }]
Un campo llamado coordinates se lee como [longitud, latitud], el orden de GeoJSON. Con otros nombres, el orden se decide según los rangos de los valores.
Un texto con los dos valores
[{ "stop": "Central", "latlng": "59.3293, 18.0686" }]
Un texto como "59.3293, 18.0686" se divide en dos números. Los textos se leen con la latitud primero, el orden de Google Maps y la mayoría de las apps.
Un objeto de objetos con el ID como clave
{ "BER": { "lat": 52.52, "lng": 13.405 }, "PAR": { "lat": 48.86, "lng": 2.35 } }
Cuando todos los valores de un objeto son registros, el objeto se convierte en la lista. La clave se guarda en un campo _key.
JSON Lines / NDJSON
{"lat": 38.72, "lng": -9.14}
{"lat": 41.16, "lng": -8.63}
Si el archivo no es un único documento JSON, cada línea se lee como un registro propio.

También se leen los números guardados como texto, como "52.52", y los números con coma decimal, como "52,52". Los arrays dentro de un registro, como una lista de etiquetas, se conservan como texto JSON en la ventana emergente y en la exportación.

Qué nombres de campo se reconocen

El visor compara la última parte de cada nombre de campo, así que `lat`, `location.lat` y `data.geo.lat` cuentan todos. No distingue mayúsculas de minúsculas. Si nada coincide, eliges los campos tú en el panel Coordinates.

Latitud
lat, latitude, lat_dd, y, ycoord, point_y, decimalLatitude, gps_lat, geo_lat y formas parecidas.
Longitud
lng, lon, long, longitude, lon_dd, x, xcoord, point_x, decimalLongitude, gps_lon, geo_lng y formas parecidas.
Un campo con ambos
Nombres que terminan en coordinates, coords, position, latlng, lnglat, location, geo, point, center o gps, cuando el valor es un array de dos números o un texto "a, b".
Elegir entre candidatos
Cada posible par de latitud y longitud se prueba con los primeros 300 registros. Gana el par con más valores dentro de ±90 y ±180, un par con el mismo objeto padre recibe un extra, y x/y pierden los empates frente a nombres lat/lng reales.
Orden de un par
lnglat, lonlat y coordinates significan longitud primero. latlng y latlon significan latitud primero. Con otros nombres gana el orden con más valores válidos. Si ambos encajan, los arrays se leen como [lng, lat] y los textos como "lat, lng".

Detalles técnicos

Esto es exactamente lo que el visor acepta y produce.

Entrada
Archivos .json, .jsonl y .ndjson de hasta 50 MB, o JSON pegado en el cuadro Paste JSON.
No para GeoJSON ni TopoJSON
Si el archivo ya es GeoJSON ("type": "FeatureCollection") o TopoJSON ("type": "Topology"), recibes un mensaje que te lleva al Visor de GeoJSON o al Visor de TopoJSON de este sitio.
Listas de registros
Arrays en los que al menos la mitad de los elementos son objetos, a cualquier profundidad hasta 8 niveles, y objetos cuyos valores son todos registros. Primero aparecen las listas con coordenadas y después las más grandes.
Coordenadas válidas
Latitud entre −90 y 90, longitud entre −180 y 180, en grados decimales (WGS84). Los registros fuera de estos rangos se cuentan y no se dibujan.
Aviso de intercambio
Si un registro está fuera de rango pero sería válido con la latitud y la longitud intercambiadas, el visor lo cuenta y ofrece un botón Swap.
Colorear por campo
Cualquier campo con hasta 10 valores distintos puede colorear los puntos, con una leyenda y un recuento por valor.
Rendimiento
Los puntos se dibujan en un canvas, así que decenas de miles de registros se mueven con fluidez en un portátil normal.
Exportación
GeoJSON con cada campo como propiedad, o CSV con latitude y longitude como las dos primeras columnas y los campos aplanados después.
Privacidad
El archivo se lee en tu navegador. Solo las teselas del mapa base vienen de internet.

Cómo poner JSON en un mapa, paso a paso

Este es el flujo completo con el ejemplo incluido: 25 ciudades europeas dentro de una respuesta anidada al estilo de una API, con las coordenadas en un objeto `location` y un registro sin ubicación.

Visor de mapas JSON vacío con los botones Upload, Paste JSON y Sample Data sobre un mapa del mundo
1
Paso 1: Abre el visor

El mapa se abre con un mapa base de calles. Usa Upload, Paste JSON o arrastra un archivo al mapa. Aquí hice clic en Sample Data.

24 puntos de ciudades en un mapa de Europa, con el panel Records mostrando 24 en el mapa y 1 sin coordenadas
2
Paso 2: Revisa lo que encontró

El panel Records muestra la lista elegida (`data.cities`), cuántos registros están en el mapa y cuántos no tenían coordenadas. En el ejemplo, un registro tiene `"location": null`, así que se muestran 24 de 25.

Panel Coordinates con Two fields elegido y los campos location.lat y location.lng
3
Paso 3: Confirma los campos de coordenadas

El panel Coordinates muestra los campos detectados, aquí `location.lat` y `location.lng`. Cambia a «One field» para datos con un solo campo `[lng, lat]` o `"lat, lng"`, y usa Swap si los puntos caen en el lugar equivocado.

Puntos de ciudades coloreados por el campo capital, con una leyenda de true y false
4
Paso 4: Colorea los puntos por un campo

Elige un campo en «Color by field». Aquí `capital` separa las capitales de las demás ciudades, con una leyenda y un recuento por valor.

Ventana emergente sobre Berlín con sus coordenadas, id, nombre, país, capital, campos de location y tags
5
Paso 5: Lee un registro

Haz clic en cualquier punto para ver sus coordenadas exactas y todos los campos del registro, incluidos los valores anidados y los arrays.

Panel Actions con los botones GeoJSON y CSV resaltados
6
Paso 6: Exporta

Descarga los puntos como GeoJSON para QGIS, ArcGIS o un mapa web, o como CSV para Excel y Hojas de cálculo de Google.

Publicidad
Publicidad

Otras formas de llevar datos JSON a un mapa

Este visor es la forma más rápida de mirar un archivo JSON. Cuando necesitas la misma tarea dentro de un flujo de trabajo, uso estas herramientas.

QGIS

QGIS no puede colocar por sí solo registros JSON normales en un mapa. Lee GeoJSON, y lee CSV con «Añadir capa de texto delimitado». Lo habitual es convertir primero el JSON a CSV o GeoJSON, que es justo lo que hacen aquí los botones de exportación.

Python con pandas y GeoPandas

pandas.json_normalize aplana el JSON anidado en columnas con nombres con punto, igual que este visor. Después geopandas.points_from_xy crea los puntos. Recuerda que recibe primero x (la longitud).

jq en la línea de comandos

jq puede transformar cualquier JSON en una FeatureCollection de GeoJSON con un solo comando. Es ideal en scripts que descargan datos de una API de forma periódica.

JavaScript y Leaflet

Si haces tu propio mapa web, puedes recorrer los registros y añadir marcadores. Leaflet espera [lat, lng], mientras que GeoJSON guarda [lng, lat]. Confundirlos es el error más común en el código de mapas.

La misma tarea en código

Los tres ejemplos leen el archivo de ejemplo de arriba, omiten el registro sin ubicación y conservan los demás campos.

# Python: pandas flattens nested JSON, GeoPandas builds the points
import json
import pandas as pd
import geopandas as gpd

with open("cities.json") as f:
    data = json.load(f)

df = pd.json_normalize(data["data"]["cities"])   # columns: location.lat, location.lng
df = df.dropna(subset=["location.lat", "location.lng"])
gdf = gpd.GeoDataFrame(
    df, geometry=gpd.points_from_xy(df["location.lng"], df["location.lat"]), crs="EPSG:4326"
)
gdf.to_file("cities.geojson", driver="GeoJSON")
# jq on the command line: JSON records to a GeoJSON FeatureCollection
jq '{type: "FeatureCollection", features: [
      .data.cities[] | select(.location != null) | {
        type: "Feature",
        properties: del(.location),
        geometry: { type: "Point", coordinates: [.location.lng, .location.lat] }
      }]}' cities.json > cities.geojson
// JavaScript + Leaflet: note the order, Leaflet wants [lat, lng]
const res = await fetch("cities.json");
const json = await res.json();
for (const c of json.data.cities) {
  if (!c.location) continue;
  L.marker([c.location.lat, c.location.lng]).bindPopup(c.name).addTo(map);
}

Mi opinión: usa este visor para entender un JSON nuevo y revisar sus coordenadas. Cuando conozcas la estructura, unas pocas líneas de Python o jq lo convierten en GeoJSON cada vez que cambien los datos.

Cómo funciona el visor

Esto es lo que ocurre entre soltar un archivo y ver los puntos. Cada paso se ejecuta en tu navegador.

  1. Analizar el texto. El texto se analiza como JSON. Si falla y el archivo tiene varias líneas, cada línea se analiza como JSON Lines. Se elimina la marca de orden de bytes del principio, si existe.
  2. Rechazar archivos que tienen su propio visor. GeoJSON y TopoJSON se reconocen por su type y se envían al visor correspondiente de este sitio, porque ya contienen geometría real.
  3. Encontrar las listas de registros. El visor recorre el documento hasta 8 niveles de profundidad y reúne cada array que sea sobre todo de objetos, y cada objeto cuyos valores sean todos registros. Cada registro se aplana en rutas con punto.
  4. Detectar las coordenadas. Los nombres de campo se comparan con las listas de arriba. Cada par candidato se prueba con hasta 300 registros, y gana el par con más valores válidos. Si ningún par encaja, se prueban campos únicos con dos números.
  5. Crear los puntos. Cada registro se lee con los campos elegidos. Los números en texto se convierten, los valores fuera de ±90 / ±180 se cuentan y se omiten, y los registros que encajarían intercambiados se cuentan aparte.
  6. Dibujar, colorear y exportar. Los puntos se dibujan en una capa canvas y el mapa hace zoom a ellos. Si cambias un campo, el orden o el color, el mapa se redibuja al momento. Las exportaciones usan justo los registros que ves.

La detección solo es una primera propuesta. Cada elección se puede cambiar en la barra lateral y el mapa se actualiza en cuanto la cambias, así que una propuesta equivocada cuesta un clic.

Revisar coordenadas: rangos, intercambios y precisión

Un par de latitud y longitud son solo dos números. Estas tres comprobaciones te dicen si los números tienen sentido.

1. Rangos válidos

La latitud mide hacia el norte y el sur desde el ecuador, así que solo puede ir de −90 en el polo sur a +90 en el polo norte. La longitud mide hacia el este y el oeste desde Greenwich y va de −180 a +180.

válido  ⇔  −90 ≤ latitud ≤ 90   y   −180 ≤ longitud ≤ 180

latitud 91.2, longitud 10.5   →  no válido (latitud demasiado grande)

Un valor fuera de estos rangos casi siempre es una de tres cosas: los campos están intercambiados, los datos están en un sistema proyectado como UTM o metros de Web Mercator, o se perdió el punto decimal (52520000 en vez de 52.52).

2. Detectar valores intercambiados

Si un par no es válido tal como está pero sí lo es al cambiar de sitio los dos números, lo más probable es que los campos estén intercambiados. El visor cuenta estos registros y ofrece un botón Swap.

guardado:      lat = 151.21,  lng = −33.87   →  no válido
intercambiado: lat = −33.87,  lng = 151.21   →  válido (Sídney)

Esta prueba no detecta todos los intercambios. Cuando los dos números están entre −90 y 90, ambos órdenes son válidos. París guardado como (2.35, 48.86) en vez de (48.86, 2.35) cae en el océano Índico, frente a la costa de Somalia. Si tus puntos aparecen en la parte equivocada del mundo, prueba Swap y mira el mapa.

3. Decimales y precisión

Un grado de latitud mide unos 111 km en cualquier lugar. Un grado de longitud mide unos 111 km en el ecuador y se reduce con el coseno de la latitud. Así que cada decimal hace la posición unas diez veces más precisa.

1° latitud  ≈ 111 320 m
1° longitud ≈ 111 320 m · cos(latitud)

decimales   paso en latitud   paso en longitud en Berlín (52.52°)
1           11.1 km           6.8 km
2           1.1 km            680 m
3           111 m             68 m
4           11.1 m            6.8 m
5           1.1 m             0.68 m
6           0.11 m            0.07 m

Cuatro decimales bastan para encontrar un edificio, cinco para encontrar una puerta, y seis ya son más finos que el GPS de un móvil normal. Si tu JSON tiene 10 o 15 decimales, los dígitos extra no aportan precisión; vienen de la aritmética de coma flotante.

Publicidad
Publicidad

Cuándo ayuda este visor

Estas son las situaciones en las que recurro a un visor de mapas JSON.

  1. Revisar la respuesta de una API. Pega la respuesta de una API del tiempo, de transporte o de un localizador de tiendas y comprueba al momento si las ubicaciones tienen sentido, antes de escribir código de mapas.
  2. Revisar la exportación de una app o base de datos. Las apps de reparto, los CRM y las plataformas IoT suelen exportar JSON. Pon la exportación en el mapa para encontrar registros con coordenadas que faltan o están mal.
  3. Convertir JSON a GeoJSON o CSV. Obtén un archivo GeoJSON para QGIS o ArcGIS, o un CSV para Excel, sin escribir ningún script.
  4. Encontrar coordenadas intercambiadas. El aviso y el mapa hacen fácil ver el error clásico en el que la latitud y la longitud cambian de sitio en algún punto de un proceso.
  5. Explorar portales de datos abiertos. Muchos portales de datos abiertos ofrecen JSON junto a CSV. El JSON suele conservar detalles anidados que el CSV pierde, y puedes ponerlo en el mapa directamente.
  6. Agrupar puntos por un campo. Colorea por estado, categoría o tipo para ver patrones, por ejemplo qué estaciones están desconectadas o qué tiendas abren el domingo.
  7. Depurar código de mapas. Si tu propio mapa muestra puntos en el lugar equivocado, carga aquí el mismo JSON. Si aquí los puntos están bien, el error está en tu código, a menudo una confusión entre [lat, lng] y [lng, lat].
  8. Enseñar JSON y coordenadas. Los estudiantes pueden pegar pequeños ejemplos de JSON y ver cómo el anidamiento, los nombres de campo y el orden de las coordenadas cambian el resultado en el mapa.

Preguntas frecuentes

1. ¿Cómo muestro datos JSON en un mapa?

Sube el archivo, pega el JSON o arrastra el archivo al mapa. El visor encuentra solo los registros y los campos de latitud y longitud. Si no los encuentra, elige los campos en el panel Coordinates.

2. ¿Cuál es la diferencia entre JSON y GeoJSON?

JSON es un formato de datos general. GeoJSON es un estándar JSON (RFC 7946) con una estructura fija para la geometría: elementos con un objeto geometry y properties. El JSON normal puede guardar coordenadas en cualquier campo con cualquier nombre, por eso este visor tiene que buscarlas.

3. Mis coordenadas están dentro de un objeto anidado. ¿Funciona?

Sí. Los objetos anidados se aplanan en rutas con punto, así que {"location": {"lat": 52.5}} se convierte en el campo location.lat. El visor busca hasta 8 niveles de profundidad.

4. Mi archivo tiene varias listas. ¿Cuál se usa?

El visor prefiere una lista que tenga coordenadas y luego la más grande. Todas las listas que encontró están en el menú «List of records», así que puedes cambiar a otra.

5. Mis puntos están en el lugar equivocado. ¿Qué hago?

Haz clic primero en Swap. La latitud y la longitud se guardan a menudo al revés. Si los puntos siguen mal, revisa el sistema de coordenadas: valores de miles o millones son probablemente metros UTM o de Web Mercator, no grados.

6. ¿Por qué faltan algunos registros en el mapa?

El panel Records te dice el motivo: o el registro no tenía valor en los campos de coordenadas, o los valores estaban fuera de ±90 para la latitud o de ±180 para la longitud. Solo se dibujan y exportan los registros válidos.

7. ¿Funciona con coordenadas guardadas como texto?

Sí. "52.52" y "52,52" se leen ambos como números. Los textos con los dos valores, como "52.52, 13.405", también funcionan si eliges «One field».

8. ¿Qué orden usa un array [a, b]?

Un campo llamado coordinates usa el orden de GeoJSON, [longitud, latitud]. latlng significa latitud primero y lnglat longitud primero. Con otros nombres, el visor prueba los dos órdenes y elige el que tiene más valores válidos. Siempre puedes cambiarlo en el menú del orden.

9. ¿Puedo abrir GeoJSON o TopoJSON aquí?

No, y no hace falta. Esos formatos ya contienen geometría, así que el visor te lleva al Visor de GeoJSON o al Visor de TopoJSON de este sitio.

10. ¿Cuántos registros puede manejar?

Archivos de hasta 50 MB. Los puntos se dibujan en un canvas, así que decenas de miles de puntos se mueven con fluidez. Los archivos muy grandes tardan unos segundos en analizarse.

11. ¿Se suben mis datos?

No. El archivo se lee en tu navegador, y las exportaciones también se crean en tu navegador. Solo las teselas del mapa base se cargan desde internet.

Bibliotecas y créditos

La lectura del JSON y la detección de coordenadas se escribieron para este sitio. El mapa se basa en software de código abierto.

Herramientas relacionadas

Los archivos JSON se leen en tu navegador y nunca se suben a un servidor. Las coordenadas del ejemplo son centros de ciudades con 4 decimales como máximo. Teselas del mapa © colaboradores de OpenStreetMap, dibujadas con Protomaps (alojado por KONAKTIVE), con CARTO como respaldo. Imágenes de satélite: Esri.

Muhammad Gulraiz Khan, experto en GIS y fundador de KONAKTIVE y OnlineMapMaker.com

Sobre el Autor

Muhammad Gulraiz Khan

Experto y Consultor en GIS · Fundador de KONAKTIVE

Muhammad Gulraiz Khan es un experto en GIS con más de una década de experiencia profesional ofreciendo soluciones geoespaciales para el sector energético, incluyendo proyectos para el Banco Mundial, la Corporación Financiera Internacional (IFC) y USAID. Creó OnlineMapMaker.com para hacer que las herramientas de mapeo profesionales sean gratuitas y accesibles para todos.

Publicidad
Publicidad