Daten mit der BigQuery und Datasets API visualisieren

Dieses Dokument enthält eine Referenzarchitektur und ein Beispiel für die Erstellung von Kartendatenvisualisierungen mit Standortdaten in BigQuery der Google Cloud Platform und der Google Maps Platform Datasets API, z. B. zum Analysieren von kommunalen Daten, zum Erstellen einer Karte zur Telekommunikationsabdeckung oder zur Visualisierung von Spuren der Fahrzeugbewegungen.

Kartendatenvisualisierungen sind ein leistungsstarkes Tool, um Nutzer zu erreichen und räumliche Informationen in Standortdaten zu gewinnen. Standortdaten sind Daten mit Punkt-, Linien- oder Polygonelementen. Wetterkarten helfen Verbrauchern beispielsweise, Reisen zu planen und sich auf Stürme vorzubereiten. Business Intelligence-Karten helfen Nutzern, Erkenntnisse aus ihrer Datenanalyse zu gewinnen, und Telekommunikationskarten helfen Nutzern, die Abdeckung und Qualität ihrer Anbieter in einem bestimmten Servicegebiet zu verstehen.

Es ist jedoch schwierig für App-Entwickler, große Kartendatenvisualisierungen zu erstellen, die leistungsstark sind und eine hervorragende Nutzererfahrung bieten. Große Daten müssen clientseitig in den Arbeitsspeicher geladen werden, was zu langen Kartenladezeiten führt. Das visuelle Element muss auf allen Geräten leistungsfähig sein, einschließlich preiswerterer Smartphones mit Arbeitsspeicher- und GPU-Einschränkungen. Schließlich müssen Entwickler eine große Daten-Rendering-Bibliothek auswählen, die portabel, zuverlässig und leistungsstark bei großen Datenmengen ist.

Referenzarchitektur

Für die Entwicklung von Apps mit großen Datenvisualisierungen sind zwei Hauptkomponenten erforderlich.

  1. Kunden-Backend: Alle Back-End-App-Daten und ‑Dienste wie Verarbeitung und Speicherung.
  2. Kundenclient: Die Benutzeroberfläche Ihrer App mit einer Komponente zur Kartenvisualisierung.

Unten sehen Sie ein Systemdiagramm, das zeigt, wie diese beiden Komponenten mit dem App-Nutzer, Google Cloud und der Google Maps Platform interagieren, um eine große Datenvisualisierungs-App zu erstellen.

Architekturdiagramm

Designaspekte

Es gibt eine Reihe von Designüberlegungen, die Sie beachten sollten, um mit Google Cloud und der Google Maps Platform eine leistungsstarke Datenvisualisierung zu erstellen.

  1. Größe der Quelldaten und Aktualisierungshäufigkeit:
    1. Wenn die Quelldaten im GeoJSON-Format weniger als 5 MB groß sind oder sehr häufig aktualisiert werden, z.B. eine Live-Wetterradarvorhersage, sollten Sie die Daten clientseitig in Ihrer App als GeoJSON-Objekt bereitstellen und mit einer deck.gl-Ebene rendern.
    2. Wenn Ihre Daten mehr als 5 MB groß sind und nicht schneller als einmal pro Stunde aktualisiert werden, sollten Sie die Datasets API-Architektur in diesem Dokument verwenden.
      1. Datasets unterstützen Dateien mit einer Größe von bis zu 350 MB.
      2. Wenn Ihre Daten größer als 350 MB sind, sollten Sie die Geometriedaten in der Quelldatei kürzen oder vereinfachen, bevor Sie sie an Datasets übergeben (siehe Datenbereinigung weiter unten).
  2. Schema und Format
    1. Achten Sie darauf, dass Ihre Daten für jedes Element eine global eindeutige ID-Property haben. Mit einer eindeutigen ID können Sie ein bestimmtes Element auswählen und einen Stil dafür festlegen oder Daten mit einem Element verknüpfen, um es zu visualisieren. So können Sie beispielsweise ein ausgewähltes Element für das Nutzerereignis „Klick“ einen Stil zuweisen.
    2. Formatieren Sie Ihre Daten gemäß der Datasets API-Spezifikation im CSV- oder GeoJSON-Format mit gültigen Spaltennamen, Datentypen und GeoJSON-Objekttypen.
    3. Wenn Sie Datasets ganz einfach aus BigQuery erstellen möchten, erstellen Sie in Ihrem SQL-CSV-Export eine Spalte mit dem Namen wkt. Datasets unterstützt den Import von Geometrie aus einer CSV-Datei im Well-Known Text-Format (WKT) aus einer Spalte namens wkt.
    4. Überprüfen Sie, ob Ihre Daten gültige Geometrie und Datentypen haben. Beispielsweise muss GeoJSON im WGS84-Koordinatensystem vorliegen und die Geometrie muss in der richtigen Reihenfolge verlaufen.
    5. Verwenden Sie ein Tool wie geojson-validate, um sicherzustellen, dass alle Geometrien in einer Quelldatei gültig sind, oder ogr2ogr, um eine Quelldatei zwischen Formaten oder Koordinatensystemen zu transformieren.
  3. Datenentfernung
    1. Minimieren Sie die Anzahl der Eigenschaften von Elementen. Sie können einem Feature zur Laufzeit zusätzliche Attribute mit einem eindeutigen ID-Schlüssel verknüpfen (Beispiel).
    2. Verwenden Sie nach Möglichkeit Ganzzahl-Datentypen für Eigenschaftsobjekte, um den Kachelspeicherplatz zu minimieren und dafür zu sorgen, dass die Kacheln in einer Client-App über HTTPS geladen werden können.
    3. Vereinfachen und/oder aggregieren Sie sehr komplexe Featuregeometrien. Verwenden Sie BigQuery-Funktionen wie ST_Simplify für komplexe Polygongeometrien, um die Größe der Quelldatei zu reduzieren und die Kartenleistung zu verbessern.
  4. Kachelung
    1. Mit der Google Maps Datasets API werden Kartenkacheln aus Ihrer Quelldatendatei für die Verwendung mit einem Web- oder mobilen Maps SDK erstellt.
    2. Kartenkacheln sind ein zoombasiertes Indexierungssystem, mit dem Daten effizienter in eine visuelle App geladen werden können.
    3. Bei niedrigeren Zoomstufen können auf Kartenkacheln dichte oder komplexe Elemente abgelegt werden. Wenn ein Nutzer herauszoomt auf einen US-Bundesstaat oder ein Land (z.B. z5–z12), sieht die Karte möglicherweise anders aus als beim Heranzoomen auf eine Stadt oder ein Viertel (z.B. z13–z18).

Beispiel: Bahnen in London

In diesem Beispiel wenden wir die Referenzarchitektur an, um eine Webanwendung mit der GCP und Google Maps zu erstellen, die alle Bahnlinien in London anhand von Open Street Map-Daten (OSM) visualisiert.

Vorbereitung

  1. Zugriff auf BigQuery Sandbox und die Cloud Console
  2. Sie müssen ein GCP-Projekt und ein Rechnungskonto eingerichtet haben.

Schritt 1 – Daten in BigQuery abfragen

Rufen Sie Öffentliche BigQuery-Datasets auf. Der Datensatz „bigquery-public-data“ und die Tabelle geo_openstreetmap.planet_features enthalten Open Street Map-Daten (OSM) für den gesamten Globus, einschließlich aller möglichen Funktionen. Im OSM-Wiki finden Sie alle verfügbaren Funktionen, die Sie abfragen können, einschließlich amenity, road und landuse.

Verwenden Sie die Cloud Shell oder die BigQuery Cloud Console(https://console.cloud.google.com), um die Tabelle mit SQL abzufragen. Im folgenden Code-Snippet wird mit dem Befehl bq query eine Abfrage für alle Eisenbahnen ausgeführt, die mithilfe eines Begrenzungsrahmens und der Funktion ST_Intersects() auf London beschränkt sind.

Wenn Sie diese Abfrage in Cloud Shell ausführen möchten, führen Sie den folgenden Code-Snippet aus und aktualisieren Sie dabei die Projekt-ID, das Dataset und den Tabellennamen für Ihre Umgebung.

bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id, 
feature_type,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "name") AS name,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "railway") AS railway,
geometry as wkt
FROM   bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags)) 
    AND ST_Intersects(
    geometry,
ST_MakePolygon(ST_MakeLine(
      [ST_GeogPoint(-0.549370, 51.725346),
      ST_GeogPoint(-0.549370, 51.2529407),
      ST_GeogPoint(0.3110581, 51.25294),
      ST_GeogPoint(0.3110581, 51.725346),
      ST_GeogPoint(-0.549370, 51.725346)]
    ))
   )' 

Die Abfrage gibt Folgendes zurück:

  1. Eine eindeutige Kennung für jedes Element osm_id
  2. die feature_type, z. B. Punkte, Linien usw.
  3. Der name des Elements, z.B. Paddington Station
  4. Der railway-Typ, z. B. Hauptstraße, Tourismus, Militär usw.
  5. Die wkt des Elements – Punkt-, Linien- oder Polygongeometrie im WKT-Format. WKT ist das Standarddatenformat, das in BigQuery-Geografiespalten in einer Abfrage zurückgegeben wird.

