Dass 80% der von Regierungen gesammelten, gespeicherten und gewarteten Daten mit geografischen Standorten in Verbindung gebracht werden können. Obwohl nie empirisch bewiesen, zeigt es die Bedeutung des Standorts innerhalb von Daten. Weder wachsende Datenvolumina setzen Einschränkungen für Systeme, die Geospatialdaten umgehen. Gemeinsam Large Knowledge Rechenmotors, die ursprünglich für Textdaten konzipiert wurden, müssen an die effiziente Arbeit mit geoino -Daten geeignet sind – denken Sie an geografische Indizes, Partitionierung und Operatoren. Hier präsentiere und veranschaue ich, wie man das nutzt Microsoft Stoff Funkenzinktor Motor mit den nativ integrierten Funken Esri Geoanalytics Engine# Für die Geospatial Large Knowledge Processing und Analytics.

Die optionalen Geoanalytics -Funktionen innerhalb Stoff Aktivieren Sie die Verarbeitung und Analyse von Geospatialdaten vom Vektor-Typ, wobei sich Geospatialdaten vom Vektor auf Punkte, Linien, Polygone beziehen. Diese Funktionen umfassen mehr als 150 räumliche Funktionen, um Geometrien, Checks und Auswahl räumlicher Beziehungen zu erstellen. Wenn es Funken erweitert, können die Geoanalytics -Funktionen bei der Verwendung von Python, SQL oder Scala aufgerufen werden. Diese räumlichen Vorgänge verwenden automatisch räumliche Indexierung, sodass der Spark Compute Engine auch für diese Daten effizient ist. Es kann 10 additional häufige räumliche Datenformate verarbeiten, um Daten räumliche Daten zu laden und zu speichern, zusätzlich zu den funken unterstützten Datenquellenformaten. Dieser Weblog -Beitrag konzentriert sich auf die skalierbaren Geospatial -Rechenmotoren Geospatial im Zeitalter der KI.

Demonstration erklärt

Hier demonstriere ich einige dieser räumlichen Funktionen, indem ich die Datenmanipulations- und Analyseschritte in einem großen Datensatz zeigt. Durch die Verwendung mehrerer Kacheln, die Level Cloud -Daten (eine Reihe von X-, Y-, Z -Werten) verwenden, wird ein enormer Datensatz gebildet, während es immer noch einen relativ kleinen Bereich abdeckt. Die offen Niederländisch Ahn Dataset, ein nationales digitales Höhen- und Oberflächenmodell, befindet sich derzeit im fünften Replace -Zyklus und erstreckt sich über einen Zeitraum von quick 30 Jahren. Hier werden die Daten aus der zweiten, dritten und vierten Akquisition verwendet, da diese die vollständige nationale Berichterstattung (die fünfte einfach noch nicht) halten, während die erste Model keine Level Cloud -Model enthielt (nur die Model der abgeleiteten Gitterversion).

Ein weiterer niederländischer offener Datensatz, nämlich Daten bauen, die Taschewird verwendet, um die räumliche Auswahl zu veranschaulichen. Der Baudatensatz enthält den Fußabdruck der Gebäude als Polygone. Derzeit enthält dieser Datensatz mehr als 11 Millionen Gebäude. Um die räumlichen Funktionen zu testen, verwende ich nur 4 AHN -Fliesen professional AHN -Model. Somit in diesem Fall 12 Kacheln, jeweils 5 x 6,25 km. Insgesamt mehr als 3,5 Milliarden Punkte in einer Fläche von 125 Quadratkilometern. Das ausgewählte Gebiet deckt die Gemeinde Loppersum ab, ein Gebiet, das aufgrund der Gasgewinnung für Landabsenkt anfällig ist.

