Baremaps Studio - Teil 2
Ändern Sie Ihre Meinung zum Prozess der Kartenveröffentlichung - Fallbeispiel
Florent Gravin
Wir haben in einem früheren Artikel den innovativen Ansatz von Baremaps Studio vorgestellt. Nehmen wir nun einen konkreten Anwendungsfall, um die Leistungsfähigkeit des Studios zu demonstrieren.
Wir werden relevante Karten auf der Grundlage des Datensatzes “tödlicher Verkehrsunfälle” in der Bretagne erstellen.
Importieren eines Datensatzes in Ihre Karte
Es gibt viele frei verfügbare Datensätze, die sehr einfach zu beschaffen sind. Für diesen Showcase werden wir einfach einen Unfalldatensatz von Geobretagne herunterladen.
Die ersten Schritte sind recht einfach und selbsterklärend:
- Besorgen Sie sich Ihren Datensatz
- Übertragen Sie ihn in Baremaps Studio
- Erstellen Sie eine neue Karte
- Importieren Sie Ihren Datensatz in Ihre Karte
- Boom
Was geschieht hier?
Beim Hinzufügen eines Datensatzes zu Ihrer Karte aktualisiert Baremaps intern seine Tileset-Definition. Es fügt ein neues vectorLayers-Objekt hinzu und legt eine Standard-SQL-Abfrage für alle Zoomstufen fest, die grundsätzlich alle Objekte aus dem Datensatz auswählt.
Diese Tileset-Konfiguration beschreibt den Inhalt der Vektorkacheln. Mit dieser Konfiguration stellt Baremaps einen MVT-Stream für dieses Tileset zur Verfügung, der Punkte für Unfallorte und alle im Datensatz enthaltenen Attribute enthält.
Beachten Sie, dass Sie mehrere Abfragen für einen Datensatz angeben können, was bedeutet, dass Sie die Darstellung Ihres Datensatzes in Abhängigkeit von der Zoomstufe steuern können.
Beachten Sie auch, dass Sie mehrere Datensätze innerhalb desselben Tilesets haben können, was bedeutet, dass der Client nur einen Vektor-Kachel-Stream in Ihre Karte laden muss.
Geben Sie Ihrem Datensatz einen Sinn
Die Studio-UI bietet die Werkzeuge, um das Rendering Ihres Datensatzes anzupassen und ihn “zum Sprechen” zu bringen. Diese Funktion stützt sich lediglich auf die Mapbox Style-Spezifikation, um den Datensatz anhand seines Attributinhalts darzustellen.
Wie wir bereits gesehen haben, wird die Abfrage in SQL definiert. Das bedeutet, dass nun das gesamte Potenzial von PostGIS für die Darstellung Ihrer Datensätze genutzt werden kann. Schauen wir uns das also genauer an.
1. Attribute join
Schauen wir uns den Inhalt unseres Datensatzes an. Hier können wir die verschiedenen Attribute sehen.
Wir sehen, dass es einen Code für das Departement gibt. Wir wollen also eine räumliche Darstellung des Unfallgeschehens über die Departements haben, indem wir den Datensatz über den Departement-Code mit einem entsprechenden Geometriedatensatz verbinden.
Dank der Baremaps-OSM-Importpipeline können wir die Department-Ebene aus OSM-Daten erstellen, die sich bereits im Speicher befinden.
In der Ebenendarstellung wählen wir nun anstelle der einfachen Punktdarstellung die Aggregation nach Attributen. Zielen Sie auf den anderen Datensatz (Departemente) und wählen Sie die Verbindungsspalte.
Das Studio konfiguriert nun die Tileset-SQL-Abfrage wie folgt:
select d.id as id,
hstore(ARRAY ['count', count(*)::text, 'code', a.tags -> 'departement', 'nom', d.tags -> 'NOM_DEP']) as tags,
d.geom as geom
from "d7208ede-6397-44c6-b646-f4b09fca35e3" as a
LEFT JOIN "11994650-42fc-4727-9727-443cc4143e92" as d
ON d.tags -> 'INSEE_DEP' = a.tags -> 'departement'
group by d.id, d.geom, a.tags -> 'departement', d.tags -> 'NOM_DEP')
Beim Zusammenstellen der Kachel holt Baremaps die Aggregation anstelle des Inhalts der Unfalltabelle wie zuvor.
Durch Hinzufügen eines datengesteuerten Stils (basierend auf einem Ausdruck) können Sie leicht eine schöne Choroplethen-Karte mit der Verteilung der Unfälle pro Departement erstellen.
Das Bild rechts zeigt die Verteilung pro Departement via Attribute Join.
2. Spatial join
Was ist, wenn man die Verteilung über kleinere Verwaltungseinheiten wie französische EPCIs haben möchte? Im Datensatz ist kein EPCI-Code vorhanden. Das Studio kann sich auf die Leistung von PostGIS verlassen, um räumliche Verknüpfungen durchzuführen.
Suchen Sie wie zuvor den EPCI-Datensatz und fügen Sie ihn zu Ihrem Speicher hinzu, um ihn in der Tileset-Definition verwenden zu können.
Ändern Sie anschliessend die Darstellung der Unfall-Ebene, um die räumliche Aggregation zu wählen, und wählen Sie den richtigen Datensatz für die Verwaltungseinheit. Die SQL-Abfrage wird nun ganz einfach wie folgt geändert:
SELECT row_number() OVER () AS id,
hstore('count', count(accident.id)::text) as tags,
epci.geom
FROM "d3853343-cf82-4e22-9aee-89e597d41357" as epci
JOIN "d7208ede-6397-44c6-b646-f4b09fca35e3" as accident
ON st_contains(epci.geom, accident.geom)
GROUP BY epci.geom
Und schon habe wir’s! Baremaps liefert einen Stream von Vektor-Kacheln mit EPCI-Geometrien und einem Zählattribut, das die Anzahl der Unfälle innerhalb jeder Geometrie berechnet, und man erhält eine feinere Choroplethe-Darstellung auf der Grundlage kleinerer Einheiten.
3. HexBin representation
Wir können sogar noch weiter gehen als bei klassischen Joins. Nehmen wir an, man möchte eine HexBin-Verteilung eines Datensatzes. Dazu kann man ganz einfach die Hexbin-Darstellung wählen, die Hex-Grösse auswählen und das Studio wird die richtige Abfrage erstellen und den Inhalt des Vektor-Tile-Streams aktualisieren.
SELECT row_number() OVER () AS id, hstore('count', count(a.id)::text), hexes.geom
FROM
ST_HexagonGrid(
20000,
ST_SetSRID(ST_EstimatedExtent('d7208ede-6397-44c6-b646-f4b09fca35e3', 'geom'), 3857)
) AS hexes
INNER JOIN
"d7208ede-6397-44c6-b646-f4b09fca35e3" as a
ON ST_Intersects(ST_SetSRID(a.geom, '3857'), hexes.geom)
GROUP BY hexes.geom;
Hexbin-Darstellung von Autounfällen
Beachten Sie, dass nichts auf der Client-Seite gemacht wird, alle HexBin-Geometrien und Merkmale stammen von den Vektor-Kacheln.
Passen Sie Ihre Kacheln nach Belieben an
Die vorangegangenen Beispiele veranschaulichen die Leistungsfähigkeit von Baremaps Studio anhand eines konkreten Anwendungsfalls. Natürlich können Sie, wie bereits erwähnt, den Inhalt Ihrer Vektorkacheln so anpassen, wie Sie es wünschen:
- So viele Ebenen wie Sie wollen
- Beliebig viele Unterabfragen (pro Zoombereich)
- Beliebig viele komplexe SQL-Abfragen (Puffer, räumliche Verknüpfung, Funktionen usw.)
Die Ausgabe von Baremaps, unabhängig von der Komplexität Ihrer Tileset-Konfiguration, wird nur ein MVT-Endpunkt sein.
Vergessen Sie nicht, dass Baremaps auch über eingebettete OSM-Daten verfügt. Sie können also problemlos OSM- und benutzerdefinierte Daten im selben MVT-Stream kombinieren.
Mischung aus OSM-Daten (Gebäude, Strassen, Naturgebiete...) und Unfällen (oranger Kreis).
Teilen und dekorieren Sie Ihre Karten
Sobald Sie Ihr Tileset, Ihren Ebeneninhalt und Ihr Styling definiert haben, erstellen Sie eine thematische Karte. Baremaps stellt den Backend-Service zur Verfügung, die experimentelle Studio-UI bietet dem Nutzer das Backoffice für die Kartenerstellung, aber die Endnutzung ist das Ergebnis dieser Arbeit, die öffentliche Karte. Der Benutzer kann vom Studio aus entscheiden, ob er die Karte mit dem aktuellen Tileset und Styling über eine öffentliche Frontoffice-Seite veröffentlichen möchte, die dann mit anderen geteilt oder in Websites von Dritten eingebettet werden kann. Dies ist eigentlich das Hauptziel dieser Architektur.
Schlussfolgerung
Baremaps bietet eine neue Art der Nutzung, des Austauschs und der Vermarktung von Geodaten.
- Nutzung der die Kapazitäten des Vektorformats für eine hervorragende Visualisierung,
- stützt sich auf OGC API Standards
- hält sich an das Mapbox Kachel-Ökosystem
- nutzt die Leistungsfähigkeit von PostGIS für die Datenverarbeitung und -analyse
- bietet eine UI zum einfachen Erstellen und Veröffentlichen Ihrer eigenen Karten
Was in diesem Artikel gezeigt wird, zeigt eine mögliche UI für die MVT-Nutzung, aber es werden noch viele weitere Funktionen kommen, um Karten noch aussagekräftiger und zuverlässiger zu machen (Legende, Popup, synchronisierte Widgets, Dataviz etc...).
Möchten Sie mehr erfahren?
Nutzen Sie ganz einfach dieses Formular zur Kontaktaufnahme!
Karriere
Sie sind daran interessiert, in einer inspirierenden Umgebung zu arbeiten und sich unseren motivierten und multikulturellen Teams anzuschliessen?