Zurück zum Katalog
Season 42 8 Episoden 33 min 2026

Shapely

v2.1 — 2026 Edition. Manipulation und Analyse von geometrischen Objekten in der kartesischen Ebene. Lerne alles über das räumliche Datenmodell, konstruktive Operationen, Prädikate, Mengenoperationen und räumliche Indizierung mit Shapely 2.1 (2026).

Geodatenanalyse Geometrische Operationen
Shapely
Aktuelle Wiedergabe
Click play to start
0:00
0:00
1
Das räumliche Datenmodell
Tauche ein in die grundlegenden Konzepte von Shapely und wie es die Welt modelliert. Du lernst den Unterschied zwischen Punkten, Kurven und Flächen kennen und erfährst, wie die Punktmengenlehre die Grundlage der planaren Geometrie bildet.
4m 07s
2
Geometrieerstellung und Serialisierung
Entdecke, wie du Geometrien in Shapely effizient erstellst und transportierst. Du lernst den Unterschied zwischen der Erstellung einzelner Objekte und hochperformanten vektorisierten ufuncs sowie die Serialisierung mit WKT und GeoJSON kennen.
3m 54s
3
Messung und Eigenschaften
Lerne, wie du wichtige Messwerte aus deinen Geometrien extrahierst. Du wirst verstehen, wie man Fläche, Länge und fortgeschrittene Distanzmetriken wie die Hausdorff distance berechnet.
3m 59s
4
Räumliche Prädikate und die DE-9IM
Meistere die Kunst, räumliche Beziehungen zu überprüfen. Du lernst, wie du boolesche Prädikate verwendest, um genau zu bestimmen, wie zwei Formen interagieren, angetrieben von der DE-9IM-Matrix.
3m 49s
5
Mengentheoretische Operationen
Entdecke, wie du Geometrien zusammenführst, zuschneidest und zerteilst. Du lernst, wie du mathematische Mengenoperationen wie Intersection, Difference und Union verwendest, um völlig neue Formen zu erschaffen.
4m 01s
6
Konstruktive Operationen: Buffers und Hulls
Lerne, wie du synthetisch neue Begrenzungsformen generierst. Du wirst Buffering erkunden, Sicherheitszonen erstellen und verstreute Punkte mit Convex und Concave Hulls umhüllen.
4m 18s
7
Fortgeschrittene konstruktive Operationen
Bringe deine Formmanipulation auf die nächste Stufe. Du lernst, wie du riesige Polygone mittels Simplification bereinigst, Features mit Snap verbindest und Voronoi-Diagramme erstellst.
4m 18s
8
Hochperformante räumliche Indizierung mit STRtree
Schalte blitzschnelle räumliche Abfragen frei. Du lernst, wie du den Sort-Tile-Recursive (STR) Tree verwendest, um riesige räumliche Datensätze sofort zu filtern und nahezu verzögerungsfreie Nearest-Neighbor-Suchen durchzuführen.
4m 46s

Episoden

1

Das räumliche Datenmodell

4m 07s

