Extrahieren von Daten aus einer CSV-Datei mit Python Scripting in Global Mapper Pro

Jason Kulinski | 07.01.2025 |Optimierung von Arbeitsabläufen

Global Mapper Pro® ist ein entwicklerfreundliches Geodaten-Werkzeug, das für die einfache Integration von Automatisierungsabläufen wurde. Die Software ermöglicht es Anwendern, GIS-Arbeitsabläufe mit Python-Skriptfunktionen und der Skriptsprache von Global Mapper zu automatisieren. Jeden Tag lernen mehr Benutzer, wie sie die Vorteile der leistungsstarken Skript- und Datenspeicherfunktionen nutzen können. Im letzten Skripting-Artikel haben wir erörtert, wie man mit Python und JSON-Dateien geospatiale Wohnungsdaten überwacht, verfolgt und aufzeichnet.

Wir hatten mit einer vorgefertigten Global Mapper Package-Datei namens HawleyData.gmp gearbeitet. Es ist immer gut, einen fertigen Datensatz zu haben - aber was passiert, wenn man es mit Rohdaten zu tun hat? In diesem Artikel sehen wir uns an, wie man Daten aus einer CSV-Datei extrahiert und ein ähnliches Verfahren anwendet, um das Geodatenprodukt zu erstellen, das wir im letzten Artikel gesehen haben.

CSV in Python-Liste

Kommagetrennte Dateien, auch als CSV-Dateien bekannt, sind eine weitere gängige Methode zur Speicherung von Datenpunkten. CSV-Dateien sind nützlich, um Informationen zu teilen, die in einem Tabellenformat vorliegen, und die Dateien können auch von Menschen leicht gelesen und interpretiert werden. Um dies zu demonstrieren, werden wir uns die CSV- und RE-(Regular Expressions-)Bibliotheken ansehen, um die Daten zu extrahieren.

Figure-1.1-1.png

Im Gegensatz zu JSON-Daten werden diese CSV-Daten als String gespeichert (technisch gesehen werden die Daten als WKT oder „Well Known Text“ formatiert und sind in der Spezifikation ISO/IEC 13249-3:2016 zu finden), was bedeutet, dass wir zusätzliche Codezeilen einfügen müssen, um die unnötigen Werte zu entfernen und die eigentlichen Daten Zeile für Zeile zu formatieren. Wir können dies erreichen, indem wir die RE-Bibliothek in unser Projekt importieren.

Figure-1.2-1.png

Die Ausgabe, die Sie in der Abbildung sehen, wird durch Ausdrucken der Zeilenvariablen erzeugt. Sobald die Daten formatiert sind, können wir die Werte in Strings von Breiten- und Längengradkoordinaten typisieren. In den C++-Bibliotheken von Global Mapper speichern die GM_Point-Werte Breiten- und Längengradkoordinaten. Diese werden als Fließkommawerte gespeichert, so dass wir jetzt das Type-Casting-System von Python verwenden können, um unsere zuvor unformatierte CSV-Datei in einen voll funktionsfähigen GM_Point-Wert zu konvertieren!

Figure-1.3-1.png

In der Script-Abbildung lesen wir die CSV-Datei Zeile für Zeile und erstellen eine Liste der Daten, die wir später verwenden wollen. Führen Sie eine einfache Druckanweisung nach row[0] aus, um eine Liste von String-Werten zu erhalten, die Fließkommawerte sind.

Flächen-Elemente von Grund auf neu erstellen

Anhand der generierten Koordinaten können wir mit der Python-Skriptfunktion von Global Mapper Pro ein Flächen-Element erstellen. Alles, was Sie brauchen, ist eine Ebene, der Sie das Flächen-Element hinzufügen, eine Liste von Punkten und einen Zeichenstil.