Hinweis: Wenn Sie die Abfrageergebnisse visuell prüfen möchten, bevor Sie ein Dataset erstellen, können Sie Ihre Daten mit Looker Studio schnell in einem Dashboard aus BigQuery visualisieren.

Um die Tabelle in eine CSV-Datei in einem Google Cloud Storage-Bucket zu exportieren, verwenden Sie den Befehl bq extra in Cloud Shell:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

Hinweis:Sie können jeden Schritt mit Cloud Scheduler automatisieren, um Ihre Daten regelmäßig zu aktualisieren.

Schritt 2: Datensatz aus Ihrer CSV-Datei erstellen

Erstellen Sie als Nächstes einen Google Maps Platform-Datensatz aus der Abfrageausgabe in Google Cloud Storage (GCS). Mit der Datasets API können Sie einen Datensatz erstellen und dann Daten aus einer Datei, die in GCS gehostet wird, in Ihren Datensatz hochladen.

Aktivieren Sie zuerst die Maps Datasets API in Ihrem GCP-Projekt und lesen Sie die API-Dokumentation. Es gibt Python- und Node.js-Clientbibliotheken, mit denen die Datasets API über die Logik im Back-End Ihrer Anwendung aufgerufen werden kann. Außerdem gibt es eine Datasets-GUI, mit der Sie Datasets manuell in der Cloud Console erstellen können.

Nachdem der Upload des Datensatzes abgeschlossen ist, können Sie sich eine Vorschau des Datensatzes in der Benutzeroberfläche für Datensätze ansehen.

Dataset-Vorschau

Schritt 4: Datensatz mit einer Karten-ID verknüpfen

Nachdem Sie das Dataset erstellt haben, können Sie eine Karten-ID mit einem zugehörigen Kartenstil erstellen. Im Kartenstil-Editor können Sie dem Datensatz eine Karten-ID und einen Stil zuweisen. Hier können Sie auch cloudbasiertes Gestalten von Karteninhalten anwenden, um das Erscheinungsbild Ihrer Karte anzupassen.

Schritt 5: Kartenvisualisierung für die Client-App erstellen

Schließlich können Sie den Datensatz mithilfe der Maps JS API einer clientseitigen Datenvisualisierungs-App hinzufügen. Initialisieren Sie das Kartenobjekt mit der Karten-ID, die mit Ihrem Dataset aus dem vorherigen Schritt verknüpft ist. Legen Sie dann den Stil und die Interaktivität Ihrer Dataset-Ebene fest. Weitere Informationen finden Sie in einem vollständigen Leitfaden zu datengestützten Stilen mit Datasets.

Mit der Maps JS API können Sie den Stil anpassen, Ereignishandler hinzufügen, um den Stil dynamisch zu ändern, und vieles mehr. Beispiele finden Sie in der Dokumentation. Unten definieren wir eine Funktion „setStyle“, um den Punkt- und Linienelementstil für dieses Beispiel basierend auf dem Attribut „feature_type“ zu erstellen.

function setStyle(params) {
  const map.getDatasetFeatureLayer("your-dataset-id");
  const datasetFeature = params.feature;
  const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
           return {
             fillColor: "blue",
             strokeColor: "blue",
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
         } else if (type == "points") {
           return {
             fillColor: "black",
             strokeColor: "black",
             strokeOpacity: 0.5,
             pointRadius: 2,
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
     }
}

Hinweis: Fügen Sie Ihrer Kartenanwendung immer eine Quellenangabe für Ihren Datensatz hinzu. Wenn Sie eine OSM-Quellenangabe hinzufügen möchten, folgen Sie dem Beispiel für den Quellencode in der Dokumentation und beachten Sie die OSM-Richtlinien.

Wenn der Code oben in einer Single-Page-Web-App initialisiert wird, ergibt sich die folgende Visualisierung von Kartendaten:

London Bahnplan

Hier können Sie die Kartenvisualisierung in der Funktion „setStyle()“ erweitern, indem Sie Filterfunktionen Logik hinzufügen, ein Styling basierend auf Nutzerinteraktionen hinzufügen und mit dem Rest Ihrer Anwendung interagieren.

Fazit

In diesem Artikel haben wir eine Referenzarchitektur und eine Beispielimplementierung einer großen Datenvisualisierungsanwendung mit Google Cloud und der Google Maps Platform besprochen. Mit dieser Referenzarchitektur können Sie Apps zur Visualisierung von Standortdaten aus beliebigen Daten in GCP BigQuery erstellen, die mit der Google Maps Datasets API auf jedem Gerät leistungsfähig sind.

Nächste Aktionen

Zum Weiterlesen:

Beitragende

Hauptautoren:

  • Ryan Baumann, Google Maps Platform Solutions Engineering Manager