Tauche ein in die grundlegenden Konzepte von Shapely und wie es die Welt modelliert. Du lernst den Unterschied zwischen Punkten, Kurven und Flächen kennen und erfährst, wie die Punktmengenlehre die Grundlage der planaren Geometrie bildet.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 1 von 8. Vielleicht bist du es gewohnt, Kartengeometrien als einfache Listen von Koordinaten zu behandeln, die hauptsächlich dazu dienen, Shapes auf einen Bildschirm zu zeichnen. Aber wenn du berechnen musst, ob ein GPS-Track eine bestimmte Grenze kreuzt, stößt einfache Zeichenlogik an ihre Grenzen. Um echte mathematische Spatial Analysis zu betreiben, brauchst du das Spatial Data Model. Zuerst müssen wir eine häufige Quelle der Verwirrung bezüglich dieses Modells klären. Shapely arbeitet strikt auf einer flachen, zweidimensionalen kartesischen Ebene. Du kannst beim Erstellen deiner Geometrien X-, Y- und Z-Koordinaten angeben. Shapely parst sie und speichert diesen Z-Wert sogar im Memory. Aber es ignoriert die Z-Koordinate bei jeder Spatial Analysis komplett. Wenn du die Distanz zwischen zwei Punkten abfragst, berechnet Shapely die flache 2D-Distanz. Es berechnet keine 3D-Volumen oder 3D-Distanzen. Es ist eine rein planare Library. Hier ist die entscheidende Erkenntnis. Shapely basiert auf der mathematischen Punktmengentheorie. Es betrachtet ein Shape nicht einfach als die Handvoll Vertices, die du in deinen Code getippt hast. Stattdessen behandelt es jede Geometrie als eine exakte Menge mit unendlich vielen Punkten. Nach diesem Modell teilt jede Geometrie die gesamte 2D-Ebene in drei verschiedene Bereiche. Das Interior ist die eigentliche Substanz des Shapes. Die Boundary ist der Rand, der das Shape einrahmt. Das Exterior ist der Rest der unendlichen Ebene, der nicht Teil des Shapes ist. Stell dir vor, du modellierst einen Stadtpark, um zu sehen, wie diese drei Konzepte angewendet werden. Du beginnst mit einem Springbrunnen, der als Point-Geometrie dargestellt wird. Ein Point ist nulldimensional. Er repräsentiert eine einzige, exakte Position auf der Ebene. Da er weder Länge noch Fläche hat, besteht sein Interior ausschließlich aus dieser einen spezifischen Koordinate. Ein Point hat überhaupt keine Boundary. Jede andere Koordinate auf der gesamten kartesischen Ebene bildet sein Exterior. Als Nächstes fügst du einen Fußweg hinzu, der zum Brunnen führt. Dieser wird als LineString modelliert. Ein LineString ist eine eindimensionale Geometrie, die durch eine geordnete Sequenz von Koordinaten-Vertices definiert ist. Selbst wenn du ihm nur eine Start- und eine Endkoordinate übergibst, versteht Shapely den LineString als die unendliche Menge von Punkten, die den durchgehenden Pfad zwischen ihnen bilden. Das Interior ist die gesamte durchgehende Länge des Pfades. Die Boundary besteht aus exakt zwei Punkten: der ersten Startkoordinate und der letzten Endkoordinate. Schließlich modellierst du den Grundriss des Parks selbst mithilfe eines Polygons. Ein Polygon ist eine zweidimensionale Geometrie mit einer messbaren Fläche. Du definierst es durch einen geschlossenen Ring von Koordinaten, was bedeutet, dass der erste und der letzte Punkt identisch sind. Dieser äußere Ring bildet die Boundary des Polygons. Das Interior ist die unendliche Menge von Punkten, die von dieser Boundary umschlossen werden. Polygone können auch Holes enthalten, wie zum Beispiel eine gesperrte Naturschutzzone innerhalb des Parks. Der Rand dieses Holes fungiert einfach als innere Boundary und trennt das gültige Interior des Parks sauber vom leeren Exterior innerhalb des Holes. Shapely betrachtet deine Geometrie nicht als hohles Wireframe aus Koordinaten; es sieht einen zusammenhängenden Raum, der mathematisch in Interior, Boundary und Exterior unterteilt ist. Wenn du diese Folgen hilfreich findest und die Show unterstützen möchtest, suche auf Patreon nach DevStoriesEU. Das war's für diese Folge. Danke fürs Zuhören und keep building!
2

Geometrieerstellung und Serialisierung

3m 54s

Entdecke, wie du Geometrien in Shapely effizient erstellst und transportierst. Du lernst den Unterschied zwischen der Erstellung einzelner Objekte und hochperformanten vektorisierten ufuncs sowie die Serialisierung mit WKT und GeoJSON kennen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 2 von 8. Du verarbeitest einen Batch von räumlichen Koordinaten. Du schreibst einen Loop, um jedes Koordinatenpaar einzeln in eine Shape umzuwandeln. Das funktioniert, aber sobald dein Dataset auf Millionen von Punkten anwächst, kommt deine Application komplett zum Stillstand. Das Problem ist der Python-Overhead, und der Fix erfordert, die Standard-Object-Creation komplett zu umgehen. In dieser Folge geht es um Geometry Creation und Serialization. Shapes zu erstellen, ist der logische Ausgangspunkt. Wenn du es mit einer einzelnen Location zu tun hast, ist das Instanziieren einer Geometry unkompliziert. Du importierst die singuläre Point-Klasse und übergibst ihr einen X- und einen Y-Wert. Das ist leicht zu lesen, aber es ist langsam. Hier ist die entscheidende Erkenntnis. Shapely bietet vektorisierte Universal Functions, die direkt auf NumPy-Arrays operieren. Anstatt die singuläre Point-Klasse in einem Python-Loop zu verwenden, nutzt du die plurale shapely dot points Funktion. Du übergibst ihr ein zweidimensionales Array von Koordinaten, und sie verlagert die gesamte Iteration runter auf die hochoptimierte C-Ebene. Das Ergebnis ist ein Array von Geometry-Objekten, das in einem Bruchteil der Zeit zurückgegeben wird. Das gilt auf ganzer Linie, mit pluralen Funktionen für LineStrings, Polygons und LinearRings. Angenommen, du baust ein Routing-Tool und musst ein Dataset mit tausend Drop-off-Punkten laden. Die Daten kommen als Array von GeoJSON-Payloads an. Das bringt uns zur Serialization. Du musst diese Strings in tatsächliche Geometry-Objekte im Memory parsen. Du bist vielleicht versucht, Standard-JSON-Parsing zu verwenden und die Koordinaten manuell zu extrahieren, um deine Shapes zu bauen. Mach das nicht. Shapely hat eingebaute Input- und Output-Funktionen für die drei wichtigsten Spatial-Formate: Well-Known Text, Well-Known Binary und GeoJSON. Genau wie die Geometry Creation sind auch diese Parsing-Funktionen vektorisiert. Du nimmst dein gesamtes Array aus tausend GeoJSON-Strings und übergibst es direkt an die shapely dot from geojson Funktion. Sie parst den ganzen Batch auf einmal und gibt ein High-Performance-Array von Geometries zurück. Wenn deine Daten im Textformat wären, würdest du shapely dot from wkt verwenden. Wenn sie im Binärformat wären, würdest du shapely dot from wkb verwenden. Das deckt die Inputs ab. Was ist mit Outputs? Sobald du mit der Verarbeitung deiner Drop-off-Punkte fertig bist, musst du sie speichern oder an eine Datenbank senden. Du kehrst den Prozess mit den Export-Funktionen um. Wenn du am Debuggen bist und die Koordinaten mit eigenen Augen lesen musst, verwendest du shapely dot to wkt. Well-Known Text gibt dir einen human-readable String, der den Geometry-Typ gefolgt von den Koordinaten ausschreibt. Text-Parsing ist jedoch teuer und verbraucht viel Speicherplatz. Wenn du diese Daten an eine Spatial-Datenbank sendest oder für später speicherst, solltest du shapely dot to wkb verwenden. Well-Known Binary ist die rohe Byte-Repräsentation der Geometry. Sie ist deutlich kleiner, vermeidet Precision Loss durch Floating-Point-String-Conversion und ist für Maschinen viel schneller zu lesen und zu schreiben. Du übergibst dein Geometry-Array an shapely dot to wkb, und du bekommst ein Array von Byte-Strings, bereit für die Speicherung. Wann immer du Spatial-Daten in deine oder aus deiner Application bewegst, denk daran, dass Python-Loops der Feind sind. Die wichtigste Angewohnheit für Performance ist es, ganze Arrays in plurale Shapely-Funktionen zu füttern und die zugrundeliegende C-Library die schwere Arbeit in einem einzigen Pass erledigen zu lassen. Danke fürs Zuhören, Happy Coding zusammen!
3

