menu
languageDeutsch
save_alt Download

Map Visualization

Zeig Abfrageergebnisse auf einer interaktiven Karte: Punkte, Blasen, nummerierte Marker, Heatmaps, Cluster, Pfade und gefüllte Regionen.

von rathboma Community-Plugin

Readme

Dieser Text stammt von Dritten und wurde automatisch übersetzt. Original auf Englisch lesen

Zeig Abfrageergebnisse auf einer interaktiven Karte, direkt in Beekeeper Studio. Nimm ein beliebiges Ergebnis mit Koordinaten, Geometrien oder Ortsnamen und wähl die Darstellung: Punkte, skalierte Blasen, nummerierte Marker, Cluster, Heatmaps, Pfade, Flusslinien oder gefüllte Regionen.

Demo: Abfrageergebnisse als Blasen, Heatmap, Cluster, US-Bundesstaaten, Fahrtlinien und GPS-Pfade

1,6× beschleunigt. Video in Originalgeschwindigkeit ansehen.

Installation

In Beekeeper Studio sind Community-Plugins standardmäßig deaktiviert. Aktiviere sie in user.config.ini (~/.config/beekeeper-studio/ unter Linux, ~/Library/Application Support/beekeeper-studio/ unter macOS, %APPDATA%\beekeeper-studio\ unter Windows) und starte die App neu:

[pluginSystem]
disabled = false
communityDisabled = false

Sobald das Plugin in der Plugin-Registry gelistet ist, installierst du Map Visualization über Tools → Manage Plugins. Bis dahin baust du es selbst und verlinkst es in den Plugin-Ordner, wie unter Entwicklung beschrieben.

Eine Karte öffnen

Wo Was passiert
Rechtsklick auf die linke obere Ecke (oder einen Spaltenkopf) eines Ergebnisrasters oder einer Tabellenansicht → Plot on Map Zeigt die ausgewählten Zellen auf der Karte. Es wird keine Abfrage erneut ausgeführt.
Rechtsklick im Abfrage-Editor → Plot Query on Map Führt den markierten Text (oder die Abfrage unter dem Cursor) aus und zeigt sie auf der Karte.
Rechtsklick auf eine Tabelle in der Seitenleiste → View on Map Führt SELECT * … LIMIT 10000 auf der Tabelle aus.
Dropdown „Neuer Tab“ oder Tools → New Map Öffnet einen Karten-Tab mit eigenem Abfragefeld (Ctrl/Cmd+Enter führt es aus).

Abfrageergebnisse erscheinen auch in der Ergebnistabelle unten im Tab, die Rohdaten sind also immer nur einen Klick entfernt.

Woher die Orte kommen

Spalten werden automatisch erkannt. Die Erkennung kannst du im Bereich Location überschreiben.