Zu den Schritten gehören die Auswahl der Gebäude im Bereich des Lästers und die Auswahl der X-, Y-, Z-Punkte von den Dächern der Gebäude. Dann bringen wir die 3 Datensätze in einen Datenrahmen und führen damit eine zusätzliche Analyse durch. Eine räumliche Regression zur Vorhersage der erwarteten Höhe eines Gebäudes auf der Grundlage seiner Höhengeschichte sowie der Geschichte der Gebäude in seiner direkten Umgebung. Nicht unbedingt die beste Analyse, um diese Daten auszuführen, um zu tatsächlichen Vorhersagen* zu kommen*, aber sie passt lediglich zum Zweck der Nachweis der räumlichen Verarbeitungsfunktionen der Esri Geoanalytics von Cloth. Alle folgenden Code -Ausschnitte sind ebenfalls erhältlich als Notizbücher auf GitHub.

Schritt 1: Daten lesen

Räumliche Daten können in vielen verschiedenen Datenformaten erhältlich sein. Wir entsprechen dem Geoparquet -Datenformat zur weiteren Verarbeitung. Die Taschenaufbaudaten, sowohl die Fußabdrücke als auch die begleiteten Gemeindegrenzen, sind bereits im Geoparquet -Format vorhanden. Die Level Cloud -AHN -Daten, Model 2, 3 und 4, wird jedoch als Laz -Dateiformate geliefert – ein komprimiertes Standardformat für Punktwolken. Ich habe keine Funkenbibliothek gefunden, um Laz zu lesen (bitte hinterlassen Sie eine Nachricht, falls es eine gibt) und erstellt eine TXT -Datei getrennt mit dem Lastools+ Erste.

# ESRI - FABRIC reference: https://builders.arcgis.com/geoanalytics-fabric/

# Import the required modules
import geoanalytics_fabric
from geoanalytics_fabric.sql import features as ST
from geoanalytics_fabric import extensions

# Learn ahn file from OneLake
# AHN lidar knowledge supply: https://viewer.ahn.nl/

ahn_csv_path = "Information/AHN lidar/AHN4_csv"
lidar_df = spark.learn.choices(delimiter=" ").csv(ahn_csv_path)
lidar_df = lidar_df.selectExpr("_c0 as X", "_c1 as Y", "_c2 Z")

lidar_df.printSchema()
lidar_df.present(5)
lidar_df.depend()

Das obige Code -Snippet& Bietet die folgenden Ergebnisse:

Jetzt mit den räumlichen Funktionen make_point Und srid Die Spalten X, Y, Z werden in eine Punktgeometrie transformiert und auf das spezifische niederländische Koordinatensystem (SRID = 28992) einstellen, siehe den folgenden Code -Snippet&:

# Create level geometry from x,y,z columns and set the spatial refrence system
lidar_df = lidar_df.choose(ST.make_point(x="X", y="Y", z="Z").alias("rd_point"))
lidar_df = lidar_df.withColumn("srid", ST.srid("rd_point"))
lidar_df = lidar_df.choose(ST.srid("rd_point", 28992).alias("rd_point"))
  .withColumn("srid", ST.srid("rd_point"))

lidar_df.printSchema()
lidar_df.present(5)

Aufbau- und Gemeindedaten können mit dem erweiterten gelesen werden spark.learn Funktion für Geoparquet, siehe Code -Snippet&:

# Learn constructing polygon knowledge
path_building = "Information/BAG NL/BAG_pand_202504.parquet"
df_buildings = spark.learn.format("geoparquet").load(path_building)

# Learn woonplaats knowledge (=municipality)
path_woonplaats = "Information/BAG NL/BAG_woonplaats_202504.parquet"
df_woonplaats = spark.learn.format("geoparquet").load(path_woonplaats)

# Filter the DataFrame the place the "woonplaats" column comprises the string "Loppersum"
df_loppersum = df_woonplaats.filter(col("woonplaats").comprises("Loppersum"))

Schritt 2: Auswahl treffen

Im Begleit NotizbücherIch lese und schreibe an Geoparquet. Um sicherzustellen, dass die richtigen Daten als Datenrahmen korrekt gelesen werden, finden Sie im folgenden Code -Snippet:

# Learn constructing polygon knowledge
path_building = "Information/BAG NL/BAG_pand_202504.parquet"
df_buildings = spark.learn.format("geoparquet").load(path_building)