Messung und Eigenschaften

3m 59s

Lerne, wie du wichtige Messwerte aus deinen Geometrien extrahierst. Du wirst verstehen, wie man Fläche, Länge und fortgeschrittene Distanzmetriken wie die Hausdorff distance berechnet.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 3 von 8. Die normale Distance sagt dir, wie nah zwei Linien aneinander herankommen. Aber wenn du wissen willst, wie weit sie maximal auseinanderdriften, ist die normale Distance völlig nutzlos. Um das zu beantworten, musst du Measurement und Properties verstehen. Jedes Geometry-Objekt in Shapely hat eingebaute Attribute, die seine physischen Abmessungen beschreiben. Die grundlegendsten sind area, length und bounds. Die area Property gibt dir den zweidimensionalen Raum, den eine Form abdeckt. Bei einem Polygon ist das eine positive Zahl. Bei Points und Lines ist die area genau null. Die length Property gibt die eindimensionale Ausdehnung einer Geometry zurück. Bei einer Line ist das die Distance vom Start zum Ziel entlang des Pfades. Die bounds Property liefert die genauen Koordinatengrenzen deiner Form. Sie gibt ein Tuple aus vier Zahlen zurück, das Minimum X, Minimum Y, Maximum X und Maximum Y darstellt. Das ist deine Bounding Box. Stell dir ein Szenario vor, in dem du zwei GPS-Tracks von Läufern hast, beide als LineStrings dargestellt. Du liest die length Property aus, um die gesamte Distance zu sehen, die jede Person gelaufen ist. Du liest die bounds Property aus, um den exakten rechteckigen Viewport zu definieren, den du brauchst, um beide Routen auf einem Bildschirm anzuzeigen. Die Mathematik wird anspruchsvoller, wenn du den Raum zwischen diesen beiden Tracks messen musst. Die Standard-Distance-Messung gibt die absolut kürzeste Lücke zwischen zwei Geometries zurück. Sie scannt Track A, scannt Track B und findet das eine, am nächsten beieinander liegende Paar von Points. Wenn sich die Wege der beiden Läufer auf halber Strecke an einer Kreuzung getroffen haben, ist die Standard-Distance zwischen ihren Tracks null. Hier ist die wichtigste Erkenntnis. Leute verwechseln häufig die normale Distance mit der Hausdorff Distance. Die normale Distance findet die nächstgelegenen Points. Die Hausdorff Distance findet die größte Distance zwischen den nächstgelegenen Points. Stell dir die Hausdorff Distance als Messung des maximalen Drifts vor. Sie repräsentiert die längste Lücke, die du überqueren müsstest, wenn dich jemand an der denkbar schlechtesten Stelle auf dem einen Track absetzt und dir sagt, du sollst zum nächstgelegenen Point auf dem anderen Track laufen. Wenn unsere beiden Läufer am selben Ort gestartet sind, sich in der Mitte ihres Workouts um zwei Meilen getrennt haben und am selben Ort ins Ziel gekommen sind, ist die normale Distance null. Die Hausdorff Distance ist zwei Meilen. Sie definiert die Worst-Case-Trennung über die gesamte length der beiden Geometries. Es gibt noch eine weitere Measurement-Funktion namens minimum clearance. Diese vergleicht nicht zwei verschiedene Objekte. Sie misst die strukturelle Stabilität einer einzelnen Geometry. Minimum clearance berechnet die kleinste Distance, die sich ein Node bewegen kann, bevor die Geometry in einen ungültigen State kollabiert, wie eine Line, die sich selbst überlappt. Wenn deine Geometry eine winzige minimum clearance hat, sind die Koordinaten eng zusammengequetscht. Ein kleiner Rundungsfehler bei einem Datenbank-Export könnte die Form komplett zerstören. Wenn du die Läuferdaten vereinfachen willst, um Dateigröße zu sparen, verrät dir die Prüfung der minimum clearance genau, wie weit du die Points verschieben kannst, bevor die Geometry sich selbst ruiniert. Zu wissen, wie nah sich zwei Formen kommen, deckt die grundlegenden Kollisionen ab. Das absolute Maximum ihrer Trennung zu kennen, bestimmt, wie gut du die räumliche Beziehung zwischen ihnen wirklich verstehst. Danke, dass du ein paar Minuten mit mir verbracht hast. Bis zum nächsten Mal, mach's gut.
4

Räumliche Prädikate und die DE-9IM

3m 49s

Meistere die Kunst, räumliche Beziehungen zu überprüfen. Du lernst, wie du boolesche Prädikate verwendest, um genau zu bestimmen, wie zwei Formen interagieren, angetrieben von der DE-9IM-Matrix.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 4 von 8. Du planst die Route für eine neue U-Bahn-Linie in der Nähe eines geschützten Feuchtgebiets. Du musst wissen, ob die Strecke direkt durchs Wasser führt oder nur den Rand streift. Wie findet der Computer das eigentlich mathematisch heraus? Er nutzt eine clevere Drei-mal-Drei-Matrix, um diese Frage zu beantworten. Das bringt uns zu Spatial Predicates und dem Dimensionally Extended Nine-Intersection Model, kurz DE-9IM. Spatial Predicates sind binäre Funktionen. Sie vergleichen zwei Geometrien und geben genau eine Sache zurück: True oder False. Sie erstellen keine neuen Shapes. Sie berechnen keine überlappenden Flächen. Sie beantworten einfach nur Ja-oder-Nein-Fragen über topologische Beziehungen. Unter der Haube wertet Shapely diese Beziehungen mit dem DE-9IM aus. Jede Geometrie hat drei Teile: ein Interior, eine Boundary und ein Exterior. Das DE-9IM ist eine Matrix, die die Intersections zwischen diesen drei Teilen der ersten Geometrie mit den drei Teilen der zweiten Geometrie testet. Drei Teile mal drei Teile ergibt neun mögliche Intersections. Je nachdem, welche dieser Intersections eine leere Menge, einen Punkt, eine Linie oder eine Fläche ergeben, bestimmt Shapely die genaue Beziehung. Wenden wir das mal auf die U-Bahn-Linie und das Feuchtgebiet an. Das am weitesten gefasste Prädikat ist intersects. Wenn die Strecke irgendeinen Punkt, eine Linie oder eine Fläche mit dem Feuchtgebiet teilt, gibt intersects True zurück. Es ist das grundlegende Catch-all. Wenn intersects False ist, sind die beiden Geometrien im Raum komplett voneinander getrennt. Aber oft brauchst du mehr Präzision. Du willst wissen, ob die U-Bahn-Linie aktiv durch das Feuchtgebiet schneidet. Dafür nutzt du crosses. Eine Linie erfüllt crosses für ein Polygon, wenn ihr Interior das Interior des Polygons intersects, sich die Linie aber auch nach außerhalb des Polygons erstreckt. Die DE-9IM-Matrix prüft, ob die Intersection ihrer Interiors eine Linie ist, und ob das Interior der Linie auch das Exterior des Polygons intersects. Wenn beides zutrifft, gibt crosses True zurück. Was ist, wenn die Strecke exakt an der Grenze des Feuchtgebiets entlangläuft, ohne ins Wasser zu führen? Da kommt touches ins Spiel. Zwei Geometrien erfüllen touches, wenn sie mindestens einen Punkt teilen, aber ihre Interiors sich überhaupt nicht intersecten. Nur ihre Boundaries interagieren. Wenn die Strecke auch nur einen Millimeter in das Interior des Feuchtgebiets abweicht, wird touches False. Stell dir nun eine U-Bahn-Station vor, die komplett im Feuchtgebiet gebaut wird. Hier prüfst du auf Containment. Leute verwechseln oft contains und within, aber sie sind einfach nur inverse Operationen voneinander. Wenn das Feuchtgebiet die Station contains, dann ist die Station within dem Feuchtgebiet. Geometrisch bedeutet das, dass das Interior und die Boundary der Station komplett vom Interior des Feuchtgebiets umschlossen sind. Kein Teil der Station intersects das Exterior des Feuchtgebiets. Du kannst deinen Code so schreiben, dass er prüft, ob das Feuchtgebiet die Station contains, oder ob die Station within dem Feuchtgebiet liegt. Das Ergebnis ist exakt dasselbe. Hier ist die entscheidende Erkenntnis. Du musst die Nine-Intersection-Matrix nicht auswendig lernen, um deine U-Bahn zu planen, aber zu wissen, dass sie existiert, erklärt, warum diese binären Checks so zuverlässig sind. Jedes benannte Spatial Predicate ist einfach nur ein bestimmtes Muster aus True- und False-Flags in dieser zugrundeliegenden mathematischen Matrix. Danke fürs Zuhören. Hoffentlich hast du etwas Neues mitgenommen.
5

Mengentheoretische Operationen

4m 01s

Entdecke, wie du Geometrien zusammenführst, zuschneidest und zerteilst. Du lernst, wie du mathematische Mengenoperationen wie Intersection, Difference und Union verwendest, um völlig neue Formen zu erschaffen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 5 von 8. Venn-Diagramme sind nicht nur für logische Mengen oder Datenbankabfragen gedacht. Du kannst genau dieselben mathematischen Prinzipien verwenden, um reale Geografie physisch aufzuteilen. Dafür brauchst du Set-Theoretic Operations. In Shapely ist jede Geometry im Wesentlichen eine unendliche Menge von Punkten auf einer zweidimensionalen Ebene. Weil es Mengen sind, kannst du sie mit klassischer Mengenlehre manipulieren. Zuerst müssen wir ein häufiges Missverständnis klären. Spatial Predicates, wie die Prüfung, ob sich zwei Shapes berühren oder schneiden, werten eine Bedingung aus und geben ein einfaches True oder False zurück. Set-Theoretic Operations machen etwas völlig anderes. Sie geben komplett neue Geometry-Objekte zurück. Sie nehmen zwei Input-Shapes, analysieren ihre überlappenden Punkte und konstruieren ein brandneues drittes Shape als Output. Stell dir ein konkretes Szenario vor. Du hast zwei Polygon-Datasets. Das eine repräsentiert eine alte Hochwasserkarte. Das andere ist ein neu aktualisiertes Hochwasserrisikomodell. Du musst die genaue Fläche berechnen, in der diese beiden Modelle übereinstimmen. Dafür nutzt du die intersection-Methode. Du rufst intersection auf der ersten Geometry auf und übergibst die zweite Geometry als Argument. Shapely schaut sich die räumliche Überlappung an und gibt ein neues Polygon zurück, das nur die Punkte enthält, die sowohl in der alten als auch in der neuen Karte existieren. Wenn sich die beiden Shapes überhaupt nicht überlappen, wird eine leere Geometry zurückgegeben. Was ist nun, wenn du die strikt neuen Risikogebiete finden musst? Das sind die Viertel, die auf der alten Karte sicher waren, aber jetzt in der aktualisierten Überschwemmungszone liegen. Hier benutzt du die difference-Methode. Du nimmst die Geometry deines neuen Hochwassermodells und rufst difference auf, wobei du die Geometry der alten Karte übergibst. Das gibt ein Shape zurück, das alle Punkte im neuen Modell enthält, explizit abzüglich der Punkte, die bereits im alten Modell waren. Die Reihenfolge ist hier entscheidend. Wenn du sie umkehrst und difference auf der alten Karte aufrufst und das neue Modell übergibst, bekommst du ein völlig anderes Ergebnis. Du erhältst die Gebiete, die nicht mehr als gefährdet gelten. Es ist einfach eine räumliche Subtraktion. Manchmal willst du Shapes nicht vergleichen, sondern sie einfach kombinieren. Wenn Rettungsdienste eine Masterkarte von allen Orten brauchen, die jemals als Hochwasserrisiko markiert wurden, nutzt du die union-Methode. Du rufst union auf einem Shape auf, übergibst das andere, und Shapely führt sie zusammen. Wenn sich die Shapes überlappen, lösen sich die inneren Grenzen auf. Der Output ist eine einzelne, zusammenhängende Geometry, die alle Punkte aus beiden ursprünglichen Shapes repräsentiert. Zu guter Letzt gibt es noch die symmetric difference-Methode. Stell dir das als das räumliche Äquivalent einer exklusiven OR-Operation vor. Sie gibt eine neue Geometry zurück, die Punkte enthält, die entweder in der alten oder in der neuen Karte sind, aber absolut nicht in beiden. In unserem Hochwasserszenario gibt dir diese einzelne Operation genau die Bereiche, in denen die beiden Modelle nicht übereinstimmen. Sie gibt die neu hinzugefügten Risikozonen zusammen mit den neu entfernten Risikozonen aus und höhlt die Bereiche, in denen die Modelle übereinstimmen, komplett aus. Hier ist die entscheidende Erkenntnis. Wenn du aufhörst, räumliche Grenzen als komplexe geografische Konzepte zu betrachten, und anfängst, sie als grundlegende mathematische Mengen zu behandeln, wird die Berechnung komplexer Überlappungen und Ausschlüsse zu einem vorhersehbaren, völlig standardisierten Prozess. Das war's für diese Folge. Danke fürs Zuhören und keep building!
6

Konstruktive Operationen: Buffers und Hulls

4m 18s

Lerne, wie du synthetisch neue Begrenzungsformen generierst. Du wirst Buffering erkunden, Sicherheitszonen erstellen und verstreute Punkte mit Convex und Concave Hulls umhüllen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 6 von 8. Ein einfacher mathematischer Punkt hat exakt die Fläche null. Er ist einfach nur ein Ort. Was aber, wenn du einen Explosionsradius um diesen Ort darstellen musst? Du kannst diesen nulldimensionalen Punkt im Handumdrehen in ein massives, präzises Polygon verwandeln. Das ist die Power von Constructive Operations, speziell von Buffers und Hulls. Constructive Operations nehmen eine bestehende Geometrie und bauen daraus eine neue, andere Geometrie, basierend auf ihren räumlichen Eigenschaften. Du kannst sie dir wie eine Art Safety Wrapper um deine räumlichen Daten vorstellen. Die am häufigsten genutzte Constructive Operation ist der Buffer. Du übergibst der Buffer-Funktion einen Distanz-Wert, und Shapely gibt ein Polygon zurück, das alle Punkte in genau dieser Distanz zu deiner ursprünglichen Geometrie repräsentiert. Wenn du eine Linie hast, die den Verlauf eines Chemieunfalls entlang einer Autobahn darstellt, und du eine 50-Meter-Sicherheitszone einrichten musst, rufst du Buffer auf dieser Linien-Geometrie mit einer Distanz von 50 auf. Der Output ist ein neues Polygon, das die gesamte Route nachzeichnet und sich in jede Richtung exakt 50 Meter nach außen ausdehnt. Hier ist die entscheidende Erkenntnis: Buffers wachsen nicht nur. Sie können auch schrumpfen. Wenn du eine positive Distanz übergibst, dehnt sich die Geometrie aus. Wenn du eine negative Distanz auf ein Polygon anwendest, schrumpft die Geometrie. Ein negativer Buffer zieht die Grenzen nach innen. Das ist extrem nützlich, um den sicheren inneren Kern einer Zone zu finden und den Bereich zu isolieren, der einen strikten Abstand zu den gefährlichen Rändern hat. Manchmal brauchst du keinen exakten Buffer um komplexe Formen. Du brauchst einfach nur die absoluten Grenzen deiner Daten. Wenn du die Envelope Property aufrufst, bekommst du genau das. Sie gibt die Bounding Box zurück, also das kleinste, perfekt aufrechte Rechteck, das deine Geometrie vollständig umschließt. Sie ist mathematisch günstig zu berechnen und perfekt für schnelles Spatial Indexing. Aber was passiert, wenn deine Daten keine geschlossene Form sind, sondern eine verstreute Sammlung von Punkten? Wenn du Dutzende kontaminierte Bodenproben hast und eine einzige durchgehende Grenze um das betroffene Gebiet ziehen musst, brauchst du eine Hull. Shapely bietet dir dafür zwei Hauptwege. Die Convex Hull berechnet das kleinste konvexe Polygon, das all deine Geometrien enthält. Du kannst dir das so vorstellen, als würdest du ein Gummiband um ein Brett voller Stifte spannen. Das Gummiband zieht sich straff über die äußersten Stifte. Weil es konvex ist, wölbt sich die Grenze nie nach innen. Es gibt keine Innenwinkel, die größer als 180 Grad sind. Die Convex Hull ist zwar zuverlässig, schließt aber oft eine Menge leeren Raum mit ein, wenn deine Punkte einen Halbmond oder einen unregelmäßigen Cluster bilden. Wenn du eine engere Passform brauchst, nutzt du eine Concave Hull. Statt wie ein starres Gummiband, verhält sich eine Concave Hull wie Schrumpffolie. Sie erlaubt es der Grenze, sich nach innen zu wölben, um dem tatsächlichen Footprint deiner Daten zu folgen. Du steuerst, wie eng sie anliegt, indem du einen Parameter anpasst, der die maximal erlaubte Länge der Begrenzungskanten limitiert. Strengere Limits zwingen die Grenze dazu, sich in die Lücken zwischen den Punkten zu falten, was dir eine hochpräzise, realistische Karte dieses kontaminierten Bodens liefert. Der Unterschied zwischen diesen Tools liegt letztlich darin, wie eng sie sich an deine Daten schmiegen. Die Envelope gibt dir eine schnelle, lockere Box, die Convex Hull spannt sich straff über die äußersten Punkte, die Concave Hull umschließt die exakte Form wie Schrumpffolie, und der Buffer polstert die Ränder strikt um eine definierte Distanz ab. Wenn du dabei helfen willst, dass weitere solcher Episoden erscheinen, kannst du die Show unterstützen, indem du auf Patreon nach DevStoriesEU suchst. Das war's für diese Folge. Danke fürs Zuhören und keep building!
7

Fortgeschrittene konstruktive Operationen

4m 18s

Bringe deine Formmanipulation auf die nächste Stufe. Du lernst, wie du riesige Polygone mittels Simplification bereinigst, Features mit Snap verbindest und Voronoi-Diagramme erstellst.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 7 von 8. Versuch mal, eine Küstenlinie mit einer Million Punkten auf einer Web Map zu rendern, und du bringst den Browser des Users schnell zum Abstürzen. Du brauchst einen Weg, diesen Data Footprint auf ein Prozent seiner ursprünglichen Größe zu reduzieren, während es optisch komplett identisch bleibt. Dafür brauchst du Advanced Constructive Operations. Das wichtigste Tool für dieses Data Cleanup ist die simplify Funktion. Zuhörer denken manchmal, eine Shape zu vereinfachen bedeutet einfach, jeden zweiten oder dritten Punkt in einem Array zu überspringen. Das zerstört die Geometrie. Es erzeugt sich selbst schneidende Linien, lässt kleine Inseln kollabieren und ruiniert die topologische Struktur. Shapelys simplify Funktion wertet die tatsächliche Geometrie aus. Du übergibst ihr deine komplexe Küstenlinie und einen Toleranzwert. Die Funktion entfernt Vertices, die nicht mehr als diese Toleranz von der Grund-Shape abweichen. Ganz wichtig: Shapely gibt dir ein Flag, um die Topologie zu erhalten. Wenn das aktiviert ist, prüft der Algorithmus aktiv, ob das Entfernen eines Punktes dazu führt, dass sich ein Polygon selbst kreuzt oder in ungültige Teile zerfällt. Das garantiert, dass deine stark komprimierte Küstenlinie mathematisch valide bleibt. Sobald du einen schweren Base Layer vereinfacht hast, musst du oft andere Layer perfekt daran ausrichten. Angenommen, du hast Parzellen oder Grundstücksgrenzen, die exakt am Wasser enden. Weil du die Küstenlinie gerade vereinfacht hast, haben sich ihre Edges leicht verschoben. Das erzeugt mikroskopische Überlappungen oder Leerräume, bekannt als Slivers. Das reparierst du mit der snap Funktion. Du übergibst die Geometrie deiner Grundstücksgrenze, die Geometrie deiner Küstenlinie und eine strikte Toleranzdistanz. snap schaut sich die Vertices der ersten Shape an. Wenn ein Vertex innerhalb der Toleranzdistanz zu einem Vertex oder Segment der zweiten Shape liegt, wird er direkt darauf gezogen. Punkte außerhalb der Toleranz bleiben genau da, wo sie sind. Das erzeugt eine wasserdichte, bündige Verbindung zwischen benachbarten Geometrien, ohne den Rest der Shape zu verzerren. Damit hätten wir das Cleanup von existierenden Shapes abgedeckt. Die andere Seite von Constructive Operations ist das Aufteilen von leerem Raum mithilfe von Punkten. Wenn du die Vertices einer Geometrie nimmst, kannst du sie an die delaunay triangles Funktion übergeben. Das verbindet diese Punkte zu einem durchgehenden Mesh aus sich nicht überlappenden Dreiecken. Die Logik zeichnet diese Dreiecke gezielt so, dass die kleinsten Innenwinkel maximiert werden. Das verhindert lange, nadelartige Dreiecke und erzeugt ein ausgewogenes Mesh, das extrem nützlich für das Rendern von Terrain ist. Wenn du nur die Umrisse dieser Verbindungen anstelle von gefüllten Shapes willst, kannst du ein Flag setzen, um nur die Line Edges zurückzubekommen. Eng verwandt ist die voronoi polygons Funktion. Während Delaunay Punkte verbindet, zeichnet Voronoi Grenzen zwischen ihnen. Du übergibst eine Geometrie, und Shapely nutzt ihre Vertices, um die Umgebung in komplett voneinander getrennte polygonale Regionen zu unterteilen. Jeder Ort innerhalb eines bestimmten Voronoi-Polygons liegt näher an seinem zentralen Erzeugungspunkt als an jedem anderen Punkt im gesamten Set. Wenn du eine Verteilung von Delivery Hubs analysierst, mappen Voronoi-Polygone sofort die exakte Coverage Zone für jeden Hub basierend auf reiner Nähe. Genau wie bei Delaunay kannst du die Funktion anweisen, nur die Boundary Edges zurückzugeben, wenn du keine massiven Polygone brauchst. Hier ist die wichtigste Erkenntnis. Reale Geodaten sind dicht, unzusammenhängend und selten perfekt aligned. Constructive Operations wie simplify, snap und Voronoi geben dir die Tools, um mathematische Ordnung zu erzwingen. Das macht die Daten leicht genug zum Rendern und präzise genug zum Analysieren. Danke, dass du ein paar Minuten mit mir verbracht hast. Bis zum nächsten Mal, mach's gut.
8

Hochperformante räumliche Indizierung mit STRtree

4m 46s

Schalte blitzschnelle räumliche Abfragen frei. Du lernst, wie du den Sort-Tile-Recursive (STR) Tree verwendest, um riesige räumliche Datensätze sofort zu filtern und nahezu verzögerungsfreie Nearest-Neighbor-Suchen durchzuführen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. Shapely, Folge 8 von 8. Einen einzelnen Punkt mit einer Million Polygonen zu vergleichen, kostet massiv Rechenzeit, und trotzdem schaffen manche Anwendungen das in Millisekunden. Sie berechnen nicht jede einzelne Entfernung. Sie filtern 99 Prozent der Daten heraus, bevor sie auch nur eine einzige mathematische Gleichung lösen. Das ist hochperformantes Spatial Indexing mit STRtree. Angenommen, du willst aus zehntausend Standorten das Café finden, das der aktuellen GPS-Koordinate eines Users am nächsten ist. Wenn du die exakte Entfernung zu jedem einzelnen Café berechnest, geht dein System komplett in die Knie. Stattdessen nutzt Spatial Indexing einen R-Tree. Stell dir einen R-Tree wie ein hierarchisches Ordnersystem für den zweidimensionalen Raum vor. Er zieht ein einfaches Rechteck, eine sogenannte Bounding Box oder Envelope, um Cluster von nahegelegenen Geometrien. Dann zieht er größere Boxen um diese Boxen. Zu prüfen, ob sich zwei einfache Rechtecke überlappen, ist eine extrem günstige Rechenoperation. In Shapely ist die spezifische Implementierung der STRtree, was für Sort-Tile-Recursive steht. Du erstellst einen, indem du dem Constructor ein Array von Geometrien übergibst. Unter der Haube macht das einen Bulk-Load des Index. Der Tree wird einmal gebaut und ist immutable. Du kannst danach keine Items mehr hinzufügen oder entfernen. Du musst dein komplettes Dataset im Voraus vorbereiten. Sobald der Tree existiert, durchsuchst du ihn mit der query Methode. Du übergibst eine Input-Geometrie, und die Methode gibt ein NumPy Array von Integer-Indizes zurück. Diese Indizes mappen direkt auf die ursprüngliche Sequenz der Geometrien, die du zum Bauen des Trees verwendet hast. Wenn du mehrere Geometrien auf einmal eingibst, gibt query ein zweidimensionales Array zurück, das die Indizes deiner Inputs mit den passenden Indizes im Tree paart. Hier ist der entscheidende Punkt. Der Basis-Index eines STRtree checkt nur Bounding Boxes, keine exakten Geometrien. Wenn du ein komplexes Polygon abfragst, nutzt der Tree die quadratische Envelope dieses Polygons, um Matches zu finden. Das gibt dir eine Shortlist von Kandidaten, die auch False Positives enthält. Um eine exakte Antwort zu bekommen, erlaubt dir Shapely, ein Spatial Predicate wie intersects oder contains direkt als Argument in die query Methode zu übergeben. Der Tree nutzt zuerst die günstigen Bounding Boxes, um Kandidaten zu finden, und evaluiert dann automatisch dein exaktes Predicate auf dieser Shortlist. So bleibt die schwere mathematische Arbeit unten im kompilierten C-Code. Abgesehen von Overlaps glänzt der STRtree bei Proximity. Um auf unser Café-Szenario zurückzukommen: Du musst Envelopes nicht manuell checken. Du nutzt die query nearest Methode. Du übergibst den GPS-Punkt deines Users, und der Tree durchläuft seine hierarchischen Boxen, um die absolut nächste Geometrie zu finden, ohne gegen alle zehntausend messen zu müssen. Er gibt sofort den Index des nächsten Cafés zurück. Du kannst auch einen Parameter angeben, um ein Array der Top N Nearest Neighbors zurückzubekommen, oder einen maximalen Distance Threshold setzen, um den Suchradius komplett einzuschränken. Es gibt auch eine eigene nearest Methode, die zwei separate Trees miteinander vergleicht, um die am nächsten beieinander liegenden Geometrie-Paare zwischen ihnen zu finden. Die eigentlichen Geometrie-Operationen sind immer der teuerste Teil der Spatial Analysis. Der STRtree fungiert als gnadenloser Filter. Er verhindert, dass du CPU Cycles für Geometrien verschwendest, die nicht mal in der Nähe voneinander sind. Er liefert dir eine winzige, handhabbare Shortlist, sodass deine exakten mathematischen Checks nur dann laufen, wenn sie absolut müssen. Damit schließen wir unsere Serie zu Shapely ab. Ich kann dir nur wärmstens empfehlen, die offizielle Documentation zu erkunden und diese Indexing-Konzepte hands-on in deinen eigenen Datasets auszuprobieren. Wenn du Workflows oder Tools hast, die wir in zukünftigen Serien behandeln sollen, besuche devstories dot eu und lass uns einen Vorschlag da. Danke fürs Einschalten. Bis zum nächsten Mal!