Daten Beispiele
Breiten-/Längengrad-Spalten lat/lng, latitude/longitude, pickup_lat/pickup_lon, storeLat/storeLng; Dezimalgrad oder DMS (40°42'46"N)
Web-Mercator-Meter x/y in EPSG:3857, automatisch umgerechnet
Geometrie-Spalten PostGIS EWKB hex, WKB, WKT / EWKT, GeoJSON (Text oder Objekte), MySQL- / GeoPackage-Binärdaten, {lat, lng}- oder {x, y}-Objekte, Mongo-GeoJSON-Punkte
Koordinaten als Text "40.7128, -74.0060", (40.7, -74.0), S33.92 E18.42
Geohashes dr5regw3p
Länder Namen, Aliasse (UK, South Korea, Côte d'Ivoire), ISO-Alpha-2/3- oder numerische Codes
US-Bundesstaaten Namen, Postkürzel, FIPS-Codes
Städte Paris, Paris, TX, London, Ontario, optional eingegrenzt über Länder-/Bundesstaat-Spalten; ca. 34.000 Städte, offline
US-Postleitzahlen 02134, 02134-1234 oder Zahlen ohne führende Null

Unscharfe Eingaben werden vorsichtig behandelt: Vertauschte lat/lng-Spalten werden umgedreht (mit Warnung), mehrdeutige Städtenamen werden dem bevölkerungsreichsten Treffer zugeordnet, Postleitzahlen ohne exakten Mittelpunkt (Postfächer) fallen auf ihr 3-stelliges ZIP-Gebiet zurück, und alles, was sich nicht verorten lässt, wird gezählt. Klick in der Statusleiste auf „N ohne Ort“, um diese Zeilen in der Tabelle zu sehen. Projizierte Geometrien in anderen SRIDs werden mit einem Hinweis auf ST_Transform(geom, 4326) gemeldet.

Darstellungsarten

Layer Geeignet für Optionen
Punkte Punkte, Blasen, nummerierte Marker Größe nach Spalte (linear, Quadratwurzel (flächentreu) oder logarithmisch), Ausreißer beim 99. Perzentil kappen, Farbe nach Kategorie oder Zahl (lineare, logarithmische oder Quantil-Klassen; sequenziell oder divergierend), Beschriftungen (Zeilennummer oder Spalte), Deckkraft
Cluster Tausende überlappende Punkte Anzahl pro Cluster, zum Aufteilen hineinzoomen
Heatmap Dichte, optional nach Spalte gewichtet Radius, Unschärfe, Gewichtungsskala. Die Intensität wird pro Zoomstufe normalisiert, damit Hotspots in jedem Maßstab sichtbar bleiben
Pfad GPS-Tracks, Routen, geordnete Besuche Ein Pfad pro Gruppierungsspalte, sortiert nach beliebiger Spalte (Zeiten, Sequenznummern) oder Zeilenreihenfolge; Start-/Endmarker
Linien Ströme von Start → Ziel (Fahrten, Lieferungen) Zielspalten, gebogen oder gerade, Breite und Farbe nach Spalte
Gefüllte Regionen Choroplethenkarten von Ländern oder US-Bundesstaaten Zeilen zählen oder Summe / Durchschnitt / Min / Max einer Spalte; lineare, logarithmische oder Quantil-Farbskala

Blasen, skaliert nach Bevölkerung und eingefärbt nach Kontinent

Fahr mit der Maus über eine Markierung für eine Zusammenfassung und klick sie an für die ganze Zeile, mit Show in table und Copy as JSON. Legendenkategorien kannst du per Klick ausblenden oder per Alt-Klick als einzige anzeigen. Der Tabellen-Button in der Kartenleiste schickt alle Zeilen der aktuellen Ansicht an die Ergebnistabelle darunter.

US-Bestellungen nach Bundesstaat aggregiert

Taxifahrten als Linien von Start → Ziel

Basiskarten und Export

Das Plugin bringt eine Offline-Karte mit: eine 20 MB große Weltkarte aus OpenStreetMap-Daten, sodass Karten ohne Internetverbindung oder fremden Tile-Server gezeichnet werden. Sie enthält Länder, Regionen, Städte und Hauptstraßen und deckt damit Karten vom Land bis zum Ballungsraum ab; auf Straßenebene reichen die Details nicht mehr, und die Statusleiste bietet stattdessen eine Online-Basiskarte an.

Die Liste der Basiskarten ist aufgeteilt in Built in-Karten, die offline funktionieren, und Online-Karten, die Tiles von einem Tile-Server herunterladen. Die gewählte Karte ist als Offline oder Online gekennzeichnet, inklusive des genutzten Servers.

  • Built in: Match app theme (Standard) nutzt die Offline-Karte in hell oder dunkel; Country outlines ist die einfachste Karte.
  • Online: Esri-Straßenkarte, topografische Karte und Satellitenbilder, OpenStreetMap, OpenTopoMap oder eine beliebige eigene {z}/{x}/{y}-Tile-URL.
  • Export als PNG (Karte und Legende), Bild kopieren in die Zwischenablage oder die dargestellten Zeilen als GeoJSON speichern.

Detailliertere Offline-Karten

Detailed area → Load file… unter Settings → Basemap legt eine Protomaps-Basiskarte als .pmtiles-Datei über die Weltkarte, etwa einen Ausschnitt einer Stadt oder eines Landes auf Straßenebene, erstellt mit der pmtiles-CLI. Außerhalb des Dateibereichs wird wie gewohnt die Weltkarte angezeigt.

# 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

Nutze ein aktuelles Build-Datum. Dateien in anderen Tile-Schemas (OpenMapTiles, Raster) werden abgelehnt.

Einstellungen, Abfrage und Kartenausschnitt werden mit dem Tab gespeichert. Ein wiederhergestellter Tab führt seine Abfrage nur dann automatisch erneut aus, wenn sie schon einmal lief und ein einzelnes, rein lesendes SELECT ist.

Bekannte Probleme

Drei Bugs in Beekeeper Studio betreffen dieses Plugin in Version 6.1.5 und älter; die Fixes stehen upstream noch aus:

  • In der Community Edition werden Plugin-Tabs mit Ergebnisbereich (wie dieser) nur etwa 150px hoch dargestellt.
  • Plot Query on Map im Kontextmenü des Abfrage-Editors tut nichts (die App übergibt den Abfragetext nicht).
  • Copy image schlägt mit einem Fehler fehl; Save as PNG… funktioniert.

Die anderen Einstiegspunkte funktionieren in der Zwischenzeit.

Entwicklung

Voraussetzungen: 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 verlinkt diesen Ordner per Symlink in das Plugin-Verzeichnis (~/.config/beekeeper-studio/plugins/bk-plugin-map-visualization unter Linux). Der Linkname muss der id in manifest.json entsprechen.

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/

Die Lookup-Tabellen in src/data/ werden aus öffentlichen Datensätzen erzeugt:

# 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

Die Offline-Weltkarte in basemaps/ ist ein Protomaps-Build, auf Zoomstufe 6 beschnitten und ohne die Layer für Landnutzung, Bodenbedeckung und POIs (etwa halb so groß, und eine Datenkarte zeichnet sie ohnehin nicht):

pmtiles extract https://build.protomaps.com/<YYYYMMDD>.pmtiles world-z6.pmtiles --maxzoom=6
yarn basemap world-z6.pmtiles basemaps/world.pmtiles

--maxzoom=5 ergibt eine 5 MB große Karte mit weniger Orten und Straßen, falls der Plugin-Download kleiner sein soll.

Release erstellen

Führ bin/make-release.sh aus. Das Skript schlägt anhand der vorhandenen Tags die nächste Version vor, setzt version in manifest.json und package.json, committet und pusht einen passenden Tag wie v1.0.0. Der Release-Workflow testet, baut und erstellt einen GitHub-Release-Entwurf mit manifest.json und dem Plugin-Zip.

Datenquellen und Lizenzen

  • Städtedaten © GeoNames, CC BY 4.0.
  • Länder- und Bundesstaatsformen von Natural Earth über world-atlas und vom US Census über us-atlas (gemeinfrei).
  • Mittelpunkte der Postleitzahlen aus dem ZCTA-Gazetteer des US Census Bureau (gemeinfrei).
  • Die Offline-Karte ist © OpenStreetMap-Mitwirkende (ODbL) und Natural Earth, aus einem Protomaps-Basiskarten-Build, gezeichnet mit protomaps-leaflet (BSD-3-Clause).
  • Karten-Tiles werden von den jeweiligen Diensten (Esri, OpenStreetMap, OpenTopoMap) zu deren eigenen Bedingungen bereitgestellt; die Quellenangabe wird auf der Karte angezeigt.
  • Gebaut mit Leaflet, Leaflet.markercluster und Leaflet.heat.

Dieses Plugin steht unter der GPL-3.0-Lizenz. Siehe LICENSE.