Erstellen Sie zunächst eine neue Ebene für unsere Punkte mit der Funktion CreateCustomVectorLayer. Nachdem wir die Ebene erstellt haben, müssen wir alle unsere Daten mit einer for-Schleife programmatisch hinzufügen. Da der Python-Code C++-Klassen verpackt hat, können wir Klassen auspacken und referenzieren, um die richtigen Informationen und Typen zu senden. In diesem Fall werden wir die Klasse gm.GM_AreaFeature_t() verwenden, um Werte für jedes AreaFeature festzulegen. Innerhalb jedes AreaFeature müssen wir ein GM_Point_t_array() erstellen, das ebenfalls einen GM_Point_t()-Datentyp benötigt, um das AreaFeature erfolgreich zu erstellen.

screengrab.jpg

Um zusammenzufassen, was wir getan haben

  • Wir richten eine for-Schleife ein, die unsere Liste mit Punktmerkmalen durchläuft
  • Fügen Sie eine zusätzliche for-Schleife hinzu, um jeden x- und y-Punkt in der Liste durchzugehen
  • Weisen Sie x und y Werte zu und erstellen Sie eine Klasse GM_Point_t.
  • Für diese CSV-Daten gibt es keinen abschließenden Punktwert, so dass wir den ersten Punkt nach der for-Schleife hinzufügen müssen, um die Geometrie zu schließen.
  • Greifen Sie auf die Variablen der Klasse GM_AreaFeature_t() mPointList und mNumPoints zu und weisen Sie ihnen die Werte der von uns erstellten Klassen zu.
  • Verwenden Sie die Funktion AddAreaToVectorLayer, um das Flächenmerkmal anzuzeigen.
Figure-2.1.png

Ihr Ergebniss sollten in etwa so aussehen.

Elemente nach Wert einfärben

Wir konnten aus unseren CSV-Daten Flächen-Elemente erstellen, aber sie haben keine Werte oder Farben, die zur Visualisierung der Daten in einer Stadtlandschaft beitragen. Dazu können wir die JSON-Daten aus dem Projektdownload verwenden und den gerade erstellten Flächen-Elementen Werte zuweisen. Dazu verwenden Sie die Funktion SetFeatureAttrList(), die eine Ebene, ein Flächen-Element, den Index des Elements, eine Attributliste und die Anzahl der Attribute in der Liste aufnimmt.

Zum Einfärben der Bereichs-Elemente verwenden wir die Funktion SetAreaFeatureDrawStyle() und eine benutzerdefinierte Farbverlaufsfunktion, die die Bereiche je nach Entfernung zu einem festgelegten Preis einfärbt.

Diese beiden Funktionen nehmen zusätzliche Klassen als Parameter auf, ähnlich wie die Funktion CreateCustomVectorLayer() arbeitet. Schauen wir uns die for-Schleife an und sehen wir uns an, wie diese zusätzlichen Klassen uns helfen, diese Elemente einzufärben und ihnen Werte zuzuweisen.

Figure-3.1.png

Die vorherigen Schritte im Detail:

  • Erstellen Sie eine for-Schleife, um jedes Flächenmerkmal zu durchlaufen.
  • Erstellung einer Klasse GM_AttrValue_t(), die als Variable für die Zuweisung und Speicherung von Datenpunkten dient.
  • Legen Sie unsere Werte für den Namen und den Wert der Attribute fest.
  • Es wurde eine benutzerdefinierte Hex-Farbe basierend auf dem Wert des Bereichs-Element erstellt.
  • Es wurde eine Klasse GM_AreaStyle_t() erstellt, die den Wert der Farbe und die Farbfülloption (GM_BRUSH_SOLID) enthält.
  • Verwenden Sie sowohl SetAreaFeatureDrawStyle() als auch SetFeatureAttrList() mit zuvor erstellten Ebenen und neu festgelegten Parametern.
Figure-4.1.png

Das Endergebnis sieht dann etwa so aus.

Wir haben einen Arbeitsablauf durchgeführt, der Rohdaten in einem Tabellenformat in eine Polygon-Vektordatei mit Attributierung und Styling umwandelt. Dieser Arbeitsablauf und die Konzepte aus diesem Artikel können auf jede Art von Geodaten angewendet werden. Bei der Verarbeitung und Erstellung wichtiger Visualisierungen und Darstellungen von Geodaten sind Ihnen keine Grenzen gesetzt.

Erfahren Sie mehr über die Skripterstellung in Global Mapper:

Warenkorb (0 Artikel)