# Learn woonplaats knowledge (=municipality)
path_woonplaats = "Information/BAG NL/BAG_woonplaats_202504.parquet"
df_woonplaats = spark.learn.format("geoparquet").load(path_woonplaats)

# Filter the DataFrame the place the "woonplaats" column comprises the string "Loppersum"
df_loppersum = df_woonplaats.filter(col("woonplaats").comprises("Loppersum"))

Bei allen Daten in Datenrahmen wird es zu einem einfachen Schritt, um räumliche Auswahlen zu treffen. Der folgende Code -Snippet& Zeigt, wie die Gebäude innerhalb der Grenzen der Loppersum-Gemeinde ausgewählt werden, und trifft getrennt eine Auswahl von Gebäuden, die im Laufe des Zeitraums existierten (Punkte Cloud-AHN-2-Daten wurden 2009 in dieser Area erfasst). Dies führte zu 1196 Gebäuden aus den derzeit 2492 Gebäuden.

# Clip the BAG buildings to the gemeente Loppersum boundary
df_buildings_roi = Clip().run(input_dataframe=df_buildings,
                    clip_dataframe=df_loppersum)

# choose solely buildings older then AHN knowledge (AHN2 (Groningen) = 2009) 
# and with a standing in use (Pand in gebruik)
df_buildings_roi_select = df_buildings_roi.the place((df_buildings_roi.bouwjaar<2009) & (df_buildings_roi.standing=='Pand in gebruik'))

Die drei verwendeten AHN -Versionen (2,3 und 4), die weiter als T1, T2 bzw. T3 benannt sind, werden dann basierend auf den ausgewählten Gebäudedaten abgeschnitten. Der AggregatePoints Die Funktion kann verwendet werden, um in diesem Fall aus der Höhe (Z-Werten) einige Statistiken wie der Mittelwert professional Dach, die Standardabweichung und die Anzahl der Z-Werte zu berechnen; Siehe den Code -Snippet:

# Choose and aggregrate lidar factors from buildings inside ROI

df_ahn2_result = AggregatePoints() 
            .setPolygons(df_buildings_roi_select) 
            .addSummaryField(summary_field="T1_z", statistic="Imply", alias="T1_z_mean") 
            .addSummaryField(summary_field="T1_z", statistic="stddev", alias="T1_z_stddev") 
            .run(df_ahn2)

df_ahn3_result = AggregatePoints() 
            .setPolygons(df_buildings_roi_select) 
            .addSummaryField(summary_field="T2_z", statistic="Imply", alias="T2_z_mean") 
            .addSummaryField(summary_field="T2_z", statistic="stddev", alias="T2_z_stddev") 
            .run(df_ahn3)

df_ahn4_result = AggregatePoints() 
            .setPolygons(df_buildings_roi_select) 
            .addSummaryField(summary_field="T3_z", statistic="Imply", alias="T3_z_mean") 
            .addSummaryField(summary_field="T3_z", statistic="stddev", alias="T3_z_stddev") 
            .run(df_ahn4)

Schritt 3: Aggregat und Regress

Als Geoanalytics -Funktion Geografisch gewichtete Regression (GWR) kann nur an Punktdaten arbeiten, von den Gebäudepolygonen, die ihr Schwerpunkt mit dem extrahiert werden centroid Funktion. Die 3 Datenrahmen werden zu einem verbunden, siehe auch das Notizbuch und ist bereit, die GWR -Funktion auszuführen. In diesem Fall prognostiziert es die Höhe für T3 (AHN4) basierend auf lokalen Regressionsfunktionen.

# Import the required modules
from geoanalytics_fabric.instruments import GWR

# Run the GWR instrument to foretell AHN4 (T3) peak values for buildings at Loppersum
resultGWR = GWR() 
            .setExplanatoryVariables("T1_z_mean", "T2_z_mean") 
            .setDependentVariable(dependent_variable="T3_z_mean") 
            .setLocalWeightingScheme(local_weighting_scheme="Bisquare") 
            .setNumNeighbors(number_of_neighbors=10) 
            .runIncludeDiagnostics(dataframe=df_buildingsT123_points)

