Muestra los resultados de tus consultas en un mapa interactivo, directamente en Beekeeper Studio. Úsalo con cualquier conjunto de resultados que tenga coordenadas, geometrías o nombres de lugares y elige cómo dibujarlo: puntos, burbujas con tamaño, marcadores numerados, clústeres, mapas de calor, rutas, líneas de flujo o regiones rellenas.

Acelerado 1.6×. Mira el video a velocidad normal.
Instalación
Beekeeper Studio viene con los plugins de la comunidad desactivados. Actívalos en user.config.ini (~/.config/beekeeper-studio/ en Linux, ~/Library/Application Support/beekeeper-studio/ en macOS, %APPDATA%\beekeeper-studio\ en Windows) y luego reinicia la app:
[pluginSystem]
disabled = false
communityDisabled = false
Cuando el plugin aparezca en el registro de plugins, instala Map Visualization desde Tools → Manage Plugins. Mientras tanto, compílalo y enlázalo en la carpeta de plugins como se explica en Desarrollo.
Abrir un mapa
| Dónde | Qué pasa |
|---|---|
| Haz clic derecho en la esquina superior izquierda (o en el encabezado de una columna) de una cuadrícula de resultados o vista de tabla → Plot on Map | Mapea las celdas seleccionadas. No se vuelve a ejecutar ninguna consulta. |
| Clic derecho en el editor de consultas → Plot Query on Map | Ejecuta el texto seleccionado (o la consulta bajo el cursor) y lo mapea. |
| Clic derecho en una tabla de la barra lateral → View on Map | Ejecuta SELECT * … LIMIT 10000 sobre la tabla. |
| Menú de nueva pestaña o Tools → New Map | Abre una pestaña de mapa con su propio cuadro de consulta (Ctrl/Cmd+Enter la ejecuta). |
Los resultados de la consulta también aparecen en la tabla inferior de la pestaña, así que las filas originales siempre están a un clic.
De dónde salen las ubicaciones
Las columnas se detectan automáticamente. Puedes cambiar la detección en el panel Location.
| Datos | Ejemplos |
|---|---|
| Columnas de latitud / longitud | lat/lng, latitude/longitude, pickup_lat/pickup_lon, storeLat/storeLng; grados decimales o DMS (40°42'46"N) |
| Metros Web Mercator | x/y en EPSG:3857, convertidos automáticamente |
| Columnas de geometría | PostGIS EWKB hex, WKB, WKT / EWKT, GeoJSON (texto u objetos), binario de MySQL / GeoPackage, objetos {lat, lng} o {x, y}, puntos GeoJSON de Mongo |
| Coordenadas en texto | "40.7128, -74.0060", (40.7, -74.0), S33.92 E18.42 |
| Geohashes | dr5regw3p |
| Países | nombres, alias (UK, South Korea, Côte d'Ivoire), códigos ISO alfa-2/3 o numéricos |
| Estados de EE. UU. | nombres, códigos postales, códigos FIPS |
| Ciudades | Paris, Paris, TX, London, Ontario, opcionalmente filtradas por columnas de país / estado; ~34k ciudades, sin conexión |
| Códigos ZIP de EE. UU. | 02134, 02134-1234, o números que perdieron el cero inicial |
Los datos dudosos se manejan con cautela: las columnas de lat/lng invertidas se corrigen (con una advertencia), los nombres de ciudad ambiguos se resuelven a la coincidencia más poblada, los códigos ZIP sin centroide exacto (apartados postales) usan su área ZIP de 3 dígitos, y todo lo que no se puede ubicar se cuenta. Haz clic en “N sin ubicación” en la barra de estado para ver esas filas en la tabla. Las geometrías proyectadas en otros SRID se reportan con una sugerencia de usar ST_Transform(geom, 4326).
Formas de dibujarlo
| Capa | Úsala para | Opciones |
|---|---|---|
| Puntos | Puntos, burbujas, marcadores numerados | Tamaño según una columna (lineal, raíz cuadrada (fiel al área) o logarítmico), limitar valores atípicos al percentil 99, color por categoría o número (clases lineales, logarítmicas o por cuantiles; secuenciales o divergentes), etiquetas (número de fila o una columna), opacidad |
| Clústeres | Miles de puntos superpuestos | Conteo por clúster, acerca para separarlos |
| Mapa de calor | Densidad, opcionalmente ponderada por una columna | Radio, desenfoque, escala de peso. La intensidad se normaliza por nivel de zoom para que los puntos calientes se vean a cualquier escala |
| Ruta | Recorridos GPS, rutas, visitas ordenadas | Una ruta por columna de grupo, ordenada por cualquier columna (tiempos, números de secuencia) o por el orden de las filas; marcadores de inicio / fin |
| Líneas | Flujos de origen → destino (viajes, envíos) | Columnas de destino, curvas o rectas, grosor y color según columna |
| Regiones rellenas | Mapas coropléticos de países o estados de EE. UU. | Contar filas o sumar / promediar / mín / máx de una columna; escala de color lineal, logarítmica o por cuantiles |

Pasa el cursor sobre una marca para ver un resumen y haz clic para ver la fila completa, con Show in table y Copy as JSON. Puedes hacer clic en las categorías de la leyenda para ocultarlas, o Alt+clic para mostrar solo esa categoría. El botón de tabla en la barra del mapa envía todas las filas de la vista actual a la tabla de resultados de abajo.


Mapas base y exportación
El plugin incluye un mapa sin conexión: un mapa mundial de 20 MB creado con datos de OpenStreetMap, para que los mapas se dibujen sin conexión a internet ni servidores de mosaicos de terceros. Tiene países, regiones, ciudades y carreteras principales, suficiente para mapas desde país hasta área metropolitana; al acercarte a nivel de calle se queda sin detalle, y la barra de estado te ofrece un mapa base en línea.
La lista de mapas base se divide en mapas Built in, que funcionan sin conexión, y mapas Online, que descargan mosaicos de un servidor. El mapa seleccionado se marca como Offline u Online, junto con el servidor que usa.
- Integrados: Match app theme (predeterminado) usa el mapa sin conexión en modo claro u oscuro; Country outlines es el mapa más sencillo.
- En línea: calles, topografía e imágenes satelitales de Esri, OpenStreetMap, OpenTopoMap o cualquier URL de mosaicos
{z}/{x}/{y}personalizada. - Exporta como PNG (mapa y leyenda), copia la imagen al portapapeles o guarda las filas graficadas como GeoJSON.
Mapas sin conexión más detallados
Detailed area → Load file… en Settings → Basemap agrega un archivo .pmtiles de mapa base de Protomaps sobre el mapa mundial, como un extracto a nivel de calle de una ciudad o país hecho con la CLI pmtiles. Fuera del área del archivo, el mapa mundial se ve como siempre.
# street detail for New York City (about 100 MB)
pmtiles extract https://build.protomaps.com/20261014.pmtiles nyc.pmtiles --bbox=-74.26,40.48,-73.69,40.92 --maxzoom=15
Usa una fecha de build reciente. Los archivos con otros esquemas de mosaicos (OpenMapTiles, ráster) se rechazan.
La configuración, la consulta y la vista se guardan con la pestaña. Una pestaña restaurada solo vuelve a ejecutar su consulta automáticamente si ya se había ejecutado y es un único SELECT de solo lectura.
Problemas conocidos
Tres bugs de Beekeeper Studio afectan a este plugin en la versión 6.1.5 y anteriores; las correcciones están pendientes en upstream:
- En la edición Community, las pestañas de plugins con panel de resultados (como esta) solo miden unos 150px de alto.
- Plot Query on Map en el menú contextual del editor de consultas no hace nada (la app no pasa el texto de la consulta).
- Copy image falla con un error; Save as PNG… sí funciona.
Mientras tanto, los demás puntos de acceso funcionan.
Desarrollo
Requisitos: Beekeeper Studio 5.5+, Node.js 20.19+, Yarn 1.
yarn install
yarn dev # links the plugin into Beekeeper Studio's plugins folder and hot-reloads
yarn test # unit tests (vitest)
yarn build # type-check + production build into dist/
yarn dev crea un enlace simbólico de esta carpeta en el directorio de plugins (~/.config/beekeeper-studio/plugins/bk-plugin-map-visualization en Linux). El nombre del enlace debe coincidir con el id de manifest.json.
src/
App.vue data sources, state, popups, export
components/ settings panel, legend, icons
lib/geo/ WKB / WKT / geohash / DMS parsing, regions, offline geocoding
lib/detect.ts column auto-detection
lib/build.ts rows -> plottable items (CRS, axis order, geocoding)
lib/model.ts sizes, colors, aggregates, legends
lib/renderer.ts Leaflet layers
lib/pack.ts offline map packs: validation, PMTiles source
lib/offlineMap.ts bundled world map + detailed area (IndexedDB), shared by all map tabs
data/ generated lookup tables (see below)
basemaps/world.pmtiles the offline world map, bundled into dist/
Las tablas de búsqueda en src/data/ se generan a partir de conjuntos de datos públicos:
# download cities15000.zip, countryInfo.txt and admin1CodesASCII.txt from https://download.geonames.org/export/dump/
# and 2023_Gaz_zcta_national.zip from the US Census gazetteer, unzip them into one folder, then:
yarn geodata /path/to/that/folder
El mapa mundial sin conexión en basemaps/ es un build de Protomaps recortado a zoom 6, sin las capas de uso de suelo, cobertura del suelo ni POI (pesa como la mitad, y un mapa de datos no las dibuja):
pmtiles extract https://build.protomaps.com/<YYYYMMDD>.pmtiles world-z6.pmtiles --maxzoom=6
yarn basemap world-z6.pmtiles basemaps/world.pmtiles
--maxzoom=5 genera un mapa de 5 MB con menos poblaciones y carreteras, si necesitas que la descarga del plugin sea más ligera.
Publicación
Ejecuta bin/make-release.sh. Sugiere la siguiente versión a partir de los tags existentes, ajusta version en manifest.json y package.json, hace commit y sube un tag correspondiente como v1.0.0. El workflow de release ejecuta las pruebas, compila y crea un borrador de release en GitHub con manifest.json y el zip del plugin.
Fuentes de datos y licencias
- Datos de ciudades © GeoNames, CC BY 4.0.
- Formas de países y estados de Natural Earth mediante
world-atlas, y del US Census medianteus-atlas(dominio público). - Centroides de códigos ZIP del gazetteer ZCTA de la US Census Bureau (dominio público).
- El mapa sin conexión es © colaboradores de OpenStreetMap (ODbL) y Natural Earth, a partir de un build de mapa base de Protomaps, dibujado con protomaps-leaflet (BSD-3-Clause).
- Los mosaicos de mapa los proporcionan sus respectivos servicios (Esri, OpenStreetMap, OpenTopoMap) bajo sus propios términos; la atribución se muestra en el mapa.
- Hecho con Leaflet, Leaflet.markercluster y Leaflet.heat.
Este plugin tiene licencia GPL-3.0. Consulta LICENSE.