Die Modelldiagnostik kann für den vorhergesagten Z -Wert konsultiert werden. In diesem Fall wurden die folgenden Ergebnisse generiert. Beachten Sie erneut, dass diese Ergebnisse für Anwendungen in der realen Welt nicht verwendet werden können, da die Daten und die Methodik möglicherweise nicht am besten zum Zweck der Absenkmodellierung passen – sie zeigt hier lediglich die Funktionalität der Geoanalytics Cloth.

R2 0,994
Adjr2 0,981
AICC 1509
Sigma2 0,046
Edof 378

Schritt 4: Die Ergebnisse visualisieren

Mit dem räumlichen Funktionsdiagramm können die Ergebnisse als Karten innerhalb des Notebooks visualisiert werden – die nur mit der Python -API in Spark verwendet werden. Erstens eine Visualisierung aller Gebäude innerhalb der Gemeinde loppersum.

# visualize Loppersum buildings
df_buildings.st.plot(basemap="mild", geometry="geometry", edgecolor="black", alpha=0.5)

Hier ist eine Visualisierung des Höhenunterschieds zwischen T3 (AHN4) und T3 vorhergesagt (T3 vorhergesagt minus T3).

# Vizualize distinction of predicted peak and precise measured peak Loppersum space and buildings

axes = df_loppersum.st.plot(basemap="mild", edgecolor="black", figsize=(7, 7), alpha=0)
axes.set(xlim=(244800, 246500), ylim=(594000, 595500))
df_buildings.st.plot(ax=axes, basemap="mild", alpha=0.5, edgecolor="black") #, shade='xkcd:sea blue'
df_with_difference.st.plot(ax=axes, basemap="mild", cmap_values="subsidence_mm_per_yr", cmap="coolwarm_r", vmin=-10, vmax=10, geometry="geometry")

Zusammenfassung

In diesem Weblog -Beitrag wird die Bedeutung geografischer Daten erörtert. Es unterstreicht die Herausforderungen, die durch Erhöhung des Datenvolumens eingestellt werden Geospatial Datensysteme und schlägt vor, dass sich herkömmliche Large -Knowledge -Motoren anpassen müssen, um Geospatialdaten effizient zu verarbeiten. Hier wird ein Beispiel darüber vorgestellt, wie die Microsoft Cloth Cloth Spark Compute Engine und deren Integration in die ESRI Geoanalytics Engine für eine effektive Geospatial Large Knowledge Processing and Analytics verwendet werden.

Meinungen hier sind meine.

Fußnoten

# In Vorschau

* Zur Modellierung der Landabsenkung mit viel höherer Genauigkeit und zeitlicher Häufigkeit können andere Ansätze und Daten verwendet werden, wie beispielsweise mit der Satelliten -Inar -Methodik (siehe auch Bodemdalingskaart)

+ Lastools wird hier separat verwendet. Es würde Spaß machen, die Verwendung von Cloth -Benutzerdatenfunktionen (Vorschau) zu testen oder eine Azure -Funktion für diesen Zweck zu verwenden.

& Code -Snippets hier sind für die Lesbarkeit eingerichtet, nicht unbedingt für Effizienz. Mehrere Datenverarbeitungsschritte könnten gekettet werden.

Referenzen

Github Repo mit Notizbüchern: delange/fabric_geoanalytics

Microsoft Stoff: Microsoft Cloth -Dokumentation – Microsoft Cloth | Microsoft lernen

Esri Geoanalytics für Stoff: Übersicht | Arcgis Geoanalytics für Microsoft Cloth | Arcgis -Entwickler

Ahn: House | Ahn

TASCHE: Over Bag – Basisregistratie Adresseen en Gebouwen – Kadaster.nl Zakelijk

Lastools: Lastools: Konvertieren, Filtern, Betrachten, Verarbeitung und Komprimieren von Lidar -Daten im LAS- und LAZ -Format

Oberflächen- und Objektbewegungskarte: Bodemdalingskaart –

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert